@adaptabletools/adaptable 21.0.4 → 21.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/Api/Implementation/LayoutHelpers.js +23 -6
- package/src/View/Layout/Wizard/sections/ColumnsSection.js +3 -2
- package/src/agGrid/AdaptableAgGrid.d.ts +2 -0
- package/src/agGrid/AdaptableAgGrid.js +42 -8
- package/src/agGrid/AgGridColumnAdapter.js +1 -0
- package/src/agGrid/AgGridModulesAdapter.js +14 -1
- package/src/components/Select/Select.js +2 -2
- package/src/env.js +2 -2
- package/src/layout-manager/src/index.js +14 -4
- package/tsconfig.esm.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adaptabletools/adaptable",
|
|
3
|
-
"version": "21.0.
|
|
3
|
+
"version": "21.0.6",
|
|
4
4
|
"description": "Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
|
@@ -28,6 +28,23 @@ export const layoutModelToLayoutState = (layoutModel) => {
|
|
|
28
28
|
function cleanupAdaptableObjectPrimitives(layout) {
|
|
29
29
|
const l = layout;
|
|
30
30
|
for (const key in l) {
|
|
31
|
+
if (key === 'ColumnFilters') {
|
|
32
|
+
// we don't want to cleanup ColumnFilters
|
|
33
|
+
// as we rely on the Uuids for identifying the filters
|
|
34
|
+
if (Array.isArray(l[key])) {
|
|
35
|
+
l[key].forEach((item) => {
|
|
36
|
+
if (typeof item === 'object') {
|
|
37
|
+
// but we do want to cleanup further down - eg: predicates in the filter
|
|
38
|
+
for (const k in item) {
|
|
39
|
+
if (typeof item[k] === 'object') {
|
|
40
|
+
removeAdaptableObjectPrimitivesInlineDeep(item[k]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
31
48
|
if (typeof l[key] === 'object') {
|
|
32
49
|
removeAdaptableObjectPrimitivesInlineDeep(l[key]);
|
|
33
50
|
}
|
|
@@ -355,9 +372,9 @@ export const tableLayoutModelToTableLayout = (layoutModel) => {
|
|
|
355
372
|
if (layoutModel.Ignore_Metadata) {
|
|
356
373
|
tableLayout.Metadata = layoutModel.Ignore_Metadata;
|
|
357
374
|
}
|
|
358
|
-
if (layoutModel.RowGroupDisplayType) {
|
|
359
|
-
|
|
360
|
-
}
|
|
375
|
+
// if (layoutModel.RowGroupDisplayType) {
|
|
376
|
+
tableLayout.RowGroupDisplayType = layoutModel.RowGroupDisplayType ?? 'single';
|
|
377
|
+
// }
|
|
361
378
|
if (layoutModel.RowGroupedColumns) {
|
|
362
379
|
tableLayout.RowGroupedColumns = layoutModel.RowGroupedColumns;
|
|
363
380
|
}
|
|
@@ -511,9 +528,9 @@ export const pivotLayoutModelToPivotLayout = (layoutModel) => {
|
|
|
511
528
|
pivotLayout.ColumnGroupValues.ExceptionGroupKeys = layoutModel.ColumnGroupValues.Values;
|
|
512
529
|
}
|
|
513
530
|
}
|
|
514
|
-
if (layoutModel.RowGroupDisplayType) {
|
|
515
|
-
|
|
516
|
-
}
|
|
531
|
+
// if (layoutModel.RowGroupDisplayType) {
|
|
532
|
+
pivotLayout.RowGroupDisplayType = layoutModel.RowGroupDisplayType ?? 'single';
|
|
533
|
+
// }
|
|
517
534
|
return pivotLayout;
|
|
518
535
|
};
|
|
519
536
|
export const isPivotLayout = (layout) => Array.isArray(layout.PivotColumns);
|
|
@@ -22,7 +22,7 @@ import { ReorderDraggable } from '../../../Components/ReorderDraggable';
|
|
|
22
22
|
import { AdaptableFormControlTextClear } from '../../../Components/Forms/AdaptableFormControlTextClear';
|
|
23
23
|
import { sortColumnIdsByOrder } from '../../../../layout-manager/src/sortColumnIdsByOrder';
|
|
24
24
|
import HelpBlock from '../../../../components/HelpBlock';
|
|
25
|
-
import { AG_GRID_SELECTION_COLUMN } from '../../../../Utilities/Constants/GeneralConstants';
|
|
25
|
+
import { AG_GRID_GROUPED_COLUMN, AG_GRID_SELECTION_COLUMN, } from '../../../../Utilities/Constants/GeneralConstants';
|
|
26
26
|
import { isPivotLayout } from '../../../../Utilities/isPivotLayout';
|
|
27
27
|
const PropertyOrderText = (props) => (React.createElement(Text, { fontWeight: 600, fontSize: 2 }, props.children));
|
|
28
28
|
const columnTypes = {
|
|
@@ -261,7 +261,8 @@ export const ColumnsSection = (props) => {
|
|
|
261
261
|
});
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
|
-
if (adaptable.api.gridApi.isTreeDataGrid()
|
|
264
|
+
if (adaptable.api.gridApi.isTreeDataGrid() &&
|
|
265
|
+
!allColumns.find((col) => col.columnId === AG_GRID_GROUPED_COLUMN)) {
|
|
265
266
|
allColumns.unshift(generateAutoTreeSingleColumn());
|
|
266
267
|
}
|
|
267
268
|
const colIdToCol = allColumns.reduce((acc, col) => {
|
|
@@ -200,7 +200,9 @@ export declare class AdaptableAgGrid implements IAdaptable {
|
|
|
200
200
|
getDisplayValueFromRawValue(rowNode: IRowNode, columnId: string, rawValue: any): string | undefined;
|
|
201
201
|
private getCleanValue;
|
|
202
202
|
getNormalisedValueFromRawValue(rawValue: any, column: AdaptableColumn): string | number | boolean | Date | unknown;
|
|
203
|
+
private __updateColumnModelAndRefreshGrid_already_called;
|
|
203
204
|
updateColumnModelAndRefreshGrid(): void;
|
|
205
|
+
_updateColumnModelAndRefreshGridNow(): void;
|
|
204
206
|
redrawBody(): void;
|
|
205
207
|
refreshHeader(): void;
|
|
206
208
|
redrawRows(rowNodes?: IRowNode[]): void;
|
|
@@ -179,6 +179,7 @@ export class AdaptableAgGrid {
|
|
|
179
179
|
}
|
|
180
180
|
return this.emitter.onIncludeFired(eventName, callback);
|
|
181
181
|
};
|
|
182
|
+
this.__updateColumnModelAndRefreshGrid_already_called = false;
|
|
182
183
|
this.lifecycleState = 'initial';
|
|
183
184
|
this.emitter = new Emitter();
|
|
184
185
|
this.agGridOptionsService = new AgGridOptionsService(this);
|
|
@@ -356,6 +357,13 @@ export class AdaptableAgGrid {
|
|
|
356
357
|
const gridOptions = config.gridOptions;
|
|
357
358
|
// Needed here because special column defs are required for deriving the adaptable column state
|
|
358
359
|
let columnDefs = this.agGridAdapter.getColumnDefinitionsInclSpecialColumns(gridOptions.columnDefs || []);
|
|
360
|
+
// see #map_dateString_to_date
|
|
361
|
+
this.agGridAdapter.patchColDefs(columnDefs, (colDef) => {
|
|
362
|
+
if (colDef.cellDataType === 'dateString') {
|
|
363
|
+
this.logger.consoleError(`AG Grid: Column '${colDef.colId}' specifies cellDataType='dateString' which is no longer supported. It has been automatically replaced with cellDataType='date'. Please update your column definition.`);
|
|
364
|
+
colDef.cellDataType = 'date';
|
|
365
|
+
}
|
|
366
|
+
});
|
|
359
367
|
gridOptions.columnDefs = columnDefs;
|
|
360
368
|
this.setInitialGridOptions(gridOptions, config.variant);
|
|
361
369
|
const { gridState: initialGridState, layoutModel } = this.mapAdaptableStateToAgGridState(this.adaptableStore.TheStore.getState(), gridOptions.columnDefs, {
|
|
@@ -705,18 +713,30 @@ You need to define at least one Layout!`);
|
|
|
705
713
|
};
|
|
706
714
|
}
|
|
707
715
|
return (params) => {
|
|
716
|
+
// might be a summary row
|
|
717
|
+
if (params.data?.[ROW_SUMMARY_ROW_ID]) {
|
|
718
|
+
return params.data[ROW_SUMMARY_ROW_ID];
|
|
719
|
+
}
|
|
720
|
+
if (params.level > 0) {
|
|
721
|
+
const parentKeys = params.parentKeys ?? [];
|
|
722
|
+
const values = Object.values(params.data);
|
|
723
|
+
let hash = 0;
|
|
724
|
+
for (let i = 0; i < values.length; i++) {
|
|
725
|
+
const str = String(values[i] ?? '');
|
|
726
|
+
for (let j = 0; j < str.length; j++) {
|
|
727
|
+
hash = ((hash << 5) - hash + str.charCodeAt(j)) | 0;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
const id = [...parentKeys, Math.abs(hash)].join('/');
|
|
731
|
+
return id;
|
|
732
|
+
}
|
|
708
733
|
if (params.data?.[primaryKey]) {
|
|
709
734
|
const primaryKeyValue = params.data[primaryKey];
|
|
710
735
|
return typeof primaryKeyValue === 'number'
|
|
711
736
|
? `${primaryKeyValue}`
|
|
712
737
|
: params.data[primaryKey];
|
|
713
738
|
}
|
|
714
|
-
//
|
|
715
|
-
if (params.data?.[ROW_SUMMARY_ROW_ID]) {
|
|
716
|
-
return params.data[ROW_SUMMARY_ROW_ID];
|
|
717
|
-
}
|
|
718
|
-
// AFL 2024.08.17 - no idea why is this here and when it's used
|
|
719
|
-
// might be a group row
|
|
739
|
+
// fallback
|
|
720
740
|
const parentKeys = params.parentKeys ?? [];
|
|
721
741
|
const values = Object.values(params.data);
|
|
722
742
|
if (values.length) {
|
|
@@ -1858,6 +1878,20 @@ You need to define at least one Layout!`);
|
|
|
1858
1878
|
return rawValue;
|
|
1859
1879
|
}
|
|
1860
1880
|
updateColumnModelAndRefreshGrid() {
|
|
1881
|
+
if (this.__updateColumnModelAndRefreshGrid_already_called) {
|
|
1882
|
+
return;
|
|
1883
|
+
}
|
|
1884
|
+
try {
|
|
1885
|
+
this._updateColumnModelAndRefreshGridNow();
|
|
1886
|
+
this.__updateColumnModelAndRefreshGrid_already_called = true;
|
|
1887
|
+
}
|
|
1888
|
+
finally {
|
|
1889
|
+
queueMicrotask(() => {
|
|
1890
|
+
this.__updateColumnModelAndRefreshGrid_already_called = false;
|
|
1891
|
+
});
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1894
|
+
_updateColumnModelAndRefreshGridNow() {
|
|
1861
1895
|
this.logger.info(`Updating Column Model and Refreshing Grid.`);
|
|
1862
1896
|
this.deriveAdaptableColumnStateFromAgGrid();
|
|
1863
1897
|
this.agGridColumnAdapter.setupColumns();
|
|
@@ -3544,8 +3578,8 @@ You need to define at least one Layout!`);
|
|
|
3544
3578
|
isRowGroupDifferentInLayout(one, other) {
|
|
3545
3579
|
const prevRowGroupedColumns = one.RowGroupedColumns || one.PivotGroupedColumns || [];
|
|
3546
3580
|
const currentRowGroupedColumns = other.RowGroupedColumns || other.PivotGroupedColumns || [];
|
|
3547
|
-
const prevRowGroupDisplayType = one.RowGroupDisplayType;
|
|
3548
|
-
const currentRowGroupDisplayType = other.RowGroupDisplayType;
|
|
3581
|
+
const prevRowGroupDisplayType = one.RowGroupDisplayType ?? 'single';
|
|
3582
|
+
const currentRowGroupDisplayType = other.RowGroupDisplayType ?? 'single';
|
|
3549
3583
|
if (prevRowGroupDisplayType !== currentRowGroupDisplayType) {
|
|
3550
3584
|
return true;
|
|
3551
3585
|
}
|
|
@@ -532,6 +532,7 @@ export class AgGridColumnAdapter {
|
|
|
532
532
|
setupColumnCellDataType(columnSetupInfo) {
|
|
533
533
|
const { col, colId } = columnSetupInfo;
|
|
534
534
|
this.setColDefProperty(col, 'cellDataType', (original_cellDataType) => {
|
|
535
|
+
// #map_dateString_to_date
|
|
535
536
|
if (original_cellDataType === 'dateString') {
|
|
536
537
|
errorOnce(`AG Grid: Column '${colId}' specifies cellDataType='dateString' which is no longer supported. It has been automatically replaced with cellDataType='date'. Please update your column definition.`);
|
|
537
538
|
return 'date';
|
|
@@ -16,7 +16,20 @@ export class AgGridModulesAdapter {
|
|
|
16
16
|
return this.adaptableInstance.agGridAdapter.getAgGridApi();
|
|
17
17
|
}
|
|
18
18
|
isAgGridModuleRegistered(moduleName) {
|
|
19
|
-
|
|
19
|
+
let isModuleRegistered = this.agGridApi.isModuleRegistered(moduleName);
|
|
20
|
+
if (!isModuleRegistered) {
|
|
21
|
+
// SSRM module comes with its own implementations of Pivot, MasterDetail and TreeData
|
|
22
|
+
// #ssrm_pivot_module
|
|
23
|
+
const serverSideDependencies = [
|
|
24
|
+
'PivotModule',
|
|
25
|
+
'MasterDetailModule',
|
|
26
|
+
'TreeDataModule',
|
|
27
|
+
];
|
|
28
|
+
if (serverSideDependencies.includes(moduleName)) {
|
|
29
|
+
isModuleRegistered = this.agGridApi.isModuleRegistered('ServerSideRowModelModule');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return isModuleRegistered;
|
|
20
33
|
}
|
|
21
34
|
getAgGridRegisteredModules() {
|
|
22
35
|
const registeredModules = [];
|
|
@@ -279,10 +279,10 @@ export const Select = function (props) {
|
|
|
279
279
|
// ignore the event if the focus is still inside the menu
|
|
280
280
|
return;
|
|
281
281
|
}
|
|
282
|
-
|
|
282
|
+
requestAnimationFrame(() => {
|
|
283
283
|
// wee need to wait for the single value selection to complete before closing
|
|
284
284
|
closeSelectMenu();
|
|
285
|
-
}
|
|
285
|
+
});
|
|
286
286
|
},
|
|
287
287
|
onMouseDown: (event) => {
|
|
288
288
|
if (!props.isMulti) {
|
package/src/env.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
NEXT_PUBLIC_INFINITE_TABLE_LICENSE_KEY: "StartDate=2021-06-29|EndDate=2030-01-01|Owner=Adaptable|Type=distribution|TS=1624971462479|C=137829811,1004007071,2756196225,1839832928,3994409405,636616862" || '',
|
|
3
|
-
PUBLISH_TIMESTAMP:
|
|
4
|
-
VERSION: "21.0.
|
|
3
|
+
PUBLISH_TIMESTAMP: 1759506293070 || Date.now(),
|
|
4
|
+
VERSION: "21.0.6" || '--current-version--',
|
|
5
5
|
};
|
|
@@ -342,9 +342,15 @@ export class LayoutManager extends LMEmitter {
|
|
|
342
342
|
let ColumnSizing = layout.ColumnSizing || {};
|
|
343
343
|
//let's also include the column widths of the pivotResult columns
|
|
344
344
|
pivotResultColumns.forEach((col) => {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
345
|
+
const colId = col.getColId();
|
|
346
|
+
const Width = col.getActualWidth();
|
|
347
|
+
const initialWidth = this.initialColumnWidths[colId] ?? DEFAULT_COLUMN_WIDTH;
|
|
348
|
+
// but if the width is the initial/default width, don't include it in the ColumnSizing
|
|
349
|
+
if (Width !== initialWidth) {
|
|
350
|
+
ColumnSizing[colId] = {
|
|
351
|
+
Width,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
348
354
|
});
|
|
349
355
|
if (!Object.keys(ColumnSizing).length) {
|
|
350
356
|
ColumnSizing = undefined;
|
|
@@ -1707,6 +1713,10 @@ export class LayoutManager extends LMEmitter {
|
|
|
1707
1713
|
}
|
|
1708
1714
|
}
|
|
1709
1715
|
isInPivotMode() {
|
|
1710
|
-
|
|
1716
|
+
// SSRM comes with its own pivot module implementation
|
|
1717
|
+
// see #ssrm_pivot_module
|
|
1718
|
+
const isModuleRegistered = this.gridApi.isModuleRegistered('PivotModule') ||
|
|
1719
|
+
this.gridApi.isModuleRegistered('ServerSideRowModelModule');
|
|
1720
|
+
return isModuleRegistered && this.gridApi.isPivotMode();
|
|
1711
1721
|
}
|
|
1712
1722
|
}
|