import { SlickDataView } from "slickgrid"; import { formatNumber } from "shared/lib/format"; import { ISlickTable } from "shared/model/types"; import { ITotal } from "../../model"; export function getTotals(table: ISlickTable | undefined): ITotal { const result: ITotal = {}; if (!table) return result; const ids = table.summaryColumnIds; const grid = table.grid; if (!grid) return result; const selectedRows = grid.getSelectedRows(); const columns = grid.getColumns(); columns.forEach((column, index) => { const { formatter, id, name } = column; if (ids.includes(id as string)) { result[id] = { cell: index, column, formatter, label: name as string, total: 0, totalFormatted: formatter ? formatter(0, 0, 0, column, {}, grid) : "0", }; } }); const dataView: SlickDataView = grid.getData(); selectedRows.forEach((rowNumber) => { const item = dataView.getItem(rowNumber); Object.keys(result).forEach((id) => { result[id].total += item[id]; result[id].totalFormatted = result[id].formatter ? result[id].formatter( rowNumber, result[id].cell, result[id].total, result[id].column, item, grid, ) : `${formatNumber(result[id].total)}`; }); }); return result; }