@adaptabletools/adaptable-cjs 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.
Files changed (122) hide show
  1. package/index.css +0 -3
  2. package/index.css.map +1 -1
  3. package/package.json +1 -1
  4. package/src/AdaptableOptions/CustomSortOptions.d.ts +1 -2
  5. package/src/AdaptableState/AlertState.d.ts +6 -3
  6. package/src/AdaptableState/ChartingState.d.ts +5 -5
  7. package/src/AdaptableState/Common/AdaptableObject.d.ts +4 -9
  8. package/src/AdaptableState/Common/BaseContext.d.ts +2 -0
  9. package/src/AdaptableState/Common/ColumnHighlightInfo.d.ts +18 -0
  10. package/src/AdaptableState/Common/ColumnHighlightInfo.js +2 -0
  11. package/src/AdaptableState/Common/NamedObject.d.ts +10 -0
  12. package/src/AdaptableState/Common/NamedObject.js +2 -0
  13. package/src/AdaptableState/Common/RowSummary.d.ts +1 -1
  14. package/src/AdaptableState/Common/Schedule.d.ts +7 -3
  15. package/src/AdaptableState/Common/SuspendableObject.d.ts +10 -0
  16. package/src/AdaptableState/Common/SuspendableObject.js +2 -0
  17. package/src/AdaptableState/CustomSortState.d.ts +6 -2
  18. package/src/AdaptableState/DashboardState.d.ts +3 -3
  19. package/src/AdaptableState/ExportState.d.ts +3 -3
  20. package/src/AdaptableState/FlashingCellState.d.ts +6 -2
  21. package/src/AdaptableState/FormatColumnState.d.ts +6 -2
  22. package/src/AdaptableState/InternalState.d.ts +2 -0
  23. package/src/AdaptableState/LayoutState.d.ts +3 -3
  24. package/src/AdaptableState/NamedQueryState.d.ts +3 -3
  25. package/src/AdaptableState/PlusMinusState.d.ts +6 -2
  26. package/src/AdaptableState/ShortcutState.d.ts +6 -2
  27. package/src/AdaptableState/StyledColumnState.d.ts +1 -1
  28. package/src/AdaptableState/ThemeState.d.ts +3 -3
  29. package/src/Api/AlertApi.d.ts +6 -0
  30. package/src/Api/CustomSortApi.d.ts +6 -0
  31. package/src/Api/FlashingCellApi.d.ts +6 -0
  32. package/src/Api/FormatColumnApi.d.ts +10 -4
  33. package/src/Api/GridApi.d.ts +18 -3
  34. package/src/Api/Implementation/AlertApiImpl.d.ts +1 -0
  35. package/src/Api/Implementation/AlertApiImpl.js +3 -0
  36. package/src/Api/Implementation/ChartingApiImpl.js +2 -2
  37. package/src/Api/Implementation/CustomSortApiImpl.d.ts +1 -0
  38. package/src/Api/Implementation/CustomSortApiImpl.js +3 -0
  39. package/src/Api/Implementation/FlashingCellApiImpl.d.ts +1 -0
  40. package/src/Api/Implementation/FlashingCellApiImpl.js +3 -0
  41. package/src/Api/Implementation/FormatColumnApiImpl.d.ts +6 -5
  42. package/src/Api/Implementation/FormatColumnApiImpl.js +6 -5
  43. package/src/Api/Implementation/GridApiImpl.d.ts +4 -0
  44. package/src/Api/Implementation/GridApiImpl.js +14 -0
  45. package/src/Api/Implementation/LayoutApiImpl.js +1 -1
  46. package/src/Api/Implementation/NamedQueryApiImpl.js +2 -2
  47. package/src/Api/Implementation/PlusMinusApiImpl.d.ts +1 -0
  48. package/src/Api/Implementation/PlusMinusApiImpl.js +3 -0
  49. package/src/Api/Implementation/ScheduleApiImpl.d.ts +1 -0
  50. package/src/Api/Implementation/ScheduleApiImpl.js +3 -0
  51. package/src/Api/Implementation/ShortcutApiImpl.d.ts +1 -0
  52. package/src/Api/Implementation/ShortcutApiImpl.js +3 -0
  53. package/src/Api/Implementation/SystemStatusApiImpl.js +4 -4
  54. package/src/Api/Internal/CalculatedColumnInternalApi.js +2 -2
  55. package/src/Api/Internal/FreeTextColumnInternalApi.js +2 -2
  56. package/src/Api/Internal/LayoutInternalApi.js +1 -1
  57. package/src/Api/Internal/NamedQueryInternalApi.js +4 -4
  58. package/src/Api/PlusMinusApi.d.ts +6 -0
  59. package/src/Api/ScheduleApi.d.ts +6 -0
  60. package/src/Api/ShortcutApi.d.ts +6 -0
  61. package/src/Redux/ActionsReducers/FormatColumnRedux.d.ts +8 -0
  62. package/src/Redux/ActionsReducers/FormatColumnRedux.js +17 -1
  63. package/src/Redux/ActionsReducers/InternalRedux.d.ts +15 -0
  64. package/src/Redux/ActionsReducers/InternalRedux.js +42 -3
  65. package/src/Redux/Store/AdaptableStore.js +39 -16
  66. package/src/Strategy/BulkUpdateModule.js +8 -8
  67. package/src/Strategy/PlusMinusModule.js +1 -1
  68. package/src/Strategy/QuickSearchModule.js +1 -1
  69. package/src/Strategy/SettingsPanelModule.js +11 -7
  70. package/src/Strategy/SmartEditModule.js +10 -10
  71. package/src/Utilities/Services/DataService.js +1 -1
  72. package/src/Utilities/Services/Fdc3Service.js +4 -4
  73. package/src/Utilities/Services/ModuleService.js +1 -3
  74. package/src/Utilities/Services/ThemeService.js +2 -6
  75. package/src/Utilities/Services/ValidationService.js +1 -1
  76. package/src/Utilities/logDeprecation.js +3 -4
  77. package/src/View/Alert/Utilities/getDefaultAlertDefinition.d.ts +2 -2
  78. package/src/View/Alert/Wizard/isValidAlertRules.js +1 -1
  79. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +2 -2
  80. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +2 -2
  81. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -1
  82. package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +2 -2
  83. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +2 -2
  84. package/src/View/Components/CellPopup/index.js +1 -1
  85. package/src/View/Components/ColumnFilter/FloatingFilter.js +41 -3
  86. package/src/View/Components/ColumnFilter/components/ColumnFilterMenu.js +54 -2
  87. package/src/View/Components/EntityRulesEditor/Utilities.js +5 -5
  88. package/src/View/Components/NewScopeComponent.js +3 -3
  89. package/src/View/Components/Popups/AdaptablePopupConfirmation.js +1 -1
  90. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +3 -3
  91. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +1 -1
  92. package/src/View/FlashingCell/Wizard/isValidFlashingCellRules.js +1 -1
  93. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +1 -1
  94. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +3 -3
  95. package/src/View/Layout/LayoutViewPanel.js +1 -1
  96. package/src/View/Layout/Wizard/sections/AggregationsSection.js +1 -1
  97. package/src/View/Layout/Wizard/sections/FilterSection.js +1 -1
  98. package/src/View/Layout/Wizard/sections/GridFilterSection.js +1 -1
  99. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +3 -3
  100. package/src/View/Layout/Wizard/sections/RowSummarySection.js +1 -1
  101. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +2 -2
  102. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +5 -5
  103. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.d.ts +1 -1
  104. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.js +11 -11
  105. package/src/View/StateManagement/handleExportState.js +1 -1
  106. package/src/View/StyledColumn/Wizard/StyledColumnWizardColumnSection.js +1 -1
  107. package/src/agGrid/AdaptableAgGrid.js +47 -51
  108. package/src/agGrid/AgGridAdapter.js +8 -8
  109. package/src/agGrid/AgGridColumnAdapter.d.ts +1 -0
  110. package/src/agGrid/AgGridColumnAdapter.js +15 -4
  111. package/src/agGrid/AgGridExportAdapter.js +5 -5
  112. package/src/agGrid/AgGridThemeAdapter.js +2 -2
  113. package/src/components/OverlayTrigger/index.js +1 -1
  114. package/src/components/Select/Select.js +77 -14
  115. package/src/env.js +2 -2
  116. package/src/metamodel/adaptable.metamodel.d.ts +25 -18
  117. package/src/metamodel/adaptable.metamodel.js +1 -1
  118. package/src/migration/AdaptableUpgradeHelper.js +2 -2
  119. package/src/migration/VersionUpgrade17.js +4 -4
  120. package/src/migration/VersionUpgrade20.js +4 -4
  121. package/src/types.d.ts +2 -2
  122. package/tsconfig.cjs.tsbuildinfo +1 -1
