import { ToolbarCollectionBaseProps } from '../components/ToolbarCollection'; import { FiltersMap } from '@wix/bex-core'; import { isValidElement, ReactElement, ReactNode } from 'react'; import { FilterValueTotalStateParams } from './FilterValueTotalState'; import { TabTotalReactElementLike } from '../components/TabTotal/TabTotalComponentType'; import { TabsFilterProps } from '../components/TabsFilter'; function isTabTotalElement( node: ReactNode, ): node is ReactElement> & TabTotalReactElementLike { return ( isValidElement(node) && typeof (node as Partial).type?.initTabTotal === 'function' ); } function isTabsFilterElement( node: ReactNode, ): node is ReactElement> { return ( isValidElement(node) && Array.isArray(node.props.data) && typeof node.props.counterBadge === 'function' ); } export function getToolbarCollectionFeaturesInitializers< T, F extends FiltersMap, >(props: ToolbarCollectionBaseProps) { const { tabs } = props; const tabTotalFeatureInitializer = (() => { if (isTabsFilterElement(tabs)) { const tabsProps = tabs.props; const el = tabsProps?.data .map((value) => tabs.props.counterBadge?.(value)) .find(isTabTotalElement); return el?.type?.initTabTotal?.(tabs.props, el.props); } return undefined; })(); return [tabTotalFeatureInitializer]; }