UNPKG

@adaptabletools/adaptable

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

48 lines (47 loc) 1.79 kB
import toNumber from 'lodash/toNumber'; export const getNumericValue = (input) => { if (typeof input === 'number') { return input; } const numericValue = toNumber(input); return isNaN(numericValue) ? null : numericValue; }; export const weightedAverage = (params, columnId, weightColumnId) => { const { api: gridApi, rowNode: groupRowNode } = params; let weightedColumnValueSum = 0; let columnValueSum = 0; // TODO AFL: improve performance by using the intermediary aggregated values (for nested groups) groupRowNode.allLeafChildren.forEach((rowNode) => { // when editing values might be converted to strings const rawColumnValue = gridApi.getCellValue({ colKey: columnId, rowNode }); const columnValue = getNumericValue(rawColumnValue); const rawWeightedColumnValue = gridApi.getCellValue({ colKey: weightColumnId, rowNode }); const weightedColumnValue = getNumericValue(rawWeightedColumnValue); if (weightedColumnValue !== null) { weightedColumnValueSum += weightedColumnValue; } if (columnValue !== null) { columnValueSum += columnValue * weightedColumnValue; } }); return { toString: () => { const result = columnValueSum / weightedColumnValueSum; // 0 / 0 = NaN if (isNaN(result)) { return ''; } return result; }, valueOf: () => { const result = columnValueSum / weightedColumnValueSum; // 0 / 0 = NaN if (isNaN(result)) { return 0; } return result; }, [columnId]: columnValueSum, [weightColumnId]: weightedColumnValueSum, }; };