@@ -7,50 +7,50 @@ const StringExtensions_1 = tslib_1.__importDefault(require("../../../../Utilitie
7
7
  const isSettingsValid = (schedule, api) => {
8
8
  // Validate Name - mandatory and unique
9
9
  if (!schedule.Name?.trim()) {
10
- return 'Name is required';
10
+ return 'A name is required.';
11
11
  }
12
12
  const allSchedules = api.scheduleApi.getSchedules();
13
13
  const isDuplicateName = allSchedules.some((s) => s.Name === schedule.Name && s.Uuid !== schedule.Uuid);
14
14
  if (isDuplicateName) {
15
- return 'A Schedule with this name already exists';
15
+ return 'A Schedule with this name already exists.';
16
16
  }
17
17
  if (schedule.ScheduleType === Enums_1.ScheduleType.Reminder) {
18
18
  const reminder = schedule;
19
19
  if (!reminder.MessageType) {
20
- return 'Message type not selected';
20
+ return 'Please select a message type.';
21
21
  }
22
22
  if (StringExtensions_1.default.IsNullOrEmpty(reminder?.Header)) {
23
- return 'Reminder header not specified';
23
+ return 'A reminder header is required.';
24
24
  }
25
25
  if (StringExtensions_1.default.IsNullOrEmpty(reminder?.Message)) {
26
- return 'Reminder message not specified';
26
+ return 'A reminder message is required.';
27
27
  }
28
28
  }
29
29
  if (schedule.ScheduleType === Enums_1.ScheduleType.Report) {
30
30
  const report = schedule;
31
31
  if (StringExtensions_1.default.IsNullOrEmpty(report?.ReportName)) {
32
- return 'Report source not specified';
32
+ return 'Please select a report.';
33
33
  }
34
34
  if (StringExtensions_1.default.IsNullOrEmpty(report?.ReportFormat)) {
35
- return 'Report format not selected';
35
+ return 'Please select a report format.';
36
36
  }
37
37
  }
38
38
  if (schedule.ScheduleType === Enums_1.ScheduleType.ipushpull) {
39
39
  const ipushpull = schedule;
40
40
  if (StringExtensions_1.default.IsNullOrEmpty(ipushpull?.IPushPullReport?.ReportName)) {
41
- return 'Report not selected';
41
+ return 'Please select a report.';
42
42
  }
43
43
  if (StringExtensions_1.default.IsNullOrEmpty(ipushpull?.IPushPullReport?.Folder)) {
44
- return 'Report folder not selected';
44
+ return 'Please select a report folder.';
45
45
  }
46
46
  if (StringExtensions_1.default.IsNullOrEmpty(ipushpull?.IPushPullReport?.Page)) {
47
- return 'Report page not selected';
47
+ return 'Please select a report page.';
48
48
  }
49
49
  }
50
50
  if (schedule.ScheduleType === Enums_1.ScheduleType.OpenFin) {
51
51
  const openfin = schedule;
52
52
  if (StringExtensions_1.default.IsNullOrEmpty(openfin?.OpenFinReport?.ReportName)) {
53
- return 'Report not selected';
53
+ return 'Please select a report.';
54
54
  }
55
55
  }
56
56
  return true;
@@ -10,7 +10,7 @@ const handleExportState = (type, name, state, api) => {
10
10
  Helper_1.default.copyToClipboard(stringifiedState);
11
11
  break;
12
12
  case 'Console':
13
- api.consoleLog('Adaptable State: ', state);
13
+ api.consoleLog('Adaptable state:', state);
14
14
  break;
15
15
  case 'JSON':
16
16
  const jsonFileName = name + '.json';
@@ -20,7 +20,7 @@ const renderStyledColumnColumnSummary = (data) => {
20
20
  exports.renderStyledColumnColumnSummary = renderStyledColumnColumnSummary;
21
21
  const isValidStyledColumnColumn = (data) => {
22
22
  if (!data.ColumnId) {
23
- return 'You have to select a Column for Styled Column';
23
+ return 'Please select a column for the Styled Column.';
24
24
  }
25
25
  return true;
26
26
  };
@@ -363,7 +363,7 @@ class AdaptableAgGrid {
363
363
  this.adaptableOptions = this.normalizeAdaptableOptions(this.adaptableOptions);
364
364
  const { showLoadingScreen, loadingScreenDelay, loadingScreenText, loadingScreenTitle } = this.adaptableOptions.userInterfaceOptions.loadingScreenOptions;
365
365
  if (showLoadingScreen) {
366
- this.logger.info(`Show Loading Screen`);
366
+ this.logger.info('Showing loading screen');
367
367
  // it's important to use ensureLoadingScreenPortalElement
368
368
  // and not ensurePortalElement, because multiple adaptable instances share the same portal element
369
369
  // so when displaying the second one, the react root associated to the portal element
@@ -379,7 +379,7 @@ class AdaptableAgGrid {
379
379
  }), portalElement);
380
380
  }
381
381
  else {
382
- this.logger.consoleError(`Adaptable failed to show the loading screen!`);
382
+ this.logger.consoleError('Failed to create loading screen portal element.');
383
383
  }
384
384
  }
385
385
  this.forPlugins((plugin) => plugin.afterInitOptions(this, this.adaptableOptions));
@@ -438,7 +438,7 @@ class AdaptableAgGrid {
438
438
  // see #map_dateString_to_date
439
439
  this.agGridAdapter.patchColDefs(columnDefs, (colDef) => {
440
440
  if (colDef.cellDataType === 'dateString') {
441
- 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.`);
441
+ 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.`);
442
442
  colDef.cellDataType = 'date';
443
443
  }
444
444
  });
@@ -469,8 +469,8 @@ class AdaptableAgGrid {
469
469
  const agGridApi = await this.initializeAgGrid(gridOptions, config.modules, config.renderAgGridFrameworkComponent);
470
470
  if (agGridApi === false) {
471
471
  this.midwayDestroy();
472
- this.logger.consoleError(`Adaptable failed to initialize AG Grid!`);
473
- return Promise.reject('Adaptable failed to initialize AG Grid!');
472
+ this.logger.consoleError('Failed to initialize AG Grid.');
473
+ return Promise.reject('Failed to initialize AG Grid.');
474
474
  }
475
475
  this.layoutManager = new src_1.LayoutManager({
476
476
  gridApi: agGridApi,
@@ -495,7 +495,7 @@ class AdaptableAgGrid {
495
495
  this.layoutManager.onColumnDefsChanged(() => {
496
496
  this.updateColumnModelAndRefreshGrid();
497
497
  });
498
- this.logger.info(`Hide Loading Screen`);
498
+ this.logger.info('Hiding loading screen');
499
499
  this.unmountLoadingScreen?.();
500
500
  perfInitAgGrid.end();
501
501
  initAgGridMarker.end();
@@ -506,7 +506,7 @@ class AdaptableAgGrid {
506
506
  this.lifecycleState = 'agGridReady';
507
507
  this.api.entitlementApi.internalApi.setModulesAgGridDepsInfos();
508
508
  this.ModuleService.logMissingAgGridDepsInfos();
509
- this.logger.info(`Registered AG Grid modules (incl. dependent modules): `, this.agGridModulesAdapter.getAgGridRegisteredModuleNames().sort());
509
+ this.logger.info('Registered AG Grid modules (including dependents):', this.agGridModulesAdapter.getAgGridRegisteredModuleNames().sort());
510
510
  /**
511
511
  * At this point AG Grid is initialized!
512
512
  */
@@ -596,10 +596,7 @@ class AdaptableAgGrid {
596
596
  const layoutState = state.Layout;
597
597
  // ensure that at least one Layout has been provided
598
598
  if (!layoutState || !layoutState.Layouts?.length) {
599
- this.logger
600
- .consoleError(`You have not defined any Layout in your InitialState.Layout.Layouts[] state!
601
-
602
- You need to define at least one Layout!`);
599
+ this.logger.consoleError('No Layouts defined in InitialState.Layout.Layouts[]. At least one Layout is required.');
603
600
  }
604
601
  // ensure CurrentLayout is valid
605
602
  if (!layoutState.CurrentLayout ||
@@ -764,19 +761,12 @@ You need to define at least one Layout!`);
764
761
  }
765
762
  normalizeAdaptableOptions(adaptableOptions) {
766
763
  if (this.hasAutogeneratedPrimaryKey) {
767
- this.logger
768
- .warn(`Autogenerated primary key (adaptableOptions.autogeneratedPrimaryKey = TRUE) should be used only as a last resort,
769
- when no unique column is available, as it limits some Adaptable functionalities!
770
-
771
- For more details see: ${DocumentationLinkConstants_1.PrimaryKeyDocsLink}`);
764
+ this.logger.warn(`Autogenerated primary key is enabled (adaptableOptions.autogeneratedPrimaryKey = true). This should be a last resort as it limits some Adaptable features. See: ${DocumentationLinkConstants_1.PrimaryKeyDocsLink}`);
772
765
  this.adaptableOptions.primaryKey = GeneralConstants_1.AUTOGENERATED_PK_COLUMN;
773
766
  return this.adaptableOptions;
774
767
  }
775
768
  if (StringExtensions_1.default.IsNullOrEmpty(adaptableOptions.primaryKey)) {
776
- this.logger.consoleError(`AdaptableOptions.primaryKey is required and cannot be empty or null!
777
- As a fallback, you can set adaptableOptions.autogeneratedPrimaryKey = TRUE
778
-
779
- For more details see: ${DocumentationLinkConstants_1.PrimaryKeyDocsLink}`);
769
+ this.logger.consoleError(`adaptableOptions.primaryKey is required and must not be empty. As a fallback, set adaptableOptions.autogeneratedPrimaryKey = true. See: ${DocumentationLinkConstants_1.PrimaryKeyDocsLink}`);
780
770
  }
781
771
  return adaptableOptions;
782
772
  }
@@ -808,7 +798,7 @@ You need to define at least one Layout!`);
808
798
  */
809
799
  this.agGridOptionsService.setGridOptionsProperty(gridOptions, 'defaultColDef', (original_defaultColDef) => {
810
800
  if (original_defaultColDef?.headerValueGetter) {
811
- this.logger.warn(`defaultColDef.headerValueGetter and overrides the Adaptable custom header mechanism! We recommend using a ColumnOptions.columnHeader instead!`);
801
+ this.logger.warn('defaultColDef.headerValueGetter overrides the Adaptable header mechanism. Consider using ColumnOptions.columnHeader instead.');
812
802
  return original_defaultColDef;
813
803
  }
814
804
  // #customize_header
@@ -825,7 +815,7 @@ You need to define at least one Layout!`);
825
815
  */
826
816
  this.agGridOptionsService.setGridOptionsProperty(gridOptions, 'defaultColGroupDef', (original_defaultColGroupDef) => {
827
817
  if (original_defaultColGroupDef?.headerValueGetter) {
828
- this.logger.warn(`defaultColGroupDef.headerValueGetter and overrides the Adaptable custom header mechanism! We recommend using a ColumnOptions.tableColumnHeader instead!`);
818
+ this.logger.warn('defaultColGroupDef.headerValueGetter overrides the Adaptable header mechanism. Consider using ColumnOptions.tableColumnHeader instead.');
829
819
  return original_defaultColGroupDef;
830
820
  }
831
821
  const defaultColGroupDef = { ...original_defaultColGroupDef };
@@ -845,12 +835,11 @@ You need to define at least one Layout!`);
845
835
  }
846
836
  if (original_autoGroupColumnDef?.filter === false) {
847
837
  // if user disables filter on autoGroupColumnDef, we respect that
848
- this.logger.info(`autoGroupColumnDef.filter is disabled as per user configuration.`);
838
+ this.logger.info('autoGroupColumnDef.filter is disabled via user configuration.');
849
839
  return original_autoGroupColumnDef;
850
840
  }
851
841
  if (typeof original_autoGroupColumnDef?.filter === 'object') {
852
- this.logger.consoleWarn(`autoGroupColumnDef.filter is set and overrides the Adaptable custom filter mechanism, so Adaptable will not be able to manage filtering for the Group Column!
853
- Please contact the Adaptable Support Team for further assistance and investigation.`);
842
+ 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.');
854
843
  return original_autoGroupColumnDef;
855
844
  }
856
845
  const autoGroupColumnDef = { ...original_autoGroupColumnDef };
@@ -858,8 +847,7 @@ You need to define at least one Layout!`);
858
847
  // !! DO NOT REMOVE THIS !!
859
848
  // see https://github.com/ag-grid/ag-grid/blob/6f43ff257c2e285068eb425b655e58d6eeb89816/packages/ag-grid-enterprise/src/rowHierarchy/autoColService.ts#L225
860
849
  autoGroupColumnDef.filterValueGetter = (params) => {
861
- this.logger.consoleWarn(`An unexpected invocation of autoGroupColumnDef.filterValueGetter was detected. This execution path is not expected under normal operation.
862
- Please contact the Adaptable Support Team for further assistance and investigation.`, params);
850
+ this.logger.consoleWarn('Unexpected invocation of autoGroupColumnDef.filterValueGetter. This is not expected under normal operation. Please contact support.', params);
863
851
  return '';
864
852
  };
865
853
  // !! it is important that we always return the same component / handler instances
@@ -1429,15 +1417,14 @@ You need to define at least one Layout!`);
1429
1417
  const rowData = agGridApi.getGridOption('rowData');
1430
1418
  this.initWithLazyData = rowData == undefined || rowData.length === 0;
1431
1419
  if (this.initWithLazyData) {
1432
- this.logger.info('initWithLazyData = TRUE');
1420
+ this.logger.info('Initializing with lazy data (no initial rowData).');
1433
1421
  }
1434
1422
  if (!this.getAgGridContainerElement()) {
1435
1423
  // initialize the agGridContainerElement from the AgGrid instance
1436
1424
  const gridRoot = this.agGridAdapter.getAgGridRootElement();
1437
1425
  const gridContainer = gridRoot?.closest('[class*="ag-theme"]');
1438
1426
  if (!gridContainer) {
1439
- this.logger.consoleError(`No AG Grid container could be derived from the Adaptable framework wrapper.
1440
- Please contact AdapTable Support and in the meantime provide a valid container element in 'ContainerOptions.agGridContainer'!`);
1427
+ this.logger.consoleError('Failed to derive AG Grid container from the framework wrapper. Please provide a valid container element via ContainerOptions.agGridContainer.');
1441
1428
  }
1442
1429
  this.DANGER_USE_GETTER_agGridContainerElement = gridContainer;
1443
1430
  }
@@ -1445,7 +1432,7 @@ You need to define at least one Layout!`);
1445
1432
  }
1446
1433
  const agGridContainer = this.getAgGridContainerElement();
1447
1434
  if (!agGridContainer) {
1448
- this.logger.consoleError('No AG Grid container element found in the DOM. Please provide a valid container element in `ContainerOptions.agGridContainer`');
1435
+ this.logger.consoleError('AG Grid container element not found in the DOM. Please provide a valid element via ContainerOptions.agGridContainer.');
1449
1436
  return Promise.resolve(false);
1450
1437
  }
1451
1438
  let gridParams;
@@ -1860,7 +1847,7 @@ You need to define at least one Layout!`);
1860
1847
  // if no primary key column then lets check the first row to see if its a data item
1861
1848
  const primaryKeyDataItem = this.getFirstRowNode()?.data[primaryKey];
1862
1849
  if (!primaryKeyDataItem) {
1863
- errorMessage = `The Primary Key '${this.adaptableOptions.primaryKey}' does not exist. This will affect many functions in AdapTable.`;
1850
+ errorMessage = `Primary key column "${this.adaptableOptions.primaryKey}" not found. This will affect many Adaptable features.`;
1864
1851
  if (this.adaptableOptions.alertOptions.showMissingPrimaryKeyAlert) {
1865
1852
  // show an alert if that is the option
1866
1853
  this.api.alertApi.showAlertError('No Primary Key', errorMessage);
@@ -1917,12 +1904,12 @@ You need to define at least one Layout!`);
1917
1904
  checkShouldClearExistingFiltersOrSearches() {
1918
1905
  // if they have selected to clear Filters on startup then do it
1919
1906
  if (this.adaptableOptions.filterOptions.clearFiltersOnStartUp) {
1920
- this.logger.warn('Clearing any saved Filters as "clearFiltersOnStartUp" is true');
1907
+ this.logger.warn('Clearing saved filters (clearFiltersOnStartUp is enabled).');
1921
1908
  this.api.filterApi.clearAllFilters();
1922
1909
  }
1923
1910
  // if they have selected to clear searches on startup then do it
1924
1911
  if (this.adaptableOptions.quickSearchOptions.clearQuickSearchOnStartUp) {
1925
- this.logger.warn('Clearing any saved Searches as "clearQuickSearchOnStartUp" is true');
1912
+ this.logger.warn('Clearing saved Quick Search (clearQuickSearchOnStartUp is enabled).');
1926
1913
  this.api.quickSearchApi.clearQuickSearch();
1927
1914
  }
1928
1915
  }
@@ -2151,7 +2138,7 @@ You need to define at least one Layout!`);
2151
2138
  }
2152
2139
  }
2153
2140
  _updateColumnModelAndRefreshGridNow() {
2154
- this.logger.info(`Updating Column Model and Refreshing Grid.`);
2141
+ this.logger.info('Updating column model and refreshing grid.');
2155
2142
  this.deriveAdaptableColumnStateFromAgGrid();
2156
2143
  this.agGridColumnAdapter.setupColumns();
2157
2144
  this.redrawBody();
@@ -2177,7 +2164,7 @@ You need to define at least one Layout!`);
2177
2164
  this.agGridAdapter.getAgGridApi().redrawRows(redrawRowsParams);
2178
2165
  }
2179
2166
  catch (ex) {
2180
- this.logger.consoleError('AG Grid redrawRows was unable to find some row nodes. Tried to redraw row nodes: ', rowNodes, ex);
2167
+ this.logger.consoleError('AG Grid redrawRows failed to locate some row nodes.', rowNodes, ex);
2181
2168
  }
2182
2169
  }
2183
2170
  redrawRow(rowNode) {
@@ -2587,14 +2574,14 @@ You need to define at least one Layout!`);
2587
2574
  }
2588
2575
  autoSizeColumns(columnIds) {
2589
2576
  if (!this.agGridModulesAdapter.isAgGridModuleRegistered('ColumnAutoSizeModule')) {
2590
- this.logger.consoleError(`Could not auto-size columns [${columnIds}] - missing required AG Grid module 'ColumnAutoSizeModule'`);
2577
+ this.logger.consoleError(`Auto-sizing columns [${columnIds}] requires the AG Grid "ColumnAutoSizeModule". Please register this module.`);
2591
2578
  return;
2592
2579
  }
2593
2580
  this.layoutManager.autoSizeColumns(columnIds);
2594
2581
  }
2595
2582
  autoSizeAllColumns() {
2596
2583
  if (!this.agGridModulesAdapter.isAgGridModuleRegistered('ColumnAutoSizeModule')) {
2597
- this.logger.consoleError(`Could not auto-size all columns - missing required AG Grid module 'ColumnAutoSizeModule'`);
2584
+ this.logger.consoleError('Auto-sizing all columns requires the AG Grid "ColumnAutoSizeModule". Please register this module.');
2598
2585
  return;
2599
2586
  }
2600
2587
  const agGridApi = this.agGridAdapter.getAgGridApi();
@@ -2752,7 +2739,7 @@ You need to define at least one Layout!`);
2752
2739
  customInFilterValuesResult = await customInFilterValues(customInFilterValuesContext);
2753
2740
  }
2754
2741
  catch (error) {
2755
- this.logger.consoleError(`Failed to fetch custom filter values`, column, error);
2742
+ this.logger.consoleError('Failed to retrieve custom filter values.', column, error);
2756
2743
  }
2757
2744
  return customInFilterValuesResult;
2758
2745
  }
@@ -2792,7 +2779,7 @@ You need to define at least one Layout!`);
2792
2779
  customDistinctValues = await customEditColumnValues(customEditValuesContext);
2793
2780
  }
2794
2781
  catch (error) {
2795
- this.logger.consoleError(`Failed to fetch custom edit values`, column, error);
2782
+ this.logger.consoleError('Failed to retrieve custom edit values.', column, error);
2796
2783
  }
2797
2784
  return customDistinctValues ?? [];
2798
2785
  }
@@ -3247,7 +3234,7 @@ You need to define at least one Layout!`);
3247
3234
  if (this.getAgGridRowModelType() !== 'clientSide') {
3248
3235
  // only in client-side row model can we loop through filtered&sorted rows
3249
3236
  // see https://www.ag-grid.com/javascript-data-grid/accessing-data/#iterating-rows
3250
- this.logger.warn('`forAllVisibleRowNodesDo()` is only supported in client-side row model. `forAllRowNodesDo` will be used instead.');
3237
+ this.logger.warn('forAllVisibleRowNodesDo() is only supported with client-side row model. Falling back to forAllRowNodesDo().');
3251
3238
  return this.forAllRowNodesDo(func, config);
3252
3239
  }
3253
3240
  this.agGridAdapter.getAgGridApi().forEachNodeAfterFilterAndSort((rowNode, rowIndex) => {
@@ -3299,14 +3286,14 @@ You need to define at least one Layout!`);
3299
3286
  }
3300
3287
  selectNode(rowNode, clearSelection) {
3301
3288
  if (!rowNode) {
3302
- this.logger.error('No node to select');
3289
+ this.logger.error('Cannot select: row node is null.');
3303
3290
  return;
3304
3291
  }
3305
3292
  rowNode.setSelected(true, clearSelection);
3306
3293
  }
3307
3294
  deSelectNode(rowNode, clearSelection) {
3308
3295
  if (!rowNode) {
3309
- this.logger.error('No node to deselect');
3296
+ this.logger.error('Cannot deselect: row node is null.');
3310
3297
  return;
3311
3298
  }
3312
3299
  rowNode.setSelected(false, clearSelection);
@@ -3394,7 +3381,7 @@ You need to define at least one Layout!`);
3394
3381
  }
3395
3382
  showChart(chartDefinition, container) {
3396
3383
  if (!this.isReady) {
3397
- this.logger.consoleError('Adaptable must be instantiated before calling showChart');
3384
+ this.logger.consoleError('Cannot call showChart before Adaptable is fully initialized.');
3398
3385
  return null;
3399
3386
  }
3400
3387
  /**
@@ -3415,7 +3402,7 @@ You need to define at least one Layout!`);
3415
3402
  }
