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} ); }