import { useEffect } from 'react' import Icon from '@/Components/Icon/Icon' import { DropdownItem } from './DropdownItem' import { classNames } from '@standardnotes/snjs' import { Select, SelectArrow, SelectItem, SelectLabel, SelectPopover, useSelectStore, VisuallyHidden, } from '@ariakit/react' type DropdownProps = { label: string items: DropdownItem[] value: string onChange: (value: string, item: DropdownItem) => void disabled?: boolean classNameOverride?: { wrapper?: string button?: string popover?: string } fullWidth?: boolean } const Dropdown = ({ label, value, onChange, items, disabled, fullWidth, classNameOverride = {} }: DropdownProps) => { const select = useSelectStore({ defaultValue: value, renderCallback(props) { const { popoverElement, defaultRenderCallback } = props defaultRenderCallback() if (popoverElement) { popoverElement.style.zIndex = 'var(--z-index-dropdown-menu)' } }, }) const selectedValue = select.useState('value') const isExpanded = select.useState('open') const currentItem = items.find((item) => item.value === selectedValue) useEffect(() => { return select.subscribe( (state) => { if (state.value !== value) { onChange(state.value, items.find((item) => item.value === state.value) as DropdownItem) } }, ['value'], ) }, [items, onChange, select, value]) return (
{label} {items.map((item) => ( {item.icon ? (
) : null}
{item.label}
))}
) } export default Dropdown