import React, { useEffect, useRef, useState } from 'react'; import { Box, DropdownProps, Input, listItemSelectBuilder, } from '@wix/design-system'; import { Filter } from '@wix/bex-core'; import { observer } from 'mobx-react-lite'; import { useToolbarCollectionContext } from '../ToolbarCollectionContext'; import { TabsFilterState } from './TabsFilterState'; import { TabTotalDropdownOption } from '../TabTotal'; import { ALL_TAB_ITEM_ID, TabsFilterItem, TabsFilterItemBase } from './types'; import { SingleSelectFilterBase } from '../SingleSelectFilterBase'; import { useDropdownSelectFilterState } from '../../hooks'; export interface TabsFilterProps { items: TabsFilterItemBase[]; data: V[]; filter: Filter; selectedId: string; popoverProps?: DropdownProps['popoverProps']; } function _TabsDropdown(props: TabsFilterProps) { const { data: dataProp, items, filter, selectedId, popoverProps } = props; const { itemKey } = filter; const table = useToolbarCollectionContext(); const container = useRef(); const [state] = useState( () => new TabsFilterState({ table, }), ); useEffect( () => state.init({ container: container.current, itemsCount: items.length, }), [], ); const { isLoading, isIdle } = table.initTask.status; const hideCounterBadge = isLoading || isIdle; const options = React.useMemo( () => items.map((item) => listItemSelectBuilder({ id: item.id, title: item.name, label: item.name, suffix: hideCounterBadge ? undefined : ( itemKey(data) === item.id)} /> ), }), ), [items, hideCounterBadge], ); const { dropdownSelect, init } = useDropdownSelectFilterState({ filter, }); useEffect(() => init(), []); return ( { const tab = items.find((item) => item.id === option.id); if (tab) { const values = tab.id === ALL_TAB_ITEM_ID ? [] : [(tab as TabsFilterItem).value]; filter.refresh(values); } }} suffix={ hideCounterBadge ? undefined : ( itemKey(value) === selectedId)} /> ) } popoverProps={popoverProps} /> ); } export const TabsDropdown = observer(_TabsDropdown);