import { Accordion, Box, SidePanel, SidePanelProps, WixStyleReactDefaultsOverrideProvider, } from '@wix/design-system'; import React, { useState } from 'react'; import { FiltersMap } from '@wix/bex-core'; import { observer } from 'mobx-react-lite'; import { useBuildAccordionItems } from '../../hooks/useBuildAccordionItems'; import { FiltersPanelFooter } from './FiltersPanelFooter'; import { FilterRenderingContextProvider } from '../FilterRenderingContext'; import { FiltersPanelState } from './FiltersPanelState'; import { FiltersPanelSearch } from './FiltersPanelSearch'; import { FiltersPanelSearchNoResults } from './FiltersPanelSearchNoResults'; import { useWixPatternsContainer } from '@wix/bex-core/react'; import { useRafRender } from '../../hooks/useRafRender'; import { CollectionToolbarFiltersState } from '../CollectionToolbarFilters/CollectionToolbarFiltersState'; import { PatternsSidePanel } from '../SidePanel/PatternsSidePanel'; const FILTER_SEARCH_THRESHOLD = 7; export interface FiltersPanelProps extends Partial { state: CollectionToolbarFiltersState; } function _FiltersPanel( props: FiltersPanelProps, ) { const { state, children, ...rest } = props; const { toolbar, totalInlineFilters: { value: totalInlineFilters }, } = state; const entered = useRafRender(); const { translate: t } = useWixPatternsContainer(); const [filtersPanelState] = useState( () => new FiltersPanelState({ toolbar, }), ); const showSearch = state.panelFilterElements.length > FILTER_SEARCH_THRESHOLD; const accordionItems = useBuildAccordionItems( state, showSearch ? filtersPanelState.searchValue : '', ); const hasActiveSearch = showSearch && filtersPanelState.searchValue.trim().length > 0; const noResults = hasActiveSearch && accordionItems.length === 0; const [filterRenderingContext] = useState(() => ({ location: 'panel' as const, })); const [wsrDefaults] = useState(() => ({ input: { size: 'small' as const, }, button: { size: 'small' as const, }, })); if (!entered) { return null; } let child = ( {showSearch && ( )}
{noResults ? ( ) : ( )}
{children}
); child = ( {child} ); child = ( {child} ); return child; } export const FiltersPanel = observer(_FiltersPanel);