import { Card, CardProps, LiveRegion } from '@wix/design-system'; import React, { ReactElement, ReactNode } from 'react'; import { observer } from 'mobx-react-lite'; import { FiltersMap } from '@wix/bex-core'; import { ToolbarCollectionState } from '../../state'; import { CollectionProvider } from '../CollectionContext'; import { MessageActionModal } from '../ActionModal'; import { ToolbarCollectionProvider } from '../ToolbarCollectionContext'; import { NavigationModal } from '../NavigationModal'; import { WixPatternsModalsContainer } from '../WixPatternsModalsContainer'; import { usePageContext } from '../../providers'; import { MultiCollectionSupportProvider } from '../MultiCollectionSupportProvider'; import { classes, st } from '../common.st.css.js'; import { ErrorState } from '../ErrorState'; import type { TagsElement } from '../Tags'; import { WixPatternsPanelModalsContainer } from '../WixPatternsPanelModalsContainer'; import { useWixPatternsContainer } from '@wix/bex-core/react'; export interface CollectionCardProps extends CardProps { state: ToolbarCollectionState; children?: ReactNode | ReactNode[]; errorState?: | false | (( err: unknown, params: { isOnline: boolean; retry: () => void; }, ) => ReactElement); tags?: TagsElement; } function _CollectionCard({ state, errorState, children, tags, ...rest }: CollectionCardProps) { const page = usePageContext(); const { isPanelLayout, useRelativeSidePanel } = useWixPatternsContainer(); const { modalsContainerRef, stackingRootRef } = page; const { collection, initTask, bulk, AddApplyFiltersButton, collectionFieldsSource, tagsCollectionState, } = state; const { modals } = bulk; const { actionModal } = modals; const { status: initTaskStatus } = initTask; let child: ReactNode; if (initTaskStatus.isError && errorState !== false) { child = ( ); } else { child = children; child = ( <> {child} {actionModal.value && ( )} ); } return ( {child} {collectionFieldsSource && ( )} {tags} {tagsCollectionState && } {AddApplyFiltersButton?.DiscardChangesModal && ( )} { state.liveRegionRef.current = ref; }} /> {isPanelLayout ? ( ) : ( )} ); } export const CollectionCard = observer(_CollectionCard);