3416
3403
  updateChart(chart) {
3417
3404
  if (!chart.Model) {
3418
- this.logger.consoleError(`Chart definition must have a Model property to be updated: ${chart.Name}`);
3405
+ this.logger.consoleError(`Cannot update chart "${chart.Name}": the chart definition is missing the required Model property.`);
3419
3406
  return;
3420
3407
  }
3421
3408
  const upgradableProperties = {
@@ -3427,12 +3414,21 @@ You need to define at least one Layout!`);
3427
3414
  suppressChartRanges: Boolean(chart.Model.suppressChartRanges),
3428
3415
  aggFunc: chart.Model.aggFunc,
3429
3416
  };
3417
+ // Skip the AG Grid API call if the upgradable properties haven't changed
3418
+ // to avoid unnecessary chartOptionsChanged events (see #ag_grid_update_chart_loop)
3419
+ const currentModel = this.getChartModels().find((model) => model.chartId === chart.Model.chartId);
3420
+ if (currentModel &&
3421
+ Boolean(currentModel.unlinkChart) === upgradableProperties.unlinkChart &&
3422
+ Boolean(currentModel.suppressChartRanges) === upgradableProperties.suppressChartRanges &&
3423
+ currentModel.aggFunc === upgradableProperties.aggFunc) {
3424
+ return;
3425
+ }
3430
3426
  // see also #ag_grid_update_chart_loop
3431
3427
  this.agGridAdapter.getAgGridApi().updateChart(upgradableProperties);
3432
3428
  }
3433
3429
  getChartModels() {
3434
3430
  if (!this.isReady) {
3435
- this.logger.consoleError('Adaptable must be instantiated before calling getChartModels');
3431
+ this.logger.consoleError('Cannot call getChartModels before Adaptable is fully initialized.');
3436
3432
  return [];
3437
3433
  }
3438
3434
  return this.agGridAdapter.getAgGridApi().getChartModels();
@@ -3466,7 +3462,7 @@ You need to define at least one Layout!`);
3466
3462
  }
