import { Box, Loader, Text, TextButton } from '@wix/design-system'; import React, { ReactNode } from 'react'; import { CollectionState, FiltersMap } from '@wix/bex-core'; import { useWixPatternsContainer } from '@wix/bex-core/react'; import { useDropdownTranslationContext } from '../providers'; export interface UseFilterCollectionStateOptionsParams< T, F extends FiltersMap, > { collection: CollectionState; fixedFooter: ReactNode; } export function useFilterCollectionStates( params: UseFilterCollectionStateOptionsParams, ): { fixedFooter?: ReactNode; showInitialLoader?: boolean; } { const { collection, fixedFooter } = params; const { errorHandler } = useWixPatternsContainer(); const { translate } = useDropdownTranslationContext(); const getEmptyStateText = () => { if (collection.hasAvailableItems) { return translate('noResultsState'); } return translate('emptyState'); }; const getFixedFooter = ( dataHook: string, content: ReactNode, paramsFixedFooter?: ReactNode, ) => ( {content} {paramsFixedFooter} ); if ( collection.showInitialLoader || collection.result.status.isLoading || collection.showRefreshLoader ) { return { showInitialLoader: true, fixedFooter: getFixedFooter('initial-loader', ), }; } if (collection.showEmptyState) { return { fixedFooter: getFixedFooter( 'empty-state', {getEmptyStateText()} , params.fixedFooter, ), }; } if (collection.showErrorState) { const resolvedError = errorHandler.getResolvedError?.( collection.result.errorStatus?.error, ); if (resolvedError) { return { fixedFooter: getFixedFooter( 'filter-error-state', {resolvedError.message} {resolvedError.action && ( { await resolvedError.action?.onClick?.(); }} > {resolvedError.action.text} )} {resolvedError.action && ( { await resolvedError.action?.onClick?.(); }} > {resolvedError.action.text} )} , ), }; } } return { fixedFooter, }; }