@adaptabletools/adaptable 22.0.0-canary.5 → 22.0.0-canary.7
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/index.css +0 -3
- package/index.css.map +1 -1
- package/package.json +1 -1
- package/src/AdaptableOptions/CustomSortOptions.d.ts +1 -2
- package/src/AdaptableState/AlertState.d.ts +6 -3
- package/src/AdaptableState/ChartingState.d.ts +5 -5
- package/src/AdaptableState/Common/AdaptableObject.d.ts +4 -9
- package/src/AdaptableState/Common/BaseContext.d.ts +2 -0
- package/src/AdaptableState/Common/ColumnHighlightInfo.d.ts +18 -0
- package/src/AdaptableState/Common/ColumnHighlightInfo.js +1 -0
- package/src/AdaptableState/Common/NamedObject.d.ts +10 -0
- package/src/AdaptableState/Common/NamedObject.js +1 -0
- package/src/AdaptableState/Common/RowSummary.d.ts +1 -1
- package/src/AdaptableState/Common/Schedule.d.ts +7 -3
- package/src/AdaptableState/Common/SuspendableObject.d.ts +10 -0
- package/src/AdaptableState/Common/SuspendableObject.js +1 -0
- package/src/AdaptableState/CustomSortState.d.ts +6 -2
- package/src/AdaptableState/DashboardState.d.ts +3 -3
- package/src/AdaptableState/ExportState.d.ts +3 -3
- package/src/AdaptableState/FlashingCellState.d.ts +6 -2
- package/src/AdaptableState/FormatColumnState.d.ts +6 -2
- package/src/AdaptableState/InternalState.d.ts +2 -0
- package/src/AdaptableState/LayoutState.d.ts +3 -3
- package/src/AdaptableState/NamedQueryState.d.ts +3 -3
- package/src/AdaptableState/PlusMinusState.d.ts +6 -2
- package/src/AdaptableState/ShortcutState.d.ts +6 -2
- package/src/AdaptableState/StyledColumnState.d.ts +1 -1
- package/src/AdaptableState/ThemeState.d.ts +3 -3
- package/src/Api/AlertApi.d.ts +6 -0
- package/src/Api/CustomSortApi.d.ts +6 -0
- package/src/Api/FlashingCellApi.d.ts +6 -0
- package/src/Api/FormatColumnApi.d.ts +10 -4
- package/src/Api/GridApi.d.ts +18 -3
- package/src/Api/Implementation/AlertApiImpl.d.ts +1 -0
- package/src/Api/Implementation/AlertApiImpl.js +3 -0
- package/src/Api/Implementation/ChartingApiImpl.js +2 -2
- package/src/Api/Implementation/CustomSortApiImpl.d.ts +1 -0
- package/src/Api/Implementation/CustomSortApiImpl.js +3 -0
- package/src/Api/Implementation/FlashingCellApiImpl.d.ts +1 -0
- package/src/Api/Implementation/FlashingCellApiImpl.js +3 -0
- package/src/Api/Implementation/FormatColumnApiImpl.d.ts +6 -5
- package/src/Api/Implementation/FormatColumnApiImpl.js +6 -5
- package/src/Api/Implementation/GridApiImpl.d.ts +4 -0
- package/src/Api/Implementation/GridApiImpl.js +15 -1
- package/src/Api/Implementation/LayoutApiImpl.js +1 -1
- package/src/Api/Implementation/NamedQueryApiImpl.js +2 -2
- package/src/Api/Implementation/PlusMinusApiImpl.d.ts +1 -0
- package/src/Api/Implementation/PlusMinusApiImpl.js +3 -0
- package/src/Api/Implementation/ScheduleApiImpl.d.ts +1 -0
- package/src/Api/Implementation/ScheduleApiImpl.js +3 -0
- package/src/Api/Implementation/ShortcutApiImpl.d.ts +1 -0
- package/src/Api/Implementation/ShortcutApiImpl.js +3 -0
- package/src/Api/Implementation/SystemStatusApiImpl.js +4 -4
- package/src/Api/Internal/CalculatedColumnInternalApi.js +2 -2
- package/src/Api/Internal/FreeTextColumnInternalApi.js +2 -2
- package/src/Api/Internal/LayoutInternalApi.js +1 -1
- package/src/Api/Internal/NamedQueryInternalApi.js +4 -4
- package/src/Api/PlusMinusApi.d.ts +6 -0
- package/src/Api/ScheduleApi.d.ts +6 -0
- package/src/Api/ShortcutApi.d.ts +6 -0
- package/src/Redux/ActionsReducers/FormatColumnRedux.d.ts +8 -0
- package/src/Redux/ActionsReducers/FormatColumnRedux.js +15 -0
- package/src/Redux/ActionsReducers/InternalRedux.d.ts +15 -0
- package/src/Redux/ActionsReducers/InternalRedux.js +36 -0
- package/src/Redux/Store/AdaptableStore.js +39 -16
- package/src/Strategy/BulkUpdateModule.js +8 -8
- package/src/Strategy/PlusMinusModule.js +1 -1
- package/src/Strategy/QuickSearchModule.js +1 -1
- package/src/Strategy/SettingsPanelModule.js +11 -7
- package/src/Strategy/SmartEditModule.js +10 -10
- package/src/Utilities/Services/DataService.js +1 -1
- package/src/Utilities/Services/Fdc3Service.js +4 -4
- package/src/Utilities/Services/ModuleService.js +1 -3
- package/src/Utilities/Services/ThemeService.js +2 -6
- package/src/Utilities/Services/ValidationService.js +1 -1
- package/src/Utilities/logDeprecation.js +3 -4
- package/src/View/Alert/Utilities/getDefaultAlertDefinition.d.ts +2 -2
- package/src/View/Alert/Wizard/isValidAlertRules.js +1 -1
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +2 -2
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +2 -2
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -1
- package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +2 -2
- package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +2 -2
- package/src/View/Components/CellPopup/index.js +1 -1
- package/src/View/Components/ColumnFilter/FloatingFilter.js +41 -3
- package/src/View/Components/ColumnFilter/components/ColumnFilterMenu.js +54 -2
- package/src/View/Components/EntityRulesEditor/Utilities.js +5 -5
- package/src/View/Components/NewScopeComponent.js +3 -3
- package/src/View/Components/Popups/AdaptablePopupConfirmation.js +1 -1
- package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +3 -3
- package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +1 -1
- package/src/View/FlashingCell/Wizard/isValidFlashingCellRules.js +1 -1
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +1 -1
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +3 -3
- package/src/View/Layout/LayoutViewPanel.js +1 -1
- package/src/View/Layout/Wizard/sections/AggregationsSection.js +1 -1
- package/src/View/Layout/Wizard/sections/FilterSection.js +1 -1
- package/src/View/Layout/Wizard/sections/GridFilterSection.js +1 -1
- package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +3 -3
- package/src/View/Layout/Wizard/sections/RowSummarySection.js +1 -1
- package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +2 -2
- package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +5 -5
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.d.ts +1 -1
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.js +11 -11
- package/src/View/StateManagement/handleExportState.js +1 -1
- package/src/View/StyledColumn/Wizard/StyledColumnWizardColumnSection.js +1 -1
- package/src/agGrid/AdaptableAgGrid.js +47 -51
- package/src/agGrid/AgGridAdapter.js +8 -8
- package/src/agGrid/AgGridColumnAdapter.d.ts +1 -0
- package/src/agGrid/AgGridColumnAdapter.js +15 -4
- package/src/agGrid/AgGridExportAdapter.js +5 -5
- package/src/agGrid/AgGridThemeAdapter.js +2 -2
- package/src/components/OverlayTrigger/index.js +1 -1
- package/src/components/Select/Select.js +78 -15
- package/src/env.js +2 -2
- package/src/metamodel/adaptable.metamodel.d.ts +25 -18
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/migration/AdaptableUpgradeHelper.js +2 -2
- package/src/migration/VersionUpgrade17.js +4 -4
- package/src/migration/VersionUpgrade20.js +4 -4
- package/src/types.d.ts +2 -2
- package/tsconfig.esm.tsbuildinfo +1 -1
|
@@ -359,7 +359,7 @@ export class AdaptableAgGrid {
|
|
|
359
359
|
this.adaptableOptions = this.normalizeAdaptableOptions(this.adaptableOptions);
|
|
360
360
|
const { showLoadingScreen, loadingScreenDelay, loadingScreenText, loadingScreenTitle } = this.adaptableOptions.userInterfaceOptions.loadingScreenOptions;
|
|
361
361
|
if (showLoadingScreen) {
|
|
362
|
-
this.logger.info(
|
|
362
|
+
this.logger.info('Showing loading screen');
|
|
363
363
|
// it's important to use ensureLoadingScreenPortalElement
|
|
364
364
|
// and not ensurePortalElement, because multiple adaptable instances share the same portal element
|
|
365
365
|
// so when displaying the second one, the react root associated to the portal element
|
|
@@ -375,7 +375,7 @@ export class AdaptableAgGrid {
|
|
|
375
375
|
}), portalElement);
|
|
376
376
|
}
|
|
377
377
|
else {
|
|
378
|
-
this.logger.consoleError(
|
|
378
|
+
this.logger.consoleError('Failed to create loading screen portal element.');
|
|
379
379
|
}
|
|
380
380
|
}
|
|
381
381
|
this.forPlugins((plugin) => plugin.afterInitOptions(this, this.adaptableOptions));
|
|
@@ -434,7 +434,7 @@ export class AdaptableAgGrid {
|
|
|
434
434
|
// see #map_dateString_to_date
|
|
435
435
|
this.agGridAdapter.patchColDefs(columnDefs, (colDef) => {
|
|
436
436
|
if (colDef.cellDataType === 'dateString') {
|
|
437
|
-
this.logger.consoleError(`
|
|
437
|
+
this.logger.consoleError(`Column "${colDef.colId}" uses cellDataType="dateString" which is no longer supported. It has been replaced with cellDataType="date". Please update your column definition.`);
|
|
438
438
|
colDef.cellDataType = 'date';
|
|
439
439
|
}
|
|
440
440
|
});
|
|
@@ -465,8 +465,8 @@ export class AdaptableAgGrid {
|
|
|
465
465
|
const agGridApi = await this.initializeAgGrid(gridOptions, config.modules, config.renderAgGridFrameworkComponent);
|
|
466
466
|
if (agGridApi === false) {
|
|
467
467
|
this.midwayDestroy();
|
|
468
|
-
this.logger.consoleError(
|
|
469
|
-
return Promise.reject('
|
|
468
|
+
this.logger.consoleError('Failed to initialize AG Grid.');
|
|
469
|
+
return Promise.reject('Failed to initialize AG Grid.');
|
|
470
470
|
}
|
|
471
471
|
this.layoutManager = new LayoutManager({
|
|
472
472
|
gridApi: agGridApi,
|
|
@@ -491,7 +491,7 @@ export class AdaptableAgGrid {
|
|
|
491
491
|
this.layoutManager.onColumnDefsChanged(() => {
|
|
492
492
|
this.updateColumnModelAndRefreshGrid();
|
|
493
493
|
});
|
|
494
|
-
this.logger.info(
|
|
494
|
+
this.logger.info('Hiding loading screen');
|
|
495
495
|
this.unmountLoadingScreen?.();
|
|
496
496
|
perfInitAgGrid.end();
|
|
497
497
|
initAgGridMarker.end();
|
|
@@ -502,7 +502,7 @@ export class AdaptableAgGrid {
|
|
|
502
502
|
this.lifecycleState = 'agGridReady';
|
|
503
503
|
this.api.entitlementApi.internalApi.setModulesAgGridDepsInfos();
|
|
504
504
|
this.ModuleService.logMissingAgGridDepsInfos();
|
|
505
|
-
this.logger.info(
|
|
505
|
+
this.logger.info('Registered AG Grid modules (including dependents):', this.agGridModulesAdapter.getAgGridRegisteredModuleNames().sort());
|
|
506
506
|
/**
|
|
507
507
|
* At this point AG Grid is initialized!
|
|
508
508
|
*/
|
|
@@ -592,10 +592,7 @@ export class AdaptableAgGrid {
|
|
|
592
592
|
const layoutState = state.Layout;
|
|
593
593
|
// ensure that at least one Layout has been provided
|
|
594
594
|
if (!layoutState || !layoutState.Layouts?.length) {
|
|
595
|
-
this.logger
|
|
596
|
-
.consoleError(`You have not defined any Layout in your InitialState.Layout.Layouts[] state!
|
|
597
|
-
|
|
598
|
-
You need to define at least one Layout!`);
|
|
595
|
+
this.logger.consoleError('No Layouts defined in InitialState.Layout.Layouts[]. At least one Layout is required.');
|
|
599
596
|
}
|
|
600
597
|
// ensure CurrentLayout is valid
|
|
601
598
|
if (!layoutState.CurrentLayout ||
|
|
@@ -760,19 +757,12 @@ You need to define at least one Layout!`);
|
|
|
760
757
|
}
|
|
761
758
|
normalizeAdaptableOptions(adaptableOptions) {
|
|
762
759
|
if (this.hasAutogeneratedPrimaryKey) {
|
|
763
|
-
this.logger
|
|
764
|
-
.warn(`Autogenerated primary key (adaptableOptions.autogeneratedPrimaryKey = TRUE) should be used only as a last resort,
|
|
765
|
-
when no unique column is available, as it limits some Adaptable functionalities!
|
|
766
|
-
|
|
767
|
-
For more details see: ${PrimaryKeyDocsLink}`);
|
|
760
|
+
this.logger.warn(`Autogenerated primary key is enabled (adaptableOptions.autogeneratedPrimaryKey = true). This should be a last resort as it limits some Adaptable features. See: ${PrimaryKeyDocsLink}`);
|
|
768
761
|
this.adaptableOptions.primaryKey = AUTOGENERATED_PK_COLUMN;
|
|
769
762
|
return this.adaptableOptions;
|
|
770
763
|
}
|
|
771
764
|
if (StringExtensions.IsNullOrEmpty(adaptableOptions.primaryKey)) {
|
|
772
|
-
this.logger.consoleError(`
|
|
773
|
-
As a fallback, you can set adaptableOptions.autogeneratedPrimaryKey = TRUE
|
|
774
|
-
|
|
775
|
-
For more details see: ${PrimaryKeyDocsLink}`);
|
|
765
|
+
this.logger.consoleError(`adaptableOptions.primaryKey is required and must not be empty. As a fallback, set adaptableOptions.autogeneratedPrimaryKey = true. See: ${PrimaryKeyDocsLink}`);
|
|
776
766
|
}
|
|
777
767
|
return adaptableOptions;
|
|
778
768
|
}
|
|
@@ -804,7 +794,7 @@ You need to define at least one Layout!`);
|
|
|
804
794
|
*/
|
|
805
795
|
this.agGridOptionsService.setGridOptionsProperty(gridOptions, 'defaultColDef', (original_defaultColDef) => {
|
|
806
796
|
if (original_defaultColDef?.headerValueGetter) {
|
|
807
|
-
this.logger.warn(
|
|
797
|
+
this.logger.warn('defaultColDef.headerValueGetter overrides the Adaptable header mechanism. Consider using ColumnOptions.columnHeader instead.');
|
|
808
798
|
return original_defaultColDef;
|
|
809
799
|
}
|
|
810
800
|
// #customize_header
|
|
@@ -821,7 +811,7 @@ You need to define at least one Layout!`);
|
|
|
821
811
|
*/
|
|
822
812
|
this.agGridOptionsService.setGridOptionsProperty(gridOptions, 'defaultColGroupDef', (original_defaultColGroupDef) => {
|
|
823
813
|
if (original_defaultColGroupDef?.headerValueGetter) {
|
|
824
|
-
this.logger.warn(
|
|
814
|
+
this.logger.warn('defaultColGroupDef.headerValueGetter overrides the Adaptable header mechanism. Consider using ColumnOptions.tableColumnHeader instead.');
|
|
825
815
|
return original_defaultColGroupDef;
|
|
826
816
|
}
|
|
827
817
|
const defaultColGroupDef = { ...original_defaultColGroupDef };
|
|
@@ -841,12 +831,11 @@ You need to define at least one Layout!`);
|
|
|
841
831
|
}
|
|
842
832
|
if (original_autoGroupColumnDef?.filter === false) {
|
|
843
833
|
// if user disables filter on autoGroupColumnDef, we respect that
|
|
844
|
-
this.logger.info(
|
|
834
|
+
this.logger.info('autoGroupColumnDef.filter is disabled via user configuration.');
|
|
845
835
|
return original_autoGroupColumnDef;
|
|
846
836
|
}
|
|
847
837
|
if (typeof original_autoGroupColumnDef?.filter === 'object') {
|
|
848
|
-
this.logger.consoleWarn(
|
|
849
|
-
Please contact the Adaptable Support Team for further assistance and investigation.`);
|
|
838
|
+
this.logger.consoleWarn('autoGroupColumnDef.filter overrides the Adaptable filtering mechanism for the Group Column. Adaptable-managed filters will not apply to this column. Contact support for alternatives.');
|
|
850
839
|
return original_autoGroupColumnDef;
|
|
851
840
|
}
|
|
852
841
|
const autoGroupColumnDef = { ...original_autoGroupColumnDef };
|
|
@@ -854,8 +843,7 @@ You need to define at least one Layout!`);
|
|
|
854
843
|
// !! DO NOT REMOVE THIS !!
|
|
855
844
|
// see https://github.com/ag-grid/ag-grid/blob/6f43ff257c2e285068eb425b655e58d6eeb89816/packages/ag-grid-enterprise/src/rowHierarchy/autoColService.ts#L225
|
|
856
845
|
autoGroupColumnDef.filterValueGetter = (params) => {
|
|
857
|
-
this.logger.consoleWarn(
|
|
858
|
-
Please contact the Adaptable Support Team for further assistance and investigation.`, params);
|
|
846
|
+
this.logger.consoleWarn('Unexpected invocation of autoGroupColumnDef.filterValueGetter. This is not expected under normal operation. Please contact support.', params);
|
|
859
847
|
return '';
|
|
860
848
|
};
|
|
861
849
|
// !! it is important that we always return the same component / handler instances
|
|
@@ -1425,15 +1413,14 @@ You need to define at least one Layout!`);
|
|
|
1425
1413
|
const rowData = agGridApi.getGridOption('rowData');
|
|
1426
1414
|
this.initWithLazyData = rowData == undefined || rowData.length === 0;
|
|
1427
1415
|
if (this.initWithLazyData) {
|
|
1428
|
-
this.logger.info('
|
|
1416
|
+
this.logger.info('Initializing with lazy data (no initial rowData).');
|
|
1429
1417
|
}
|
|
1430
1418
|
if (!this.getAgGridContainerElement()) {
|
|
1431
1419
|
// initialize the agGridContainerElement from the AgGrid instance
|
|
1432
1420
|
const gridRoot = this.agGridAdapter.getAgGridRootElement();
|
|
1433
1421
|
const gridContainer = gridRoot?.closest('[class*="ag-theme"]');
|
|
1434
1422
|
if (!gridContainer) {
|
|
1435
|
-
this.logger.consoleError(
|
|
1436
|
-
Please contact AdapTable Support and in the meantime provide a valid container element in 'ContainerOptions.agGridContainer'!`);
|
|
1423
|
+
this.logger.consoleError('Failed to derive AG Grid container from the framework wrapper. Please provide a valid container element via ContainerOptions.agGridContainer.');
|
|
1437
1424
|
}
|
|
1438
1425
|
this.DANGER_USE_GETTER_agGridContainerElement = gridContainer;
|
|
1439
1426
|
}
|
|
@@ -1441,7 +1428,7 @@ You need to define at least one Layout!`);
|
|
|
1441
1428
|
}
|
|
1442
1429
|
const agGridContainer = this.getAgGridContainerElement();
|
|
1443
1430
|
if (!agGridContainer) {
|
|
1444
|
-
this.logger.consoleError('
|
|
1431
|
+
this.logger.consoleError('AG Grid container element not found in the DOM. Please provide a valid element via ContainerOptions.agGridContainer.');
|
|
1445
1432
|
return Promise.resolve(false);
|
|
1446
1433
|
}
|
|
1447
1434
|
let gridParams;
|
|
@@ -1856,7 +1843,7 @@ You need to define at least one Layout!`);
|
|
|
1856
1843
|
// if no primary key column then lets check the first row to see if its a data item
|
|
1857
1844
|
const primaryKeyDataItem = this.getFirstRowNode()?.data[primaryKey];
|
|
1858
1845
|
if (!primaryKeyDataItem) {
|
|
1859
|
-
errorMessage = `
|
|
1846
|
+
errorMessage = `Primary key column "${this.adaptableOptions.primaryKey}" not found. This will affect many Adaptable features.`;
|
|
1860
1847
|
if (this.adaptableOptions.alertOptions.showMissingPrimaryKeyAlert) {
|
|
1861
1848
|
// show an alert if that is the option
|
|
1862
1849
|
this.api.alertApi.showAlertError('No Primary Key', errorMessage);
|
|
@@ -1913,12 +1900,12 @@ You need to define at least one Layout!`);
|
|
|
1913
1900
|
checkShouldClearExistingFiltersOrSearches() {
|
|
1914
1901
|
// if they have selected to clear Filters on startup then do it
|
|
1915
1902
|
if (this.adaptableOptions.filterOptions.clearFiltersOnStartUp) {
|
|
1916
|
-
this.logger.warn('Clearing
|
|
1903
|
+
this.logger.warn('Clearing saved filters (clearFiltersOnStartUp is enabled).');
|
|
1917
1904
|
this.api.filterApi.clearAllFilters();
|
|
1918
1905
|
}
|
|
1919
1906
|
// if they have selected to clear searches on startup then do it
|
|
1920
1907
|
if (this.adaptableOptions.quickSearchOptions.clearQuickSearchOnStartUp) {
|
|
1921
|
-
this.logger.warn('Clearing
|
|
1908
|
+
this.logger.warn('Clearing saved Quick Search (clearQuickSearchOnStartUp is enabled).');
|
|
1922
1909
|
this.api.quickSearchApi.clearQuickSearch();
|
|
1923
1910
|
}
|
|
1924
1911
|
}
|
|
@@ -2147,7 +2134,7 @@ You need to define at least one Layout!`);
|
|
|
2147
2134
|
}
|
|
2148
2135
|
}
|
|
2149
2136
|
_updateColumnModelAndRefreshGridNow() {
|
|
2150
|
-
this.logger.info(
|
|
2137
|
+
this.logger.info('Updating column model and refreshing grid.');
|
|
2151
2138
|
this.deriveAdaptableColumnStateFromAgGrid();
|
|
2152
2139
|
this.agGridColumnAdapter.setupColumns();
|
|
2153
2140
|
this.redrawBody();
|
|
@@ -2173,7 +2160,7 @@ You need to define at least one Layout!`);
|
|
|
2173
2160
|
this.agGridAdapter.getAgGridApi().redrawRows(redrawRowsParams);
|
|
2174
2161
|
}
|
|
2175
2162
|
catch (ex) {
|
|
2176
|
-
this.logger.consoleError('AG Grid redrawRows
|
|
2163
|
+
this.logger.consoleError('AG Grid redrawRows failed to locate some row nodes.', rowNodes, ex);
|
|
2177
2164
|
}
|
|
2178
2165
|
}
|
|
2179
2166
|
redrawRow(rowNode) {
|
|
@@ -2583,14 +2570,14 @@ You need to define at least one Layout!`);
|
|
|
2583
2570
|
}
|
|
2584
2571
|
autoSizeColumns(columnIds) {
|
|
2585
2572
|
if (!this.agGridModulesAdapter.isAgGridModuleRegistered('ColumnAutoSizeModule')) {
|
|
2586
|
-
this.logger.consoleError(`
|
|
2573
|
+
this.logger.consoleError(`Auto-sizing columns [${columnIds}] requires the AG Grid "ColumnAutoSizeModule". Please register this module.`);
|
|
2587
2574
|
return;
|
|
2588
2575
|
}
|
|
2589
2576
|
this.layoutManager.autoSizeColumns(columnIds);
|
|
2590
2577
|
}
|
|
2591
2578
|
autoSizeAllColumns() {
|
|
2592
2579
|
if (!this.agGridModulesAdapter.isAgGridModuleRegistered('ColumnAutoSizeModule')) {
|
|
2593
|
-
this.logger.consoleError(
|
|
2580
|
+
this.logger.consoleError('Auto-sizing all columns requires the AG Grid "ColumnAutoSizeModule". Please register this module.');
|
|
2594
2581
|
return;
|
|
2595
2582
|
}
|
|
2596
2583
|
const agGridApi = this.agGridAdapter.getAgGridApi();
|
|
@@ -2748,7 +2735,7 @@ You need to define at least one Layout!`);
|
|
|
2748
2735
|
customInFilterValuesResult = await customInFilterValues(customInFilterValuesContext);
|
|
2749
2736
|
}
|
|
2750
2737
|
catch (error) {
|
|
2751
|
-
this.logger.consoleError(
|
|
2738
|
+
this.logger.consoleError('Failed to retrieve custom filter values.', column, error);
|
|
2752
2739
|
}
|
|
2753
2740
|
return customInFilterValuesResult;
|
|
2754
2741
|
}
|
|
@@ -2788,7 +2775,7 @@ You need to define at least one Layout!`);
|
|
|
2788
2775
|
customDistinctValues = await customEditColumnValues(customEditValuesContext);
|
|
2789
2776
|
}
|
|
2790
2777
|
catch (error) {
|
|
2791
|
-
this.logger.consoleError(
|
|
2778
|
+
this.logger.consoleError('Failed to retrieve custom edit values.', column, error);
|
|
2792
2779
|
}
|
|
2793
2780
|
return customDistinctValues ?? [];
|
|
2794
2781
|
}
|
|
@@ -3243,7 +3230,7 @@ You need to define at least one Layout!`);
|
|
|
3243
3230
|
if (this.getAgGridRowModelType() !== 'clientSide') {
|
|
3244
3231
|
// only in client-side row model can we loop through filtered&sorted rows
|
|
3245
3232
|
// see https://www.ag-grid.com/javascript-data-grid/accessing-data/#iterating-rows
|
|
3246
|
-
this.logger.warn('
|
|
3233
|
+
this.logger.warn('forAllVisibleRowNodesDo() is only supported with client-side row model. Falling back to forAllRowNodesDo().');
|
|
3247
3234
|
return this.forAllRowNodesDo(func, config);
|
|
3248
3235
|
}
|
|
3249
3236
|
this.agGridAdapter.getAgGridApi().forEachNodeAfterFilterAndSort((rowNode, rowIndex) => {
|
|
@@ -3295,14 +3282,14 @@ You need to define at least one Layout!`);
|
|
|
3295
3282
|
}
|
|
3296
3283
|
selectNode(rowNode, clearSelection) {
|
|
3297
3284
|
if (!rowNode) {
|
|
3298
|
-
this.logger.error('
|
|
3285
|
+
this.logger.error('Cannot select: row node is null.');
|
|
3299
3286
|
return;
|
|
3300
3287
|
}
|
|
3301
3288
|
rowNode.setSelected(true, clearSelection);
|
|
3302
3289
|
}
|
|
3303
3290
|
deSelectNode(rowNode, clearSelection) {
|
|
3304
3291
|
if (!rowNode) {
|
|
3305
|
-
this.logger.error('
|
|
3292
|
+
this.logger.error('Cannot deselect: row node is null.');
|
|
3306
3293
|
return;
|
|
3307
3294
|
}
|
|
3308
3295
|
rowNode.setSelected(false, clearSelection);
|
|
@@ -3390,7 +3377,7 @@ You need to define at least one Layout!`);
|
|
|
3390
3377
|
}
|
|
3391
3378
|
showChart(chartDefinition, container) {
|
|
3392
3379
|
if (!this.isReady) {
|
|
3393
|
-
this.logger.consoleError('
|
|
3380
|
+
this.logger.consoleError('Cannot call showChart before Adaptable is fully initialized.');
|
|
3394
3381
|
return null;
|
|
3395
3382
|
}
|
|
3396
3383
|
/**
|
|
@@ -3411,7 +3398,7 @@ You need to define at least one Layout!`);
|
|
|
3411
3398
|
}
|
|
3412
3399
|
updateChart(chart) {
|
|
3413
3400
|
if (!chart.Model) {
|
|
3414
|
-
this.logger.consoleError(`
|
|
3401
|
+
this.logger.consoleError(`Cannot update chart "${chart.Name}": the chart definition is missing the required Model property.`);
|
|
3415
3402
|
return;
|
|
3416
3403
|
}
|
|
3417
3404
|
const upgradableProperties = {
|
|
@@ -3423,12 +3410,21 @@ You need to define at least one Layout!`);
|
|
|
3423
3410
|
suppressChartRanges: Boolean(chart.Model.suppressChartRanges),
|
|
3424
3411
|
aggFunc: chart.Model.aggFunc,
|
|
3425
3412
|
};
|
|
3413
|
+
// Skip the AG Grid API call if the upgradable properties haven't changed
|
|
3414
|
+
// to avoid unnecessary chartOptionsChanged events (see #ag_grid_update_chart_loop)
|
|
3415
|
+
const currentModel = this.getChartModels().find((model) => model.chartId === chart.Model.chartId);
|
|
3416
|
+
if (currentModel &&
|
|
3417
|
+
Boolean(currentModel.unlinkChart) === upgradableProperties.unlinkChart &&
|
|
3418
|
+
Boolean(currentModel.suppressChartRanges) === upgradableProperties.suppressChartRanges &&
|
|
3419
|
+
currentModel.aggFunc === upgradableProperties.aggFunc) {
|
|
3420
|
+
return;
|
|
3421
|
+
}
|
|
3426
3422
|
// see also #ag_grid_update_chart_loop
|
|
3427
3423
|
this.agGridAdapter.getAgGridApi().updateChart(upgradableProperties);
|
|
3428
3424
|
}
|
|
3429
3425
|
getChartModels() {
|
|
3430
3426
|
if (!this.isReady) {
|
|
3431
|
-
this.logger.consoleError('
|
|
3427
|
+
this.logger.consoleError('Cannot call getChartModels before Adaptable is fully initialized.');
|
|
3432
3428
|
return [];
|
|
3433
3429
|
}
|
|
3434
3430
|
return this.agGridAdapter.getAgGridApi().getChartModels();
|
|
@@ -3462,7 +3458,7 @@ You need to define at least one Layout!`);
|
|
|
3462
3458
|
}
|
|
3463
3459
|
setAgGridQuickSearch(searchText) {
|
|
3464
3460
|
if (!this.agGridModulesAdapter.isAgGridModuleRegistered('QuickFilterModule')) {
|
|
3465
|
-
this.logger.consoleError(
|
|
3461
|
+
this.logger.consoleError('Quick Search requires the AG Grid "QuickFilterModule". Please register this module to enable Quick Search.');
|
|
3466
3462
|
return;
|
|
3467
3463
|
}
|
|
3468
3464
|
this.agGridAdapter.setGridOption('quickFilterText', searchText);
|
|
@@ -3472,7 +3468,7 @@ You need to define at least one Layout!`);
|
|
|
3472
3468
|
}
|
|
3473
3469
|
setAgGridFindSearchValue(searchText) {
|
|
3474
3470
|
if (!this.agGridModulesAdapter.isAgGridModuleRegistered('FindModule')) {
|
|
3475
|
-
this.logger.consoleError(
|
|
3471
|
+
this.logger.consoleError('Find Search requires the AG Grid "FindModule". Please register this module to enable Find Search.');
|
|
3476
3472
|
return;
|
|
3477
3473
|
}
|
|
3478
3474
|
this.agGridAdapter.setGridOption('findSearchValue', searchText);
|
|
@@ -4001,7 +3997,7 @@ You need to define at least one Layout!`);
|
|
|
4001
3997
|
cellDataChangedInfos.forEach((cellDataChangedInfo) => {
|
|
4002
3998
|
// if a Cell Data Change is undone, log to the Console
|
|
4003
3999
|
if (cellDataChangedInfo.trigger === 'undo') {
|
|
4004
|
-
this.logger.info(`
|
|
4000
|
+
this.logger.info(`Data change reverted: column="${cellDataChangedInfo.column}", primaryKey="${cellDataChangedInfo.primaryKeyValue}", from=${cellDataChangedInfo.newValue} to=${cellDataChangedInfo.oldValue}`);
|
|
4005
4001
|
}
|
|
4006
4002
|
// For Changes except Aggregations, reset cell selection if required
|
|
4007
4003
|
if (cellDataChangedInfo.trigger === 'edit' ||
|
|
@@ -4206,7 +4202,7 @@ You need to define at least one Layout!`);
|
|
|
4206
4202
|
this.api.layoutApi.createOrUpdateLayout(layout);
|
|
4207
4203
|
}
|
|
4208
4204
|
refreshAdaptableAfterLayoutChange(layout) {
|
|
4209
|
-
this.logger.info('
|
|
4205
|
+
this.logger.info('Refreshing Adaptable after layout change.');
|
|
4210
4206
|
const prevLayoutForRefresh = this.__prevLayoutForRefresh || this.api.layoutApi.getCurrentLayout();
|
|
4211
4207
|
// see #on-regroup-expect-group-column-to-be-recomputed-and-setup-properly
|
|
4212
4208
|
const rowGroupsChanged = this.isRowGroupDifferentInLayout(prevLayoutForRefresh, layout);
|
|
@@ -4252,7 +4248,7 @@ You need to define at least one Layout!`);
|
|
|
4252
4248
|
.forEach((colType) => {
|
|
4253
4249
|
const newValidCellDataType = mapOldTypeToDataType(colType);
|
|
4254
4250
|
if (newValidCellDataType) {
|
|
4255
|
-
this.logger.consoleWarn(`Column ${columnDefinition.colId ?? columnDefinition.field}
|
|
4251
|
+
this.logger.consoleWarn(`Column "${columnDefinition.colId ?? columnDefinition.field}" uses deprecated type "${colType}"${newValidCellDataType !== 'unknown' ? `. Use colDef.cellDataType="${newValidCellDataType}" instead.` : '. This type is no longer supported.'}`);
|
|
4256
4252
|
}
|
|
4257
4253
|
});
|
|
4258
4254
|
});
|
|
@@ -145,7 +145,7 @@ export class AgGridAdapter {
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
options['columnDefs'] = colDefsWithSpecialColumns;
|
|
148
|
-
self.logger.info(`Added
|
|
148
|
+
self.logger.info(`Added special columns on GridOptions.columnDefs update (source="${source}").`);
|
|
149
149
|
}
|
|
150
150
|
// `context`
|
|
151
151
|
const passedContext = options.context;
|
|
@@ -165,7 +165,7 @@ export class AgGridAdapter {
|
|
|
165
165
|
}
|
|
166
166
|
const agGridColumnFilterService = this.DANGER_getPrivateAgGridBeans()?.colFilter;
|
|
167
167
|
if (!agGridColumnFilterService) {
|
|
168
|
-
this.logger.consoleError('
|
|
168
|
+
this.logger.consoleError('Failed to initialize ColumnFilterService. Filtering and related features will not function correctly.');
|
|
169
169
|
return;
|
|
170
170
|
}
|
|
171
171
|
const self = this;
|
|
@@ -211,7 +211,7 @@ export class AgGridAdapter {
|
|
|
211
211
|
DANGER_getPrivateAgGridBeans() {
|
|
212
212
|
const beans = DANGER_AG_GRID_BEANS_MAP[this._agGridId];
|
|
213
213
|
if (!beans) {
|
|
214
|
-
this.logger.consoleError('
|
|
214
|
+
this.logger.consoleError('Failed to access AG Grid internal beans. Adaptable will not function correctly.');
|
|
215
215
|
}
|
|
216
216
|
return beans;
|
|
217
217
|
}
|
|
@@ -355,7 +355,7 @@ export class AgGridAdapter {
|
|
|
355
355
|
if (isEndRowPin) {
|
|
356
356
|
shouldIncludeRange = false;
|
|
357
357
|
}
|
|
358
|
-
this.logger.consoleWarn('
|
|
358
|
+
this.logger.consoleWarn('Pinned rows cannot be selected in AG Grid.');
|
|
359
359
|
}
|
|
360
360
|
if (shouldIncludeRange) {
|
|
361
361
|
const y1 = Math.min(rangeSelection.startRow.rowIndex, rangeSelection.endRow.rowIndex);
|
|
@@ -525,7 +525,7 @@ export class AgGridAdapter {
|
|
|
525
525
|
deriveAdaptableColumnDataType(agColumn, logWarning = true) {
|
|
526
526
|
// Some columns can have no ID or Title. we return string as a consequence but it needs testing
|
|
527
527
|
if (!agColumn) {
|
|
528
|
-
this.logger.warn(
|
|
528
|
+
this.logger.warn('Column is undefined. Defaulting data type to "text".');
|
|
529
529
|
return 'text';
|
|
530
530
|
}
|
|
531
531
|
if (this.adaptableApi.columnApi.isAutoRowGroupColumnForSingle(agColumn.getId())) {
|
|
@@ -568,7 +568,7 @@ export class AgGridAdapter {
|
|
|
568
568
|
let row = this.getAgGridApi().getDisplayedRowAtIndex(0);
|
|
569
569
|
if (row == null) {
|
|
570
570
|
// possible that there will be no data.
|
|
571
|
-
this.logger.consoleError(`No data in grid
|
|
571
|
+
this.logger.consoleError(`No data in grid. Returning type "unknown" for column "${agColumn.getColId()}". This will affect features such as Filters and Column Formats.`);
|
|
572
572
|
return 'unknown';
|
|
573
573
|
}
|
|
574
574
|
// // if it's a group we need the content of the group
|
|
@@ -610,7 +610,7 @@ export class AgGridAdapter {
|
|
|
610
610
|
dataType = arrayDataType;
|
|
611
611
|
}
|
|
612
612
|
}
|
|
613
|
-
this.logger.consoleWarn(`No
|
|
613
|
+
this.logger.consoleWarn(`No explicit type for column "${agColumn.getColId()}". Inferred type from first row value: "${dataType}".`);
|
|
614
614
|
return dataType;
|
|
615
615
|
}
|
|
616
616
|
isColumnReadonly(colDef) {
|
|
@@ -796,7 +796,7 @@ export class AgGridAdapter {
|
|
|
796
796
|
colDef.colId = colDef.field;
|
|
797
797
|
}
|
|
798
798
|
if (!colDef.colId) {
|
|
799
|
-
this.logger.warn('
|
|
799
|
+
this.logger.warn('Column definition is missing colId. Provide either a "field" or "colId" property.', colDef);
|
|
800
800
|
}
|
|
801
801
|
};
|
|
802
802
|
this.patchColDefs(colDefs, assignColId);
|
|
@@ -71,6 +71,7 @@ export declare class AgGridColumnAdapter {
|
|
|
71
71
|
private getAlertCellStyle;
|
|
72
72
|
private getFlashingCellStyle;
|
|
73
73
|
private getCellHighlightStyle;
|
|
74
|
+
private getColumnHighlightStyle;
|
|
74
75
|
isColGroupDef(columnDefinition: ColDef | ColGroupDef): columnDefinition is ColGroupDef;
|
|
75
76
|
private getRelevantFormatColumnHeaderStyles;
|
|
76
77
|
}
|
|
@@ -398,6 +398,7 @@ export class AgGridColumnAdapter {
|
|
|
398
398
|
...this.getAlertCellStyle(gridCell, params),
|
|
399
399
|
...this.getFlashingCellStyle(gridCell, params),
|
|
400
400
|
...this.getCellHighlightStyle(gridCell, params),
|
|
401
|
+
...this.getColumnHighlightStyle(gridCell, params),
|
|
401
402
|
};
|
|
402
403
|
return normalizeStyleForAgGrid(result);
|
|
403
404
|
};
|
|
@@ -655,7 +656,7 @@ export class AgGridColumnAdapter {
|
|
|
655
656
|
if (typeof original_filter !== 'boolean' &&
|
|
656
657
|
typeof original_filter?.handler !== 'function' &&
|
|
657
658
|
!pivotMode) {
|
|
658
|
-
this.adaptableApi.consoleError(`Column
|
|
659
|
+
this.adaptableApi.consoleError(`Column "${colId}" has a custom filter in colDef.filter, but Adaptable filtering only accepts boolean (true/false) values for this property.`);
|
|
659
660
|
return false;
|
|
660
661
|
}
|
|
661
662
|
return {
|
|
@@ -1289,14 +1290,24 @@ export class AgGridColumnAdapter {
|
|
|
1289
1290
|
: flashingCell.flashingCellDefinition.NeutralChangeStyle) ?? {});
|
|
1290
1291
|
}
|
|
1291
1292
|
getCellHighlightStyle(gridCell, params) {
|
|
1292
|
-
const
|
|
1293
|
+
const cellHighlight = this.adaptableApi.internalApi
|
|
1293
1294
|
.getInternalState()
|
|
1294
1295
|
.CellHighlightInfo.find((cellHighlightInfo) => {
|
|
1295
1296
|
return (gridCell.column.columnId === cellHighlightInfo.columnId &&
|
|
1296
1297
|
cellHighlightInfo.primaryKeyValue === gridCell.primaryKeyValue);
|
|
1297
1298
|
});
|
|
1298
|
-
if (
|
|
1299
|
-
return convertAdaptableStyleToCSS(
|
|
1299
|
+
if (cellHighlight) {
|
|
1300
|
+
return convertAdaptableStyleToCSS(cellHighlight.highlightStyle);
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
getColumnHighlightStyle(gridCell, params) {
|
|
1304
|
+
const columnHighlight = this.adaptableApi.internalApi
|
|
1305
|
+
.getInternalState()
|
|
1306
|
+
.ColumnHighlightInfo.find((columnHighlightInfo) => {
|
|
1307
|
+
return (gridCell.column.columnId === columnHighlightInfo.columnId);
|
|
1308
|
+
});
|
|
1309
|
+
if (columnHighlight) {
|
|
1310
|
+
return convertAdaptableStyleToCSS(columnHighlight.highlightStyle);
|
|
1300
1311
|
}
|
|
1301
1312
|
}
|
|
1302
1313
|
isColGroupDef(columnDefinition) {
|
|
@@ -66,7 +66,7 @@ export class AgGridExportAdapter {
|
|
|
66
66
|
try {
|
|
67
67
|
if (showProgressIndicator) {
|
|
68
68
|
this.adaptableApi.userInterfaceApi.showProgressIndicator({
|
|
69
|
-
text:
|
|
69
|
+
text: `Exporting ${report.Name}...`,
|
|
70
70
|
});
|
|
71
71
|
// waitForTimeout required to give the ProgressIndicator rendering a head-start (see rAF in ProgressIndicator implementation)
|
|
72
72
|
// see #raf_progress_indicator
|
|
@@ -120,7 +120,7 @@ export class AgGridExportAdapter {
|
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
122
|
catch (error) {
|
|
123
|
-
this.logger.consoleError(`
|
|
123
|
+
this.logger.consoleError(`Export failed: report="${report.Name}", format="${format}", destination="${config.destination}".`, error.stack);
|
|
124
124
|
}
|
|
125
125
|
finally {
|
|
126
126
|
/**
|
|
@@ -142,7 +142,7 @@ export class AgGridExportAdapter {
|
|
|
142
142
|
const exportContext = this.buildExportProcessContext(config);
|
|
143
143
|
let exportParams = this.buildExportParams(exportContext);
|
|
144
144
|
if (typeof config?.customExportParams === 'function') {
|
|
145
|
-
this.logger.info(`
|
|
145
|
+
this.logger.info(`Applying custom export params: report="${config.report.Name}", format="${config.format}".`);
|
|
146
146
|
exportParams = config.customExportParams(exportParams);
|
|
147
147
|
}
|
|
148
148
|
exportContext.exportedColumnIds = exportParams.columnKeys;
|
|
@@ -508,7 +508,7 @@ export class AgGridExportAdapter {
|
|
|
508
508
|
const columnId = column.getId();
|
|
509
509
|
const adaptableColumn = getAdaptableColumnWithColumnId(columnId);
|
|
510
510
|
if (!adaptableColumn) {
|
|
511
|
-
this.logger.warn(`Export
|
|
511
|
+
this.logger.warn(`Export styling: column "${columnId}" not found in Adaptable.`);
|
|
512
512
|
return;
|
|
513
513
|
}
|
|
514
514
|
let headerClassParams = {
|
|
@@ -571,7 +571,7 @@ export class AgGridExportAdapter {
|
|
|
571
571
|
const columnId = column.getId();
|
|
572
572
|
const adaptableColumn = getAdaptableColumnWithColumnId(columnId);
|
|
573
573
|
if (!adaptableColumn) {
|
|
574
|
-
this.logger.warn(`Export
|
|
574
|
+
this.logger.warn(`Export styling: column "${columnId}" not found in Adaptable.`);
|
|
575
575
|
return;
|
|
576
576
|
}
|
|
577
577
|
const isDateCellExportedAsFormattedValue = this.isDateCellExportedAsFormattedValue(adaptableColumn, exportContext);
|
|
@@ -101,9 +101,9 @@ export class AgGridThemeAdapter {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
else {
|
|
104
|
-
this.logger.warn('
|
|
104
|
+
this.logger.warn('AG Grid container not found. Defaulting to ag-theme-balham for the light theme.');
|
|
105
105
|
}
|
|
106
|
-
this.logger.warn('No ag-theme
|
|
106
|
+
this.logger.warn('No ag-theme-* class found on the grid container. Defaulting to ag-theme-balham.');
|
|
107
107
|
// fallback to the default light theme
|
|
108
108
|
return 'ag-theme-balham';
|
|
109
109
|
}
|
|
@@ -152,7 +152,7 @@ const OverlayTrigger = React.forwardRef((givenProps, ref) => {
|
|
|
152
152
|
target = targetProp(target);
|
|
153
153
|
}
|
|
154
154
|
if (!target) {
|
|
155
|
-
adaptable.logger.warn('
|
|
155
|
+
adaptable.logger.warn('OverlayTrigger target not found. Ensure a child element is rendered inside the OverlayTrigger component.');
|
|
156
156
|
return;
|
|
157
157
|
}
|
|
158
158
|
targetRef.current = target;
|