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: string; shortLabel?: string; value: T; rightSlot?: ReactNode; } | DropdownItemSeparator; export interface RadioDropdownProps { value: T; onChange: (value: T) => void; items: RadioDropdownItem[]; extraItems?: DropdownProps['items']; children: DropdownProps['children']; } export function RadioDropdown({ value, items, extraItems, onChange, children, }: RadioDropdownProps) { const dropdownItems = useMemo( () => [ ...items.map((item) => { if (item.type === 'separator') { return item; } else { return { key: item.label, label: item.label, shortLabel: item.shortLabel, rightSlot: item.rightSlot, onSelect: () => onChange(item.value), leftSlot: , } as DropdownProps['items'][0]; } }), ...((extraItems ? [{ type: 'separator' }, ...extraItems] : []) as DropdownItem[]), ], [items, extraItems, value, onChange], ); return {children}; }