@adaptabletools/adaptable 12.1.5 → 12.1.8-canary.0

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 (214) hide show
  1. package/base.css +11 -49
  2. package/bundle.cjs.js +106 -106
  3. package/index.css +13 -60
  4. package/package.json +1 -1
  5. package/publishTimestamp.d.ts +1 -1
  6. package/publishTimestamp.js +1 -1
  7. package/src/AdaptableInterfaces/IAdaptable.d.ts +12 -4
  8. package/src/AdaptableOptions/ColumnOptions.d.ts +2 -4
  9. package/src/AdaptableOptions/FilterOptions.d.ts +19 -0
  10. package/src/AdaptableOptions/FinancePluginOptions.d.ts +22 -1
  11. package/src/AdaptableOptions/StateOptions.d.ts +25 -12
  12. package/src/AdaptableOptions/UserInterfaceOptions.d.ts +31 -24
  13. package/src/Api/ColumnApi.d.ts +6 -1
  14. package/src/Api/ExportApi.d.ts +5 -0
  15. package/src/Api/FilterApi.d.ts +29 -0
  16. package/src/Api/FlashingCellApi.d.ts +8 -0
  17. package/src/Api/GridApi.d.ts +1 -0
  18. package/src/Api/Implementation/ColumnApiImpl.d.ts +2 -1
  19. package/src/Api/Implementation/ColumnApiImpl.js +7 -2
  20. package/src/Api/Implementation/DataSetApiImpl.js +1 -1
  21. package/src/Api/Implementation/ExportApiImpl.d.ts +3 -1
  22. package/src/Api/Implementation/ExportApiImpl.js +19 -3
  23. package/src/Api/Implementation/FilterApiImpl.d.ts +6 -0
  24. package/src/Api/Implementation/FilterApiImpl.js +42 -4
  25. package/src/Api/Implementation/FlashingCellApiImpl.d.ts +1 -0
  26. package/src/Api/Implementation/FlashingCellApiImpl.js +4 -0
  27. package/src/Api/Implementation/GridApiImpl.d.ts +1 -0
  28. package/src/Api/Implementation/GridApiImpl.js +4 -4
  29. package/src/Api/Implementation/InternalApiImpl.d.ts +0 -1
  30. package/src/Api/Implementation/InternalApiImpl.js +0 -3
  31. package/src/Api/Implementation/LayoutApiImpl.d.ts +1 -1
  32. package/src/Api/Implementation/LayoutApiImpl.js +4 -3
  33. package/src/Api/Implementation/PredicateApiImpl.js +4 -0
  34. package/src/Api/Implementation/QueryApiImpl.js +1 -1
  35. package/src/Api/Implementation/QueryLanguageApiImpl.js +9 -1
  36. package/src/Api/Implementation/TeamSharingApiImpl.js +1 -1
  37. package/src/Api/InternalApi.d.ts +0 -1
  38. package/src/Api/LayoutApi.d.ts +1 -1
  39. package/src/Api/SystemStatusApi.d.ts +1 -1
  40. package/src/Api/ToolPanelApi.d.ts +1 -1
  41. package/src/PredefinedConfig/CalculatedColumnState.d.ts +2 -2
  42. package/src/PredefinedConfig/Common/AdaptableColumn.js +3 -2
  43. package/src/PredefinedConfig/Common/AdaptablePredicate.js +30 -10
  44. package/src/PredefinedConfig/Common/AdaptableQuery.js +1 -1
  45. package/src/PredefinedConfig/Common/AggregationColumns.d.ts +6 -0
  46. package/src/PredefinedConfig/Common/AggregationColumns.js +4 -0
  47. package/src/PredefinedConfig/Common/ColumnFilter.d.ts +2 -2
  48. package/src/PredefinedConfig/Common/Enums.d.ts +0 -15
  49. package/src/PredefinedConfig/Common/Enums.js +1 -18
  50. package/src/PredefinedConfig/Common/SpecialColumnSettings.d.ts +6 -6
  51. package/src/PredefinedConfig/ExportState.d.ts +12 -4
  52. package/src/PredefinedConfig/LayoutState.d.ts +2 -1
  53. package/src/PredefinedConfig/PopupState.d.ts +1 -2
  54. package/src/Redux/ActionsReducers/AlertRedux.d.ts +1 -1
  55. package/src/Redux/ActionsReducers/AlertRedux.js +1 -1
  56. package/src/Redux/ActionsReducers/ConditionalStyleRedux.d.ts +1 -1
  57. package/src/Redux/ActionsReducers/ConditionalStyleRedux.js +1 -1
  58. package/src/Redux/ActionsReducers/CustomSortRedux.d.ts +1 -1
  59. package/src/Redux/ActionsReducers/CustomSortRedux.js +1 -1
  60. package/src/Redux/ActionsReducers/FlashingCellRedux.d.ts +1 -1
  61. package/src/Redux/ActionsReducers/FlashingCellRedux.js +1 -1
  62. package/src/Redux/ActionsReducers/FormatColumnRedux.d.ts +1 -1
  63. package/src/Redux/ActionsReducers/FormatColumnRedux.js +1 -1
  64. package/src/Redux/ActionsReducers/LayoutRedux.d.ts +28 -0
  65. package/src/Redux/ActionsReducers/LayoutRedux.js +80 -2
  66. package/src/Redux/ActionsReducers/PlusMinusRedux.d.ts +1 -1
  67. package/src/Redux/ActionsReducers/PlusMinusRedux.js +1 -1
  68. package/src/Redux/ActionsReducers/PopupRedux.d.ts +0 -2
  69. package/src/Redux/ActionsReducers/PopupRedux.js +1 -28
  70. package/src/Redux/ActionsReducers/ScheduleRedux.d.ts +5 -5
  71. package/src/Redux/ActionsReducers/ScheduleRedux.js +5 -5
  72. package/src/Redux/ActionsReducers/ShortcutRedux.d.ts +1 -1
  73. package/src/Redux/ActionsReducers/ShortcutRedux.js +1 -1
  74. package/src/Redux/ActionsReducers/SystemRedux.d.ts +1 -2
  75. package/src/Redux/ActionsReducers/SystemRedux.js +1 -2
  76. package/src/Redux/Store/AdaptableStore.js +30 -16
  77. package/src/Strategy/AlertModule.d.ts +1 -0
  78. package/src/Strategy/AlertModule.js +20 -0
  79. package/src/Strategy/CalculatedColumnModule.js +2 -2
  80. package/src/Strategy/ExportModule.d.ts +0 -1
  81. package/src/Strategy/ExportModule.js +0 -16
  82. package/src/Strategy/FilterModule.js +6 -0
  83. package/src/Strategy/FlashingCellModule.js +2 -2
  84. package/src/Strategy/Interface/IModule.d.ts +4 -0
  85. package/src/Strategy/LayoutModule.js +20 -20
  86. package/src/Strategy/Utilities/FormatColumn/getFormatColumnStyleViewItems.js +16 -1
  87. package/src/Strategy/Utilities/Layout/getLayoutFilterViewItems.js +15 -11
  88. package/src/Utilities/Constants/DocumentationLinkConstants.d.ts +1 -0
  89. package/src/Utilities/Constants/DocumentationLinkConstants.js +2 -1
  90. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +3 -0
  91. package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.d.ts +12 -2
  92. package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.js +30 -66
  93. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.d.ts +22 -6
  94. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +423 -220
  95. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.d.ts +7 -1
  96. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +23 -7
  97. package/src/Utilities/ExpressionFunctions/scalarAggregationHelper.d.ts +0 -1
  98. package/src/Utilities/ExpressionFunctions/scalarAggregationHelper.js +6 -54
  99. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +17 -5
  100. package/src/Utilities/Extensions/ArrayExtensions.js +6 -0
  101. package/src/Utilities/Helpers/CalendarHelper.js +10 -7
  102. package/src/Utilities/Helpers/DateHelper.d.ts +0 -26
  103. package/src/Utilities/Helpers/DateHelper.js +2 -32
  104. package/src/Utilities/Interface/MessagePopups.d.ts +0 -4
  105. package/src/Utilities/ObjectFactory.d.ts +6 -4
  106. package/src/Utilities/ObjectFactory.js +30 -17
  107. package/src/Utilities/Services/AggregatedScalarLiveValue.d.ts +25 -0
  108. package/src/Utilities/Services/AggregatedScalarLiveValue.js +103 -0
  109. package/src/Utilities/Services/AlertService.d.ts +0 -1
  110. package/src/Utilities/Services/AlertService.js +5 -17
  111. package/src/Utilities/Services/CalculatedColumnExpressionService.d.ts +4 -4
  112. package/src/Utilities/Services/CalculatedColumnExpressionService.js +29 -154
  113. package/src/Utilities/Services/Interface/ICalculatedColumnExpressionService.d.ts +2 -2
  114. package/src/Utilities/Services/Interface/IQueryLanguageService.d.ts +6 -3
  115. package/src/Utilities/Services/QueryLanguageService.d.ts +6 -3
  116. package/src/Utilities/Services/QueryLanguageService.js +23 -6
  117. package/src/Utilities/Services/ReportService.js +47 -46
  118. package/src/View/AdaptableView.js +1 -2
  119. package/src/View/CalculatedColumn/Utilities/getCalculatedColumnSettingsTags.d.ts +2 -0
  120. package/src/View/CalculatedColumn/Utilities/{getCalculatedColumnSettingTags.js → getCalculatedColumnSettingsTags.js} +5 -3
  121. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.d.ts +10 -0
  122. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +80 -0
  123. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +21 -15
  124. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.d.ts +1 -2
  125. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +10 -53
  126. package/src/View/CalculatedColumn/Wizard/CalculatedColumnWizard.js +14 -3
  127. package/src/View/Components/AdaptableDateInput/index.js +1 -1
  128. package/src/View/Components/AdaptableObjectList/AdaptableObjectCompactList.js +42 -6
  129. package/src/View/Components/AdaptableObjectList/AdaptableObjectList.js +1 -1
  130. package/src/View/Components/EntityRulesEditor/index.js +26 -5
  131. package/src/View/Components/FilterForm/FilterForm.js +10 -5
  132. package/src/View/Components/FilterForm/ListBoxFilterForm.js +1 -0
  133. package/src/View/Components/FilterForm/QuickFilterForm.js +12 -7
  134. package/src/View/Components/PermittedValuesSelector/PermitedValuesSelector.d.ts +9 -0
  135. package/src/View/Components/PermittedValuesSelector/PermitedValuesSelector.js +28 -0
  136. package/src/View/Components/PermittedValuesSelector/index.d.ts +1 -0
  137. package/src/View/Components/PermittedValuesSelector/index.js +5 -0
  138. package/src/View/Components/Popups/AdaptablePopup/Navigation.js +2 -2
  139. package/src/View/Components/Popups/AdaptableToaster.js +2 -7
  140. package/src/View/Components/Popups/WindowPopups/windowFactory.d.ts +0 -1
  141. package/src/View/Components/Popups/WindowPopups/windowFactory.js +1 -4
  142. package/src/View/Export/ExportViewPanel.d.ts +1 -2
  143. package/src/View/Export/ExportViewPanel.js +2 -6
  144. package/src/View/Export/Wizard/ReportColumnTypeWizard.d.ts +1 -2
  145. package/src/View/Export/Wizard/ReportColumnTypeWizard.js +11 -12
  146. package/src/View/Export/Wizard/ReportRowTypeWizard.d.ts +1 -2
  147. package/src/View/Export/Wizard/ReportRowTypeWizard.js +12 -13
  148. package/src/View/Export/Wizard/ReportSettingsWizard.js +1 -2
  149. package/src/View/Filter/FilterViewPanel.js +20 -4
  150. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +1 -1
  151. package/src/View/FreeTextColumn/FreeTextColumnSummary.js +1 -2
  152. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +1 -1
  153. package/src/View/FreeTextColumn/Wizard/FreeTextColumnWizard.js +1 -1
  154. package/src/View/Layout/Wizard/{LayoutEditor → Components}/ColumnLabels.d.ts +0 -0
  155. package/src/View/Layout/Wizard/{LayoutEditor → Components}/ColumnLabels.js +0 -0
  156. package/src/View/Layout/Wizard/LayoutWizard.js +1 -0
  157. package/src/View/Layout/Wizard/sections/AggregationsSection.d.ts +1 -0
  158. package/src/View/Layout/Wizard/sections/AggregationsSection.js +69 -8
  159. package/src/View/Layout/Wizard/sections/ColumnsSection.js +1 -1
  160. package/src/View/Query/QueryViewPanel.js +1 -1
  161. package/src/agGrid/Adaptable.d.ts +12 -3
  162. package/src/agGrid/Adaptable.js +225 -152
  163. package/src/agGrid/agGridHelper.d.ts +1 -0
  164. package/src/agGrid/agGridHelper.js +5 -3
  165. package/src/agGrid/agGridMenuHelper.d.ts +1 -0
  166. package/src/agGrid/agGridMenuHelper.js +4 -2
  167. package/src/agGrid/weightedAverage.d.ts +6 -0
  168. package/src/agGrid/weightedAverage.js +66 -0
  169. package/src/components/ExpressionEditor/BaseEditorInput.d.ts +1 -0
  170. package/src/components/ExpressionEditor/BaseEditorInput.js +2 -3
  171. package/src/components/ExpressionEditor/EditorInput.d.ts +1 -1
  172. package/src/components/ExpressionEditor/EditorInput.js +24 -4
  173. package/src/components/ExpressionEditor/{EditorInputReactive.d.ts → EditorInputWithWhereClause.d.ts} +3 -3
  174. package/src/components/ExpressionEditor/{EditorInputReactive.js → EditorInputWithWhereClause.js} +6 -5
  175. package/src/components/ExpressionEditor/editorButtonsAggregatedBoolean.d.ts +2 -0
  176. package/src/components/ExpressionEditor/{editorButtonsReactive.js → editorButtonsAggregatedBoolean.js} +22 -37
  177. package/src/components/ExpressionEditor/editorButtonsAggregatedScalar.js +5 -10
  178. package/src/components/ExpressionEditor/editorButtonsCumulativeAggregatedScalar.d.ts +2 -0
  179. package/src/components/ExpressionEditor/editorButtonsCumulativeAggregatedScalar.js +50 -0
  180. package/src/components/ExpressionEditor/editorButtonsObservable.d.ts +2 -0
  181. package/src/components/ExpressionEditor/editorButtonsObservable.js +40 -0
  182. package/src/components/ExpressionEditor/index.d.ts +1 -1
  183. package/src/components/ExpressionEditor/index.js +26 -5
  184. package/src/components/ProgressIndicator/ProgressIndicator.js +10 -12
  185. package/src/metamodel/adaptable.metamodel.d.ts +129 -7
  186. package/src/metamodel/adaptable.metamodel.js +1 -1
  187. package/src/parser/src/types.d.ts +1 -1
  188. package/src/types.d.ts +4 -4
  189. package/version.d.ts +1 -1
  190. package/version.js +1 -1
  191. package/src/View/CalculatedColumn/Utilities/getCalculatedColumnSettingTags.d.ts +0 -2
  192. package/src/View/Layout/LayoutEditorStandalonePopup.d.ts +0 -3
  193. package/src/View/Layout/LayoutEditorStandalonePopup.js +0 -78
  194. package/src/View/Layout/Wizard/LayoutEditor/ColumnList.d.ts +0 -27
  195. package/src/View/Layout/Wizard/LayoutEditor/ColumnList.js +0 -86
  196. package/src/View/Layout/Wizard/LayoutEditor/ColumnSortList.d.ts +0 -16
  197. package/src/View/Layout/Wizard/LayoutEditor/ColumnSortList.js +0 -89
  198. package/src/View/Layout/Wizard/LayoutEditor/PivotList.d.ts +0 -15
  199. package/src/View/Layout/Wizard/LayoutEditor/PivotList.js +0 -70
  200. package/src/View/Layout/Wizard/LayoutEditor/RowGroupsList.d.ts +0 -15
  201. package/src/View/Layout/Wizard/LayoutEditor/RowGroupsList.js +0 -70
  202. package/src/View/Layout/Wizard/LayoutEditor/droppableIds.d.ts +0 -7
  203. package/src/View/Layout/Wizard/LayoutEditor/droppableIds.js +0 -11
  204. package/src/View/Layout/Wizard/LayoutEditor/getItemStyle.d.ts +0 -6
  205. package/src/View/Layout/Wizard/LayoutEditor/getItemStyle.js +0 -26
  206. package/src/View/Layout/Wizard/LayoutEditor/index.d.ts +0 -9
  207. package/src/View/Layout/Wizard/LayoutEditor/index.js +0 -367
  208. package/src/View/Layout/Wizard/LayoutEditor/reducer.d.ts +0 -28
  209. package/src/View/Layout/Wizard/LayoutEditor/reducer.js +0 -46
  210. package/src/View/Layout/Wizard/LayoutEditor/utils.d.ts +0 -10
  211. package/src/View/Layout/Wizard/LayoutEditor/utils.js +0 -14
  212. package/src/View/Layout/Wizard/LayoutEditorWizard.d.ts +0 -30
  213. package/src/View/Layout/Wizard/LayoutEditorWizard.js +0 -132
  214. package/src/components/ExpressionEditor/editorButtonsReactive.d.ts +0 -2
