import React, { CSSProperties, ReactElement, ReactNode } from 'react'; import { observer } from 'mobx-react-lite'; import { ComputedQuery, FiltersMap, PickerState } from '@wix/bex-core'; import { Box, BoxProps, SkeletonCircle, SkeletonGroup, SkeletonLine, } from '@wix/design-system'; import { PickerEmptyStateContainer } from '../PickerEmptyState/PickerEmptyStateContainer'; export interface PickerProps { dataHook?: BoxProps['dataHook']; flex?: CSSProperties['flex']; state: PickerState; renderError: (params: { err: unknown; isOnline: boolean }) => ReactElement; renderEmptyState?: (params: { hasAvailableItems: boolean; query: ComputedQuery; }) => ReactElement | null | undefined; hasFilterDropdown?: boolean; children: ReactNode; } function _Picker( props: PickerProps, ) { const { state, renderEmptyState, renderError, dataHook, children, flex, hasFilterDropdown, } = props; const { collection, minContentHeight } = state; const { showRefreshLoader, result: { status, isEmptyAndNotFetching }, } = collection; let child: ReactNode; if (status.isIdle || showRefreshLoader) { // the loader container should be according to the last number of items height (`contentHeight`) child = ( {Array.from({ length: 8 }).map((_, index) => ( <> ))} ); } else if (status.isError) { child = renderError({ err: status.error, isOnline: collection.isOnline(), }); child = ( {child} ); child = ( {child} ); } else if (isEmptyAndNotFetching) { child = ( ); } else { child = ( {children} ); } return ( {child} ); } export const Picker = observer(_Picker);