import React, { ReactNode } from 'react'; import * as DataTable from 'app/shared/modules/tables/dataTable/dataTable'; import { CellValueType } from 'app/shared/modules/tables/dataTable/dataTable.types'; import { PoolPointsDataState } from 'app/modules/vesselDetails/root/store/vesselDetails.types'; import { PoolPointsColumnConfig } from '../../poolPoints.constants'; interface Props { config: PoolPointsColumnConfig[]; data: PoolPointsDataState[]; children?: ReactNode; } const getDefaultColumnWidth = (config: PoolPointsColumnConfig[]) => { const fixedWidthSum = config.map(item => item.width ?? 0).reduce((first, second) => first + second); const defaultWidth = (100 - fixedWidthSum) / (config.filter(item => !item.width).length); return defaultWidth; }; const getCell = (item: PoolPointsColumnConfig, value: CellValueType, defaultColumnWidth: number, key: number) => { switch (item.cellType) { case 'boolean': return ; case 'date': case 'fullDate': return ; case 'number': return ; case 'text': return ; case 'spacer': return ; default: return 'Invalid cell type'; } }; const PoolPointsDataTable = ({ config, data, children }: Props) => { const defaultColumnWidth = getDefaultColumnWidth(config); return ( <> { data?.length > 0 && {config.map((item, index) => )} {data.map((item, index) => {config.map((cfg, index) => getCell(cfg, cfg.getValue(item), defaultColumnWidth, index))} )} {children} } ); }; export { PoolPointsDataTable };