3467
3463
  setAgGridQuickSearch(searchText) {
3468
3464
  if (!this.agGridModulesAdapter.isAgGridModuleRegistered('QuickFilterModule')) {
3469
- this.logger.consoleError(`Can NOT set Quick Search text - missing required AG Grid module 'QuickFilterModule'`);
3465
+ this.logger.consoleError('Quick Search requires the AG Grid "QuickFilterModule". Please register this module to enable Quick Search.');
3470
3466
  return;
3471
3467
  }
3472
3468
  this.agGridAdapter.setGridOption('quickFilterText', searchText);
@@ -3476,7 +3472,7 @@ You need to define at least one Layout!`);
3476
3472
  }
3477
3473
  setAgGridFindSearchValue(searchText) {
3478
3474
  if (!this.agGridModulesAdapter.isAgGridModuleRegistered('FindModule')) {
3479
- this.logger.consoleError(`Can NOT set Find Search text - missing required AG Grid module 'FindModule'`);
3475
+ this.logger.consoleError('Find Search requires the AG Grid "FindModule". Please register this module to enable Find Search.');
3480
3476
  return;
3481
3477
  }
3482
3478
  this.agGridAdapter.setGridOption('findSearchValue', searchText);
@@ -4005,7 +4001,7 @@ You need to define at least one Layout!`);
4005
4001
  cellDataChangedInfos.forEach((cellDataChangedInfo) => {
4006
4002
  // if a Cell Data Change is undone, log to the Console
4007
4003
  if (cellDataChangedInfo.trigger === 'undo') {
4008
- this.logger.info(`Undo data change: PK(${cellDataChangedInfo.primaryKeyValue}) Col(${cellDataChangedInfo.column}) RevertedValue(${cellDataChangedInfo.oldValue}) OriginalValue(${cellDataChangedInfo.newValue})`);
4004
+ this.logger.info(`Data change reverted: column="${cellDataChangedInfo.column}", primaryKey="${cellDataChangedInfo.primaryKeyValue}", from=${cellDataChangedInfo.newValue} to=${cellDataChangedInfo.oldValue}`);
4009
4005
  }
4010
4006
  // For Changes except Aggregations, reset cell selection if required
4011
4007
  if (cellDataChangedInfo.trigger === 'edit' ||
@@ -4210,7 +4206,7 @@ You need to define at least one Layout!`);
4210
4206
  this.api.layoutApi.createOrUpdateLayout(layout);
4211
4207
  }
4212
4208
  refreshAdaptableAfterLayoutChange(layout) {
4213
- this.logger.info('refreshAdaptableAfterLayoutChange()');
4209
+ this.logger.info('Refreshing Adaptable after layout change.');
4214
4210
  const prevLayoutForRefresh = this.__prevLayoutForRefresh || this.api.layoutApi.getCurrentLayout();
4215
4211
  // see #on-regroup-expect-group-column-to-be-recomputed-and-setup-properly
4216
4212
  const rowGroupsChanged = this.isRowGroupDifferentInLayout(prevLayoutForRefresh, layout);
@@ -4256,7 +4252,7 @@ You need to define at least one Layout!`);
4256
4252
  .forEach((colType) => {
4257
4253
  const newValidCellDataType = (0, VersionUpgrade20_1.mapOldTypeToDataType)(colType);
4258
4254
  if (newValidCellDataType) {
4259
- this.logger.consoleWarn(`Column ${columnDefinition.colId ?? columnDefinition.field} has a type of ${colType} which is no longer in use${newValidCellDataType !== 'unknown' ? `. Please use 'colDef.cellDataType' instead: ${newValidCellDataType}` : ''}`);
4255
+ 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.'}`);
4260
4256
  }
4261
4257
  });
4262
4258
  });
