@adaptabletools/adaptable 11.1.13 → 11.1.16

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 (148) hide show
  1. package/base.css +2 -0
  2. package/bundle.cjs.js +95 -94
  3. package/index.css +3 -0
  4. package/package.json +1 -1
  5. package/publishTimestamp.d.ts +1 -1
  6. package/publishTimestamp.js +1 -1
  7. package/src/AdaptableOptions/AlertOptions.d.ts +9 -3
  8. package/src/AdaptableOptions/DashboardOptions.d.ts +4 -3
  9. package/src/AdaptableOptions/ExportOptions.d.ts +2 -2
  10. package/src/AdaptableOptions/FilterOptions.d.ts +5 -4
  11. package/src/AdaptableOptions/LayoutOptions.d.ts +56 -10
  12. package/src/AdaptableOptions/ToolPanelOptions.d.ts +4 -3
  13. package/src/AdaptableOptions/UserInterfaceOptions.d.ts +18 -16
  14. package/src/Api/AdaptableApi.d.ts +10 -0
  15. package/src/Api/ConfigApi.d.ts +3 -3
  16. package/src/Api/EventApi.d.ts +1 -0
  17. package/src/Api/Events/LayoutChanged.d.ts +1 -1
  18. package/src/Api/ExportApi.d.ts +16 -0
  19. package/src/Api/FinanceApi.d.ts +104 -3
  20. package/src/Api/Implementation/AdaptableApiImpl.d.ts +6 -0
  21. package/src/Api/Implementation/AdaptableApiImpl.js +53 -0
  22. package/src/Api/Implementation/AlertApiImpl.js +5 -5
  23. package/src/Api/Implementation/ApiBase.js +3 -0
  24. package/src/Api/Implementation/ConditionalStyleApiImpl.js +3 -3
  25. package/src/Api/Implementation/ConfigApiImpl.js +5 -1
  26. package/src/Api/Implementation/CustomSortApiImpl.js +4 -4
  27. package/src/Api/Implementation/EventApiImpl.d.ts +1 -0
  28. package/src/Api/Implementation/EventApiImpl.js +3 -0
  29. package/src/Api/Implementation/ExportApiImpl.d.ts +3 -0
  30. package/src/Api/Implementation/ExportApiImpl.js +10 -0
  31. package/src/Api/Implementation/FlashingCellApiImpl.d.ts +1 -1
  32. package/src/Api/Implementation/FlashingCellApiImpl.js +7 -6
  33. package/src/Api/Implementation/FormatColumnApiImpl.js +5 -5
  34. package/src/Api/Implementation/InternalApiImpl.d.ts +11 -5
  35. package/src/Api/Implementation/InternalApiImpl.js +65 -3
  36. package/src/Api/Implementation/PlusMinusApiImpl.js +4 -7
  37. package/src/Api/Implementation/ScheduleApiImpl.d.ts +2 -1
  38. package/src/Api/Implementation/ScheduleApiImpl.js +15 -7
  39. package/src/Api/Implementation/ShortcutApiImpl.js +3 -3
  40. package/src/Api/InternalApi.d.ts +11 -7
  41. package/src/Api/LayoutApi.d.ts +4 -6
  42. package/src/Api/ScheduleApi.d.ts +5 -1
  43. package/src/PredefinedConfig/AlertState.d.ts +3 -3
  44. package/src/PredefinedConfig/Common/AdaptableButton.d.ts +2 -5
  45. package/src/PredefinedConfig/Common/AdaptableForm.d.ts +4 -3
  46. package/src/PredefinedConfig/Common/AdaptableObject.d.ts +18 -1
  47. package/src/PredefinedConfig/Common/AdaptablePredicate.js +9 -0
  48. package/src/PredefinedConfig/Common/BaseContext.d.ts +10 -0
  49. package/src/PredefinedConfig/Common/BaseContext.js +2 -0
  50. package/src/PredefinedConfig/Common/CellSummary.d.ts +3 -3
  51. package/src/PredefinedConfig/Common/FDC3Context.d.ts +9 -9
  52. package/src/PredefinedConfig/Common/Menu.d.ts +4 -13
  53. package/src/PredefinedConfig/DataSourceState.d.ts +2 -2
  54. package/src/PredefinedConfig/FilterState.d.ts +1 -1
  55. package/src/PredefinedConfig/Uuid.js +1 -0
  56. package/src/Redux/ActionsReducers/PopupRedux.d.ts +5 -5
  57. package/src/Redux/Store/AdaptableStore.d.ts +1 -0
  58. package/src/Redux/Store/AdaptableStore.js +6 -1
  59. package/src/Redux/Store/Interface/IAdaptableStore.d.ts +1 -0
  60. package/src/Strategy/AlertModule.js +3 -0
  61. package/src/Strategy/CalculatedColumnModule.d.ts +3 -17
  62. package/src/Strategy/CalculatedColumnModule.js +2 -0
  63. package/src/Strategy/ConditionalStyleModule.js +4 -1
  64. package/src/Strategy/CustomSortModule.js +2 -0
  65. package/src/Strategy/DataSourceModule.js +2 -0
  66. package/src/Strategy/ExportModule.d.ts +5 -3
  67. package/src/Strategy/ExportModule.js +10 -0
  68. package/src/Strategy/FlashingCellModule.js +2 -0
  69. package/src/Strategy/FormatColumnModule.js +2 -0
  70. package/src/Strategy/FreeTextColumnModule.js +2 -0
  71. package/src/Strategy/Interface/IModule.d.ts +5 -3
  72. package/src/Strategy/Interface/IScheduleModule.d.ts +1 -1
  73. package/src/Strategy/LayoutModule.d.ts +2 -1
  74. package/src/Strategy/LayoutModule.js +35 -2
  75. package/src/Strategy/PlusMinusModule.js +7 -4
  76. package/src/Strategy/QueryModule.d.ts +2 -8
  77. package/src/Strategy/QueryModule.js +2 -0
  78. package/src/Strategy/ScheduleModule.d.ts +4 -3
  79. package/src/Strategy/ScheduleModule.js +4 -2
  80. package/src/Strategy/ShortcutModule.js +6 -1
  81. package/src/Strategy/StatusBarModule.d.ts +2 -1
  82. package/src/Strategy/StatusBarModule.js +2 -3
  83. package/src/Strategy/Utilities/getObjectTagsViewItems.d.ts +4 -0
  84. package/src/Strategy/Utilities/getObjectTagsViewItems.js +13 -0
  85. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +2 -1
  86. package/src/Utilities/Emitter.d.ts +1 -0
  87. package/src/Utilities/Emitter.js +9 -0
  88. package/src/Utilities/Extensions/TypeExtensions.d.ts +2 -0
  89. package/src/Utilities/Interface/MessagePopups.d.ts +3 -3
  90. package/src/Utilities/ObjectFactory.d.ts +2 -2
  91. package/src/Utilities/Services/AlertService.js +1 -1
  92. package/src/Utilities/Services/DataService.js +1 -1
  93. package/src/Utilities/Services/Interface/IModuleService.d.ts +1 -1
  94. package/src/Utilities/Services/ModuleService.d.ts +1 -1
  95. package/src/Utilities/Services/ModuleService.js +1 -0
  96. package/src/View/Alert/AlertStatusSubPanel.js +2 -1
  97. package/src/View/Alert/Wizard/AlertWizard.js +9 -0
  98. package/src/View/CalculatedColumn/Wizard/CalculatedColumnWizard.js +9 -0
  99. package/src/View/Components/AdaptableObjectList/AdaptableObjectList.js +1 -0
  100. package/src/View/Components/FilterForm/FilterForm.js +1 -1
  101. package/src/View/Components/FilterForm/QuickFilterForm.js +11 -7
  102. package/src/View/Components/FilterForm/getDefaultColumnFilterPredicate.d.ts +1 -1
  103. package/src/View/Components/Popups/AdaptableToaster.js +3 -1
  104. package/src/View/Components/Popups/FormPopups/FormPopups.d.ts +3 -3
  105. package/src/View/Components/TagValueSelector/index.d.ts +13 -0
  106. package/src/View/Components/TagValueSelector/index.js +22 -0
  107. package/src/View/ConditionalStyle/Wizard/ConditionalStyleWizard.js +9 -0
  108. package/src/View/CustomSort/Wizard/CustomSortWizard.js +9 -0
  109. package/src/View/DataSource/Wizard/DataSourceSettingsWizard.js +1 -1
  110. package/src/View/DataSource/Wizard/DataSourceWizard.js +10 -0
  111. package/src/View/Export/ExportSelector.d.ts +4 -0
  112. package/src/View/Export/ExportSelector.js +75 -0
  113. package/src/View/Export/ExportViewPanel.js +6 -7
  114. package/src/View/Export/ReportExportDropdown.d.ts +2 -5
  115. package/src/View/Export/Wizard/NewReportWizard.js +9 -0
  116. package/src/View/Export/constants.d.ts +2 -0
  117. package/src/View/Export/constants.js +5 -0
  118. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +9 -0
  119. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +9 -0
  120. package/src/View/FreeTextColumn/Wizard/FreeTextColumnWizard.js +9 -0
  121. package/src/View/GridInfo/GridOptionsComponent.d.ts +0 -1
  122. package/src/View/GridInfo/GridOptionsComponent.js +0 -1
  123. package/src/View/Layout/LayoutCloneButton.d.ts +6 -0
  124. package/src/View/Layout/LayoutCloneButton.js +15 -0
  125. package/src/View/Layout/LayoutRadioSelector.d.ts +2 -1
  126. package/src/View/Layout/LayoutRadioSelector.js +1 -1
  127. package/src/View/Layout/LayoutStatusBarSubPanelPopover.js +6 -1
  128. package/src/View/Layout/Wizard/LayoutEditorWizard.d.ts +1 -0
  129. package/src/View/PlusMinus/Wizard/PlusMinusWizard.js +9 -0
  130. package/src/View/Query/Wizard/NamedQueryWizard.js +9 -0
  131. package/src/View/Schedule/Wizard/ScheduleWizard.js +10 -0
  132. package/src/View/Shortcut/Wizard/ShortcutWizard.js +10 -0
  133. package/src/View/StatusBar/StatusBarPopup.js +1 -1
  134. package/src/View/Wizard/ObjectTagsWizardSection.d.ts +8 -0
  135. package/src/View/Wizard/ObjectTagsWizardSection.js +22 -0
  136. package/src/View/Wizard/OnePageAdaptableWizard.d.ts +1 -0
  137. package/src/View/Wizard/OnePageAdaptableWizard.js +12 -5
  138. package/src/agGrid/Adaptable.d.ts +12 -0
  139. package/src/agGrid/Adaptable.js +80 -45
  140. package/src/agGrid/createAgStatusPanelComponent.js +1 -0
  141. package/src/components/AdaptableFormComponent/AdaptableFormComponent.d.ts +8 -7
  142. package/src/components/ExpressionEditor/index.js +5 -2
  143. package/src/components/WindowModal/useStacking.js +2 -2
  144. package/src/metamodel/adaptable.metamodel.d.ts +44 -2
  145. package/src/metamodel/adaptable.metamodel.js +223 -22
  146. package/src/types.d.ts +6 -5
  147. package/version.d.ts +1 -1
  148. package/version.js +1 -1