@@ -11,6 +11,5 @@ export declare class AlertService implements IAlertService {
11
11
  onReactiveAlertTriggered: (callback: EmitterCallback) => (() => void);
12
12
  createReactiveAlert(alertDefinition: AlertDefinition): void;
13
13
  deleteReactiveAlert(alertDefinition: AlertDefinition): void;
14
- private isValidExpression;
15
14
  private evaluateReactiveExpression;
16
15
  }
@@ -25,11 +25,10 @@ class AlertService {
25
25
  createReactiveAlert(alertDefinition) {
26
26
  // if there is already a reactive alert for this definition, delete it (possible in case of editing definitions),
27
27
  this.deleteReactiveAlert(alertDefinition);
28
- if (!alertDefinition.Rule.ObservableExpression &&
29
- !alertDefinition.Rule.AggregatedBooleanExpression) {
28
+ if (!alertDefinition.Rule.ObservableExpression) {
30
29
  return;
31
30
  }
32
- const isValidExpression = this.isValidExpression(alertDefinition.Rule);
31
+ const isValidExpression = this.adaptableApi.queryLanguageApi.isValidObservableExpression(alertDefinition.Rule.ObservableExpression, ModuleConstants_1.AlertModuleId, `Invalid Alert rule with observable expression `);
33
32
  if (!isValidExpression) {
34
33
  LoggingHelper_1.LogAdaptableWarning(`Could NOT create reactive alert due to invalid Rule definition!`, alertDefinition.Rule);
35
34
  return;
@@ -58,21 +57,10 @@ class AlertService {
58
57
  this.reactiveAlertsMap.delete(alertDefinition.Uuid);
59
58
  }
60
59
  }
61
- isValidExpression(rule) {
62
- return rule.ObservableExpression
63
- ? this.adaptableApi.queryLanguageApi.isValidObservableExpression(rule.ObservableExpression, ModuleConstants_1.AlertModuleId, `Invalid Alert rule with observable expression `)
64
- : rule.AggregatedBooleanExpression
65
- ? this.adaptableApi.queryLanguageApi.isValidAggregatedBooleanExpression(rule.AggregatedBooleanExpression, ModuleConstants_1.AlertModuleId, `Invalid Alert rule with aggregation expression `)
66
- : false;
67
- }
68
60
  evaluateReactiveExpression(rule) {
69
- return rule.ObservableExpression
70
- ? this.adaptableApi.internalApi
71
- .getQueryLanguageService()
72
- .evaluateObservableExpression(rule.ObservableExpression, ModuleConstants_1.AlertModuleId)
73
- : this.adaptableApi.internalApi
74
- .getQueryLanguageService()
75
- .evaluateAggregatedBooleanExpression(rule.AggregatedBooleanExpression, ModuleConstants_1.AlertModuleId);
61
+ return this.adaptableApi.internalApi
62
+ .getQueryLanguageService()
63
+ .evaluateObservableExpression(rule.ObservableExpression, ModuleConstants_1.AlertModuleId);
76
64
  }
77
65
  }
78
66
  exports.AlertService = AlertService;
@@ -4,12 +4,12 @@ import { AdaptableCalculatedColumnQuery, CalculatedColumn } from '../../Predefin
4
4
  import { AdaptableApi } from '../../../types';
5
5
  export declare class CalculatedColumnExpressionService implements ICalculatedColumnExpressionService {
6
6
  private adaptableApi;
7
- private aggregatedScalarCalculatedColumnsMap;
7
+ private aggregatedScalarLiveValuesMap;
8
8
  constructor(adaptableApi: AdaptableApi);
9
9
  destroy(): void;
10
10
  getCalculatedColumnDataType(calculatedColumnQuery: AdaptableCalculatedColumnQuery): 'String' | 'Number' | 'Boolean' | 'Date';
11
11
  isCalculatedColumnQueryValid(calculatedColumnQuery: AdaptableCalculatedColumnQuery): boolean;
12
- evaluateCalculatedColumnQuery(calculatedColumn: CalculatedColumn, node: RowNode): any;
13
- createAggregatedScalarCalculatedColumn(calculatedColumn: CalculatedColumn): void;
14
- destroyAggregatedScalarCalculatedColumn(calculatedColumn: CalculatedColumn): void;
12
+ evaluateCalculatedColumnQuery(calculatedColumn: CalculatedColumn, rowNode: RowNode): any;
13
+ createAggregatedScalarLiveValue(calculatedColumn: CalculatedColumn): void;
14
+ destroyAggregatedScalarLiveValue(calculatedColumn: CalculatedColumn): void;
15
15
  }
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CalculatedColumnExpressionService = void 0;
4
4
  const LoggingHelper_1 = require("../Helpers/LoggingHelper");
5
5
  const ModuleConstants_1 = require("../Constants/ModuleConstants");
6
- const scalarAggregationHelper_1 = require("../ExpressionFunctions/scalarAggregationHelper");
6
+ const AggregatedScalarLiveValue_1 = require("./AggregatedScalarLiveValue");
7
7
  class CalculatedColumnExpressionService {
8
8
  constructor(adaptableApi) {
9
9
  this.adaptableApi = adaptableApi;
10
- this.aggregatedScalarCalculatedColumnsMap = new Map();
10
+ this.aggregatedScalarLiveValuesMap = new Map();
11
11
  this.adaptableApi = adaptableApi;
12
12
  this.adaptableApi.internalApi
13
13
  .getDataService()
@@ -17,12 +17,12 @@ class CalculatedColumnExpressionService {
17
17
  return;
18
18
  }
19
19
  const refreshedCalculatedColumns = [];
20
- this.aggregatedScalarCalculatedColumnsMap.forEach((aggregatedScalarCalculatedColumn) => {
21
- if (aggregatedScalarCalculatedColumn
22
- .getColumnDependencies()
23
- .includes(cellDataChangedInfo.column.columnId)) {
24
- aggregatedScalarCalculatedColumn.refreshAggregatedColumnValue();
25
- refreshedCalculatedColumns.push(aggregatedScalarCalculatedColumn.getCalculatedColumnId());
20
+ this.aggregatedScalarLiveValuesMap.forEach((aggregatedScalarLiveValue, calculatedColumnId) => {
21
+ const calculatedColumn = this.adaptableApi.calculatedColumnApi.getCalculatedColumnById(calculatedColumnId);
22
+ const columnDependencies = this.adaptableApi.calculatedColumnApi.getReferencedColumnIdsForCalculatedColumn(calculatedColumn);
23
+ if (columnDependencies.includes(cellDataChangedInfo.column.columnId)) {
24
+ aggregatedScalarLiveValue.refresh();
25
+ refreshedCalculatedColumns.push(calculatedColumn.ColumnId);
26
26
  }
27
27
  });
28
28
  if (refreshedCalculatedColumns.length) {
@@ -31,9 +31,10 @@ class CalculatedColumnExpressionService {
31
31
  });
32
32
  this.adaptableApi.eventApi.on('GridDataChanged', () => {
33
33
  const refreshedCalculatedColumns = [];
34
- this.aggregatedScalarCalculatedColumnsMap.forEach((aggregatedScalarCalculatedColumn) => {
35
- aggregatedScalarCalculatedColumn.refreshAggregatedColumnValue();
36
- refreshedCalculatedColumns.push(aggregatedScalarCalculatedColumn.getCalculatedColumnId());
34
+ this.aggregatedScalarLiveValuesMap.forEach((aggregatedScalarLiveValue, calculatedColumnId) => {
35
+ const calculatedColumn = this.adaptableApi.calculatedColumnApi.getCalculatedColumnById(calculatedColumnId);
36
+ aggregatedScalarLiveValue.refresh();
37
+ refreshedCalculatedColumns.push(calculatedColumn.ColumnId);
37
38
  });
38
39
  if (refreshedCalculatedColumns.length) {
39
40
  this.adaptableApi.gridApi.refreshCells(null, refreshedCalculatedColumns);
@@ -41,9 +42,8 @@ class CalculatedColumnExpressionService {
41
42
  });
42
43
  }
43
44
  destroy() {
44
- [...this.aggregatedScalarCalculatedColumnsMap.values()].forEach((aggregatedScalarCalculatedColumn) => aggregatedScalarCalculatedColumn.destroy());
45
- this.aggregatedScalarCalculatedColumnsMap.clear();
46
- this.aggregatedScalarCalculatedColumnsMap = null;
45
+ this.aggregatedScalarLiveValuesMap.clear();
46
+ this.aggregatedScalarLiveValuesMap = null;
47
47
  }
48
48
  getCalculatedColumnDataType(calculatedColumnQuery) {
49
49
  try {
@@ -99,21 +99,21 @@ class CalculatedColumnExpressionService {
99
99
  // if query has neither a ScalarExpression nor an AggregatedScalarExpression => it can only be false
100
100
  return false;
101
101
  }
102
- evaluateCalculatedColumnQuery(calculatedColumn, node) {
102
+ evaluateCalculatedColumnQuery(calculatedColumn, rowNode) {
103
103
  var _a, _b, _c, _d, _e;
104
104
  try {
105
- if (this.adaptableApi.gridApi.isGroupRowNode(node)) {
105
+ if (this.adaptableApi.gridApi.isGroupRowNode(rowNode)) {
106
106
  return undefined;
107
107
  }
108
108
  // no validation here, this function has to be as performant as possible
109
109
  if ((_a = calculatedColumn === null || calculatedColumn === void 0 ? void 0 : calculatedColumn.Query) === null || _a === void 0 ? void 0 : _a.ScalarExpression) {
110
110
  return this.adaptableApi.internalApi
111
111
  .getQueryLanguageService()
112
- .evaluateScalarExpression(calculatedColumn.Query.ScalarExpression, ModuleConstants_1.CalculatedColumnModuleId, node);
112
+ .evaluateScalarExpression(calculatedColumn.Query.ScalarExpression, ModuleConstants_1.CalculatedColumnModuleId, rowNode);
113
113
  }
114
114
  if ((_b = calculatedColumn === null || calculatedColumn === void 0 ? void 0 : calculatedColumn.Query) === null || _b === void 0 ? void 0 : _b.AggregatedScalarExpression) {
115
- const aggregatedScalarCalculatedColumn = this.aggregatedScalarCalculatedColumnsMap.get(calculatedColumn.Uuid);
116
- return aggregatedScalarCalculatedColumn === null || aggregatedScalarCalculatedColumn === void 0 ? void 0 : aggregatedScalarCalculatedColumn.getAggregatedColumnValue(node);
115
+ const aggregatedScalarLiveValue = this.aggregatedScalarLiveValuesMap.get(calculatedColumn.Uuid);
116
+ return aggregatedScalarLiveValue === null || aggregatedScalarLiveValue === void 0 ? void 0 : aggregatedScalarLiveValue.getAggregatedValueForRow(rowNode);
117
117
  }
118
118
  }
119
119
  catch (error) {
@@ -121,149 +121,24 @@ class CalculatedColumnExpressionService {
121
121
  return null;
122
122
  }
123
123
  }
124
- createAggregatedScalarCalculatedColumn(calculatedColumn) {
125
- var _a, _b;
124
+ createAggregatedScalarLiveValue(calculatedColumn) {
125
+ var _a, _b, _c;
126
126
  // if there is already an aggregated scalar, delete it (possible when editing)
127
- this.destroyAggregatedScalarCalculatedColumn(calculatedColumn);
127
+ this.destroyAggregatedScalarLiveValue(calculatedColumn);
128
128
  if ((_a = calculatedColumn.Query) === null || _a === void 0 ? void 0 : _a.AggregatedScalarExpression) {
129
129
  try {
130
- const aggregatedScalarCalculatedColumn = new AggregatedScalarCalculatedColumn(calculatedColumn, this.adaptableApi);
131
- this.aggregatedScalarCalculatedColumnsMap.set(calculatedColumn.Uuid, aggregatedScalarCalculatedColumn);
130
+ const aggregatedScalarLiveValue = new AggregatedScalarLiveValue_1.AggregatedScalarLiveValue({
131
+ aggregatedScalarExpression: (_b = calculatedColumn.Query) === null || _b === void 0 ? void 0 : _b.AggregatedScalarExpression,
132
+ }, ModuleConstants_1.CalculatedColumnModuleId, this.adaptableApi);
133
+ this.aggregatedScalarLiveValuesMap.set(calculatedColumn.Uuid, aggregatedScalarLiveValue);
132
134
  }
133
135
  catch (e) {
134
- LoggingHelper_1.LogAdaptableError(`Creating CalculatedColumn ('${(_b = calculatedColumn.Query) === null || _b === void 0 ? void 0 : _b.AggregatedScalarExpression}') failed!\n${e.message}`);
136
+ LoggingHelper_1.LogAdaptableError(`Creating CalculatedColumn ('${(_c = calculatedColumn.Query) === null || _c === void 0 ? void 0 : _c.AggregatedScalarExpression}') failed!\n${e.message}`);
135
137
  }
136
138
  }
137
139
  }
138
- destroyAggregatedScalarCalculatedColumn(calculatedColumn) {
139
- var _a;
140
- (_a = this.aggregatedScalarCalculatedColumnsMap.get(calculatedColumn.Uuid)) === null || _a === void 0 ? void 0 : _a.destroy();
141
- this.aggregatedScalarCalculatedColumnsMap.delete(calculatedColumn.Uuid);
140
+ destroyAggregatedScalarLiveValue(calculatedColumn) {
141
+ this.aggregatedScalarLiveValuesMap.delete(calculatedColumn.Uuid);
142
142
  }
143
143
  }
144
144
  exports.CalculatedColumnExpressionService = CalculatedColumnExpressionService;
145
- class AggregatedScalarCalculatedColumn {
146
- constructor(calculatedColumn, adaptableApi) {
147
- this.calculatedColumn = calculatedColumn;
148
- this.adaptableApi = adaptableApi;
149
- const aggregationConfig = this.adaptableApi.internalApi
150
- .getQueryLanguageService()
151
- .evaluateAggregatedScalarExpression(calculatedColumn.Query.AggregatedScalarExpression, ModuleConstants_1.CalculatedColumnModuleId);
152
- this.expressionEvaluation = aggregationConfig.value;
153
- this.aggregationResult = this.computeAggregatedValue(this.expressionEvaluation);
154
- // currently we support only one reducer
155
- this.aggregationReducerName = Object.keys(this.expressionEvaluation.aggregationParams.reducers)[0];
156
- }
157
- destroy() {
158
- this.expressionEvaluation = null;
159
- this.calculatedColumn = null;
160
- this.adaptableApi = null;
161
- this.aggregationResult = null;
162
- }
163
- getAggregatedColumnValue(rowNode) {
164
- const aggregationValue = this.getAggregationValue(rowNode);
165
- if (this.expressionEvaluation.rowValueGetter) {
166
- return this.expressionEvaluation.rowValueGetter(rowNode, aggregationValue);
167
- }
168
- return aggregationValue;
169
- }
170
- refreshAggregatedColumnValue() {
171
- const aggregationConfig = this.adaptableApi.internalApi
172
- .getQueryLanguageService()
173
- .evaluateAggregatedScalarExpression(this.calculatedColumn.Query.AggregatedScalarExpression, ModuleConstants_1.CalculatedColumnModuleId);
174
- this.expressionEvaluation = aggregationConfig.value;
175
- this.aggregationResult = this.computeAggregatedValue(this.expressionEvaluation);
176
- }
177
- getCalculatedColumnId() {
178
- return this.calculatedColumn.ColumnId;
179
- }
180
- getColumnDependencies() {
181
- return this.expressionEvaluation.columnDependencies;
182
- }
183
- computeAggregatedValue(expressionEvaluation) {
184
- var _a;
185
- const gridRowNodes = this.adaptableApi.gridApi.getAllRowNodes();
186
- // we iterate over the RowNode list (we need this to handle complex column values (nested values, valueGetters etc)
187
- // so we will map the fieldNames to RowNode.data
188
- const mapReducerValueGetter = (fieldName) => {
189
- return (rowNode) => {
190
- return this.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, fieldName);
191
- };
192
- };
193
- Object.values(expressionEvaluation.aggregationParams.reducers).forEach((aggregationReducer) => {
194
- aggregationReducer.getter = mapReducerValueGetter(aggregationReducer.field);
195
- // nullify the field to force the fallback on the getter fn
196
- aggregationReducer.field = null;
197
- });
198
- const mapGroupByToKey = (fieldName) => {
199
- return (_unusableProperty, rowNode) => this.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, fieldName);
200
- };
201
- (_a = expressionEvaluation.aggregationParams.groupBy) === null || _a === void 0 ? void 0 : _a.forEach((groupByDef) => {
202
- groupByDef.toKey = mapGroupByToKey(groupByDef.field);
203
- });
204
- if (!expressionEvaluation.cumulateOver) {
205
- let aggregatedRowNodes = gridRowNodes;
206
- if (expressionEvaluation.sortByColumn) {
207
- const sortByColumn = expressionEvaluation.sortByColumn;
208
- const getRowNodeValue = (rowNode, columnId) => this.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, columnId);
209
- if (expressionEvaluation.filterUndefinedValues) {
210
- aggregatedRowNodes = gridRowNodes.filter((node) => {
211
- const rowValue = getRowNodeValue(node, sortByColumn);
212
- return rowValue != undefined;
213
- });
214
- }
215
- // currently, we support only ascending sorting
216
- aggregatedRowNodes.sort((first, second) => {
217
- const firstValue = getRowNodeValue(first, sortByColumn);
218
- const secondValue = getRowNodeValue(second, sortByColumn);
219
- if (firstValue < secondValue) {
220
- return -1;
221
- }
222
- if (firstValue > secondValue) {
223
- return 1;
224
- }
225
- return 0;
226
- });
227
- }
228
- return scalarAggregationHelper_1.aggregate(expressionEvaluation.aggregationParams, aggregatedRowNodes);
229
- }
230
- else {
231
- // 1. sort grid data by given OVER column
232
- const sortByColumn = expressionEvaluation.cumulateOver;
233
- const getRowNodeValue = (rowNode, columnId) => this.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, columnId);
234
- // currently, we support only ascending sorting
235
- gridRowNodes.sort((first, second) => {
236
- const firstValue = getRowNodeValue(first, sortByColumn);
237
- const secondValue = getRowNodeValue(second, sortByColumn);
238
- if (firstValue < secondValue) {
239
- return -1;
240
- }
241
- if (firstValue > secondValue) {
242
- return 1;
243
- }
244
- return 0;
245
- });
246
- // 2. add primary key column as the most specific groupBy
247
- if (!expressionEvaluation.aggregationParams.groupBy) {
248
- expressionEvaluation.aggregationParams.groupBy = [];
249
- }
250
- const gridPrimaryKeyColumn = this.adaptableApi.internalApi.getAdaptableOptions().primaryKey;
251
- // !! aggregationParams mutated
252
- expressionEvaluation.aggregationParams.groupBy.push({
253
- field: gridPrimaryKeyColumn,
254
- toKey: mapGroupByToKey(gridPrimaryKeyColumn),
255
- });
256
- // 3. cumulate
257
- return scalarAggregationHelper_1.cumulate(expressionEvaluation.aggregationParams, gridRowNodes);
258
- }
259
- }
260
- getAggregationValue(rowNode) {
261
- var _a, _b;
262
- if ((_a = this.expressionEvaluation.aggregationParams.groupBy) === null || _a === void 0 ? void 0 : _a.length) {
263
- const groupColumns = this.expressionEvaluation.aggregationParams.groupBy.map((groupByParam) => groupByParam.field);
264
- const groupKeys = groupColumns.map((groupColumnName) => this.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, groupColumnName));
265
- return (_b = this.aggregationResult.deepMap.get(groupKeys)) === null || _b === void 0 ? void 0 : _b.reducerResults[this.aggregationReducerName];
266
- }
267
- return this.aggregationResult.reducerResults[this.aggregationReducerName];
268
- }
269
- }
@@ -5,6 +5,6 @@ export interface ICalculatedColumnExpressionService extends IAdaptableService {
5
5
  isCalculatedColumnQueryValid(calculatedColumnQuery: AdaptableCalculatedColumnQuery): boolean;
6
6
  evaluateCalculatedColumnQuery(calculatedColumn: CalculatedColumn, rowNode: RowNode): any;
7
7
  getCalculatedColumnDataType(calculatedColumnQuery: AdaptableCalculatedColumnQuery): 'String' | 'Number' | 'Boolean' | 'Date';
8
- createAggregatedScalarCalculatedColumn(calculatedColumn: CalculatedColumn): void;
9
- destroyAggregatedScalarCalculatedColumn(calculatedColumn: CalculatedColumn): void;
8
+ createAggregatedScalarLiveValue(calculatedColumn: CalculatedColumn): void;
9
+ destroyAggregatedScalarLiveValue(calculatedColumn: CalculatedColumn): void;
10
10
  }
@@ -3,14 +3,15 @@ import { IAdaptableService } from './IAdaptableService';
3
3
  import { RowNode } from '@ag-grid-community/all-modules';
4
4
  import { CellDataChangedInfo } from '../../../PredefinedConfig/Common/CellDataChangedInfo';
5
5
  import { AdaptableModule } from '../../../PredefinedConfig/Common/Types';
6
- import { AggregationParameter } from '../../ExpressionFunctions/aggregatedScalarExpressionFunctions';
6
+ import { ScalarAggregationParameter } from '../../ExpressionFunctions/aggregatedScalarExpressionFunctions';
7
7
  import { ModuleExpressionFunctions } from '../../../AdaptableOptions/AdaptableQLOptions';
8
+ import { BooleanAggregationParameter } from '../../ExpressionFunctions/aggregatedBooleanExpressionFunctions';
8
9
  export interface IQueryLanguageService extends IAdaptableService {
9
10
  evaluateBooleanExpression(expression: string, module: AdaptableModule, rowNode: RowNode): boolean;
10
11
  evaluateScalarExpression(expression: string, module: AdaptableModule, rowNode: RowNode): any;
11
12
  evaluateObservableExpression(expression: string, module: AdaptableModule): Observable<CellDataChangedInfo>;
12
- evaluateAggregatedBooleanExpression(expression: string, module: AdaptableModule): Observable<CellDataChangedInfo>;
13
- evaluateAggregatedScalarExpression(expression: string, module: AdaptableModule): AggregationParameter;
13
+ evaluateAggregatedBooleanExpression(expression: string, module: AdaptableModule): BooleanAggregationParameter;
14
+ evaluateAggregatedScalarExpression(expression: string, module: AdaptableModule): ScalarAggregationParameter;
14
15
  validateBoolean(expression: string, module: AdaptableModule, config?: {
15
16
  force?: boolean;
16
17
  }): {
@@ -29,7 +30,9 @@ export interface IQueryLanguageService extends IAdaptableService {
29
30
  isValid: boolean;
30
31
  errorMessage: string;
31
32
  };
33
+ computeAggregatedBooleanValue(expression: string, module: AdaptableModule): boolean;
32
34
  getModuleExpressionFunctions(module: AdaptableModule): ModuleExpressionFunctions;
33
35
  getColumnsFromExpression(input: string): string[];
34
36
  getNamedQueryNamesFromExpression(input: string): string[];
37
+ isCumulativeAggregate(input: string): boolean;
35
38
  }
@@ -4,8 +4,9 @@ import { CellDataChangedInfo } from '../../PredefinedConfig/Common/CellDataChang
4
4
  import { RowNode } from '@ag-grid-community/all-modules';
5
5
  import { AdaptableModule } from '../../PredefinedConfig/Common/Types';
6
6
  import { ModuleExpressionFunctions } from '../../AdaptableOptions/AdaptableQLOptions';
7
- import { AggregationParameter } from '../ExpressionFunctions/aggregatedScalarExpressionFunctions';
7
+ import { ScalarAggregationParameter } from '../ExpressionFunctions/aggregatedScalarExpressionFunctions';
8
8
  import { AdaptableApi } from '../../../types';
9
+ import { BooleanAggregationParameter } from '../ExpressionFunctions/aggregatedBooleanExpressionFunctions';
9
10
  export declare class QueryLanguageService implements IQueryLanguageService {
10
11
  private adaptableApi;
11
12
  private cacheBooleanValidation;
@@ -16,9 +17,9 @@ export declare class QueryLanguageService implements IQueryLanguageService {
16
17
  constructor(adaptableApi: AdaptableApi);
17
18
  evaluateBooleanExpression(expression: string, module: AdaptableModule, rowNode: any): any;
18
19
  evaluateScalarExpression(expression: string, module: AdaptableModule, rowNode: RowNode): any;
19
- evaluateAggregatedScalarExpression(expression: string, module: AdaptableModule): AggregationParameter;
20
+ evaluateAggregatedScalarExpression(expression: string, module: AdaptableModule): ScalarAggregationParameter;
20
21
  evaluateObservableExpression(reactiveExpression: string, module: AdaptableModule): Observable<CellDataChangedInfo>;
21
- evaluateAggregatedBooleanExpression(aggregationExpression: string, module: AdaptableModule): Observable<CellDataChangedInfo>;
22
+ evaluateAggregatedBooleanExpression(aggregationExpression: string, module: AdaptableModule): BooleanAggregationParameter;
22
23
  validateBoolean(expressionInput: string, module: AdaptableModule, config?: {
23
24
  force?: boolean;
24
25
  }): {
@@ -37,8 +38,10 @@ export declare class QueryLanguageService implements IQueryLanguageService {
37
38
  isValid: boolean;
38
39
  errorMessage: string;
39
40
  };
41
+ computeAggregatedBooleanValue(expression: string, module: AdaptableModule): boolean;
40
42
  getColumnsFromExpression(input?: string): string[];
41
43
  getNamedQueryNamesFromExpression(input?: string): string[];
44
+ isCumulativeAggregate(input: string): boolean;
42
45
  getModuleExpressionFunctions(module: AdaptableModule): ModuleExpressionFunctions;
43
46
  destroy(): void;
44
47
  private getBooleanAndScalarFunctions;
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const parser = tslib_1.__importStar(require("../../parser/src"));
6
6
  const rxjs_1 = require("rxjs");
7
7
  const LoggingHelper_1 = require("../Helpers/LoggingHelper");
8
+ const AggregatedScalarLiveValue_1 = require("./AggregatedScalarLiveValue");
8
9
  class QueryLanguageService {
9
10
  constructor(adaptableApi) {
10
11
  this.adaptableApi = adaptableApi;
@@ -49,13 +50,13 @@ class QueryLanguageService {
49
50
  evaluateAggregatedBooleanExpression(aggregationExpression, module) {
50
51
  const moduleExpressionFunctions = this.getModuleExpressionFunctions(module);
51
52
  const booleanAndScalarFunctions = this.getBooleanAndScalarFunctions(moduleExpressionFunctions);
52
- const aggregationExpression$ = parser.evaluate(aggregationExpression, {
53
+ const aggregationEvaluation = parser.evaluate(aggregationExpression, {
53
54
  node: aggregationExpression,
54
55
  adaptableApi: this.adaptableApi,
55
56
  functions: moduleExpressionFunctions.aggregatedBooleanFunctions,
56
57
  whereClauseFunctions: booleanAndScalarFunctions,
57
58
  });
58
- return aggregationExpression$;
59
+ return aggregationEvaluation;
59
60
  }
60
61
  validateBoolean(expressionInput = '', module, config = { force: false }) {
61
62
  var _a;
@@ -170,15 +171,16 @@ class QueryLanguageService {
170
171
  return result;
171
172
  }
172
173
  try {
173
- const aggregatedBooleanExpressionEvaluation = this.evaluateAggregatedBooleanExpression(expression, module);
174
- if (!rxjs_1.isObservable(aggregatedBooleanExpressionEvaluation)) {
174
+ const evaluationResult = this.evaluateAggregatedBooleanExpression(expression, module);
175
+ if (evaluationResult.type !== 'aggregationBoolean') {
175
176
  const result = {
176
177
  isValid: false,
177
- errorMessage: `provided AggregatedBoolean expression does not evaluate to an Observable`,
178
+ errorMessage: 'provided AggregatedBBoolean expression does not evaluate to a supported aggregation',
178
179
  };
179
180
  this.cacheAggregatedBooleanValidation.set(cacheKey, result);
180
181
  return result;
181
182
  }
183
+ // no exception,so everything seems to be fine
182
184
  const result = { isValid: true, errorMessage: '' };
183
185
  this.cacheAggregatedBooleanValidation.set(cacheKey, result);
184
186
  return result;
@@ -208,7 +210,7 @@ class QueryLanguageService {
208
210
  }
209
211
  try {
210
212
  const evaluationResult = this.evaluateAggregatedScalarExpression(expression, module);
211
- if (evaluationResult.type !== 'aggregation') {
213
+ if (evaluationResult.type !== 'aggregationScalar') {
212
214
  const result = {
213
215
  isValid: false,
214
216
  errorMessage: 'provided AggregatedScalar expression does not evaluate to a supported aggregation',
@@ -230,12 +232,27 @@ class QueryLanguageService {
230
232
  return result;
231
233
  }
232
234
  }
235
+ computeAggregatedBooleanValue(expression, module) {
236
+ const booleanAggregationParameter = this.evaluateAggregatedBooleanExpression(expression, module);
237
+ const aggregatedScalarExpressionEvaluation = booleanAggregationParameter.scalarAggregation.value;
238
+ const aggregatedScalarLiveValue = new AggregatedScalarLiveValue_1.AggregatedScalarLiveValue({ aggregatedScalarExpressionEvaluation }, module, this.adaptableApi);
239
+ const allAggregationValues = aggregatedScalarLiveValue.getAllAggregationValues();
240
+ const numericOperand = booleanAggregationParameter.conditionValue;
241
+ const booleanConditionFn = booleanAggregationParameter.conditionFn;
242
+ return allAggregationValues.some((aggregationValue) => {
243
+ return booleanConditionFn(aggregationValue, numericOperand);
244
+ });
245
+ }
233
246
  getColumnsFromExpression(input = '') {
234
247
  return this.getNodesFromExpression(input, 'COL');
235
248
  }
236
249
  getNamedQueryNamesFromExpression(input = '') {
237
250
  return this.getNodesFromExpression(input, 'QUERY');
238
251
  }
252
+ isCumulativeAggregate(input) {
253
+ var _a;
254
+ return !!((_a = this.getNodesFromExpression(input, 'CUMUL')) === null || _a === void 0 ? void 0 : _a.length);
255
+ }
239
256
  // Returns the ExpressionFunctions available for the given Module as specified in the `QueryLanguageOptions.moduleExpressionFunctions`
240
257
  // if there are no specific functions defined, it falls back to the default values
241
258
  getModuleExpressionFunctions(module) {