import type { ReactNode } from 'react'; import { useMemo } from 'react'; import type { DropdownItem, DropdownItemSeparator, DropdownProps } from './Dropdown'; import { Dropdown } from './Dropdown'; import { Icon } from './Icon'; export type RadioDropdownItem = | { type?: 'default'; label: ReactNode; shortLabel?: ReactNode; value: T; rightSlot?: ReactNode; } | DropdownItemSeparator; export interface RadioDropdownProps { value: T; onChange: (value: T) => void; itemsBefore?: DropdownItem[]; items: RadioDropdownItem[]; itemsAfter?: DropdownItem[]; children: DropdownProps['children']; } export function RadioDropdown({ value, items, itemsAfter, itemsBefore, onChange, children, }: RadioDropdownProps) { const dropdownItems = useMemo( () => [ ...((itemsBefore ? [ ...itemsBefore, { type: 'separator', hidden: itemsBefore[itemsBefore.length - 1]?.type === 'separator', }, ] : []) as DropdownItem[]), ...items.map((item) => { if (item.type === 'separator') { return item; } return { key: item.value, label: item.label, rightSlot: item.rightSlot, onSelect: () => onChange(item.value), leftSlot: , } as DropdownItem; }), ...((itemsAfter ? [{ type: 'separator', hidden: itemsAfter[0]?.type === 'separator' }, ...itemsAfter] : []) as DropdownItem[]), ], [itemsBefore, items, itemsAfter, value, onChange], ); return ( {children} ); }