You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

quick-size-select.tsx 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
  2. import { breakpoints, IconButton } from 'components/shared'
  3. import Tooltip from 'components/tooltip'
  4. import { memo } from 'react'
  5. import { Circle } from 'react-feather'
  6. import state, { useSelector } from 'state'
  7. import { SizeStyle } from 'types'
  8. import { DropdownContent, Item } from '../shared'
  9. const sizes = {
  10. [SizeStyle.Small]: 6,
  11. [SizeStyle.Medium]: 12,
  12. [SizeStyle.Large]: 22,
  13. }
  14. function handleSizeChange(
  15. e: Event & { currentTarget: { value: SizeStyle } }
  16. ): void {
  17. state.send('CHANGED_STYLE', { size: e.currentTarget.value })
  18. }
  19. function QuickSizeSelect(): JSX.Element {
  20. const size = useSelector((s) => s.values.selectedStyle.size)
  21. return (
  22. <DropdownMenu.Root dir="ltr">
  23. <DropdownMenu.Trigger as={IconButton} bp={breakpoints}>
  24. <Tooltip label="Size">
  25. <Circle size={sizes[size]} stroke="none" fill="currentColor" />
  26. </Tooltip>
  27. </DropdownMenu.Trigger>
  28. <DropdownContent sideOffset={8} direction="vertical">
  29. {Object.keys(SizeStyle).map((sizeStyle: SizeStyle) => (
  30. <DropdownMenu.DropdownMenuItem
  31. key={sizeStyle}
  32. as={Item}
  33. isActive={size === sizeStyle}
  34. value={sizeStyle}
  35. onSelect={handleSizeChange}
  36. >
  37. <Circle size={sizes[sizeStyle]} />
  38. </DropdownMenu.DropdownMenuItem>
  39. ))}
  40. </DropdownContent>
  41. </DropdownMenu.Root>
  42. )
  43. }
  44. export default memo(QuickSizeSelect)