@adaptabletools/adaptable 22.0.0-canary.1 → 22.0.0-canary.3

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 (177) hide show
  1. package/index.css +55 -37
  2. package/index.css.map +1 -1
  3. package/package.json +1 -1
  4. package/src/AdaptableInterfaces/IAdaptable.d.ts +2 -2
  5. package/src/AdaptableOptions/AdaptablePlugin.js +6 -1
  6. package/src/AdaptableOptions/ExportOptions.d.ts +1 -2
  7. package/src/AdaptableOptions/FilterOptions.d.ts +3 -0
  8. package/src/AdaptableState/Common/AdaptableColumn.d.ts +6 -0
  9. package/src/AdaptableState/Common/AdaptableStyle.d.ts +8 -0
  10. package/src/AdaptableState/Common/RowDataChangedInfo.d.ts +3 -0
  11. package/src/AdaptableState/FormatColumnState.d.ts +0 -8
  12. package/src/AdaptableState/InitialState.d.ts +1 -1
  13. package/src/AdaptableState/Selection/GridCell.d.ts +9 -0
  14. package/src/Api/DataSetApi.d.ts +1 -1
  15. package/src/Api/GridApi.d.ts +3 -3
  16. package/src/Api/Implementation/ActionColumnApiImpl.js +1 -0
  17. package/src/Api/Implementation/AdaptableApiImpl.js +52 -0
  18. package/src/Api/Implementation/AlertApiImpl.js +1 -0
  19. package/src/Api/Implementation/ApiBase.js +1 -0
  20. package/src/Api/Implementation/CalculatedColumnApiImpl.js +1 -0
  21. package/src/Api/Implementation/ChartingApiImpl.js +4 -0
  22. package/src/Api/Implementation/ColumnApiImpl.js +1 -0
  23. package/src/Api/Implementation/ColumnFilterApiImpl.js +1 -0
  24. package/src/Api/Implementation/CommentsApiImpl.js +1 -0
  25. package/src/Api/Implementation/CustomSortApiImpl.js +1 -0
  26. package/src/Api/Implementation/DashboardApiImpl.js +1 -0
  27. package/src/Api/Implementation/DataChangeHistoryApiImpl.js +12 -15
  28. package/src/Api/Implementation/DataImportApiImpl.js +1 -0
  29. package/src/Api/Implementation/DataSetApiImpl.js +1 -0
  30. package/src/Api/Implementation/EntitlementApiImpl.js +1 -0
  31. package/src/Api/Implementation/EventApiImpl.js +16 -14
  32. package/src/Api/Implementation/ExportApiImpl.js +1 -0
  33. package/src/Api/Implementation/ExpressionApiImpl.js +1 -0
  34. package/src/Api/Implementation/Fdc3ApiImpl.js +1 -0
  35. package/src/Api/Implementation/FilterApiImpl.js +3 -0
  36. package/src/Api/Implementation/FlashingCellApiImpl.js +1 -0
  37. package/src/Api/Implementation/FormatColumnApiImpl.js +1 -0
  38. package/src/Api/Implementation/FreeTextColumnApiImpl.js +1 -0
  39. package/src/Api/Implementation/GridApiImpl.d.ts +9 -9
  40. package/src/Api/Implementation/GridApiImpl.js +17 -16
  41. package/src/Api/Implementation/GridFilterApiImpl.js +1 -0
  42. package/src/Api/Implementation/LayoutApiImpl.js +1 -0
  43. package/src/Api/Implementation/NamedQueryApiImpl.js +1 -0
  44. package/src/Api/Implementation/NoteApiImpl.js +1 -0
  45. package/src/Api/Implementation/PredicateApiImpl.js +1 -0
  46. package/src/Api/Implementation/RowFormApiImpl.js +1 -0
  47. package/src/Api/Implementation/StyledColumnApiImpl.js +1 -0
  48. package/src/Api/Implementation/SystemStatusApiImpl.js +2 -0
  49. package/src/Api/Implementation/TeamSharingApiImpl.js +1 -0
  50. package/src/Api/Implementation/ThemeApiImpl.js +1 -0
  51. package/src/Api/Implementation/UserInterfaceApiImpl.js +2 -1
  52. package/src/Api/Internal/ColumnInternalApi.js +1 -1
  53. package/src/Api/Internal/FormatColumnInternalApi.d.ts +0 -10
  54. package/src/Api/Internal/FormatColumnInternalApi.js +1 -19
  55. package/src/Redux/ActionsReducers/NoteRedux.js +1 -1
  56. package/src/Redux/Store/AdaptableReduxLocalStorageEngine.js +6 -0
  57. package/src/Redux/Store/AdaptableStore.js +49 -43
  58. package/src/Strategy/AdaptableModuleBase.js +4 -0
  59. package/src/Strategy/AlertModule.js +1 -0
  60. package/src/Strategy/CalculatedColumnModule.js +1 -0
  61. package/src/Strategy/CellSummaryModule.js +1 -1
  62. package/src/Strategy/DataChangeHistoryModule.js +1 -0
  63. package/src/Strategy/FlashingCellModule.js +1 -0
  64. package/src/Strategy/FreeTextColumnModule.js +1 -0
  65. package/src/Strategy/LayoutModule.js +2 -1
  66. package/src/Strategy/PlusMinusModule.js +2 -0
  67. package/src/Strategy/ScheduleModule.js +1 -0
  68. package/src/Strategy/ShortcutModule.js +2 -0
  69. package/src/Strategy/TeamSharingModule.js +10 -10
  70. package/src/Strategy/Utilities/FormatColumn/getFormatColumnSettingsViewItems.js +0 -3
  71. package/src/Utilities/Constants/DocumentationLinkConstants.d.ts +3 -3
  72. package/src/Utilities/Constants/DocumentationLinkConstants.js +3 -3
  73. package/src/Utilities/ExpressionFunctions/deepMap.js +31 -31
  74. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +3 -3
  75. package/src/Utilities/Helpers/StyleHelper.js +14 -0
  76. package/src/Utilities/MenuItem.js +18 -0
  77. package/src/Utilities/ObjectFactory.js +1 -1
  78. package/src/Utilities/Services/AggregatedScalarLiveValue.js +8 -0
  79. package/src/Utilities/Services/AlertService.js +6 -4
  80. package/src/Utilities/Services/AnnotationsService.js +4 -1
  81. package/src/Utilities/Services/CalculatedColumnExpressionService.js +2 -1
  82. package/src/Utilities/Services/ChartingService.js +1 -0
  83. package/src/Utilities/Services/DataService.js +10 -2
  84. package/src/Utilities/Services/Fdc3Service.js +5 -3
  85. package/src/Utilities/Services/FlashingCellService.js +5 -0
  86. package/src/Utilities/Services/LicenseService/index.js +1 -1
  87. package/src/Utilities/Services/MetamodelService.js +2 -2
  88. package/src/Utilities/Services/ModuleService.js +4 -3
  89. package/src/Utilities/Services/QueryLanguageService.js +6 -5
  90. package/src/Utilities/Services/RowFormService.js +1 -0
  91. package/src/Utilities/Services/RowSummaryService.js +10 -7
  92. package/src/Utilities/Services/TeamSharingService.js +3 -1
  93. package/src/Utilities/Services/ThemeService.js +11 -9
  94. package/src/Utilities/Services/ValidationService.js +1 -0
  95. package/src/Utilities/createAgStatusPanelComponent.js +3 -0
  96. package/src/View/AdaptablePopover/index.d.ts +1 -0
  97. package/src/View/AdaptablePopover/index.js +1 -1
  98. package/src/View/Alert/ActiveAlertsPanel.js +8 -0
  99. package/src/View/Alert/AlertViewPanel.js +13 -9
  100. package/src/View/Alert/Utilities/getAlertButtonStyle.d.ts +1 -0
  101. package/src/View/Alert/Utilities/getAlertButtonStyle.js +8 -0
  102. package/src/View/BulkUpdate/BulkUpdateViewPanel.js +24 -11
  103. package/src/View/CalculatedColumn/CalculatedColumnSummary.js +8 -8
  104. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +2 -2
  105. package/src/View/CellSummary/CellSummaryViewPanel.js +16 -17
  106. package/src/View/Components/AdaptableDateInput/index.js +1 -1
  107. package/src/View/Components/Buttons/ButtonApply.js +1 -1
  108. package/src/View/Components/Buttons/ButtonBase/index.js +9 -9
  109. package/src/View/Components/Buttons/ButtonClear.d.ts +1 -0
  110. package/src/View/Components/Buttons/EntityListActionButtons.js +18 -18
  111. package/src/View/Components/ColumnFilter/components/FloatingFilterValues.js +1 -1
  112. package/src/View/Components/ExpressionWizard.js +5 -5
  113. package/src/View/Components/Panels/PanelDashboard/index.js +8 -8
  114. package/src/View/Components/Panels/PanelToolPanel/index.js +7 -7
  115. package/src/View/Components/Selectors/BulkUpdateValueSelector.js +19 -18
  116. package/src/View/Components/StyleComponent.js +20 -1
  117. package/src/View/Components/ToolPanel/AdaptableToolPanel.js +2 -0
  118. package/src/View/CustomSort/CustomSortSummary.js +13 -13
  119. package/src/View/Dashboard/DashboardPopup.js +4 -5
  120. package/src/View/Export/ExportDestinationPicker.js +1 -1
  121. package/src/View/Export/ExportStatusBar.js +4 -2
  122. package/src/View/Export/ExportViewPanel.js +25 -18
  123. package/src/View/FormatColumn/FormatColumnSummary.js +13 -13
  124. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +0 -23
  125. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +2 -2
  126. package/src/View/FreeTextColumn/FreeTextColumnSummary.js +13 -13
  127. package/src/View/GridInfo/GridInfoPopup/GridInfoPopup.js +57 -65
  128. package/src/View/QuickSearch/QuickSearchPopup.js +4 -1
  129. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsReminder.js +2 -2
  130. package/src/View/SmartEdit/SmartEditViewPanel.js +1 -0
  131. package/src/View/Theme/ThemePopup.js +13 -16
  132. package/src/View/UIHelper.d.ts +2 -0
  133. package/src/View/UIHelper.js +15 -0
  134. package/src/agGrid/Adaptable.js +4 -0
  135. package/src/agGrid/AdaptableAgGrid.d.ts +2 -2
  136. package/src/agGrid/AdaptableAgGrid.js +104 -38
  137. package/src/agGrid/AdaptableFilterHandler.js +4 -0
  138. package/src/agGrid/AdaptableLogger.d.ts +3 -0
  139. package/src/agGrid/AdaptableLogger.js +10 -0
  140. package/src/agGrid/AgGridAdapter.js +11 -1
  141. package/src/agGrid/AgGridColumnAdapter.js +5 -18
  142. package/src/agGrid/AgGridExportAdapter.js +10 -9
  143. package/src/agGrid/AgGridFilterAdapter.js +4 -0
  144. package/src/agGrid/AgGridFloatingFilterAdapter.js +3 -0
  145. package/src/agGrid/AgGridMenuAdapter.js +1 -0
  146. package/src/agGrid/AgGridModulesAdapter.js +2 -1
  147. package/src/agGrid/AgGridOptionsService.js +3 -0
  148. package/src/agGrid/AgGridThemeAdapter.js +2 -0
  149. package/src/agGrid/cellRenderers/ActionColumnRenderer.js +5 -0
  150. package/src/agGrid/cellRenderers/BadgeRenderer.js +2 -0
  151. package/src/agGrid/cellRenderers/PercentBarRenderer.js +1 -0
  152. package/src/agGrid/editors/AdaptableDateEditor/index.js +6 -3
  153. package/src/agGrid/editors/AdaptableNumberEditor/index.js +16 -12
  154. package/src/agGrid/editors/AdaptablePercentageEditor/index.js +17 -13
  155. package/src/agGrid/index.d.ts +6 -0
  156. package/src/agGrid/index.js +6 -0
  157. package/src/components/Dashboard/DashboardToolbar.js +1 -1
  158. package/src/components/Datepicker/index.js +1 -1
  159. package/src/components/ExpressionEditor/EditorInput.js +19 -3
  160. package/src/components/Tree/TreeDropdown/index.js +1 -1
  161. package/src/components/overlayBaseZIndex.js +1 -1
  162. package/src/components/utils/useContainerScrollObserver/index.js +17 -14
  163. package/src/devTools/index.js +54 -53
  164. package/src/env.js +2 -2
  165. package/src/layout-manager/src/LMEmitter.js +11 -11
  166. package/src/layout-manager/src/LMLogger.js +7 -0
  167. package/src/layout-manager/src/index.js +56 -51
  168. package/src/metamodel/adaptable.metamodel.d.ts +66 -7
  169. package/src/metamodel/adaptable.metamodel.js +1 -1
  170. package/src/migration/AdaptableUpgradeHelper.js +5 -0
  171. package/src/migration/VersionUpgrade.js +1 -0
  172. package/src/migration/VersionUpgrade17.js +1 -2
  173. package/src/migration/VersionUpgrade22.d.ts +6 -0
  174. package/src/migration/VersionUpgrade22.js +27 -0
  175. package/src/parser/src/ExpressionEvaluationError.js +1 -0
  176. package/src/types.d.ts +1 -1
  177. package/tsconfig.esm.tsbuildinfo +1 -1