@@ -149,7 +149,7 @@ class AgGridAdapter {
149
149
  }
150
150
  }
151
151
  options['columnDefs'] = colDefsWithSpecialColumns;
152
- self.logger.info(`Added SpecialColumns on GridOptions.columnDefs update (source=${source})`);
152
+ self.logger.info(`Added special columns on GridOptions.columnDefs update (source="${source}").`);
153
153
  }
154
154
  // `context`
155
155
  const passedContext = options.context;
@@ -169,7 +169,7 @@ class AgGridAdapter {
169
169
  }
170
170
  const agGridColumnFilterService = this.DANGER_getPrivateAgGridBeans()?.colFilter;
171
171
  if (!agGridColumnFilterService) {
172
- this.logger.consoleError('Could not get hold of ColumnFilterService! This is a critical error and will prevent Adaptable from working correctly.');
172
+ this.logger.consoleError('Failed to initialize ColumnFilterService. Filtering and related features will not function correctly.');
173
173
  return;
174
174
  }
175
175
  const self = this;
@@ -215,7 +215,7 @@ class AgGridAdapter {
215
215
  DANGER_getPrivateAgGridBeans() {
216
216
  const beans = DANGER_AG_GRID_BEANS_MAP[this._agGridId];
217
217
  if (!beans) {
218
- this.logger.consoleError('Could not get hold of AgGridBeans! This is a critical error and will prevent Adaptable from working correctly.');
218
+ this.logger.consoleError('Failed to access AG Grid internal beans. Adaptable will not function correctly.');
219
219
  }
220
220
  return beans;
221
221
  }
@@ -359,7 +359,7 @@ class AgGridAdapter {
359
359
  if (isEndRowPin) {
360
360
  shouldIncludeRange = false;
361
361
  }
362
- this.logger.consoleWarn('Cannot select pinned rows in AG Grid.');
362
+ this.logger.consoleWarn('Pinned rows cannot be selected in AG Grid.');
363
363
  }
364
364
  if (shouldIncludeRange) {
365
365
  const y1 = Math.min(rangeSelection.startRow.rowIndex, rangeSelection.endRow.rowIndex);
@@ -529,7 +529,7 @@ class AgGridAdapter {
529
529
  deriveAdaptableColumnDataType(agColumn, logWarning = true) {
530
530
  // Some columns can have no ID or Title. we return string as a consequence but it needs testing
531
531
  if (!agColumn) {
532
- this.logger.warn(`Column is undefined, returning 'text' for Type`);
532
+ this.logger.warn('Column is undefined. Defaulting data type to "text".');
533
533
  return 'text';
534
534
  }
535
535
  if (this.adaptableApi.columnApi.isAutoRowGroupColumnForSingle(agColumn.getId())) {
@@ -572,7 +572,7 @@ class AgGridAdapter {
572
572
  let row = this.getAgGridApi().getDisplayedRowAtIndex(0);
573
573
  if (row == null) {
574
574
  // possible that there will be no data.
575
- this.logger.consoleError(`No data in grid, returning type "unknown" for Column: "${agColumn.getColId()}". This will impact several Adaptable features, such as Filters and ColumnFormats.`);
575
+ this.logger.consoleError(`No data in grid. Returning type "unknown" for column "${agColumn.getColId()}". This will affect features such as Filters and Column Formats.`);
576
576
  return 'unknown';
577
577
  }
578
578
  // // if it's a group we need the content of the group
@@ -614,7 +614,7 @@ class AgGridAdapter {
614
614
  dataType = arrayDataType;
615
615
  }
616
616
  }
617
- this.logger.consoleWarn(`No defined type for column '${agColumn.getColId()}'. Defaulting to type of first row value: ${dataType}`);
617
+ this.logger.consoleWarn(`No explicit type for column "${agColumn.getColId()}". Inferred type from first row value: "${dataType}".`);
618
618
  return dataType;
619
619
  }
620
620
  isColumnReadonly(colDef) {
@@ -800,7 +800,7 @@ class AgGridAdapter {
800
800
  colDef.colId = colDef.field;
801
801
  }
802
802
  if (!colDef.colId) {
803
- this.logger.warn('A column is missing the colId - please check ', colDef, 'Either pass a "field" property or a "colId" property.');
803
+ this.logger.warn('Column definition is missing colId. Provide either a "field" or "colId" property.', colDef);
804
804
  }
805
805
  };
806
806
  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
  }
@@ -403,6 +403,7 @@ class AgGridColumnAdapter {
403
403
  ...this.getAlertCellStyle(gridCell, params),
404
404
  ...this.getFlashingCellStyle(gridCell, params),
405
405
  ...this.getCellHighlightStyle(gridCell, params),
406
+ ...this.getColumnHighlightStyle(gridCell, params),
406
407
  };
407
408
  return (0, StyleHelper_1.normalizeStyleForAgGrid)(result);
408
409
  };
@@ -660,7 +661,7 @@ class AgGridColumnAdapter {
660
661
  if (typeof original_filter !== 'boolean' &&
661
662
  typeof original_filter?.handler !== 'function' &&
662
663
  !pivotMode) {
663
- this.adaptableApi.consoleError(`Column '${colId}' has a custom filter defined in colDef.filter, but Adaptable Filtering accepts only the TRUE/FALSE values!`);
664
+ this.adaptableApi.consoleError(`Column "${colId}" has a custom filter in colDef.filter, but Adaptable filtering only accepts boolean (true/false) values for this property.`);
664
665
  return false;
665
666
  }
666
667
  return {
@@ -1294,14 +1295,24 @@ class AgGridColumnAdapter {
1294
1295
  : flashingCell.flashingCellDefinition.NeutralChangeStyle) ?? {});
1295
1296
  }
1296
1297
  getCellHighlightStyle(gridCell, params) {
1297
- const cellHightlight = this.adaptableApi.internalApi
1298
+ const cellHighlight = this.adaptableApi.internalApi
1298
1299
  .getInternalState()
1299
1300
  .CellHighlightInfo.find((cellHighlightInfo) => {
1300
1301
  return (gridCell.column.columnId === cellHighlightInfo.columnId &&
1301
1302
  cellHighlightInfo.primaryKeyValue === gridCell.primaryKeyValue);
1302
1303
  });
1303
- if (cellHightlight) {
1304
- return (0, StyleHelper_1.convertAdaptableStyleToCSS)(cellHightlight.highlightStyle);
1304
+ if (cellHighlight) {
1305
+ return (0, StyleHelper_1.convertAdaptableStyleToCSS)(cellHighlight.highlightStyle);
1306
+ }
1307
+ }
1308
+ getColumnHighlightStyle(gridCell, params) {
1309
+ const columnHighlight = this.adaptableApi.internalApi
1310
+ .getInternalState()
1311
+ .ColumnHighlightInfo.find((columnHighlightInfo) => {
1312
+ return (gridCell.column.columnId === columnHighlightInfo.columnId);
1313
+ });
1314
+ if (columnHighlight) {
1315
+ return (0, StyleHelper_1.convertAdaptableStyleToCSS)(columnHighlight.highlightStyle);
1305
1316
  }
1306
1317
  }
1307
1318
  isColGroupDef(columnDefinition) {
@@ -70,7 +70,7 @@ class AgGridExportAdapter {
70
70
  try {
71
71
  if (showProgressIndicator) {
72
72
  this.adaptableApi.userInterfaceApi.showProgressIndicator({
73
- text: `${report.Name} Export in progress...`,
73
+ text: `Exporting ${report.Name}...`,
74
74
  });
75
75
  // waitForTimeout required to give the ProgressIndicator rendering a head-start (see rAF in ProgressIndicator implementation)
76
76
  // see #raf_progress_indicator
@@ -124,7 +124,7 @@ class AgGridExportAdapter {
124
124
  };
125
125
  }
126
126
  catch (error) {
127
- this.logger.consoleError(`Error exporting ${report.Name} in ${format} format to ${config.destination}`, error.stack);
127
+ this.logger.consoleError(`Export failed: report="${report.Name}", format="${format}", destination="${config.destination}".`, error.stack);
128
128
  }
129
129
  finally {
130
130
  /**
@@ -146,7 +146,7 @@ class AgGridExportAdapter {
146
146
  const exportContext = this.buildExportProcessContext(config);
147
147
  let exportParams = this.buildExportParams(exportContext);
148
148
  if (typeof config?.customExportParams === 'function') {
149
- this.logger.info(`Custom export params for ${config.report.Name} in ${config.format} format`);
149
+ this.logger.info(`Applying custom export params: report="${config.report.Name}", format="${config.format}".`);
150
150
  exportParams = config.customExportParams(exportParams);
151
151
  }
152
152
  exportContext.exportedColumnIds = exportParams.columnKeys;
@@ -512,7 +512,7 @@ class AgGridExportAdapter {
512
512
  const columnId = column.getId();
513
513
  const adaptableColumn = getAdaptableColumnWithColumnId(columnId);
514
514
  if (!adaptableColumn) {
515
- this.logger.warn(`Export Styling: Column with id ${columnId} not found in Adaptable`);
515
+ this.logger.warn(`Export styling: column "${columnId}" not found in Adaptable.`);
516
516
  return;
517
517
  }
518
518
  let headerClassParams = {
@@ -575,7 +575,7 @@ class AgGridExportAdapter {
575
575
  const columnId = column.getId();
576
576
  const adaptableColumn = getAdaptableColumnWithColumnId(columnId);
577
577
  if (!adaptableColumn) {
578
- this.logger.warn(`Export Styling: Column with id ${columnId} not found in Adaptable`);
578
+ this.logger.warn(`Export styling: column "${columnId}" not found in Adaptable.`);
579
579
  return;
580
580
  }
581
581
  const isDateCellExportedAsFormattedValue = this.isDateCellExportedAsFormattedValue(adaptableColumn, exportContext);
@@ -104,9 +104,9 @@ class AgGridThemeAdapter {
104
104
  }
105
105
  }
106
106
  else {
107
- this.logger.warn('No AgGrid container found, defaulting to ag-theme-balham for the light theme');
107
+ this.logger.warn('AG Grid container not found. Defaulting to ag-theme-balham for the light theme.');
108
108
  }
109
- this.logger.warn('No ag-theme- class found on the grid container, defaulting to ag-theme-balham');
109
+ this.logger.warn('No ag-theme-* class found on the grid container. Defaulting to ag-theme-balham.');
110
110
  // fallback to the default light theme
111
111
  return 'ag-theme-balham';
112
112
  }
@@ -159,7 +159,7 @@ const OverlayTrigger = React.forwardRef((givenProps, ref) => {
159
159
  target = targetProp(target);
160
160
  }
161
161
  if (!target) {
162
- adaptable.logger.warn('No OverlayTrigger target - make sure you render a child inside the OverlayTrigger, which will be the overlay target');
162
+ adaptable.logger.warn('OverlayTrigger target not found. Ensure a child element is rendered inside the OverlayTrigger component.');
163
163
  return;
164
164
  }
165
165
  targetRef.current = target;