import React, { ReactNode } from 'react'; import { observer } from 'mobx-react-lite'; import { useMultiCollectionSupportContext } from '../MultiCollectionSupportProvider'; import { TextButton, TextButtonProps } from '@wix/design-system'; import { Revert } from '@wix/wix-ui-icons-common'; import { useWixPatternsContainer, useCollectionContext, } from '@wix/bex-core/react'; // import { EmptyStateBasePrivateProps } from '../components/EmptyState/EmptyStateBase'; import { FiltersMap, MultiCollectionSupport, Translate } from '@wix/bex-core'; import { EmptyStateBase, EmptyStateBaseProps } from './EmptyStateBase'; import { MagnifyingGlassArt } from '../MagnifyingGlassArt'; export interface CollectionNoResultsStateProps extends Omit, 'cta' | 'image' | 'customCta'> { children?: ReactNode; } function _CollectionNoResultsState( props: Omit, ) { const state = useMultiCollectionSupportContext(); const { translate: t } = useWixPatternsContainer(); const { title, subtitle, cta } = getNoResultsStateTexts(state, t); return ( } /> ); } function ResetFiltersButton(props: TextButtonProps) { const state = useCollectionContext(); return ( } dataHook="empty-state-clear-filters-button" onClick={() => { state.emitter.emit('beforeClearFilters', { origin: 'empty-state' }); state.resetFiltersAndRefresh(); state.searchInputRef?.focus(); }} /> ); } const getNoResultsStateTexts = ( state: MultiCollectionSupport, t: Translate, ) => { const { hasAvailableItems, hasNonPersistentCustomFilters, resultOriginQuerySearch: search, resultOriginQueryRawSearch: rawSearch, } = state; // has search no filter if (hasAvailableItems && search && !hasNonPersistentCustomFilters) { return { title: t('cairo.search.nothingMatches.title', { term: rawSearch, }), subtitle: t('cairo.search.nothingMatches.text'), cta: ( {t('cairo.emptyState.reset.button')} ), }; } // has filter no search if (hasAvailableItems && !search && hasNonPersistentCustomFilters) { return { title: t('cairo.search.noresults.title'), subtitle: t('cairo.emptyState.subtitle.noFilterResults'), cta: ( {t('cairo.emptyState.filters.nothingFound.clearFilters.CTA')} ), }; } // has filter and search return { title: t('cairo.search.nothingMatches.title', { term: rawSearch, }), subtitle: t('cairo.search.filter.nothingMatches.text'), cta: ( {t('cairo.emptyState.reset.button')} ), }; }; export const CollectionNoResultsState = observer(_CollectionNoResultsState);