import React, { forwardRef, MouseEventHandler, ReactNode, useState } from 'react'; import FocusTrap from 'focus-trap-react'; import { Box, config, Menu, MenuItem, PopOut, Scroll, Text, toRem, RectCords } from 'folds'; import { getPowers, PowerLevelTags } from '../../hooks/usePowerLevelTags'; import { PowerColorBadge } from './PowerColorBadge'; import { stopPropagation } from '../../utils/keyboard'; type PowerSelectorProps = { powerLevelTags: PowerLevelTags; value: number; onChange: (value: number) => void; }; export const PowerSelector = forwardRef( ({ powerLevelTags, value, onChange }, ref) => (
{getPowers(powerLevelTags).map((power) => { const selected = value === power; const tag = powerLevelTags[power]; return ( onChange(power)} before={} after={{power}} > {tag.name} ); })}
) ); type PowerSwitcherProps = PowerSelectorProps & { children: (handleOpen: MouseEventHandler, opened: boolean) => ReactNode; }; export function PowerSwitcher({ powerLevelTags, value, onChange, children }: PowerSwitcherProps) { const [menuCords, setMenuCords] = useState(); const handleOpen: MouseEventHandler = (evt) => { setMenuCords(evt.currentTarget.getBoundingClientRect()); }; return ( setMenuCords(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown' || evt.key === 'ArrowRight', isKeyBackward: (evt: KeyboardEvent) => evt.key === 'ArrowUp' || evt.key === 'ArrowLeft', escapeDeactivates: stopPropagation, }} > { onChange(v); setMenuCords(undefined); }} /> } > {children(handleOpen, !!menuCords)} ); }