import { Dropdown, DropdownLayoutOption, DropdownPropsControlled, } from '@wix/design-system'; import React from 'react'; import { observer } from 'mobx-react-lite'; import { Filter, KeyedItem } from '@wix/bex-core'; import { DropdownSelectState } from '../../state'; import { BuildSectionOptionsArgs, ListItem } from '../../hooks'; import { FilterProps } from '../../model'; import { useWindowFlipPopoverProps } from '../../utils/useWindowFlipPopoverProps'; import { useBmHarmonyTheme } from '../../hooks/useBmHarmonyTheme'; export type KeyedItemOption = DropdownLayoutOption & { keyedItem: KeyedItem; }; export interface SingleSelectFilterBaseProps extends Omit, 'onClear'>, FilterProps { filter: Filter; renderItem?: (item: V, index: number) => ListItem; renderSection?: BuildSectionOptionsArgs['renderSection']; dropdownSelect: DropdownSelectState; placeholder?: string; } function _SingleSelectFilterBase(props: SingleSelectFilterBaseProps) { const { filter, dropdownSelect, placeholder, onSelect, renderItem, renderSection, clearButton, disabled, options = [], popoverProps, ...rest } = props; const { select: { selectedValues }, container: { translate: t }, } = dropdownSelect; const { windowFlipPopoverProps, inputRef } = useWindowFlipPopoverProps({ popoverProps, }); const isBmHarmonyTheme = useBmHarmonyTheme(); return ( { inputRef.current = ref; }} dataHook={`collection-filter-${filter.name}`} border={isBmHarmonyTheme ? undefined : 'round'} closeOnSelect options={options} clearButton={clearButton} onClear={clearButton ? dropdownSelect.clear : undefined} onClose={() => { dropdownSelect.close(); }} selectedId={selectedValues[0]?.key} valueParser={(option) => option.label} textOverflow="ellipsis" placeholder={placeholder ?? t('cairo.selectPlaceholder')} onSelect={(option) => { const keyedItem = (option as KeyedItemOption)?.keyedItem; if (keyedItem) { dropdownSelect.setSingle(keyedItem); } onSelect?.(option, false); }} popoverProps={windowFlipPopoverProps} {...rest} /> ); } export const SingleSelectFilterBase = observer(_SingleSelectFilterBase);