import { DropdownLayoutOption, MultiSelectCheckbox, MultiSelectCheckboxProps, } from '@wix/design-system'; import React from 'react'; import { observer } from 'mobx-react-lite'; import { KeyedItem } from '@wix/bex-core'; import { DropdownSelectState } from '../../state'; import { FilterProps } from '../../model'; import { useWindowFlipPopoverProps } from '../../utils/useWindowFlipPopoverProps'; import { useBmHarmonyTheme } from '../../hooks/useBmHarmonyTheme'; import { useDropdownTranslationContext } from '../../providers'; export type KeyedItemOption = DropdownLayoutOption & { keyedItem: KeyedItem; }; export type MultiSelectCheckboxFilterBaseOption = | KeyedItemOption | DropdownLayoutOption; export interface MultiSelectCheckboxFilterBaseProps extends Partial, FilterProps { /** * Applies a data-hook HTML attribute that can be used in the tests * @default `collection-filter-${filter.name}` */ dataHook?: string; options: MultiSelectCheckboxFilterBaseOption[]; dropdownSelect: DropdownSelectState; placeholder?: string; } function _MultiSelectCheckboxFilterBase( props: MultiSelectCheckboxFilterBaseProps, ) { const { filter, dropdownSelect, options, placeholder, popoverProps, ...rest } = props; const { select: { selectedKeys }, } = dropdownSelect; const { translate } = useDropdownTranslationContext(); const { windowFlipPopoverProps, inputRef } = useWindowFlipPopoverProps({ popoverProps, }); const isBmHarmonyTheme = useBmHarmonyTheme(); return ( { inputRef.current = ref; }} dataHook={`collection-filter-${filter.name}`} border={isBmHarmonyTheme ? undefined : 'round'} textOverflow="ellipsis" options={options} placeholder={placeholder ?? translate('placeholder')} selectedOptions={selectedKeys} popoverProps={windowFlipPopoverProps} {...rest} /> ); } export const MultiSelectCheckboxFilterBase = observer( _MultiSelectCheckboxFilterBase, );