UNPKG

@adaptabletools/adaptable-cjs

Version:

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

363 lines (362 loc) 14.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isPivotLayout = exports.pivotLayoutModelToPivotLayout = exports.tableLayoutModelToTableLayout = exports.pivotLayoutToPivotLayoutModel = exports.tableLayoutToTableLayoutModel = exports.checkForDuplicateColumns = exports.normalizePivotLayout = exports.normalizeTableLayout = exports.normalizeLayout = exports.areLayoutsEqual = exports.layoutModelToLayoutState = exports.layoutStateToLayoutModel = void 0; const tslib_1 = require("tslib"); const isEqual_1 = tslib_1.__importDefault(require("lodash/isEqual")); const isPivotLayoutModel_1 = require("../../layout-manager/src/isPivotLayoutModel"); const normalizeLayoutModel_1 = require("../../layout-manager/src/normalizeLayoutModel"); const simplifyLayoutModel_1 = require("../../layout-manager/src/simplifyLayoutModel"); const AggregationColumns_1 = require("../../AdaptableState/Common/AggregationColumns"); const AdaptableHelper_1 = require("../../Utilities/Helpers/AdaptableHelper"); const layoutStateToLayoutModel = (layout) => { if ((0, exports.isPivotLayout)(layout)) { return (0, exports.pivotLayoutToPivotLayoutModel)(layout); } return (0, exports.tableLayoutToTableLayoutModel)(layout); }; exports.layoutStateToLayoutModel = layoutStateToLayoutModel; const layoutModelToLayoutState = (layoutModel, defaults) => { if ((0, isPivotLayoutModel_1.isPivotLayoutModel)(layoutModel)) { return (0, exports.pivotLayoutModelToPivotLayout)(layoutModel, defaults); } return (0, exports.tableLayoutModelToTableLayout)(layoutModel, defaults); }; exports.layoutModelToLayoutState = layoutModelToLayoutState; function cleanupAdaptableObjectPrimitives(layout) { if (layout.TableAggregationColumns) { layout.TableAggregationColumns.forEach((AggValue) => { (0, AdaptableHelper_1.removeAdaptableObjectPrimitivesInline)(AggValue); if (typeof AggValue.AggFunc === 'object' && AggValue.AggFunc) { (0, AdaptableHelper_1.removeAdaptableObjectPrimitivesInline)(AggValue.AggFunc); } }); } if (layout.ColumnHeaders) { (0, AdaptableHelper_1.removeAdaptableObjectPrimitivesInline)(layout.ColumnHeaders); } if (layout.ColumnVisibility) { (0, AdaptableHelper_1.removeAdaptableObjectPrimitivesInline)(layout.ColumnVisibility); } if (layout.ColumnWidths) { (0, AdaptableHelper_1.removeAdaptableObjectPrimitivesInline)(layout.ColumnWidths); } if (layout.RowGroupValues) { (0, AdaptableHelper_1.removeAdaptableObjectPrimitivesInline)(layout.RowGroupValues); } } /** * Compares 2 Layouts for equality * @param layout1 First Layout * @param layout2 Second Layout */ const areLayoutsEqual = (layout1, layout2) => { if (!layout1 && !layout2) { return true; } if (!layout1 || !layout2) { return false; } return (0, isEqual_1.default)((0, exports.normalizeLayout)(layout1), (0, exports.normalizeLayout)(layout2)); }; exports.areLayoutsEqual = areLayoutsEqual; const normalizeLayout = (layout, options) => { if ((0, exports.isPivotLayout)(layout)) { return (0, exports.normalizePivotLayout)(layout); } return (0, exports.normalizeTableLayout)(layout, options); }; exports.normalizeLayout = normalizeLayout; const normalizeTableLayout = (tableLayout, options) => { const Source = tableLayout.Source; const Uuid = tableLayout.Uuid; const AdaptableVersion = tableLayout.AdaptableVersion; const ColumnFilters = tableLayout.ColumnFilters; const GridFilter = tableLayout.GridFilter; let model = (0, exports.tableLayoutToTableLayoutModel)(tableLayout); model = (0, normalizeLayoutModel_1.normalizeTableLayoutModel)(model, options); tableLayout = (0, exports.tableLayoutModelToTableLayout)(model, tableLayout); if (Source) { tableLayout.Source = Source; } if (Uuid) { tableLayout.Uuid = Uuid; } if (AdaptableVersion) { tableLayout.AdaptableVersion = AdaptableVersion; } if (ColumnFilters) { tableLayout.ColumnFilters = ColumnFilters; } if (GridFilter) { tableLayout.GridFilter = GridFilter; } return tableLayout; }; exports.normalizeTableLayout = normalizeTableLayout; const normalizePivotLayout = (pivotLayout) => { const Source = pivotLayout.Source; const Uuid = pivotLayout.Uuid; const AdaptableVersion = pivotLayout.AdaptableVersion; const ColumnFilters = pivotLayout.ColumnFilters; const GridFilter = pivotLayout.GridFilter; let model = (0, exports.pivotLayoutToPivotLayoutModel)(pivotLayout); model = (0, normalizeLayoutModel_1.normalizePivotLayoutModel)(model); pivotLayout = (0, exports.pivotLayoutModelToPivotLayout)(model, pivotLayout); if (Source) { pivotLayout.Source = Source; } if (Uuid) { pivotLayout.Uuid = Uuid; } if (AdaptableVersion) { pivotLayout.AdaptableVersion = AdaptableVersion; } if (ColumnFilters) { pivotLayout.ColumnFilters = ColumnFilters; } if (GridFilter) { pivotLayout.GridFilter = GridFilter; } return pivotLayout; }; exports.normalizePivotLayout = normalizePivotLayout; const errorOnceMessages = new Map(); const errorOnce = (message) => { if (errorOnceMessages.get(message)) { return; } console.error(message); errorOnceMessages.set(message, true); }; const checkForDuplicateColumns = (layout) => { if (layout.TableColumns) { const set = new Set(layout.TableColumns); if (set.size !== layout.TableColumns.length) { layout.TableColumns.reduce((acc, col) => { acc[col] = (acc[col] || 0) + 1; if (acc[col] > 1) { // if you change this message, make sure you also update the associated test error-on-duplicate-column.spec.ts errorOnce(`Duplicate column "${col}" in layout "${layout.Name}"!`); } return acc; }, {}); } } }; exports.checkForDuplicateColumns = checkForDuplicateColumns; const tableLayoutToTableLayoutModel = (tableLayout) => { tableLayout = structuredClone(tableLayout); cleanupAdaptableObjectPrimitives(tableLayout); if (tableLayout.RowGroupValues) { // @ts-ignore delete tableLayout.RowGroupValues.Source; // @ts-ignore delete tableLayout.RowGroupValues.Uuid; // @ts-ignore delete tableLayout.RowGroupValues.AdaptableVersion; } delete tableLayout.ColumnHeaders; const TableAggregationColumns = (tableLayout.TableAggregationColumns || []).map(({ ColumnId, AggFunc }) => { return { ColumnId, AggFunc: toAggFunc(AggFunc), }; }); const result = (0, simplifyLayoutModel_1.simplifyTableLayoutModel)({ SuppressAggFuncInHeader: tableLayout.SuppressAggFuncInHeader, TableColumns: tableLayout.TableColumns, ColumnWidths: tableLayout.ColumnWidths, ColumnVisibility: tableLayout.ColumnVisibility, ColumnSorts: tableLayout.ColumnSorts, // ColumnHeaders: tableLayout.ColumnHeaders, RowGroupedColumns: tableLayout.RowGroupedColumns, ColumnPinning: tableLayout.ColumnPinning, RowGroupValues: tableLayout.RowGroupValues ? tableLayout.RowGroupValues.RowGroupDefaultBehavior === 'always-collapsed' || tableLayout.RowGroupValues.RowGroupDefaultBehavior === 'always-expanded' ? { RowGroupDisplay: tableLayout.RowGroupValues.RowGroupDefaultBehavior, } : { RowGroupDisplay: tableLayout.RowGroupValues.RowGroupDefaultBehavior, Values: tableLayout.RowGroupValues.ExceptionGroupKeys || [], } : undefined, TableAggregationColumns: TableAggregationColumns, }); if (tableLayout.RowGroupDisplayType) { result.RowGroupDisplayType = tableLayout.RowGroupDisplayType; } if (tableLayout.ColumnFilters) { result.ColumnFilters = tableLayout.ColumnFilters; } if (tableLayout.GridFilter) { result.GridFilter = tableLayout.GridFilter; } return result; }; exports.tableLayoutToTableLayoutModel = tableLayoutToTableLayoutModel; const pivotLayoutToPivotLayoutModel = (pivotLayout) => { pivotLayout = structuredClone(pivotLayout); cleanupAdaptableObjectPrimitives(pivotLayout); delete pivotLayout.ColumnHeaders; const result = (0, simplifyLayoutModel_1.simplifyPivotLayoutModel)({ SuppressAggFuncInHeader: pivotLayout.SuppressAggFuncInHeader, ColumnWidths: pivotLayout.ColumnWidths, ColumnVisibility: pivotLayout.ColumnVisibility, ColumnSorts: pivotLayout.ColumnSorts, PivotGroupedColumns: pivotLayout.PivotGroupedColumns, ColumnPinning: pivotLayout.ColumnPinning, PivotColumns: pivotLayout.PivotColumns, PivotExpandLevel: pivotLayout.PivotExpandLevel, PivotAggregationColumns: (pivotLayout.PivotAggregationColumns || []).map(({ ColumnId, AggFunc }) => { return { ColumnId, AggFunc: toAggFunc(AggFunc), }; }), RowGroupValues: pivotLayout.RowGroupValues ? pivotLayout.RowGroupValues.RowGroupDefaultBehavior === 'always-collapsed' || pivotLayout.RowGroupValues.RowGroupDefaultBehavior === 'always-expanded' ? { RowGroupDisplay: pivotLayout.RowGroupValues.RowGroupDefaultBehavior, } : { RowGroupDisplay: pivotLayout.RowGroupValues.RowGroupDefaultBehavior, Values: pivotLayout.RowGroupValues.ExceptionGroupKeys || [], } : undefined, }); if (pivotLayout.ColumnFilters) { result.ColumnFilters = pivotLayout.ColumnFilters; } if (pivotLayout.GridFilter) { result.GridFilter = pivotLayout.GridFilter; } return result; }; exports.pivotLayoutToPivotLayoutModel = pivotLayoutToPivotLayoutModel; function toAggFunc(aggFunc) { if ((0, AggregationColumns_1.isWeightedAverageAggregation)(aggFunc)) { return { aggFunc: AggregationColumns_1.WEIGHTED_AVERAGE_AGG_FN_NAME, weightedColumnId: aggFunc.weightedColumnId }; } return { aggFunc }; } const tableLayoutModelToTableLayout = (layoutModel, defaults) => { const tableLayout = { ...defaults, TableColumns: layoutModel.TableColumns, ColumnWidths: layoutModel.ColumnWidths, ColumnVisibility: layoutModel.ColumnVisibility, ColumnSorts: layoutModel.ColumnSorts, }; if (layoutModel.RowGroupDisplayType) { tableLayout.RowGroupDisplayType = layoutModel.RowGroupDisplayType; } if (layoutModel.RowGroupedColumns) { tableLayout.RowGroupedColumns = layoutModel.RowGroupedColumns; } else { delete tableLayout.RowGroupedColumns; } if (layoutModel.ColumnPinning) { tableLayout.ColumnPinning = layoutModel.ColumnPinning; } else { delete tableLayout.ColumnPinning; } if (layoutModel.RowGroupValues) { tableLayout.RowGroupValues = { RowGroupDefaultBehavior: layoutModel.RowGroupValues.RowGroupDisplay, }; if ((layoutModel.RowGroupValues.RowGroupDisplay === 'collapsed' || layoutModel.RowGroupValues.RowGroupDisplay === 'expanded') && layoutModel.RowGroupValues.Values) { // @ts-ignore tableLayout.RowGroupValues.ExceptionGroupKeys = layoutModel.RowGroupValues.Values; } } else { delete tableLayout.RowGroupValues; } if (layoutModel.TableAggregationColumns) { tableLayout.TableAggregationColumns = layoutModel.TableAggregationColumns.map(({ ColumnId, AggFunc }) => { return { ColumnId, AggFunc: toAggregationColumnValue(AggFunc), }; }); } else { delete tableLayout.TableAggregationColumns; } if (layoutModel.ColumnFilters) { tableLayout.ColumnFilters = layoutModel.ColumnFilters; } if (layoutModel.GridFilter) { tableLayout.GridFilter = layoutModel.GridFilter; } cleanupAdaptableObjectPrimitives(tableLayout); return tableLayout; }; exports.tableLayoutModelToTableLayout = tableLayoutModelToTableLayout; function toAggregationColumnValue(columnAggregationModel) { return columnAggregationModel && typeof columnAggregationModel.aggFunc === 'string' && (0, AggregationColumns_1.isWeightedAverageAggFuncName)(columnAggregationModel.aggFunc) ? { type: 'weightedAverage', weightedColumnId: columnAggregationModel.weightedColumnId, } : columnAggregationModel.aggFunc; } const pivotLayoutModelToPivotLayout = (layoutModel, defaults) => { const pivotLayout = { ...defaults, PivotColumns: layoutModel.PivotColumns, TableColumns: layoutModel.TableColumns, ColumnWidths: layoutModel.ColumnWidths, ColumnVisibility: layoutModel.ColumnVisibility, ColumnSorts: layoutModel.ColumnSorts, ColumnPinning: layoutModel.ColumnPinning, }; if (layoutModel.PivotGroupedColumns) { pivotLayout.PivotGroupedColumns = layoutModel.PivotGroupedColumns; } else { delete pivotLayout.PivotGroupedColumns; } if (layoutModel.RowGroupValues) { pivotLayout.RowGroupValues = { RowGroupDefaultBehavior: layoutModel.RowGroupValues.RowGroupDisplay, }; if ((layoutModel.RowGroupValues.RowGroupDisplay === 'collapsed' || layoutModel.RowGroupValues.RowGroupDisplay === 'expanded') && layoutModel.RowGroupValues.Values) { // @ts-ignore pivotLayout.RowGroupValues.ExceptionGroupKeys = layoutModel.RowGroupValues.Values; } } else { delete pivotLayout.RowGroupValues; } if (layoutModel.PivotAggregationColumns) { pivotLayout.PivotAggregationColumns = (layoutModel.PivotAggregationColumns || []).map(({ ColumnId, AggFunc }) => ({ ColumnId, AggFunc: toAggregationColumnValue(AggFunc), })); } else { delete pivotLayout.PivotAggregationColumns; } if (layoutModel.ColumnFilters) { pivotLayout.ColumnFilters = layoutModel.ColumnFilters; } if (layoutModel.GridFilter) { pivotLayout.GridFilter = layoutModel.GridFilter; } return pivotLayout; }; exports.pivotLayoutModelToPivotLayout = pivotLayoutModelToPivotLayout; const isPivotLayout = (layout) => Array.isArray(layout.PivotColumns); exports.isPivotLayout = isPivotLayout;