import { FunctionComponent } from 'react'; import { Checkbox } from '@/common/components/atoms/Checkbox/Checkbox'; import { FilterSvg, MagnifyingGlassSvg, SortSvg } from '@/common/components/atoms/icons'; import { TIndividual } from '@/domains/individuals/types'; import { Item } from './Cases.Item'; import { List } from './Cases.List'; import { SkeletonItem } from './Cases.SkeletonItem'; import { useCases } from './hooks/useCases/useCases'; import { ICasesChildren, ICasesProps } from './interfaces'; /** * @description A vertical sidebar for the cases list, with search, filter, and sort. * Uses dot notation for its API (i.e. Cases.List), where the root component acts as a container. * * Children: * - {@link Cases.List} - Wraps multiple {@link Cases.Item} with a ul element. * - {@link Cases.Item} - An li which displays a single case's data. * * @see {@link https://reactjs.org/docs/jsx-in-depth.html#using-dot-notation-for-jsx-type|React dot notation} * * @param children * @param onPaginate * @param onSearch * @param onFilter * @param onSortBy * @param onSortDirToggle * @param props * @constructor */ export const Cases: FunctionComponent & ICasesChildren = ({ children, onSearch, onFilter, onSortBy, onSortDirToggle, search, count, ...props }) => { const { sortByOptions, filterByOptions, filter, sortBy, searchRef, sortRef, filterRef, handleDropdown, } = useCases(); return (
{filterByOptions.map(({ label, value, options }) => { return ( {options.map(({ label, value, key }) => ( {label} ))} ); })}
{Intl.NumberFormat().format(count)} {count === 1 ? 'case' : 'cases'}
{children}
); }; Cases.List = List; Cases.Item = Item; Cases.SkeletonItem = SkeletonItem;