@@ -9,9 +9,17 @@ const ArrayExtensions_1 = tslib_1.__importDefault(require("../Utilities/Extensio
9
9
  const LayoutRadioSelector_1 = require("../View/Layout/LayoutRadioSelector");
10
10
  const LayoutStatusBarSubPanelPopover_1 = require("../View/Layout/LayoutStatusBarSubPanelPopover");
11
11
  const EditCurrentLayoutButton_1 = require("../View/Layout/EditCurrentLayoutButton");
12
+ const LayoutCloneButton_1 = require("../View/Layout/LayoutCloneButton");
12
13
  class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
13
14
  constructor(api) {
14
15
  super(ModuleConstants.LayoutModuleId, 'Layout', 'layout', 'LayoutPopup', 'Named sets of column visibility, order, groupings, aggregation, pivots etc.', api);
16
+ this.api.eventApi.on('LayoutChanged', (layoutChangedInfo) => {
17
+ var _a;
18
+ if (layoutChangedInfo.newLayoutState.CurrentLayout !== ((_a = layoutChangedInfo.oldLayoutState) === null || _a === void 0 ? void 0 : _a.CurrentLayout)) {
19
+ // we are interested only if current layout was changed (is different from the previous one)
20
+ this.handleLayoutChange();
21
+ }
22
+ });
15
23
  }
16
24
  getModuleAdaptableObjects() {
17
25
  return this.api.layoutApi.getAllLayout();
@@ -136,7 +144,7 @@ class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
136
144
  }
137
145
  toView(layout) {
138
146
  var _a, _b, _c, _d, _e, _f, _g;
139
- const maxColumnsToDisplay = (_d = (_c = (_b = (_a = this.api.internalApi.getAdaptableOptions()) === null || _a === void 0 ? void 0 : _a.layoutOptions) === null || _b === void 0 ? void 0 : _b.view) === null || _c === void 0 ? void 0 : _c.maxColumnsToDisplay) !== null && _d !== void 0 ? _d : 10;
147
+ const maxColumnsToDisplay = (_d = (_c = (_b = (_a = this.api.internalApi.getAdaptableOptions()) === null || _a === void 0 ? void 0 : _a.layoutOptions) === null || _b === void 0 ? void 0 : _b.viewOptions) === null || _c === void 0 ? void 0 : _c.maxColumnsToDisplay) !== null && _d !== void 0 ? _d : 10;
140
148
  const columnIdToFriendlyName = (columnId) => {
141
149
  return this.api.columnApi.getFriendlyNameFromColumnId(columnId);
142
150
  };
@@ -181,7 +189,7 @@ class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
181
189
  }
182
190
  getViewProperties() {
183
191
  return {
184
- actions: [LayoutRadioSelector_1.LayoutRadioSelector],
192
+ actions: [LayoutRadioSelector_1.LayoutRadioSelector, LayoutCloneButton_1.LayoutCloneButton],
185
193
  getDeleteAction: (layout) => {
186
194
  // make sure we do not delete the last layout
187
195
  if (this.getModuleAdaptableObjects().length === 1) {
@@ -211,5 +219,30 @@ class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
211
219
  },
212
220
  };
213
221
  }
222
+ handleLayoutChange() {
223
+ // update objects associated with the current layout via the LayoutOptions.isObjectAssociatedWithLayout() method
224
+ if (!this.api.internalApi.getAdaptableOptions().layoutOptions.isObjectAvailableInLayout) {
225
+ // no need if no callback implementation is provided
226
+ return;
227
+ }
228
+ // PlusMinus
229
+ this.api.internalApi
230
+ .getModuleService()
231
+ .getModuleById('PlusMinus')
232
+ .checkListenToKeyDown();
233
+ // Shortcut
234
+ this.api.internalApi
235
+ .getModuleService()
236
+ .getModuleById('Shortcut')
237
+ .checkListenToKeyDown();
238
+ // Schedule
239
+ this.api.internalApi
240
+ .getModuleService()
241
+ .getModuleById('Schedule')
242
+ .setUpScheduleJobs();
243
+ // ConditionalStyle, CustomSort, FlashingCell, FormatColumn
244
+ // we need to refresh the column defs, as some configs may have changed
245
+ this.api.internalApi.getAdaptableInstance().setupColumns();
246
+ }
214
247
  }
215
248
  exports.LayoutModule = LayoutModule;
@@ -12,6 +12,7 @@ const ModuleConstants_1 = require("../Utilities/Constants/ModuleConstants");
12
12
  const getScopeViewItems_1 = require("./Utilities/getScopeViewItems");
13
13
  const PlusMinusWizard_1 = require("../View/PlusMinus/Wizard/PlusMinusWizard");
14
14
  const getRuleViewItems_1 = require("./Utilities/getRuleViewItems");
15
+ const getObjectTagsViewItems_1 = require("./Utilities/getObjectTagsViewItems");
15
16
  class PlusMinusModule extends AdaptableModuleBase_1.AdaptableModuleBase {
16
17
  constructor(api) {
17
18
  super(ModuleConstants.PlusMinusModuleId, 'Plus Minus', 'plus-minus', 'PlusMinusPopup', 'Configure how a cell value will edit when the + or - keys are pressed', api);
@@ -46,13 +47,14 @@ class PlusMinusModule extends AdaptableModuleBase_1.AdaptableModuleBase {
46
47
  }
47
48
  }
48
49
  checkListenToKeyDown() {
49
- if (!this.shouldHandleKeyDown) {
50
+ const oldShouldHandleKeyDown = this.shouldHandleKeyDown;
51
+ const newShouldHandleKeyDown = ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(this.api.plusMinusApi.getAllPlusMinus());
52
+ if (!oldShouldHandleKeyDown && newShouldHandleKeyDown) {
50
53
  this.adaptable._on('KeyDown', (keyDownEvent) => {
51
54
  this.handleKeyDown(keyDownEvent);
52
55
  });
53
56
  }
54
- let plusMinusNudges = this.api.plusMinusApi.getAllPlusMinus();
55
- this.shouldHandleKeyDown = ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(plusMinusNudges);
57
+ this.shouldHandleKeyDown = newShouldHandleKeyDown;
56
58
  }
57
59
  addColumnMenuItems(column) {
58
60
  if (column && this.isModuleEditable() && column.dataType == 'Number') {
@@ -68,7 +70,7 @@ class PlusMinusModule extends AdaptableModuleBase_1.AdaptableModuleBase {
68
70
  }
69
71
  handleKeyDown(keyEvent) {
70
72
  if (this.shouldHandleKeyDown) {
71
- //it's a speacial key so we handle the string representation of the key '
73
+ //it's a special key so we handle the string representation of the key '
72
74
  let keyEventString = Helper_1.Helper.getStringRepresentionFromKey(keyEvent);
73
75
  if (keyEventString == '-' || keyEventString == '+') {
74
76
  let plusMinusNudges = this.api.plusMinusApi.getAllActivePlusMinus();
@@ -197,6 +199,7 @@ class PlusMinusModule extends AdaptableModuleBase_1.AdaptableModuleBase {
197
199
  label: 'Nudge Value',
198
200
  values: [plusMinus.NudgeValue],
199
201
  },
202
+ getObjectTagsViewItems_1.getObjectTagsViewItems(plusMinus, this.api),
200
203
  ].filter(Boolean),
201
204
  };
202
205
  }
@@ -15,17 +15,11 @@ export declare class QueryModule extends AdaptableModuleBase implements IModule
15
15
  getReferencedNamedQueryNames(namedQuery: NamedQuery): string[];
16
16
  toView(query: NamedQuery): {
17
17
  abObject: NamedQuery;
18
- items: {
19
- name: string;
20
- values: string[];
21
- }[];
18
+ items: import("./Interface/IModule").AdaptableObjectItemView[];
22
19
  };
23
20
  toViewAll(): {
24
21
  abObject: NamedQuery;
25
- items: {
26
- name: string;
27
- values: string[];
28
- }[];
22
+ items: import("./Interface/IModule").AdaptableObjectItemView[];
29
23
  }[];
30
24
  getViewProperties(): {
31
25
  getDeleteAction: (namedQuery: NamedQuery) => QueryRedux.NamedQueryDeleteAction;
@@ -7,6 +7,7 @@ const ModuleConstants = tslib_1.__importStar(require("../Utilities/Constants/Mod
7
7
  const QueryRedux = tslib_1.__importStar(require("../Redux/ActionsReducers/QueryRedux"));
8
8
  const NamedQueryWizard_1 = require("../View/Query/Wizard/NamedQueryWizard");
9
9
  const EditCurrentQueryButton_1 = require("../View/Query/EditCurrentQueryButton");
10
+ const getObjectTagsViewItems_1 = require("./Utilities/getObjectTagsViewItems");
10
11
  class QueryModule extends AdaptableModuleBase_1.AdaptableModuleBase {
11
12
  constructor(api) {
12
13
  super(ModuleConstants.QueryModuleId, 'Query', 'query', 'QueryPopup', 'Run real-time text-based queries using a wealth of powerful functions and operators', api);
@@ -39,6 +40,7 @@ class QueryModule extends AdaptableModuleBase_1.AdaptableModuleBase {
39
40
  name: 'Expression',
40
41
  values: [query.BooleanExpression],
41
42
  },
43
+ getObjectTagsViewItems_1.getObjectTagsViewItems(query, this.api),
42
44
  ],
43
45
  };
44
46
  }
@@ -1,14 +1,15 @@
1
1
  /// <reference types="react" />
2
2
  import { AdaptableModuleBase } from './AdaptableModuleBase';
3
- import { AdaptableObjectView, IModule } from './Interface/IModule';
3
+ import { AdaptableObjectView } from './Interface/IModule';
4
4
  import { AdaptableApi } from '../Api/AdaptableApi';
5
5
  import { BaseSchedule } from '../PredefinedConfig/Common/Schedule';
6
6
  import * as ScheduleRedux from '../Redux/ActionsReducers/ScheduleRedux';
7
- export declare class ScheduleModule extends AdaptableModuleBase implements IModule {
7
+ import { IScheduleModule } from './Interface/IScheduleModule';
8
+ export declare class ScheduleModule extends AdaptableModuleBase implements IScheduleModule {
8
9
  private scheduleJobs;
9
10
  constructor(api: AdaptableApi);
10
11
  handleAdaptableReady(): void;
11
- setUpSechduleJobs(): void;
12
+ setUpScheduleJobs(): void;
12
13
  private addSchedule;
13
14
  private addMidnightRefreshSchedule;
14
15
  private getDateFromSchedule;
@@ -10,6 +10,7 @@ const ScheduleWizard_1 = require("../View/Schedule/Wizard/ScheduleWizard");
10
10
  const ScheduleSettingsSummary_1 = require("../View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsSummary");
11
11
  const UIHelper_1 = tslib_1.__importDefault(require("../View/UIHelper"));
12
12
  const ScheduleRedux = tslib_1.__importStar(require("../Redux/ActionsReducers/ScheduleRedux"));
13
+ const getObjectTagsViewItems_1 = require("./Utilities/getObjectTagsViewItems");
13
14
  const dateTimeouts = {};
14
15
  const NodeSchedule = {
15
16
  scheduleJob: (date, fn) => {
@@ -39,9 +40,9 @@ class ScheduleModule extends AdaptableModuleBase_1.AdaptableModuleBase {
39
40
  this.addMidnightRefreshSchedule();
40
41
  }
41
42
  handleAdaptableReady() {
42
- this.setUpSechduleJobs();
43
+ this.setUpScheduleJobs();
43
44
  }
44
- setUpSechduleJobs() {
45
+ setUpScheduleJobs() {
45
46
  this.clearAllJobs();
46
47
  //add schedules
47
48
  this.api.scheduleApi
@@ -148,6 +149,7 @@ class ScheduleModule extends AdaptableModuleBase_1.AdaptableModuleBase {
148
149
  name: 'Schedule',
149
150
  values: [UIHelper_1.default.getScheduleDescription(schedule.Schedule)],
150
151
  },
152
+ getObjectTagsViewItems_1.getObjectTagsViewItems(schedule, this.api),
151
153
  ],
152
154
  };
153
155
  }
@@ -11,6 +11,7 @@ const StringExtensions_1 = tslib_1.__importDefault(require("../Utilities/Extensi
11
11
  const ShortcutWizard_1 = require("../View/Shortcut/Wizard/ShortcutWizard");
12
12
  const getScopeViewItems_1 = require("./Utilities/getScopeViewItems");
13
13
  const getShortcutSettingsViewItems_1 = require("./Utilities/getShortcutSettingsViewItems");
14
+ const getObjectTagsViewItems_1 = require("./Utilities/getObjectTagsViewItems");
14
15
  class ShortcutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
15
16
  constructor(api) {
16
17
  super(ModuleConstants.ShortcutModuleId, 'Shortcut', 'shortcut', 'ShortcutPopup', 'Set up rules so cells update mathematically when keys are pressed in numeric cells', api);
@@ -74,7 +75,11 @@ class ShortcutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
74
75
  toView(shortcut) {
75
76
  return {
76
77
  abObject: shortcut,
77
- items: [getScopeViewItems_1.getScopeViewItems(shortcut.Scope, this.api), getShortcutSettingsViewItems_1.getShortcutSettingsViewItems(shortcut)],
78
+ items: [
79
+ getScopeViewItems_1.getScopeViewItems(shortcut.Scope, this.api),
80
+ getShortcutSettingsViewItems_1.getShortcutSettingsViewItems(shortcut),
81
+ getObjectTagsViewItems_1.getObjectTagsViewItems(shortcut, this.api),
82
+ ],
78
83
  };
79
84
  }
80
85
  toViewAll() {
@@ -1,8 +1,9 @@
1
1
  import { AdaptableModuleBase } from './AdaptableModuleBase';
2
2
  import { IModule } from './Interface/IModule';
3
3
  import { AdaptableApi } from '../Api/AdaptableApi';
4
+ import { GridOptions } from '@ag-grid-community/all-modules';
4
5
  export declare class StatusBarModule extends AdaptableModuleBase implements IModule {
5
6
  constructor(api: AdaptableApi);
6
- syncStateWithOptions(): void;
7
+ syncStateWithOptions(agGridAdaptablePanels: GridOptions['statusBar']['statusPanels']): void;
7
8
  isModuleAvailable(): boolean;
8
9
  }
@@ -8,8 +8,7 @@ class StatusBarModule extends AdaptableModuleBase_1.AdaptableModuleBase {
8
8
  constructor(api) {
9
9
  super(ModuleConstants.StatusBarModuleId, 'Status Bar', 'statusbar', 'StatusBarPopup', 'Configure AdapTable Status Bar', api);
10
10
  }
11
- syncStateWithOptions() {
12
- const agGridStatusPanels = this.api.statusBarApi.getAgGridStatusPanels();
11
+ syncStateWithOptions(agGridAdaptablePanels) {
13
12
  const statusPanelsState = this.api.statusBarApi.getStatusPanels();
14
13
  /**
15
14
  * Grid config determines how many adaptable status panels are rendered.
@@ -17,7 +16,7 @@ class StatusBarModule extends AdaptableModuleBase_1.AdaptableModuleBase {
17
16
  * - if a status panel is removed from ag-grid, it's sub-panels are made available;
18
17
  * - if a new status panel is added it is added to state with an empty list
19
18
  */
20
- const newStatusPanelsState = agGridStatusPanels.map((agGridStatusPanel) => {
19
+ const newStatusPanelsState = agGridAdaptablePanels.map((agGridStatusPanel) => {
21
20
  let statusPanelState = statusPanelsState.find((statusPanel) => statusPanel.Key === agGridStatusPanel.key);
22
21
  // no state found
23
22
  if (!statusPanelState) {
@@ -0,0 +1,4 @@
1
+ import { AdaptableObject } from '../../PredefinedConfig/Common/AdaptableObject';
2
+ import { AdaptableApi } from '../../Api/AdaptableApi';
3
+ import { AdaptableObjectItemView } from '../Interface/IModule';
4
+ export declare const getObjectTagsViewItems: (object: AdaptableObject, api: AdaptableApi) => AdaptableObjectItemView;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getObjectTagsViewItems = void 0;
4
+ const ObjectTagsWizardSection_1 = require("../../View/Wizard/ObjectTagsWizardSection");
5
+ exports.getObjectTagsViewItems = (object, api) => {
6
+ if (!api.internalApi.shouldDisplayTagSections()) {
7
+ return;
8
+ }
9
+ return {
10
+ name: 'Tags',
11
+ view: () => ObjectTagsWizardSection_1.renderObjectTagsSummary(object),
12
+ };
13
+ };
@@ -25,6 +25,7 @@ exports.DefaultAdaptableOptions = {
25
25
  maxAlertsInStore: 20,
26
26
  cellHighlightDuration: 2000,
27
27
  rowHighlightDuration: 4000,
28
+ statusbarHighlightDuration: 2000,
28
29
  dataChangeDetectionPolicy: 'rawValue',
29
30
  actionHandlers: undefined,
30
31
  },
@@ -133,7 +134,7 @@ exports.DefaultAdaptableOptions = {
133
134
  autoSizeColumnsInLayout: false,
134
135
  autoSizeColumnsInPivotLayout: false,
135
136
  createDefaultLayout: false,
136
- view: {
137
+ viewOptions: {
137
138
  maxColumnsToDisplay: 10,
138
139
  },
139
140
  },
@@ -4,6 +4,7 @@ export declare type EmitterAnyCallback = (eventName: string, data?: any) => any;
4
4
  declare class Emittery {
5
5
  static mixin(emitteryPropertyName: string, methodNames: string[]): (target: any) => any;
6
6
  constructor();
7
+ destroy(): void;
7
8
  on(eventName: string, listener: EmitterCallback): any;
8
9
  off(eventName: string, listener: EmitterCallback): void;
9
10
  once(eventName: string): Promise<unknown>;
@@ -80,6 +80,15 @@ class Emittery {
80
80
  eventsMap.set(this, new Map());
81
81
  triggeredMap.set(this, new Map());
82
82
  }
83
+ destroy() {
84
+ this.clearListeners();
85
+ // should not be needed, since those maps are weak
86
+ // but let's do it anyway - some of our users suggested this Emitter class
87
+ // could be a source of memory leaks, so let's clean this up
88
+ anyMap.delete(this);
89
+ eventsMap.delete(this);
90
+ triggeredMap.delete(this);
91
+ }
83
92
  on(eventName, listener) {
84
93
  assertEventName(eventName);
85
94
  assertListener(listener);
@@ -41,4 +41,6 @@ export declare type XOR<FirstType, SecondType> = FirstType | SecondType extends
41
41
  export declare type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
42
42
  [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
43
43
  }[Keys];
44
+ /** Similar to the builtin Extract, but checks the filter strictly */
45
+ export declare type StrictExtract<T, U extends Partial<T>> = Extract<T, U>;
44
46
  export {};
@@ -3,7 +3,7 @@ import { ModuleParams } from '../../View/Components/SharedProps/ModuleViewPopupP
3
3
  import { AdaptableModule } from '../../PredefinedConfig/Common/Types';
4
4
  import { AdaptableMessageType } from '../../PredefinedConfig/Common/AdaptableMessageType';
5
5
  import { AdaptableAlert } from '../../PredefinedConfig/Common/AdaptableAlert';
6
- import { AdaptableForm, ButtonContext } from '../../types';
6
+ import { AdaptableForm, BaseContext } from '../../types';
7
7
  export interface UIConfirmation {
8
8
  Header: string;
9
9
  Msg: string;
@@ -79,7 +79,7 @@ export interface FormPopup {
79
79
  /**
80
80
  * Allows to customise the context before submitting the form
81
81
  */
82
- prepareContext?: (context: ButtonContext) => Promise<ButtonContext> | ButtonContext;
83
- Form: AdaptableForm<ButtonContext>;
82
+ prepareContext?: (context: BaseContext) => Promise<BaseContext> | BaseContext;
83
+ Form: AdaptableForm<BaseContext>;
84
84
  }[];
85
85
  }
@@ -19,7 +19,7 @@ import { IPushPullReport } from '../PredefinedConfig/SystemState';
19
19
  import { IPushPullSchedule } from '../PredefinedConfig/IPushPullState';
20
20
  import { OpenFinSchedule, OpenFinReport } from '../PredefinedConfig/OpenFinState';
21
21
  import { NamedQuery } from '../PredefinedConfig/QueryState';
22
- import { ColumnFilter } from '../PredefinedConfig/FilterState';
22
+ import { ColumnFilter, SystemFilterPredicateId } from '../PredefinedConfig/FilterState';
23
23
  import { ReminderSchedule } from '../PredefinedConfig/ScheduleState';
24
24
  import { AdaptableCellChangedAlert, AdaptableGenericAlert, AdaptableRowChangedAlert } from '../PredefinedConfig/Common/AdaptableAlert';
25
25
  import { AdaptableMessageType } from '../PredefinedConfig/Common/AdaptableMessageType';
@@ -63,7 +63,7 @@ export declare function CreateEmptyLayout(layout?: Partial<Layout> & {
63
63
  export declare function CreateEmptyStyle(): AdaptableStyle;
64
64
  export declare function CreateSystemStatusMessageInfo(message: string, type: AdaptableMessageType, furtherInfo?: string): SystemStatusMessageInfo;
65
65
  export declare function CreateEmptyCellSummmary(): CellSummmary;
66
- export declare function CreateColumnFilter(ColumnId: string, PredicateId: string, Inputs: any[]): ColumnFilter;
66
+ export declare function CreateColumnFilter(ColumnId: string, PredicateId: SystemFilterPredicateId, Inputs: any[]): ColumnFilter;
67
67
  export declare function CreateToastOptions(notificationsOptions: NotificationsOptions, { onClose }?: {
68
68
  onClose?: VoidFunction;
69
69
  }): ToastOptions;
@@ -52,7 +52,7 @@ class AlertService {
52
52
  }
53
53
  }
54
54
  destroy() {
55
- this.emitter.clearListeners();
55
+ this.emitter.destroy();
56
56
  this.emitter = null;
57
57
  this.reactiveAlertsMap.forEach((alertsSubscriptionInfo) => alertsSubscriptionInfo.subscription.unsubscribe());
58
58
  }
@@ -58,7 +58,7 @@ class DataService {
58
58
  return result;
59
59
  }
60
60
  destroy() {
61
- this.emitter.clearListeners();
61
+ this.emitter.destroy();
62
62
  this.emitter = null;
63
63
  }
64
64
  getUndoChangeKey(primaryKeyValue, columnId, previousValue, newValue) {
@@ -8,7 +8,7 @@ export interface IModuleService extends IAdaptableService {
8
8
  isModuleEditable(adaptableModule: AdaptableModule): boolean;
9
9
  createModuleMenus(): void;
10
10
  getTeamSharingAction(adaptableModule: AdaptableModule): TeamSharingImportInfo<AdaptableObject> | undefined;
11
- getModuleById(adaptableModule: AdaptableModule): IModule | undefined;
11
+ getModuleById<T = IModule>(adaptableModule: AdaptableModule): T | undefined;
12
12
  getModuleInfoByModule(adaptableModule: AdaptableModule): ModuleInfo | undefined;
13
13
  getModuleInfoByFriendlyName(friendlyName: string): ModuleInfo | undefined;
14
14
  getModuleDocumentationPageByModule(adaptableModule: AdaptableModule): string;
@@ -11,7 +11,7 @@ export declare class ModuleService implements IModuleService {
11
11
  isModuleAvailable(adaptableModule: AdaptableModule): boolean;
12
12
  isModuleEditable(adaptableModule: AdaptableModule): boolean;
13
13
  getTeamSharingAction(adaptableModule: AdaptableModule): TeamSharingImportInfo<AdaptableObject> | undefined;
14
- getModuleById(adaptableModule: AdaptableModule): IModule | undefined;
14
+ getModuleById<T = IModule>(adaptableModule: AdaptableModule): T | undefined;
15
15
  getModuleInfoByModule(adaptableModule: AdaptableModule): ModuleInfo | undefined;
16
16
  getModuleInfoByFriendlyName(friendlyName: string): ModuleInfo | undefined;
17
17
  getPopupMaxWidth(adaptableModule: AdaptableModule): number | undefined;
@@ -52,6 +52,7 @@ class ModuleService {
52
52
  return module.getTeamSharingAction();
53
53
  }
54
54
  getModuleById(adaptableModule) {
55
+ // @ts-ignore TODO: make modules generic
55
56
  return this.getModuleCollection().get(adaptableModule);
56
57
  }
57
58
  getModuleInfoByModule(adaptableModule) {
@@ -16,6 +16,7 @@ exports.AlertStatusPanel = () => {
16
16
  const [style, setStyle] = React.useState(initialStyle);
17
17
  const dispatch = react_redux_1.useDispatch();
18
18
  const module = adaptable.ModuleService.getModuleById(ModuleConstants.AlertModuleId);
19
+ const statusbarHighlightDuration = adaptable.adaptableOptions.alertOptions.statusbarHighlightDuration;
19
20
  /**
20
21
  * Using a selector to so the component updates each time an alert is triggered.
21
22
  */
@@ -46,7 +47,7 @@ exports.AlertStatusPanel = () => {
46
47
  */
47
48
  timeoutId.current = setTimeout(() => {
48
49
  setStyle(initialStyle);
49
- }, 2000);
50
+ }, statusbarHighlightDuration);
50
51
  }, [alerts]);
51
52
  // Dropdown content
52
53
  const handleDeleteAlert = React.useCallback((alert) => dispatch(SystemRedux.SystemAlertDelete(alert)), []);
@@ -19,6 +19,7 @@ const ObjectFactory_1 = tslib_1.__importDefault(require("../../../Utilities/Obje
19
19
  const react_redux_1 = require("react-redux");
20
20
  const AlertRedux = tslib_1.__importStar(require("../../../Redux/ActionsReducers/AlertRedux"));
21
21
  const AdaptableContext_1 = require("../../AdaptableContext");
22
+ const ObjectTagsWizardSection_1 = require("../../Wizard/ObjectTagsWizardSection");
22
23
  exports.AlertWizard = (props) => {
23
24
  const [alertDefinition, setAlertDefinition] = react_1.useState(() => {
24
25
  var _a;
@@ -159,6 +160,14 @@ exports.AlertWizard = (props) => {
159
160
  React.createElement(AlertBehaviourWizardSection_1.AlertBehaviourWizardSection, { onChange: setAlertDefinition }))),
160
161
  renderSummary: AlertBehaviourWizardSection_1.renderAlertBehaviourSummary,
161
162
  },
163
+ {
164
+ details: 'Select Alert tags',
165
+ title: 'Tags',
166
+ isVisible: () => api.internalApi.shouldDisplayTagSections(),
167
+ render: () => (React.createElement(rebass_1.Box, { padding: 2 },
168
+ React.createElement(ObjectTagsWizardSection_1.ObjectTagsWizardSection, { onChange: setAlertDefinition }))),
169
+ renderSummary: ObjectTagsWizardSection_1.renderObjectTagsSummary,
170
+ },
162
171
  '-',
163
172
  {
164
173
  details: 'Review your Alert',
@@ -13,6 +13,7 @@ const AdaptableContext_1 = require("../../AdaptableContext");
13
13
  const ObjectFactory_1 = tslib_1.__importDefault(require("../../../Utilities/ObjectFactory"));
14
14
  const react_redux_1 = require("react-redux");
15
15
  const CalculatedColumnRedux = tslib_1.__importStar(require("../../../Redux/ActionsReducers/CalculatedColumnRedux"));
16
+ const ObjectTagsWizardSection_1 = require("../../Wizard/ObjectTagsWizardSection");
16
17
  exports.CalculatedColumnWizard = (props) => {
17
18
  var _a;
18
19
  const adaptable = AdaptableContext_1.useAdaptable();
@@ -61,6 +62,14 @@ exports.CalculatedColumnWizard = (props) => {
61
62
  React.createElement(CalculatedColumnSettingsWizardSection_1.CalculatedColumnSettingsWizardSection, { isEdit: isEdit, onChange: setCalculatedColumn })));
62
63
  },
63
64
  },
65
+ {
66
+ details: 'Select Calculated Column tags',
67
+ title: 'Tags',
68
+ isVisible: () => adaptable.api.internalApi.shouldDisplayTagSections(),
69
+ render: () => (React.createElement(rebass_1.Box, { padding: 2 },
70
+ React.createElement(ObjectTagsWizardSection_1.ObjectTagsWizardSection, { onChange: setCalculatedColumn }))),
71
+ renderSummary: ObjectTagsWizardSection_1.renderObjectTagsSummary,
72
+ },
64
73
  '-',
65
74
  {
66
75
  render: () => {
@@ -53,6 +53,7 @@ exports.AdaptableObjectListItem = (props) => {
53
53
  return React.createElement(component, {
54
54
  data: props.data.abObject,
55
55
  key: index,
56
+ accessLevel,
56
57
  });
57
58
  });
58
59
  const isEditDisabled = !Boolean(EditWizard || viewOptions.onOpenEditPopup);
@@ -146,7 +146,7 @@ class FilterFormComponent extends React.Component {
146
146
  ' ',
147
147
  this.state.showTab && React.createElement("hr", null),
148
148
  predicateDefs
149
- .filter((p) => p.id != 'Values')
149
+ .filter((p) => p.id !== 'Values' && p.id !== 'ExcludeValues')
150
150
  .map((predicateDef, index) => this.renderColumnPredicate(predicateDef, index)))))))) : (React.createElement(HelpBlock_1.default, null, isFilterable))));
151
151
  }
152
152
  renderColumnPredicate(predicateDef, index) {
@@ -52,7 +52,7 @@ class QuickFilterFormComponent extends React.Component {
52
52
  }
53
53
  componentDidMount() {
54
54
  var _a, _b;
55
- if (((_b = (_a = this.state) === null || _a === void 0 ? void 0 : _a.filter) === null || _b === void 0 ? void 0 : _b.Predicate.PredicateId) === 'Values') {
55
+ if (this.hasValuesPredicate((_b = (_a = this.state) === null || _a === void 0 ? void 0 : _a.filter) === null || _b === void 0 ? void 0 : _b.Predicate)) {
56
56
  this.loadPermittedValues();
57
57
  }
58
58
  }
@@ -65,7 +65,7 @@ class QuickFilterFormComponent extends React.Component {
65
65
  return;
66
66
  }
67
67
  this.setState({ filter });
68
- if ((filter === null || filter === void 0 ? void 0 : filter.Predicate) && filter.Predicate.PredicateId === 'Values') {
68
+ if (this.hasValuesPredicate(filter === null || filter === void 0 ? void 0 : filter.Predicate)) {
69
69
  this.setState({ isDistinctColumnValuesLoading: true });
70
70
  this.loadPermittedValues();
71
71
  }
@@ -138,7 +138,7 @@ class QuickFilterFormComponent extends React.Component {
138
138
  showQuickFilterInput && this.renderPredicateInput(activePredicateDef, filter)));
139
139
  }
140
140
  renderLabel(filter, activePredicateDef) {
141
- if ((filter === null || filter === void 0 ? void 0 : filter.Predicate.PredicateId) === 'Values') {
141
+ if (this.hasValuesPredicate(filter === null || filter === void 0 ? void 0 : filter.Predicate)) {
142
142
  if (ArrayExtensions_1.default.IsNullOrEmpty(filter.Predicate.Inputs) &&
143
143
  ArrayExtensions_1.default.IsNullOrEmptyOrContainsSingleEmptyValue(this.state.distinctColumnValues)) {
144
144
  return this.renderNoValuesDropdown(filter);
@@ -238,7 +238,7 @@ class QuickFilterFormComponent extends React.Component {
238
238
  React.createElement(SimpleButton_1.default, { onClick: () => this.clearFilter() }, "Clear Filter"),
239
239
  ((_a = this.props.api.internalApi.getAdaptableOptions().filterOptions) === null || _a === void 0 ? void 0 : _a.autoApplyFilter) ==
240
240
  false && (React.createElement(SimpleButton_1.default, { ml: 2, onClick: () => this.updateFilter(this.state.filter) }, "Apply Filter"))),
241
- React.createElement(ListBoxFilterForm_1.ListBoxFilterForm, { suppressClientSideFilter: this.state.suppressClientSideFilter, isLoading: this.state.isDistinctColumnValuesLoading, onFilterChange: this.handleFilterChange, currentColumn: this.props.currentColumn, columns: [], columnDistinctValues: this.state.distinctColumnValues, dataType: this.props.currentColumn.dataType, uiSelectedColumnValues: this.state.filter.Predicate.Inputs, useAgGridStyle: true, onColumnValueSelectedChange: (list) => this.onColumnValuesChange(list) })));
241
+ React.createElement(ListBoxFilterForm_1.ListBoxFilterForm, { suppressClientSideFilter: this.state.suppressClientSideFilter, isLoading: this.state.isDistinctColumnValuesLoading, onFilterChange: this.handleFilterChange, currentColumn: this.props.currentColumn, columns: [], columnDistinctValues: this.state.distinctColumnValues, dataType: this.props.currentColumn.dataType, uiSelectedColumnValues: this.state.filter.Predicate.Inputs.filter((input) => input !== ''), useAgGridStyle: true, onColumnValueSelectedChange: (list) => this.onColumnValuesChange(list) })));
242
242
  } },
243
243
  React.createElement(SimpleButton_1.default, { style: {
244
244
  flex: 1,
@@ -248,12 +248,13 @@ class QuickFilterFormComponent extends React.Component {
248
248
  borderRadius: 0,
249
249
  borderLeftWidth: 0,
250
250
  borderColor: 'var(--ab-color-primarydark)',
251
- }, disabled: ArrayExtensions_1.default.IsNullOrEmptyOrContainsSingleEmptyValue(this.state.distinctColumnValues) }, filter.Predicate.Inputs.join(', ') || 'Select Values')));
251
+ }, disabled: ArrayExtensions_1.default.IsNullOrEmptyOrContainsSingleEmptyValue(this.state.distinctColumnValues) }, filter.Predicate.Inputs.join(', ') ||
252
+ (filter.Predicate.PredicateId === 'Values' ? 'Select Values' : 'Exclude Values'))));
252
253
  }
253
254
  onColumnValuesChange(columnValues) {
254
255
  var _a;
255
256
  const { filter } = this.state;
256
- filter.Predicate = { PredicateId: 'Values', Inputs: columnValues };
257
+ filter.Predicate = { PredicateId: filter.Predicate.PredicateId, Inputs: columnValues };
257
258
  if ((_a = this.props.api.internalApi.getAdaptableOptions().filterOptions) === null || _a === void 0 ? void 0 : _a.autoApplyFilter) {
258
259
  this.updateFilter(filter);
259
260
  }
@@ -270,7 +271,7 @@ class QuickFilterFormComponent extends React.Component {
270
271
  Inputs: ((_a = predicateDef.inputs) !== null && _a !== void 0 ? _a : []).map((i) => { var _a; return (_a = i.defaultValue) !== null && _a !== void 0 ? _a : ''; }),
271
272
  };
272
273
  this.updateFilter(filter);
273
- if (predicateId === 'Values') {
274
+ if (predicateId === 'Values' || predicateId === 'ExcludeValues') {
274
275
  this.loadPermittedValues();
275
276
  requestAnimationFrame(() => {
276
277
  if (this.valuesDropdown) {
@@ -308,6 +309,9 @@ class QuickFilterFormComponent extends React.Component {
308
309
  const { filter } = this.state;
309
310
  this.props.api.filterApi.clearColumnFilterByColumn(filter.ColumnId);
310
311
  }
312
+ hasValuesPredicate(predicate) {
313
+ return (predicate === null || predicate === void 0 ? void 0 : predicate.PredicateId) === 'Values' || (predicate === null || predicate === void 0 ? void 0 : predicate.PredicateId) === 'ExcludeValues';
314
+ }
311
315
  }
312
316
  function mapStateToProps(state, ownProps) {
313
317
  return {
@@ -1,3 +1,3 @@
1
1
  import { AdaptableColumn } from '../../../PredefinedConfig/Common/AdaptableColumn';
2
2
  import { SystemFilterPredicateId } from '../../../PredefinedConfig/FilterState';
3
- export declare const getDefaultColumnFilterPredicate: (column: AdaptableColumn, defaultColumnFilter: "Before" | "After" | "Values" | "Blanks" | "NonBlanks" | "Equals" | "NotEquals" | "GreaterThan" | "LessThan" | "Positive" | "Negative" | "Zero" | "Between" | "NotBetween" | "Is" | "IsNot" | "Contains" | "NotContains" | "StartsWith" | "EndsWith" | "Regex" | "Today" | "Yesterday" | "Tomorrow" | "ThisWeek" | "ThisMonth" | "ThisQuarter" | "ThisYear" | "InPast" | "InFuture" | "InRange" | "On" | "NotOn" | "NextWorkDay" | "LastWorkDay" | "True" | "False" | "BooleanToggle" | ((column: AdaptableColumn) => SystemFilterPredicateId)) => SystemFilterPredicateId;
3
+ export declare const getDefaultColumnFilterPredicate: (column: AdaptableColumn, defaultColumnFilter: "Before" | "After" | "Blanks" | "NonBlanks" | "Equals" | "NotEquals" | "GreaterThan" | "LessThan" | "Positive" | "Negative" | "Zero" | "Between" | "NotBetween" | "Is" | "IsNot" | "Contains" | "NotContains" | "StartsWith" | "EndsWith" | "Regex" | "Today" | "Yesterday" | "Tomorrow" | "ThisWeek" | "ThisMonth" | "ThisQuarter" | "ThisYear" | "InPast" | "InFuture" | "On" | "NotOn" | "NextWorkDay" | "LastWorkDay" | "True" | "False" | "Values" | "ExcludeValues" | "InRange" | "BooleanToggle" | ((column: AdaptableColumn) => SystemFilterPredicateId)) => SystemFilterPredicateId;
@@ -9,7 +9,9 @@ const react_toastify_1 = require("react-toastify");
9
9
  exports.showToast = (props) => {
10
10
  const toastProps = ObjectFactory_1.default.CreateToastOptions(props.api.internalApi.getAdaptableOptions().notificationsOptions, {
11
11
  onClose: () => {
12
- props.api.internalApi.hidePopupAlert();
12
+ if (!props.api.isDestroyed()) {
13
+ props.api.internalApi.hidePopupAlert();
14
+ }
13
15
  },
14
16
  });
15
17
  const content = (React.createElement(AdaptablePopupAlert_1.AdaptablePopupAlert, Object.assign({ headless: true }, props, { onClose: () => {
@@ -1,10 +1,10 @@
1
1
  import * as React from 'react';
2
- import { AdaptableForm, ButtonContext } from '../../../../../types';
2
+ import { AdaptableForm, BaseContext } from '../../../../../types';
3
3
  export interface FormDialogProps {
4
4
  id: string;
5
5
  formProps: any;
6
- prepareContext: (context: ButtonContext) => Promise<ButtonContext> | ButtonContext;
7
- form: AdaptableForm<ButtonContext>;
6
+ prepareContext: (context: BaseContext) => Promise<BaseContext> | BaseContext;
7
+ form: AdaptableForm<BaseContext>;
8
8
  }
9
9
  export declare const FormDialog: React.FunctionComponent<FormDialogProps>;
10
10
  export declare const FormPopups: React.FunctionComponent;
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { ValueSelectorProps } from '../ValueSelector';
3
+ import { AdaptableObjectTag } from '../../../PredefinedConfig/Common/AdaptableObject';
4
+ export interface TagsSelectorProps extends Omit<ValueSelectorProps<AdaptableObjectTag, string | number>, 'options' | 'value' | 'onChange' | 'allowReorder' | 'toIdentifier' | 'toLabel' | 'selectionBoxPosition' | 'noSelectionLabel' | 'xSelectedLabel'> {
5
+ availableTags?: AdaptableObjectTag[];
6
+ selectedTags?: AdaptableObjectTag[];
7
+ onChange: (selectedTags: AdaptableObjectTag[]) => void;
8
+ }
9
+ export declare const TagValueSelector: (props: TagsSelectorProps) => JSX.Element;
10
+ export interface TagValueOptionsTagsProps {
11
+ tags?: AdaptableObjectTag[];
12
+ }
13
+ export declare const TagValueOptionsTags: (props: TagValueOptionsTagsProps) => JSX.Element;