import React, { ReactElement, useEffect, useRef, useState } from 'react'; import { Box } from '@wix/design-system'; import { observer } from 'mobx-react-lite'; import { FiltersMap } from '@wix/bex-core'; import { ToolbarCollectionState } from '../../state'; import { InitialLoadingConditional } from '../InitialLoadingConditional'; import { CollectionToolbarSkeletonItem } from './CollectionToolbarSkeletonItem'; import { ToolbarLeftGroupState } from '../../state/Toolbar/ToolbarLeftGroupState'; import { ToolbarMode } from './toolbarModeUtils'; export interface CollectionToolbarLeftGroupProps { state: ToolbarCollectionState; left?: ReactElement; viewsToolbarItem?: ReactElement; filtersElement?: ReactElement; mode: ToolbarMode; } function _CollectionToolbarLeftGroup( props: CollectionToolbarLeftGroupProps, ) { const { state, left, viewsToolbarItem, filtersElement, mode } = props; const { toolbar: { responsive }, } = state; const isLeftElementMode = mode === 'tabs' || mode === 'title'; const shouldMeasure = isLeftElementMode && !responsive.responsiveDisabled; const container = useRef(null); const [leftGroupState] = useState( () => new ToolbarLeftGroupState({ responsive, mode, minWidth: mode === 'title' ? 50 : 140, getTabsState: () => state.tabs, }), ); useEffect(() => { if (!shouldMeasure) { return; } responsive.leftGroupState = leftGroupState; const dispose = leftGroupState.init(container.current?.parentElement); return () => { dispose(); responsive.leftGroupState = null; }; }, [shouldMeasure]); const content = left ?? ( <> {viewsToolbarItem && ( } > {viewsToolbarItem} )} {!viewsToolbarItem ? filtersElement : undefined} ); if (isLeftElementMode && !responsive.responsiveDisabled) { return ( (container.current = element)}>{content} ); } return <>{content}; } export const CollectionToolbarLeftGroup = observer(_CollectionToolbarLeftGroup);