import React, { ReactElement } from 'react' import { ActionsContainer } from '@monorail/visualComponents/actions/Actions' import { Collection, CollectionProps, } from '@monorail/visualComponents/collection/Collection' import { CompareSearchType } from '@monorail/visualComponents/inputs/SearchController' import { PageHeader, PageHeaderProps, } from '@monorail/visualComponents/pageHeader/PageHeader' export type SearchFilterType = (params: { item: T compareSearch: CompareSearchType value: string }) => boolean type Props = CollectionProps & { actions?: PageHeaderProps['actions'] title: PageHeaderProps['title'] } export const CollectionPage = ( props: Props, ): ReactElement> => { const { actions, cardRender, collectionView, columns, data, filters, isLoading, pivotBy, setCollectionView, title, NoDataComponent, PaginationComponent, pageSize, showPagination, } = props const renderCollection = () => { if ('searchInput' in props) { return ( cardRender={cardRender} collectionView={collectionView} columns={columns} data={data} filters={filters} isLoading={isLoading} pivotBy={pivotBy} searchInput={props.searchInput} setCollectionView={setCollectionView} NoDataComponent={NoDataComponent} PaginationComponent={PaginationComponent} pageSize={pageSize} showPagination={showPagination} /> ) } else if ('searchFilter' in props) { return ( cardRender={cardRender} collectionView={collectionView} columns={columns} data={data} filters={filters} isLoading={isLoading} pivotBy={pivotBy} searchFilter={props.searchFilter} setCollectionView={setCollectionView} NoDataComponent={NoDataComponent} PaginationComponent={PaginationComponent} pageSize={pageSize} showPagination={showPagination} /> ) } else { throw new Error( 'Need to pass searchInput or searchFilter prop to CollectionPage.', ) } } return ( <> {actions}} /> {renderCollection()} ) }