@@ -277,7 +277,7 @@ export class ColumnInternalApi extends ApiBase {
277
277
  getQueryableColumnsForUIEditor() {
278
278
  return this.getColumnApi()
279
279
  .getQueryableColumns()
280
- .filter((column) => !column.isGeneratedPivotResultColumn && !column.isGeneratedRowGroupColumn);
280
+ .filter((column) => !column.isGeneratedPivotResultColumn && !column.isGeneratedRowGroupColumn && !column.isGeneratedSelectionColumn);
281
281
  }
282
282
  isAlwaysHiddenColumn(columnIdentifier) {
283
283
  return this.getColumnApi().hasColumnType(columnIdentifier, HIDDEN_COLUMN_TYPE);
@@ -7,21 +7,11 @@ export declare class FormatColumnInternalApi extends ApiBase {
7
7
  * @returns format columns
8
8
  */
9
9
  getAllFormatColumnWithStyle(config?: FormatColumnConfig): FormatColumn[];
10
- /**
11
- * Retrieves all Format Columns in Adaptable State with the `Style` or the `CellAlignment` property set
12
- * @returns format columns
13
- */
14
- getAllFormatColumnWithStyleAndCellAlignment(config?: FormatColumnConfig): FormatColumn[];
15
10
  /**
16
11
  * Retrieves all Format Columns in Adaptable State with `DisplayFormat` property set
17
12
  * @returns format columns
18
13
  */
19
14
  getAllFormatColumnWithDisplayFormat(config?: FormatColumnConfig): FormatColumn[];
20
- /**
21
- * Retrieves all Format Columns in Adaptable State with `CellAlignment` property set
22
- * @returns format columns
23
- */
24
- getAllFormatColumnWithCellAlignment(config?: FormatColumnConfig): FormatColumn[];
25
15
  /**
26
16
  * Get all FormatColumns which are defined for this column and have a custom AdaptableStyle
27
17
  * @param column
@@ -41,15 +41,6 @@ export class FormatColumnInternalApi extends ApiBase {
41
41
  .getFormatColumns(config)
42
42
  .filter((fc) => fc.Style);
43
43
  }
44
- /**
45
- * Retrieves all Format Columns in Adaptable State with the `Style` or the `CellAlignment` property set
46
- * @returns format columns
47
- */
48
- getAllFormatColumnWithStyleAndCellAlignment(config) {
49
- return this.getFormatColumnApi()
50
- .getFormatColumns(config)
51
- .filter((fc) => fc.Style || fc.CellAlignment);
52
- }
53
44
  /**
54
45
  * Retrieves all Format Columns in Adaptable State with `DisplayFormat` property set
55
46
  * @returns format columns
@@ -59,15 +50,6 @@ export class FormatColumnInternalApi extends ApiBase {
59
50
  .getFormatColumns(config)
60
51
  .filter((fc) => fc.DisplayFormat);
61
52
  }
62
- /**
63
- * Retrieves all Format Columns in Adaptable State with `CellAlignment` property set
64
- * @returns format columns
65
- */
66
- getAllFormatColumnWithCellAlignment(config) {
67
- return this.getFormatColumnApi()
68
- .getFormatColumns(config)
69
- .filter((fc) => fc.CellAlignment);
70
- }
71
53
  /**
72
54
  * Get all FormatColumns which are defined for this column and have a custom AdaptableStyle
73
55
  * @param column
@@ -75,7 +57,7 @@ export class FormatColumnInternalApi extends ApiBase {
75
57
  * @returns list of FormatColumn
76
58
  */
77
59
  getFormatColumnsWithStyleForColumn(column, config) {
78
- const formatColumns = this.getAllFormatColumnWithStyleAndCellAlignment()
60
+ const formatColumns = this.getAllFormatColumnWithStyle()
79
61
  .filter((formatColumn) => {
80
62
  // FormatColumn default target is 'cell', so if no target is specified, we assume 'cell'
81
63
  const fcTarget = formatColumn.Target ?? 'cell';
@@ -42,7 +42,7 @@ export const GetNoteSelector = (state, address) => {
42
42
  // happy check
43
43
  return true;
44
44
  }
45
- // Primary keys retreived from the grid dom are always strings, so we must also consider them strings
45
+ // Primary keys retrieved from the grid dom are always strings, so we must also consider them strings
46
46
  if ((typeof address.PrimaryKeyValue === 'number' && typeof note.PrimaryKeyValue === 'string') ||
47
47
  (typeof address.PrimaryKeyValue === 'string' && typeof note.PrimaryKeyValue === 'number')) {
48
48
  return (note.PrimaryKeyValue.toString() === address.PrimaryKeyValue.toString() &&
@@ -26,6 +26,12 @@ const loadState = ({ adaptableId, adaptableStateKey }) => {
26
26
  return Promise.resolve(parsedJsonState);
27
27
  };
28
28
  class AdaptableReduxLocalStorageEngine {
29
+ adaptableId;
30
+ adaptableStateKey;
31
+ userName;
32
+ initialState;
33
+ loadState;
34
+ persistState;
29
35
  constructor(config) {
30
36
  this.adaptableId = config.adaptableId;
31
37
  this.adaptableStateKey = config.adaptableStateKey;
@@ -66,6 +66,23 @@ export const LoadState = (State) => ({
66
66
  State,
67
67
  });
68
68
  export class AdaptableStore {
69
+ TheStore;
70
+ Load;
71
+ emitter;
72
+ storageEngine;
73
+ currentStorageState;
74
+ previousStorageState;
75
+ loadStorageInProgress = false;
76
+ loadStateOnStartup = true; // set to false if you want no state
77
+ on = (eventName, callback) => {
78
+ return this.emitter.on(eventName, callback);
79
+ };
80
+ onAny = (callback) => {
81
+ return this.emitter.onAny(callback);
82
+ };
83
+ emit = (eventName, data) => {
84
+ return this.emitter.emit(eventName, data);
85
+ };
69
86
  /**
70
87
  *
71
88
  * @param adaptable The Adaptable instance
@@ -75,49 +92,6 @@ export class AdaptableStore {
75
92
  /*
76
93
  This is the main store for Adaptable State
77
94
  */
78
- this.loadStorageInProgress = false;
79
- this.loadStateOnStartup = true; // set to false if you want no state
80
- this.on = (eventName, callback) => {
81
- return this.emitter.on(eventName, callback);
82
- };
83
- this.onAny = (callback) => {
84
- return this.emitter.onAny(callback);
85
- };
86
- this.emit = (eventName, data) => {
87
- return this.emitter.emit(eventName, data);
88
- };
89
- this.loadStore = (config) => {
90
- const { adaptable, adaptableStateKey, initialState, postLoadHook } = config;
91
- const postProcessState = postLoadHook ?? ((state) => state);
92
- this.storageEngine.setStateKey(adaptableStateKey);
93
- // START STATE LOAD
94
- this.loadStorageInProgress = true;
95
- return (this.Load = this.storageEngine
96
- .load(adaptable, initialState)
97
- .then((storedState) => {
98
- if (storedState && this.loadStateOnStartup) {
99
- this.TheStore.dispatch(LoadState(postProcessState(adaptable.adaptableOptions.stateOptions.applyState(storedState, buildAdaptableStateFunctionConfig(adaptable)))));
100
- }
101
- })
102
- .then(() => {
103
- this.TheStore.dispatch(InitState());
104
- // END STATE LOAD
105
- this.loadStorageInProgress = false;
106
- }, (e) => {
107
- adaptable.api.consoleError('Failed to load previous Adaptable State : ', e);
108
- //for now i'm still initializing Adaptable even if loading state has failed....
109
- //we may revisit that later
110
- this.TheStore.dispatch(InitState());
111
- // END STATE LOAD
112
- this.loadStorageInProgress = false;
113
- this.TheStore.dispatch(PopupRedux.PopupShowAlert({
114
- alertType: 'generic',
115
- header: 'Configuration',
116
- message: 'Error loading your configuration:' + e,
117
- alertDefinition: ObjectFactory.CreateInternalAlertDefinitionForMessages('Error'),
118
- }));
119
- }));
120
- };
121
95
  let rootReducerObject = {
122
96
  // Reducers for Non-Persisted State
123
97
  Popup: PopupRedux.PopupReducer,
@@ -262,6 +236,38 @@ export class AdaptableStore {
262
236
  }
263
237
  return Promise.resolve(true);
264
238
  }
239
+ loadStore = (config) => {
240
+ const { adaptable, adaptableStateKey, initialState, postLoadHook } = config;
241
+ const postProcessState = postLoadHook ?? ((state) => state);
242
+ this.storageEngine.setStateKey(adaptableStateKey);
243
+ // START STATE LOAD
244
+ this.loadStorageInProgress = true;
245
+ return (this.Load = this.storageEngine
246
+ .load(adaptable, initialState)
247
+ .then((storedState) => {
248
+ if (storedState && this.loadStateOnStartup) {
249
+ this.TheStore.dispatch(LoadState(postProcessState(adaptable.adaptableOptions.stateOptions.applyState(storedState, buildAdaptableStateFunctionConfig(adaptable)))));
250
+ }
251
+ })
252
+ .then(() => {
253
+ this.TheStore.dispatch(InitState());
254
+ // END STATE LOAD
255
+ this.loadStorageInProgress = false;
256
+ }, (e) => {
257
+ adaptable.api.consoleError('Failed to load previous Adaptable State : ', e);
258
+ //for now i'm still initializing Adaptable even if loading state has failed....
259
+ //we may revisit that later
260
+ this.TheStore.dispatch(InitState());
261
+ // END STATE LOAD
262
+ this.loadStorageInProgress = false;
263
+ this.TheStore.dispatch(PopupRedux.PopupShowAlert({
264
+ alertType: 'generic',
265
+ header: 'Configuration',
266
+ message: 'Error loading your configuration:' + e,
267
+ alertDefinition: ObjectFactory.CreateInternalAlertDefinitionForMessages('Error'),
268
+ }));
269
+ }));
270
+ };
265
271
  }
266
272
  function createDevToolsActionMarkerMiddleware(adaptable) {
267
273
  const adaptableId = adaptable?.adaptableOptions?.adaptableId;
@@ -4,6 +4,10 @@ import ArrayExtensions from '../Utilities/Extensions/ArrayExtensions';
4
4
  * Base class for all strategies and does most of the work of creating menus
5
5
  */
6
6
  export class AdaptableModuleBase {
7
+ api;
8
+ moduleInfo;
9
+ AccessLevel;
10
+ agGridModuleDepsInfo;
7
11
  constructor(module, friendlyName, glyph, popup, description, api) {
8
12
  this.api = api;
9
13
  this.moduleInfo = {
@@ -16,6 +16,7 @@ import { getAlertBehaviourViewItems } from './Utilities/Alert/getAlertBehaviourV
16
16
  import { getAlertPreviewViewItems } from './Utilities/Alert/getAlertPreviewViewItems';
17
17
  import { getAlertTypeViewItems } from './Utilities/Alert/getAlertTypeViewItems';
18
18
  export class AlertModule extends AdaptableModuleBase {
19
+ isListeningToCellDataChanges;
19
20
  constructor(api) {
20
21
  super(ModuleConstants.AlertModuleId, ModuleConstants.AlertModuleFriendlyName, 'alert', 'AlertPopup', 'Get notified when things happen in Adaptable that you need to know about', api);
21
22
  this.isListeningToCellDataChanges = false;
@@ -7,6 +7,7 @@ import { getCalculatedColumnSettingsTags } from '../View/CalculatedColumn/Utilit
7
7
  import { getExpressionViewItems } from '../Utilities/getExpressionViewItems';
8
8
  import { getObjectTagsViewItems } from '../Utilities/getObjectTagsViewItems';
9
9
  export class CalculatedColumnModule extends AdaptableModuleBase {
10
+ isListeningToCellDataChanges;
10
11
  constructor(api) {
11
12
  super(ModuleConstants.CalculatedColumnModuleId, ModuleConstants.CalculatedColumnFriendlyName, 'calculated-column', 'CalculatedColumnPopup', 'Create bespoke columns whose cell value is derived dynamically from an Expression', api);
12
13
  this.isListeningToCellDataChanges = false;
@@ -8,9 +8,9 @@ import { AdaptableModuleBase } from './AdaptableModuleBase';
8
8
  * Module that provides Cell Summaries on numeric columns
9
9
  */
10
10
  export class CellSummaryModule extends AdaptableModuleBase {
11
+ cachedCellSummary = new WeakMap();
11
12
  constructor(api) {
12
13
  super(ModuleConstants.CellSummaryModuleId, ModuleConstants.CellSummaryFriendlyName, 'cells', 'CellSummaryPopup', 'See summary information on a group of numeric cells using multiple summary operations', api);
13
- this.cachedCellSummary = new WeakMap();
14
14
  }
15
15
  getViewAccessLevel() {
16
16
  return 'Full';
@@ -2,6 +2,7 @@ import { AdaptableModuleBase } from './AdaptableModuleBase';
2
2
  import * as ModuleConstants from '../Utilities/Constants/ModuleConstants';
3
3
  import { DataChangeHistoryStatusBarContent } from '../View/DataChangeHistory/DataChangeHistoryStatusBarContent';
4
4
  export class DataChangeHistoryModule extends AdaptableModuleBase {
5
+ isListeningToCellDataChanges;
5
6
  constructor(api) {
6
7
  super(ModuleConstants.DataChangeHistoryModuleId, ModuleConstants.DataChangeHistoryFriendlyName, 'target', 'DataChangeHistoryPopup', 'Provides an overview of all previous changes, giving the possibility to undo specific changes', api);
7
8
  this.isListeningToCellDataChanges = false;
@@ -12,6 +12,7 @@ import { FlashingCellWizard } from '../View/FlashingCell/Wizard/FlashingCellWiza
12
12
  import { getFlashingCellDurationViewItems } from './Utilities/FlashingCell/getFlashingCellDurationViewItems';
13
13
  import { errorOnce } from '../agGrid/AdaptableLogger';
14
14
  export class FlashingCellModule extends AdaptableModuleBase {
15
+ isListeningToCellDataChanges;
15
16
  constructor(api) {
16
17
  super(ModuleConstants.FlashingCellModuleId, ModuleConstants.FlashingCellFriendlyName, 'lightning', 'FlashingAlert', 'Flash cells when they change', api);
17
18
  this.isListeningToCellDataChanges = false;
@@ -5,6 +5,7 @@ import { FreeTextColumnWizard } from '../View/FreeTextColumn/Wizard/FreeTextColu
5
5
  import { getObjectTagsViewItems } from '../Utilities/getObjectTagsViewItems';
6
6
  import ArrayExtensions from '../Utilities/Extensions/ArrayExtensions';
7
7
  export class FreeTextColumnModule extends AdaptableModuleBase {
8
+ isListeningToCellDataChanges;
8
9
  constructor(api) {
9
10
  super(ModuleConstants.FreeTextColumnModuleId, ModuleConstants.FreeTextColumnFriendlyName, 'horizontal-lines', 'FreeTextColumnPopup', 'Dynamic column showing custom content (stored in state and not with grid data)', api);
10
11
  this.isListeningToCellDataChanges = false;
@@ -17,9 +17,10 @@ import { getGridFilterViewItems } from '../View/Layout/Wizard/getGridFilterPrevi
17
17
  import { RowSummaryService } from '../Utilities/Services/RowSummaryService';
18
18
  import { isPivotLayout } from '../Api/Implementation/LayoutHelpers';
19
19
  export class LayoutModule extends AdaptableModuleBase {
20
+ LayoutState;
21
+ rowSummaryService = new RowSummaryService(this.api);
20
22
  constructor(api) {
21
23
  super(ModuleConstants.LayoutModuleId, ModuleConstants.LayoutFriendlyName, 'grid', 'LayoutPopup', 'Named sets of column visibility, order, groupings, aggregation, pivots etc.', api);
22
- this.rowSummaryService = new RowSummaryService(this.api);
23
24
  }
24
25
  onAdaptableReady() {
25
26
  this.rowSummaryService.onAdaptableReady();
@@ -11,6 +11,8 @@ import { MovePlusMinus } from '../View/PlusMinus/MovePlusMinus';
11
11
  import { PlusMinusWizard } from '../View/PlusMinus/Wizard/PlusMinusWizard';
12
12
  import { errorOnce } from '../agGrid/AdaptableLogger';
13
13
  export class PlusMinusModule extends AdaptableModuleBase {
14
+ shouldHandleKeyDown;
15
+ adaptable;
14
16
  constructor(api) {
15
17
  super(ModuleConstants.PlusMinusModuleId, ModuleConstants.PlusMinusFriendlyName, 'add-circle', 'PlusMinusPopup', 'Configure how a cell value will edit when the + or - keys are pressed', api);
16
18
  this.shouldHandleKeyDown = false;
@@ -31,6 +31,7 @@ const NodeSchedule = {
31
31
  },
32
32
  };
33
33
  export class ScheduleModule extends AdaptableModuleBase {
34
+ scheduleJobs;
34
35
  constructor(api) {
35
36
  super(ModuleConstants.ScheduleModuleId, ModuleConstants.ScheduleFriendlyName, 'schedule', 'SchedulePopup', 'Schedule AdapTable functionality to run at times of your choosing (e.g. run reports)', api);
36
37
  this.scheduleJobs = [];
@@ -9,6 +9,8 @@ import { getShortcutSettingsViewItems } from './Utilities/Shortcut/getShortcutSe
9
9
  import { getObjectTagsViewItems } from '../Utilities/getObjectTagsViewItems';
10
10
  import { getScopeViewItems } from '../Utilities/getScopeViewItems';
11
11
  export class ShortcutModule extends AdaptableModuleBase {
12
+ shouldHandleKeyDown;
13
+ adaptable;
12
14
  constructor(api) {
13
15
  super(ModuleConstants.ShortcutModuleId, ModuleConstants.ShortcutFriendlyName, 'link', 'ShortcutPopup', 'Set up rules so cells update mathematically when keys are pressed in numeric cells', api);
14
16
  this.shouldHandleKeyDown = false;
@@ -11,18 +11,18 @@ import ArrayExtensions from '../Utilities/Extensions/ArrayExtensions';
11
11
  import flatten from 'lodash/flatten';
12
12
  import AdaptableHelper from '../Utilities/Helpers/AdaptableHelper';
13
13
  export class TeamSharingModule extends AdaptableModuleBase {
14
+ SKIP_TEAMSHARING_UPDATE_ACTIONS = [
15
+ TEAMSHARING_GET,
16
+ TEAMSHARING_SET,
17
+ TEAMSHARING_SHARE,
18
+ TEAMSHARING_IMPORT_ITEM,
19
+ TEAMSHARING_PROCESS_IMPORT,
20
+ TEAMSHARING_REMOVE_ITEM,
21
+ TEAMSHARING_LINK_ITEM,
22
+ TEAMSHARING_UPDATE_ITEM,
23
+ ];
14
24
  constructor(api) {
15
25
  super(ModuleConstants.TeamSharingModuleId, ModuleConstants.TeamSharingFriendlyName, 'folder-shared', 'TeamSharingPopup', 'Team Sharing allows users to share - at run-time - Adaptable Objects between colleagues.', api);
16
- this.SKIP_TEAMSHARING_UPDATE_ACTIONS = [
17
- TEAMSHARING_GET,
18
- TEAMSHARING_SET,
19
- TEAMSHARING_SHARE,
20
- TEAMSHARING_IMPORT_ITEM,
21
- TEAMSHARING_PROCESS_IMPORT,
22
- TEAMSHARING_REMOVE_ITEM,
23
- TEAMSHARING_LINK_ITEM,
24
- TEAMSHARING_UPDATE_ITEM,
25
- ];
26
26
  }
27
27
  onAdaptableReady() {
28
28
  if (this.api.teamSharingApi.isTeamSharingAvailable()) {
@@ -1,8 +1,5 @@
1
1
  export const getFormatColumnSettingsViewItems = (formatColumn) => {
2
2
  let values = [];
3
- if (formatColumn.CellAlignment) {
4
- values.push(`Cell Alignment: ${formatColumn.CellAlignment}`);
5
- }
6
3
  if (formatColumn.RowScope) {
7
4
  if (formatColumn.RowScope.ExcludeDataRows) {
8
5
  values.push('Exclude Data Rows');
@@ -11,8 +11,8 @@ export declare const QuantileAggregatedScalarQueryDocsLink = "https://www.adapta
11
11
  export declare const PredicateDocsLink = "https://www.adaptabletools.com/docs/adaptable-predicate";
12
12
  export declare const PrimaryKeyDocsLink = "https://www.adaptabletools.com/docs/getting-started-primary-key";
13
13
  export declare const LicenseDocsLink = "https://www.adaptabletools.com/buy/buying-adaptable-licensing";
14
- export declare const AdaptableOptionsDocsLink = "https://www.adaptabletools.com/docs/reference-options-overview";
15
- export declare const AgGridModulesDocsLink = "https://www.adaptabletools.com/docs/dev-guide-aggrid-modules-overview";
14
+ export declare const AdaptableOptionsDocsLink = "https://www.adaptabletools.com/docs/technical-reference-adaptable-options";
15
+ export declare const AgGridModulesDocsLink = "https://www.adaptabletools.com/docs/getting-started-aggrid-modules";
16
16
  export declare const AlertMessageDocsLink = "https://www.adaptabletools.com/docs/handbook-alerting-message";
17
17
  export declare const FormatColumnPlaceholderDocsLink = "https://www.adaptabletools.com/docs/handbook-column-formatting-display-format-placeholder";
18
- export declare const AgGridRequiredModulesDocsLink = "https://www.adaptabletools.com/docs/dev-guide-aggrid-modules-overview#mandatory-modules";
18
+ export declare const AgGridRequiredModulesDocsLink = "https://www.adaptabletools.com/docs/getting-started-aggrid-modules#mandatory-modules";
@@ -12,8 +12,8 @@ export const QuantileAggregatedScalarQueryDocsLink = `${HOST_URL_DOCS}/adaptable
12
12
  export const PredicateDocsLink = `${HOST_URL_DOCS}/adaptable-predicate`;
13
13
  export const PrimaryKeyDocsLink = `${HOST_URL_DOCS}/getting-started-primary-key`;
14
14
  export const LicenseDocsLink = `${HOST_URL_ROOT}/buy/buying-adaptable-licensing`;
15
- export const AdaptableOptionsDocsLink = `${HOST_URL_DOCS}/reference-options-overview`;
16
- export const AgGridModulesDocsLink = `${HOST_URL_DOCS}/dev-guide-aggrid-modules-overview`;
15
+ export const AdaptableOptionsDocsLink = `${HOST_URL_DOCS}/technical-reference-adaptable-options`;
16
+ export const AgGridModulesDocsLink = `${HOST_URL_DOCS}/getting-started-aggrid-modules`;
17
17
  export const AlertMessageDocsLink = `${HOST_URL_DOCS}/handbook-alerting-message`;
18
18
  export const FormatColumnPlaceholderDocsLink = `${HOST_URL_DOCS}/handbook-column-formatting-display-format-placeholder`;
19
- export const AgGridRequiredModulesDocsLink = `${HOST_URL_DOCS}/dev-guide-aggrid-modules-overview#mandatory-modules`;
19
+ export const AgGridRequiredModulesDocsLink = `${HOST_URL_DOCS}/getting-started-aggrid-modules#mandatory-modules`;
@@ -1,5 +1,8 @@
1
1
  const SORT_ASC_REVISION = (p1, p2) => sortAscending(p1.revision, p2.revision);
2
2
  export class DeepMap {
3
+ map = new Map();
4
+ length = 0;
5
+ revision = 0;
3
6
  static clone(map) {
4
7
  const clone = new DeepMap();
5
8
  map.visit((pair, keys) => {
@@ -8,37 +11,6 @@ export class DeepMap {
8
11
  return clone;
9
12
  }
10
13
  constructor(initial) {
11
- this.map = new Map();
12
- this.length = 0;
13
- this.revision = 0;
14
- this.visit = (fn) => {
15
- this.map.forEach((_, k) => this.visitKey(k, this.map, [], fn));
16
- };
17
- this.visitDepthFirst = (fn) => {
18
- this.visitWithNext([], fn);
19
- };
20
- this.visitWithNext = (parentKeys, fn, currentMap = this.map) => {
21
- if (!currentMap) {
22
- return;
23
- }
24
- let i = 0;
25
- currentMap.forEach((_, key) => {
26
- const pair = currentMap.get(key);
27
- if (!pair) {
28
- return;
29
- }
30
- const { map } = pair;
31
- const keys = [...parentKeys, key];
32
- const next = map ? () => this.visitWithNext(keys, fn, map) : undefined;
33
- if (pair.hasOwnProperty('value')) {
34
- fn(pair.value, keys, i, next);
35
- i++;
36
- }
37
- else {
38
- next?.();
39
- }
40
- });
41
- };
42
14
  if (initial) {
43
15
  initial.forEach((entry) => {
44
16
  const [keys, value] = entry;
@@ -222,6 +194,34 @@ export class DeepMap {
222
194
  // if it was called by fn, it won't be called again, as it's once-d
223
195
  next();
224
196
  }
197
+ visit = (fn) => {
198
+ this.map.forEach((_, k) => this.visitKey(k, this.map, [], fn));
199
+ };
200
+ visitDepthFirst = (fn) => {
201
+ this.visitWithNext([], fn);
202
+ };
203
+ visitWithNext = (parentKeys, fn, currentMap = this.map) => {
204
+ if (!currentMap) {
205
+ return;
206
+ }
207
+ let i = 0;
208
+ currentMap.forEach((_, key) => {
209
+ const pair = currentMap.get(key);
210
+ if (!pair) {
211
+ return;
212
+ }
213
+ const { map } = pair;
214
+ const keys = [...parentKeys, key];
215
+ const next = map ? () => this.visitWithNext(keys, fn, map) : undefined;
216
+ if (pair.hasOwnProperty('value')) {
217
+ fn(pair.value, keys, i, next);
218
+ i++;
219
+ }
220
+ else {
221
+ next?.();
222
+ }
223
+ });
224
+ };
225
225
  getArray(fn) {
226
226
  const result = [];
227
227
  this.visit((pair, keys) => {
@@ -639,7 +639,7 @@ export const scalarExpressionFunctions = {
639
639
  }
640
640
  return result;
641
641
  },
642
- description: "Returns the percentage difference between a cell's current value and its previous value.",
642
+ description: "Returns percentage difference between a cell's current value and previous value",
643
643
  signatures: [
644
644
  'PERCENT_CHANGE( [colName], <INCREASE|DECREASE> )',
645
645
  'PERCENT_CHANGE( COL(name: string), <INCREASE|DECREASE> )',
@@ -684,7 +684,7 @@ export const scalarExpressionFunctions = {
684
684
  }
685
685
  return result;
686
686
  },
687
- description: "Returns the absolute difference between a cell's current value and its previous value.",
687
+ description: "Returns absolute difference between a cell's current value and previous value",
688
688
  signatures: [
689
689
  'ABSOLUTE_CHANGE( [colName] )',
690
690
  'ABSOLUTE_CHANGE( COL(name: string) )',
@@ -716,7 +716,7 @@ export const scalarExpressionFunctions = {
716
716
  const previousValue = context.dataChangedEvent.oldValue;
717
717
  return currentColumnValue !== previousValue;
718
718
  },
719
- description: "Returns true if a cell's current value is different from its previous value, otherwise false. If no column is provided, it checks if any value has changed.",
719
+ description: "Returns true if cell's current value is different from previous value, otherwise false; if no column is provided, it checks if any value has changed",
720
720
  signatures: ['ANY_CHANGE( [colName] )', 'ANY_CHANGE()'],
721
721
  examples: ['ANY_CHANGE([col1])', 'ANY_CHANGE()'],
722
722
  category: 'changes',
@@ -80,6 +80,20 @@ export const convertAdaptableStyleToCSS = (style) => {
80
80
  break;
81
81
  }
82
82
  }
83
+ if (style.Alignment) {
84
+ switch (style.Alignment) {
85
+ case 'Default':
86
+ case 'Left':
87
+ result.textAlign = 'left';
88
+ break;
89
+ case 'Right':
90
+ result.textAlign = 'right';
91
+ break;
92
+ case 'Center':
93
+ result.textAlign = 'center';
94
+ break;
95
+ }
96
+ }
83
97
  // assertion added to comply with the ag-Grid types
84
98
  return result;
85
99
  };
@@ -11,6 +11,12 @@ export class MenuItemDoReduxAction {
11
11
  };
12
12
  this.reduxAction = reduxAction;
13
13
  }
14
+ name;
15
+ reduxAction;
16
+ label;
17
+ category;
18
+ isVisible;
19
+ icon;
14
20
  }
15
21
  export class MenuItemDoClickFunction {
16
22
  constructor(name, label, module, clickFunction, icon, isVisible) {
@@ -23,6 +29,12 @@ export class MenuItemDoClickFunction {
23
29
  };
24
30
  this.onClick = clickFunction;
25
31
  }
32
+ name;
33
+ onClick;
34
+ label;
35
+ category;
36
+ isVisible;
37
+ icon;
26
38
  }
27
39
  // A menu item which shows a popup screen when it is clieked
28
40
  export class MenuItemShowPopup {
@@ -36,4 +48,10 @@ export class MenuItemShowPopup {
36
48
  };
37
49
  this.reduxAction = PopupRedux.PopupShowScreen(module, componentName, popupParams);
38
50
  }
51
+ name;
52
+ reduxAction;
53
+ label;
54
+ category;
55
+ isVisible;
56
+ icon;
39
57
  }
@@ -228,7 +228,6 @@ export function CreateEmptyFormatColumn() {
228
228
  Scope: undefined,
229
229
  Style: CreateEmptyStyle(),
230
230
  DisplayFormat: undefined,
231
- CellAlignment: undefined,
232
231
  RowScope: undefined,
233
232
  Target: 'cell',
234
233
  };
@@ -292,6 +291,7 @@ export function CreateEmptyStyle() {
292
291
  FontStyle: undefined,
293
292
  FontSize: undefined,
294
293
  ClassName: undefined,
294
+ Alignment: undefined,
295
295
  };
296
296
  }
297
297
  export function CreateSystemStatusMessageInfo(message, type, furtherInfo) {
@@ -8,6 +8,14 @@ const logOnce = (message, loggingFn) => {
8
8
  doOnceFlags[message] = true;
9
9
  };
10
10
  export class AggregatedScalarLiveValue {
11
+ source;
12
+ requestingModule;
13
+ adaptableApi;
14
+ getRowNodes;
15
+ aggregationReducerName;
16
+ aggregatedScalarExpression;
17
+ expressionEvaluation;
18
+ aggregationResult;
11
19
  constructor(source, requestingModule, adaptableApi, getRowNodes) {
12
20
  this.source = source;
13
21
  this.requestingModule = requestingModule;
@@ -3,12 +3,11 @@ import Emitter from '../Emitter';
3
3
  import { combineLatest, of } from 'rxjs';
4
4
  import { AlertModuleId } from '../Constants/ModuleConstants';
5
5
  export class AlertService {
6
+ adaptableApi;
7
+ emitter;
8
+ reactiveAlertsMap = new Map();
6
9
  constructor(adaptableApi) {
7
10
  this.adaptableApi = adaptableApi;
8
- this.reactiveAlertsMap = new Map();
9
- this.onReactiveAlertTriggered = (callback) => {
10
- return this.emitter.on('ReactiveAlertTriggered', callback);
11
- };
12
11
  this.emitter = new Emitter();
13
12
  }
14
13
  destroy() {
@@ -18,6 +17,9 @@ export class AlertService {
18
17
  this.reactiveAlertsMap.clear();
19
18
  this.reactiveAlertsMap = null;
20
19
  }
20
+ onReactiveAlertTriggered = (callback) => {
21
+ return this.emitter.on('ReactiveAlertTriggered', callback);
22
+ };
21
23
  createReactiveAlert(alertDefinition) {
22
24
  // if there is already a reactive alert for this definition, delete it (possible in case of editing definitions),
23
25
  this.deleteReactiveAlert(alertDefinition);
@@ -5,6 +5,9 @@ import ArrayExtensions from '../Extensions/ArrayExtensions';
5
5
  * If there are active Notes or Comments it listens to Cell Selection and Mouse Enter events
6
6
  */
7
7
  export class AnnotationsService {
8
+ api;
9
+ adaptable;
10
+ isListeningToEvents;
8
11
  constructor(api) {
9
12
  this.api = api;
10
13
  this.isListeningToEvents = false;
@@ -25,7 +28,7 @@ export class AnnotationsService {
25
28
  if (a?.ColumnId === b?.ColumnId && a?.PrimaryKeyValue === b?.PrimaryKeyValue) {
26
29
  return true;
27
30
  }
28
- // Primary keys retreived from the grid dom are always strings, so we must also consider them strings
31
+ // Primary keys retrieved from the grid dom are always strings, so we must also consider them strings
29
32
  if ((typeof a.PrimaryKeyValue === 'number' && typeof b.PrimaryKeyValue === 'string') ||
30
33
  (typeof b.PrimaryKeyValue === 'string' && typeof a.PrimaryKeyValue === 'number')) {
31
34
  return (a.PrimaryKeyValue.toString() === b.PrimaryKeyValue.toString() && a.ColumnId === b.ColumnId);
@@ -1,9 +1,10 @@
1
1
  import { CalculatedColumnModuleId } from '../Constants/ModuleConstants';
2
2
  import { AggregatedScalarLiveValue } from './AggregatedScalarLiveValue';
3
3
  export class CalculatedColumnExpressionService {
4
+ adaptableApi;
5
+ aggregatedScalarLiveValuesMap = new Map();
4
6
  constructor(adaptableApi) {
5
7
  this.adaptableApi = adaptableApi;
6
- this.aggregatedScalarLiveValuesMap = new Map();
7
8
  this.adaptableApi = adaptableApi;
8
9
  }
9
10
  listentoCellDataChange(cellDataChangedInfo) {