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.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
  2. import { IconButton } from 'components/shared'
  3. import { Circle } from 'react-feather'
  4. import state, { useSelector } from 'state'
  5. import { SizeStyle } from 'types'
  6. import { DropdownContent, Item } from './shared'
  7. const sizes = {
  8. [SizeStyle.Small]: 6,
  9. [SizeStyle.Medium]: 12,
  10. [SizeStyle.Large]: 22,
  11. }
  12. export default function QuickSizeSelect() {
  13. const size = useSelector((s) => s.values.selectedStyle.size)
  14. return (
  15. <DropdownMenu.Root>
  16. <DropdownMenu.Trigger as={IconButton} title="size">
  17. <Circle size={sizes[size]} stroke="none" fill="currentColor" />
  18. </DropdownMenu.Trigger>
  19. <DropdownContent direction="vertical">
  20. <SizeItem isActive={size === SizeStyle.Small} size={SizeStyle.Small} />
  21. <SizeItem
  22. isActive={size === SizeStyle.Medium}
  23. size={SizeStyle.Medium}
  24. />
  25. <SizeItem isActive={size === SizeStyle.Large} size={SizeStyle.Large} />
  26. </DropdownContent>
  27. </DropdownMenu.Root>
  28. )
  29. }
  30. function SizeItem({ size, isActive }: { isActive: boolean; size: SizeStyle }) {
  31. return (
  32. <Item
  33. as={DropdownMenu.DropdownMenuItem}
  34. isActive={isActive}
  35. onSelect={() => state.send('CHANGED_STYLE', { size })}
  36. >
  37. <Circle size={sizes[size]} />
  38. </Item>
  39. )
  40. }