import React, { useMemo } from 'react'; import { DataTable, DataTableSkeleton, Pagination, Table, TableBody, TableCell, TableContainer, TableHead, TableHeader, TableRow, TableToolbar, TableToolbarAction, TableToolbarContent, TableToolbarMenu, TableToolbarSearch, Tile, } from '@carbon/react'; import { useTranslation } from 'react-i18next'; import { isDesktop, restBaseUrl } from '@openmrs/esm-framework'; import { handleMutate } from '../utils'; import { ResourceRepresentation } from '../core/api/api'; import { type CustomTableHeader } from '../core/components/table/types'; import AddStockSourceActionButton from './add-stock-source-button.component'; import EditStockSourceActionsMenu from './edit-stock-source/edit-stock-source.component'; import StockSourcesDeleteActionMenu from './stock-sources-delete/stock-sources-delete.component'; import StockSourcesFilter from './stock-sources-filter/stock-sources-filter.component'; import useStockSourcesPage from './stock-sources-items-table.resource'; import styles from './stock-sources.scss'; const StockSourcesItems: React.FC = () => { const { t } = useTranslation(); const [selectedSourceType, setSelectedSourceType] = React.useState(''); const handleRefresh = () => { handleMutate(`${restBaseUrl}/stockmanagement/stocksource`); }; // get sourcess const { items, totalItems, tableHeaders, currentPage, pageSizes, goTo, currentPageSize, setPageSize, isLoading } = useStockSourcesPage({ v: ResourceRepresentation.Default, totalCount: true, }); const tableRows = useMemo(() => { return items?.map((entry, index) => { return { ...entry, id: entry?.uuid, key: `key-${entry?.uuid}`, uuid: entry?.uuid, name: entry?.name, acronym: entry?.acronym, sourceType: entry?.sourceType?.display, actions: ( <> ), }; }); }, [items]); const handleFilterChange = (selectedSourceType: string) => { setSelectedSourceType(selectedSourceType); }; const filteredTableRows = useMemo(() => { if (!selectedSourceType) { return tableRows; } return tableRows.filter((row) => row.sourceType === selectedSourceType); }, [tableRows, selectedSourceType]); if (isLoading) { return ; } return (

{t('stockSourcesTableHeader', 'List of partners who provide stock to the facility.')}

{({ rows, headers, getHeaderProps, getTableProps, getRowProps, onInputChange }) => (
{t('refresh', 'Refresh')}
{headers.map( (header) => header.key !== 'details' && ( {(() => { const customHeader = header as CustomTableHeader; return typeof customHeader.header === 'object' && customHeader.header !== null && 'content' in customHeader.header ? (customHeader.header.content as React.ReactNode) : (customHeader.header as React.ReactNode); })()} ), )} {rows.map((row) => { return ( {row.cells.map( (cell) => cell?.info?.header !== 'details' && {cell.value}, )} ); })}
{rows.length === 0 ? (

{t('noSourcesToDisplay', 'No stock sources to display')}

{t('checkFilters', 'Check the filters above')}

) : null}
)}
{ if (pageSize !== currentPageSize) { setPageSize(pageSize); } if (page !== currentPage) { goTo(page); } }} className={styles.paginationOverride} />
); }; export default StockSourcesItems;