@adaptabletools/adaptable 10.0.0 → 10.0.4-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 (169) hide show
  1. package/base.css +77 -29
  2. package/index.css +89 -31
  3. package/package.json +1 -5
  4. package/publishTimestamp.d.ts +1 -1
  5. package/publishTimestamp.js +1 -1
  6. package/src/AdaptableInterfaces/IAdaptable.d.ts +12 -2
  7. package/src/AdaptableOptions/FilterOptions.d.ts +14 -7
  8. package/src/AdaptableOptions/LayoutOptions.d.ts +1 -1
  9. package/src/AdaptableOptions/UserInterfaceOptions.d.ts +88 -4
  10. package/src/Api/AlertApi.d.ts +1 -1
  11. package/src/Api/CalculatedColumnApi.d.ts +15 -0
  12. package/src/Api/ColumnApi.d.ts +39 -0
  13. package/src/Api/ConfigApi.d.ts +8 -0
  14. package/src/Api/GridApi.d.ts +34 -8
  15. package/src/Api/Implementation/AlertApiImpl.d.ts +1 -1
  16. package/src/Api/Implementation/AlertApiImpl.js +16 -9
  17. package/src/Api/Implementation/CalculatedColumnApiImpl.d.ts +3 -0
  18. package/src/Api/Implementation/CalculatedColumnApiImpl.js +23 -0
  19. package/src/Api/Implementation/ColumnApiImpl.d.ts +8 -0
  20. package/src/Api/Implementation/ColumnApiImpl.js +69 -36
  21. package/src/Api/Implementation/ConfigApiImpl.d.ts +1 -1
  22. package/src/Api/Implementation/ConfigApiImpl.js +28 -17
  23. package/src/Api/Implementation/ExportApiImpl.js +4 -4
  24. package/src/Api/Implementation/FormatColumnApiImpl.js +1 -1
  25. package/src/Api/Implementation/FreeTextColumnApiImpl.js +9 -3
  26. package/src/Api/Implementation/GridApiImpl.d.ts +9 -0
  27. package/src/Api/Implementation/GridApiImpl.js +25 -10
  28. package/src/Api/Implementation/InternalApiImpl.d.ts +3 -1
  29. package/src/Api/Implementation/InternalApiImpl.js +20 -4
  30. package/src/Api/Implementation/LayoutApiImpl.js +3 -3
  31. package/src/Api/Implementation/QueryLanguageApiImpl.d.ts +2 -0
  32. package/src/Api/Implementation/QueryLanguageApiImpl.js +3 -0
  33. package/src/Api/Implementation/ScopeApiImpl.js +11 -11
  34. package/src/Api/Implementation/UserInterfaceApiImpl.d.ts +12 -8
  35. package/src/Api/Implementation/UserInterfaceApiImpl.js +59 -86
  36. package/src/Api/InternalApi.d.ts +3 -1
  37. package/src/Api/QueryLanguageApi.d.ts +5 -0
  38. package/src/Api/UserInterfaceApi.d.ts +16 -6
  39. package/src/PredefinedConfig/AlertState.d.ts +10 -0
  40. package/src/PredefinedConfig/CalculatedColumnState.d.ts +4 -37
  41. package/src/PredefinedConfig/Common/AdaptableColumn.d.ts +33 -33
  42. package/src/PredefinedConfig/Common/AdaptableColumn.js +5 -5
  43. package/src/PredefinedConfig/Common/AdaptablePredicate.js +19 -18
  44. package/src/PredefinedConfig/Common/DataChangedInfo.d.ts +3 -2
  45. package/src/PredefinedConfig/Common/DataUpdateConfig.d.ts +5 -1
  46. package/src/PredefinedConfig/Common/SpecialColumnSettings.d.ts +49 -0
  47. package/src/{Utilities/Interface/ProgressIndicator.js → PredefinedConfig/Common/SpecialColumnSettings.js} +0 -0
  48. package/src/PredefinedConfig/FilterState.d.ts +1 -1
  49. package/src/PredefinedConfig/FreeTextColumnState.d.ts +10 -0
  50. package/src/PredefinedConfig/Selection/GridCell.d.ts +2 -1
  51. package/src/PredefinedConfig/Selection/GridRow.d.ts +12 -4
  52. package/src/PredefinedConfig/SystemState.d.ts +4 -1
  53. package/src/Redux/ActionsReducers/SystemRedux.js +1 -1
  54. package/src/Redux/Store/AdaptableReduxMerger.js +7 -1
  55. package/src/Redux/Store/AdaptableStore.js +7 -3
  56. package/src/Strategy/AdaptableModuleBase.js +8 -8
  57. package/src/Strategy/AlertModule.js +12 -11
  58. package/src/Strategy/BulkUpdateModule.js +5 -5
  59. package/src/Strategy/CalculatedColumnModule.js +1 -1
  60. package/src/Strategy/CellSummaryModule.js +3 -3
  61. package/src/Strategy/ConditionalStyleModule.js +3 -3
  62. package/src/Strategy/CustomSortModule.js +2 -2
  63. package/src/Strategy/ExportModule.d.ts +0 -2
  64. package/src/Strategy/ExportModule.js +59 -62
  65. package/src/Strategy/FilterModule.js +4 -4
  66. package/src/Strategy/FormatColumnModule.js +5 -5
  67. package/src/Strategy/FreeTextColumnModule.js +1 -1
  68. package/src/Strategy/LayoutModule.js +3 -3
  69. package/src/Strategy/PlusMinusModule.js +8 -9
  70. package/src/Strategy/SmartEditModule.js +6 -6
  71. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +1 -0
  72. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.js +1 -1
  73. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +2 -2
  74. package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.js +3 -2
  75. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +1 -1
  76. package/src/Utilities/Helpers/DateHelper.d.ts +8 -2
  77. package/src/Utilities/Helpers/DateHelper.js +42 -20
  78. package/src/Utilities/Helpers/PreviewHelper.js +2 -2
  79. package/src/Utilities/ObjectFactory.d.ts +1 -1
  80. package/src/Utilities/ObjectFactory.js +14 -2
  81. package/src/Utilities/Services/DataService.js +5 -5
  82. package/src/Utilities/Services/MetamodelService.js +1 -0
  83. package/src/Utilities/Services/ModuleService.js +31 -24
  84. package/src/Utilities/Services/ReportService.js +12 -12
  85. package/src/Utilities/Services/ValidationService.js +4 -5
  86. package/src/Utilities/runIfNotResolvedIn.d.ts +8 -0
  87. package/src/Utilities/runIfNotResolvedIn.js +23 -0
  88. package/src/View/AdaptableView.js +1 -1
  89. package/src/View/Alert/AlertPopup.js +1 -1
  90. package/src/View/Alert/Wizard/AlertDisplayWizardSection.js +19 -5
  91. package/src/View/Alert/Wizard/BaseAlertScopeWizardSection.js +1 -1
  92. package/src/View/BulkUpdate/BulkUpdatePopup.d.ts +2 -0
  93. package/src/View/BulkUpdate/BulkUpdatePopup.js +6 -4
  94. package/src/View/BulkUpdate/BulkUpdateViewPanel.d.ts +2 -0
  95. package/src/View/BulkUpdate/BulkUpdateViewPanel.js +3 -1
  96. package/src/View/CalculatedColumn/CalculatedColumnPopup.js +1 -1
  97. package/src/View/CalculatedColumn/CalculatedColumnSummary.js +1 -1
  98. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -1
  99. package/src/View/Components/ColumnSelector/index.js +2 -2
  100. package/src/View/Components/FilterForm/FilterForm.d.ts +3 -51
  101. package/src/View/Components/FilterForm/FilterForm.js +53 -32
  102. package/src/View/Components/FilterForm/ListBoxFilterForm.d.ts +3 -0
  103. package/src/View/Components/FilterForm/ListBoxFilterForm.js +14 -5
  104. package/src/View/Components/FilterForm/QuickFilterForm.d.ts +3 -43
  105. package/src/View/Components/FilterForm/QuickFilterForm.js +72 -31
  106. package/src/View/Components/FilterForm/getDefaultColumnFilterPredicate.d.ts +3 -0
  107. package/src/View/Components/FilterForm/getDefaultColumnFilterPredicate.js +8 -0
  108. package/src/View/Components/NewScopeComponent.js +1 -1
  109. package/src/View/Components/Popups/AdaptablePopup.d.ts +1 -1
  110. package/src/View/Components/PreviewResultsPanel.js +1 -1
  111. package/src/View/Components/RangesComponent.js +2 -2
  112. package/src/View/Components/Selectors/ColumnSelector.js +5 -5
  113. package/src/View/Components/Selectors/ColumnValueSelector.d.ts +10 -2
  114. package/src/View/Components/Selectors/ColumnValueSelector.js +47 -15
  115. package/src/View/Components/ToolPanel/AdaptableToolPanel.js +6 -6
  116. package/src/View/ConditionalStyle/ConditionalStylePopup.js +1 -1
  117. package/src/View/ConditionalStyle/ConditionalStyleSummary.js +1 -1
  118. package/src/View/CustomSort/CustomSortEntityRow.js +2 -2
  119. package/src/View/CustomSort/CustomSortPopup.js +1 -1
  120. package/src/View/CustomSort/CustomSortSummary.js +3 -3
  121. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +3 -3
  122. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +24 -6
  123. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +3 -3
  124. package/src/View/DataChangeHistory/DataChangeHistoryPopup.js +4 -1
  125. package/src/View/Filter/FilterSummary.js +2 -2
  126. package/src/View/FormatColumn/FormatColumnPopup.js +1 -1
  127. package/src/View/FormatColumn/FormatColumnSummary.js +1 -1
  128. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +1 -1
  129. package/src/View/FreeTextColumn/FreeTextColumnPopup.js +4 -2
  130. package/src/View/FreeTextColumn/FreeTextColumnSummary.js +5 -3
  131. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +1 -1
  132. package/src/View/GridInfo/ColumnInfoComponent.js +16 -16
  133. package/src/View/GridInfo/GridInfoPopup.js +4 -1
  134. package/src/View/Layout/Wizard/LayoutEditor/ColumnList.js +6 -6
  135. package/src/View/Layout/Wizard/LayoutEditor/ColumnSortList.js +1 -1
  136. package/src/View/Layout/Wizard/LayoutEditor/PivotList.js +1 -1
  137. package/src/View/Layout/Wizard/LayoutEditor/RowGroupsList.js +1 -1
  138. package/src/View/Layout/Wizard/LayoutEditor/getItemStyle.js +2 -2
  139. package/src/View/Layout/Wizard/LayoutEditor/index.js +41 -41
  140. package/src/View/PlusMinus/PlusMinusPopup.js +1 -1
  141. package/src/View/PlusMinus/PlusMinusSummary.js +1 -1
  142. package/src/View/Query/QueryViewPanel.js +3 -3
  143. package/src/View/Schedule/Wizard/ScheduleScheduleWizard.d.ts +1 -1
  144. package/src/View/Schedule/Wizard/ScheduleScheduleWizard.js +6 -8
  145. package/src/View/UIHelper.d.ts +2 -0
  146. package/src/View/UIHelper.js +10 -1
  147. package/src/agGrid/ActionColumnRenderer.d.ts +2 -1
  148. package/src/agGrid/ActionColumnRenderer.js +20 -3
  149. package/src/agGrid/Adaptable.d.ts +20 -4
  150. package/src/agGrid/Adaptable.js +234 -102
  151. package/src/agGrid/agGridHelper.js +32 -32
  152. package/src/agGrid/agGridMenuHelper.js +2 -2
  153. package/src/components/Dashboard/Dashboard.js +1 -1
  154. package/src/components/DropdownButton/index.js +1 -1
  155. package/src/components/ExpressionEditor/index.js +8 -7
  156. package/src/components/Loader/Loader.d.ts +7 -0
  157. package/src/components/Loader/Loader.js +13 -0
  158. package/src/components/Loader/index.d.ts +2 -0
  159. package/src/components/Loader/index.js +7 -0
  160. package/src/components/ProgressIndicator/ProgressIndicator.d.ts +2 -0
  161. package/src/components/ProgressIndicator/ProgressIndicator.js +54 -0
  162. package/src/metamodel/adaptable.metamodel.d.ts +125 -7
  163. package/src/metamodel/adaptable.metamodel.js +416 -101
  164. package/src/types.d.ts +4 -3
  165. package/version.d.ts +1 -1
  166. package/version.js +1 -1
  167. package/src/Utilities/Interface/ProgressIndicator.d.ts +0 -4
  168. package/src/View/Export/ProgressIndicator.d.ts +0 -6
  169. package/src/View/Export/ProgressIndicator.js +0 -25
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QuickFilterFormReact = exports.QuickFilterForm = void 0;
3
+ exports.QuickFilterFormReact = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
6
  const debounce_1 = tslib_1.__importDefault(require("lodash-es/debounce"));
@@ -16,60 +16,87 @@ const ArrayExtensions_1 = tslib_1.__importDefault(require("../../../Utilities/Ex
16
16
  const AdaptableInput_1 = tslib_1.__importDefault(require("../AdaptableInput"));
17
17
  const renderWithAdaptableContext_1 = require("../../renderWithAdaptableContext");
18
18
  const CheckBox_1 = require("../../../components/CheckBox");
19
+ const isEqual_1 = tslib_1.__importDefault(require("lodash-es/isEqual"));
20
+ const runIfNotResolvedIn_1 = require("../../../Utilities/runIfNotResolvedIn");
21
+ const getDefaultColumnFilterPredicate_1 = require("./getDefaultColumnFilterPredicate");
19
22
  class QuickFilterFormComponent extends React.Component {
20
23
  constructor(props) {
21
24
  super(props);
22
- this.getDistinctValues = (props = this.props) => {
23
- return props.api.columnApi.getDistinctDisplayValuesForColumn(props.currentColumn.ColumnId);
25
+ this._isMounted = false;
26
+ this.handleFilterChange = (filter) => {
27
+ if (this.state.suppressClientSideFilter) {
28
+ this.loadPermittedValues(filter);
29
+ }
30
+ };
31
+ this.loadPermittedValues = async (filter = '') => {
32
+ const { values, suppressClientSideFilter } = await runIfNotResolvedIn_1.runIfNotResolvedIn(this.props.api.columnApi.getDistinctFilterDisplayValuesForColumn(this.props.currentColumn.columnId, filter), () => this._isMounted && this.setState({ isDistinctColumnValuesLoading: true }));
33
+ if (!this._isMounted) {
34
+ return;
35
+ }
36
+ this.setState({
37
+ distinctColumnValues: values,
38
+ suppressClientSideFilter,
39
+ isDistinctColumnValuesLoading: false,
40
+ });
24
41
  };
25
42
  this.debouncedAddFilter = debounce_1.default(() => this.props.onAddColumnFilter(this.state.filter), 250);
26
43
  this.debouncedEditFilter = debounce_1.default(() => this.props.onEditColumnFilter(this.state.filter), 250);
27
- const filter = this.getFilterFromProps(props);
28
- const distinctColumnValues = filter.Predicate.PredicateId === 'Values' ? this.getDistinctValues() : [];
44
+ const filter = this.getFilterFromProps();
45
+ this._isMounted = true;
29
46
  this.state = {
30
47
  filter,
31
- distinctColumnValues,
48
+ suppressClientSideFilter: false,
49
+ isDistinctColumnValuesLoading: false,
50
+ distinctColumnValues: [],
32
51
  };
33
52
  }
34
- updateDistinctValues(props = this.props) {
35
- this.setState({ distinctColumnValues: this.getDistinctValues(props) });
53
+ componentDidMount() {
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') {
56
+ this.loadPermittedValues();
57
+ }
58
+ }
59
+ componentWillUnmount() {
60
+ this._isMounted = false;
36
61
  }
37
62
  UNSAFE_componentWillReceiveProps(nextProps) {
38
63
  const filter = this.getFilterFromProps(nextProps);
39
- this.setState({
40
- filter,
41
- });
64
+ if (isEqual_1.default(filter, this.state.filter)) {
65
+ return;
66
+ }
67
+ this.setState({ filter });
42
68
  if ((filter === null || filter === void 0 ? void 0 : filter.Predicate) && filter.Predicate.PredicateId === 'Values') {
43
- this.updateDistinctValues(nextProps);
69
+ this.setState({ isDistinctColumnValuesLoading: true });
70
+ this.loadPermittedValues();
44
71
  }
45
72
  }
46
- getFilterFromProps(props) {
47
- const filter = props.columnFilters.find((cf) => cf.ColumnId == props.currentColumn.ColumnId);
73
+ getFilterFromProps(props = this.props) {
74
+ const filter = props.columnFilters.find((cf) => cf.ColumnId == props.currentColumn.columnId);
48
75
  const filterOptions = props.api.internalApi.getAdaptableOptions().filterOptions;
49
76
  if (filter) {
50
77
  return filter;
51
78
  }
52
- if (!filter && props.currentColumn.DataType === 'Number') {
53
- return ObjectFactory_1.ObjectFactory.CreateColumnFilter(this.props.currentColumn.ColumnId, filterOptions.defaultNumericColumnFilter, ['']);
79
+ if (!filter && props.currentColumn.dataType === 'Number') {
80
+ return ObjectFactory_1.ObjectFactory.CreateColumnFilter(props.currentColumn.columnId, getDefaultColumnFilterPredicate_1.getDefaultColumnFilterPredicate(props.currentColumn, filterOptions.defaultNumericColumnFilter), ['']);
54
81
  }
55
- if (!filter && props.currentColumn.DataType === 'String') {
56
- return ObjectFactory_1.ObjectFactory.CreateColumnFilter(this.props.currentColumn.ColumnId, filterOptions.defaultStringColumnFilter, ['']);
82
+ if (!filter && props.currentColumn.dataType === 'String') {
83
+ return ObjectFactory_1.ObjectFactory.CreateColumnFilter(props.currentColumn.columnId, getDefaultColumnFilterPredicate_1.getDefaultColumnFilterPredicate(props.currentColumn, filterOptions.defaultStringColumnFilter), ['']);
57
84
  }
58
- if (!filter && props.currentColumn.DataType === 'Date') {
59
- return ObjectFactory_1.ObjectFactory.CreateColumnFilter(this.props.currentColumn.ColumnId, filterOptions.defaultDateColumnFilter, ['']);
85
+ if (!filter && props.currentColumn.dataType === 'Date') {
86
+ return ObjectFactory_1.ObjectFactory.CreateColumnFilter(props.currentColumn.columnId, getDefaultColumnFilterPredicate_1.getDefaultColumnFilterPredicate(props.currentColumn, filterOptions.defaultDateColumnFilter), ['']);
60
87
  }
61
- if (!filter && props.currentColumn.DataType === 'Boolean') {
62
- return ObjectFactory_1.ObjectFactory.CreateColumnFilter(this.props.currentColumn.ColumnId, 'BooleanToggle', [
88
+ if (!filter && props.currentColumn.dataType === 'Boolean') {
89
+ return ObjectFactory_1.ObjectFactory.CreateColumnFilter(this.props.currentColumn.columnId, 'BooleanToggle', [
63
90
  'all',
64
91
  ]);
65
92
  }
66
- return ObjectFactory_1.ObjectFactory.CreateColumnFilter(this.props.currentColumn.ColumnId, null, null);
93
+ return ObjectFactory_1.ObjectFactory.CreateColumnFilter(this.props.currentColumn.columnId, null, null);
67
94
  }
68
95
  render() {
69
96
  const { filter } = this.state;
70
97
  const predicateDefs = this.props.api.filterApi.getFilterPredicateDefsForColumn(this.props.currentColumn);
71
98
  const activePredicateDef = this.props.api.predicateApi.getPredicateDefById(filter === null || filter === void 0 ? void 0 : filter.Predicate.PredicateId);
72
- if (!this.props.currentColumn || !this.props.currentColumn.Filterable) {
99
+ if (!this.props.currentColumn || !this.props.currentColumn.filterable) {
73
100
  return null;
74
101
  }
75
102
  let showEvent = 'mouseenter';
@@ -179,11 +206,25 @@ class QuickFilterFormComponent extends React.Component {
179
206
  } }, 'No Column Values'));
180
207
  }
181
208
  renderValuesDropdown(filter) {
182
- return (React.createElement(OverlayTrigger_1.default, { alignHorizontal: "left", showEvent: "mouseenter", hideEvent: "mouseleave", hideDelay: 300, ref: (api) => {
209
+ let showEvent = 'mouseenter';
210
+ if (this.props.quickFilterValuesTrigger === 'click') {
211
+ showEvent = 'click';
212
+ }
213
+ return (React.createElement(OverlayTrigger_1.default, { alignHorizontal: "left", showEvent: showEvent,
214
+ // cannot hide on blur, because the form input receives the input when this is opened
215
+ hideEvent: "mouseleave", hideDelay: 300, ref: (api) => {
183
216
  this.valuesDropdown = api;
184
217
  }, render: () => {
185
218
  var _a;
186
- return (React.createElement(rebass_1.Flex, { "data-name": "quick-filter-form", flexDirection: "column", style: {
219
+ return (React.createElement(rebass_1.Flex, { onMouseEnter: () => {
220
+ var _a;
221
+ if (showEvent === 'click') {
222
+ // For showEvent=mouseneter this is not needed.
223
+ // When mouseenter is triggered on the overlay, onShowFn is called, the overlay is no longer hidden.
224
+ // But in this case because the trigger is click, another show is not triggered.
225
+ (_a = this.valuesDropdown) === null || _a === void 0 ? void 0 : _a.show();
226
+ }
227
+ }, "data-name": "quick-filter-form", flexDirection: "column", style: {
187
228
  fontSize: 'var(--ab-font-size-2)',
188
229
  border: '1px solid var(--ab-color-primarydark)',
189
230
  background: 'var(--ab-color-defaultbackground)',
@@ -193,7 +234,7 @@ class QuickFilterFormComponent extends React.Component {
193
234
  React.createElement(SimpleButton_1.default, { onClick: () => this.clearFilter() }, "Clear Filter"),
194
235
  ((_a = this.props.api.internalApi.getAdaptableOptions().filterOptions) === null || _a === void 0 ? void 0 : _a.autoApplyFilter) ==
195
236
  false && (React.createElement(SimpleButton_1.default, { ml: 2, onClick: () => this.updateFilter(this.state.filter) }, "Apply Filter"))),
196
- React.createElement(ListBoxFilterForm_1.ListBoxFilterForm, { currentColumn: this.props.currentColumn, columns: [], columnDistinctValues: this.state.distinctColumnValues, dataType: this.props.currentColumn.DataType, uiSelectedColumnValues: this.state.filter.Predicate.Inputs, useVendorStyle: true, onColumnValueSelectedChange: (list) => this.onColumnValuesChange(list) })));
237
+ 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, useVendorStyle: true, onColumnValueSelectedChange: (list) => this.onColumnValuesChange(list) })));
197
238
  } },
198
239
  React.createElement(SimpleButton_1.default, { style: {
199
240
  flex: 1,
@@ -226,7 +267,7 @@ class QuickFilterFormComponent extends React.Component {
226
267
  };
227
268
  this.updateFilter(filter);
228
269
  if (predicateId === 'Values') {
229
- this.updateDistinctValues();
270
+ this.loadPermittedValues();
230
271
  requestAnimationFrame(() => {
231
272
  if (this.valuesDropdown) {
232
273
  this.valuesDropdown.show();
@@ -276,8 +317,8 @@ function mapDispatchToProps(dispatch) {
276
317
  onEditColumnFilter: (columnFilter) => dispatch(FilterRedux.ColumnFilterEdit(columnFilter)),
277
318
  };
278
319
  }
279
- exports.QuickFilterForm = react_redux_1.connect(mapStateToProps, mapDispatchToProps)(QuickFilterFormComponent);
320
+ const QuickFilterForm = react_redux_1.connect(mapStateToProps, mapDispatchToProps)(QuickFilterFormComponent);
280
321
  exports.QuickFilterFormReact = (FilterContext) => {
281
- var _a;
282
- return renderWithAdaptableContext_1.renderWithAdaptableContext(React.createElement(exports.QuickFilterForm, { api: FilterContext.Adaptable.api, quickFilterTrigger: (_a = FilterContext.Adaptable.adaptableOptions.filterOptions) === null || _a === void 0 ? void 0 : _a.quickFilterTrigger, currentColumn: FilterContext.Column, teamSharingActivated: false, embedColumnMenu: FilterContext.Adaptable.embedColumnMenu }), FilterContext.Adaptable);
322
+ var _a, _b;
323
+ return renderWithAdaptableContext_1.renderWithAdaptableContext(React.createElement(QuickFilterForm, { api: FilterContext.Adaptable.api, quickFilterTrigger: (_a = FilterContext.Adaptable.adaptableOptions.filterOptions) === null || _a === void 0 ? void 0 : _a.quickFilterTrigger, quickFilterValuesTrigger: (_b = FilterContext.Adaptable.adaptableOptions.filterOptions) === null || _b === void 0 ? void 0 : _b.quickFilterValuesTrigger, currentColumn: FilterContext.Column, teamSharingActivated: false, embedColumnMenu: FilterContext.Adaptable.embedColumnMenu }), FilterContext.Adaptable);
283
324
  };
@@ -0,0 +1,3 @@
1
+ import { AdaptableColumn } from '../../../PredefinedConfig/Common/AdaptableColumn';
2
+ import { SystemFilterPredicateId } from '../../../PredefinedConfig/FilterState';
3
+ export declare const getDefaultColumnFilterPredicate: (column: AdaptableColumn, defaultColumnFilter: "After" | "Before" | "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" | "InRange" | "BooleanToggle" | ((column: AdaptableColumn) => SystemFilterPredicateId)) => SystemFilterPredicateId;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultColumnFilterPredicate = void 0;
4
+ exports.getDefaultColumnFilterPredicate = (column, defaultColumnFilter) => {
5
+ return typeof defaultColumnFilter === 'function'
6
+ ? defaultColumnFilter(column)
7
+ : defaultColumnFilter;
8
+ };
@@ -54,7 +54,7 @@ exports.renderScopeSummary = (scope, labels) => {
54
54
  React.createElement(OnePageAdaptableWizard_1.SummaryText, { mb: 0 }, scopeApi.scopeIsAll(scope) ? labels.scopeWholeRow : null)),
55
55
  React.createElement(rebass_1.Box, { style: { overflow: 'hidden' } }, 'ColumnIds' in scope ? (React.createElement(React.Fragment, null,
56
56
  React.createElement(OnePageAdaptableWizard_1.SummaryText, { mb: columnsInScope.length ? 2 : 0 }, labels.scopeColumns),
57
- columnsInScope.length ? (React.createElement(ValueSelector_1.ValueOptionsTags, { options: columnsInScope, value: columnsInScope.map((c) => c.ColumnId), toLabel: (c) => c.FriendlyName, allowWrap: true, readOnly: true, renderLabel: (c) => React.createElement(OnePageAdaptableWizard_1.SummaryText, { mb: 0 }, c), toIdentifier: (c) => c.ColumnId })) : null)) : null),
57
+ columnsInScope.length ? (React.createElement(ValueSelector_1.ValueOptionsTags, { options: columnsInScope, value: columnsInScope.map((c) => c.columnId), toLabel: (c) => c.friendlyName, allowWrap: true, readOnly: true, renderLabel: (c) => React.createElement(OnePageAdaptableWizard_1.SummaryText, { mb: 0 }, c), toIdentifier: (c) => c.columnId })) : null)) : null),
58
58
  React.createElement(rebass_1.Box, null, 'DataTypes' in scope ? (React.createElement(React.Fragment, null,
59
59
  React.createElement(rebass_1.Text, { fontSize: 2, mb: 2 }, labels.scopeDataTypes),
60
60
  React.createElement(ValueSelector_1.ValueOptionsTags, { readOnly: true, options: scope.DataTypes, value: scope.DataTypes, toLabel: (c) => c, allowWrap: true, renderLabel: (c) => React.createElement(rebass_1.Text, { fontSize: 2 }, `DataType: ${c}`), toIdentifier: (c) => c }))) : null)));
@@ -4,7 +4,7 @@ import { ModuleParams } from '../SharedProps/ModuleViewPopupProps';
4
4
  import { AdaptableModule } from '../../../PredefinedConfig/Common/Types';
5
5
  import { AdaptableApi } from '../../../Api/AdaptableApi';
6
6
  /**
7
- * This is the main popup that we use - so all function popups will appear here.
7
+ * This is the main popup that we use - so all Module popups will appear here.
8
8
  */
9
9
  export interface AdaptablePopupProps extends React.ClassAttributes<AdaptablePopup> {
10
10
  showModal: boolean;
@@ -20,7 +20,7 @@ class PreviewResultsPanel extends React.Component {
20
20
  render() {
21
21
  let previewHeader = this.props.showHeader && this.props.previewInfo != null
22
22
  ? 'Preview Results: ' +
23
- (this.props.selectedColumn ? this.props.selectedColumn.FriendlyName : '')
23
+ (this.props.selectedColumn ? this.props.selectedColumn.friendlyName : '')
24
24
  : '';
25
25
  let successColor = UIHelper_1.default.getColorByMessageType('Success');
26
26
  const dataSource = this.props.previewInfo.previewResults.map((previewResult, index) => {
@@ -161,7 +161,7 @@ class RangesComponent extends React.Component {
161
161
  }
162
162
  onMinColumnSelectedChanged(columns) {
163
163
  const { columnComparison } = this.state;
164
- columnComparison.MinValue = columns.length > 0 ? columns[0].ColumnId : undefined;
164
+ columnComparison.MinValue = columns.length > 0 ? columns[0].columnId : undefined;
165
165
  this.props.updateColumnComparison(columnComparison);
166
166
  }
167
167
  changeColumnComparisonMaxValue(event) {
@@ -174,7 +174,7 @@ class RangesComponent extends React.Component {
174
174
  }
175
175
  onMaxColumnSelectedChanged(columns) {
176
176
  const { columnComparison } = this.state;
177
- columnComparison.MaxValue = columns.length > 0 ? columns[0].ColumnId : undefined;
177
+ columnComparison.MaxValue = columns.length > 0 ? columns[0].columnId : undefined;
178
178
  this.props.updateColumnComparison(columnComparison);
179
179
  }
180
180
  changeColumnComparisonColor(value) {
@@ -11,7 +11,7 @@ const DropdownButton_1 = tslib_1.__importDefault(require("../../../components/Dr
11
11
  class ColumnSelector extends React.Component {
12
12
  render() {
13
13
  var _a;
14
- const sortedColumns = ArrayExtensions_1.ArrayExtensions.sortArrayWithProperty(Enums_1.SortOrder.Asc, this.props.ColumnList, 'FriendlyName');
14
+ const sortedColumns = ArrayExtensions_1.ArrayExtensions.sortArrayWithProperty(Enums_1.SortOrder.Asc, this.props.ColumnList, 'friendlyName');
15
15
  const selectedColumnIds = this.props.SelectedColumnIds.filter((x) => StringExtensions_1.StringExtensions.IsNotNullOrEmpty(x));
16
16
  const placeHolder = StringExtensions_1.StringExtensions.IsNotNullOrEmpty(this.props.placeHolder)
17
17
  ? this.props.placeHolder.toString()
@@ -21,10 +21,10 @@ class ColumnSelector extends React.Component {
21
21
  const isEmptySelectedColumnIds = this.props.SelectedColumnIds.filter((x) => StringExtensions_1.StringExtensions.IsNotNullOrEmpty(x)).length == 0;
22
22
  let sortedColumnOptions = sortedColumns.map((column) => {
23
23
  return {
24
- label: column.FriendlyName,
25
- value: column.ColumnId,
24
+ label: column.friendlyName,
25
+ value: column.columnId,
26
26
  onClick: () => {
27
- const selected = sortedColumns.filter((c) => c.ColumnId === column.ColumnId);
27
+ const selected = sortedColumns.filter((c) => c.columnId === column.columnId);
28
28
  if (!selected.length) {
29
29
  this.onClearButton();
30
30
  }
@@ -35,7 +35,7 @@ class ColumnSelector extends React.Component {
35
35
  };
36
36
  });
37
37
  let currentColumnName = selectedColumnIds.length > 0
38
- ? (_a = this.props.ColumnList.find((c) => c.ColumnId == selectedColumnIds[0])) === null || _a === void 0 ? void 0 : _a.FriendlyName : 'Select a column';
38
+ ? (_a = this.props.ColumnList.find((c) => c.columnId == selectedColumnIds[0])) === null || _a === void 0 ? void 0 : _a.friendlyName : 'Select a column';
39
39
  return (React.createElement("div", { "data-name": 'column-selector' },
40
40
  React.createElement(FormLayout_1.default, { columns: [1], style: this.props.style },
41
41
  React.createElement(FormLayout_1.FormRow, null,
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import { AdaptableColumn } from '../../../PredefinedConfig/Common/AdaptableColumn';
3
3
  import { DropdownButtonProps } from '../../../components/DropdownButton';
4
4
  import { AdaptableApi } from '../../../Api/AdaptableApi';
5
+ import { GridCell } from '../../../types';
5
6
  export interface ColumnValueSelectorProps extends React.HTMLProps<ColumnValueSelector> {
6
7
  selectedColumn: AdaptableColumn;
7
8
  selectedColumnValue: string;
@@ -12,19 +13,26 @@ export interface ColumnValueSelectorProps extends React.HTMLProps<ColumnValueSel
12
13
  newLabel?: string;
13
14
  existingLabel?: string;
14
15
  dropdownButtonProps?: DropdownButtonProps;
16
+ selectedGridCells: GridCell[];
15
17
  }
16
18
  declare enum NEW_OR_EXISTING {
17
19
  existing = "Existing value",
18
20
  new = "New value"
19
21
  }
20
- export declare class ColumnValueSelector extends React.Component<ColumnValueSelectorProps, {
22
+ interface ColumnValueSelectorState {
21
23
  newOrExisting: NEW_OR_EXISTING;
22
- }> {
24
+ distinctColumnValues: any[];
25
+ isDistinctColumnValuesLoading: boolean;
26
+ }
27
+ export declare class ColumnValueSelector extends React.Component<ColumnValueSelectorProps, ColumnValueSelectorState> {
23
28
  static defaultProps: {
24
29
  newLabel: string;
25
30
  existingLabel: string;
26
31
  };
27
32
  constructor(props: ColumnValueSelectorProps);
33
+ componentDidUpdate(prevProps: ColumnValueSelectorProps): void;
34
+ loadPermittedValues: () => Promise<void>;
35
+ handleSelectedValueExpand: () => void;
28
36
  render(): JSX.Element;
29
37
  onSelectedValueChange(selected: any[]): void;
30
38
  }
@@ -10,6 +10,8 @@ const FieldWrap_1 = tslib_1.__importDefault(require("../../../components/FieldWr
10
10
  const DropdownButton_1 = tslib_1.__importDefault(require("../../../components/DropdownButton"));
11
11
  const UIHelper_1 = tslib_1.__importDefault(require("../../UIHelper"));
12
12
  const AdaptableInput_1 = tslib_1.__importDefault(require("../AdaptableInput"));
13
+ const runIfNotResolvedIn_1 = require("../../../Utilities/runIfNotResolvedIn");
14
+ const join_1 = tslib_1.__importDefault(require("../../../components/utils/join"));
13
15
  var NEW_OR_EXISTING;
14
16
  (function (NEW_OR_EXISTING) {
15
17
  NEW_OR_EXISTING["existing"] = "Existing value";
@@ -18,35 +20,65 @@ var NEW_OR_EXISTING;
18
20
  class ColumnValueSelector extends React.Component {
19
21
  constructor(props) {
20
22
  super(props);
23
+ this.loadPermittedValues = async () => {
24
+ var _a;
25
+ if (!((_a = this.props.selectedColumn) === null || _a === void 0 ? void 0 : _a.columnId)) {
26
+ return;
27
+ }
28
+ // JW "fixed" this by replacing display values with raw values but really we should do it nicer in some way
29
+ // so that you we show the display value but we work on the raw value
30
+ const columnDisplayValuePairs = await runIfNotResolvedIn_1.runIfNotResolvedIn(this.props.api.columnApi.getDistinctBulkUpdateDisplayValuesForColumn(this.props.selectedColumn.columnId, this.props.selectedGridCells), () => this.setState({ isDistinctColumnValuesLoading: true }));
31
+ this.setState({ isDistinctColumnValuesLoading: false });
32
+ const newSortedColumnValues = ArrayExtensions_1.ArrayExtensions.sortArray(columnDisplayValuePairs, Enums_1.SortOrder.Asc).map((v) => ({
33
+ label: v,
34
+ value: v,
35
+ onClick: () => this.onSelectedValueChange([{ DisplayValue: v }]),
36
+ }));
37
+ this.setState({
38
+ distinctColumnValues: newSortedColumnValues,
39
+ });
40
+ };
41
+ this.handleSelectedValueExpand = () => {
42
+ // load only if not loaded
43
+ if (!this.state.distinctColumnValues.length) {
44
+ this.loadPermittedValues();
45
+ }
46
+ };
21
47
  this.state = {
22
48
  newOrExisting: NEW_OR_EXISTING.existing,
49
+ distinctColumnValues: [],
50
+ isDistinctColumnValuesLoading: false,
23
51
  };
24
52
  }
53
+ componentDidUpdate(prevProps) {
54
+ if (this.props.selectedColumn !== prevProps.selectedColumn ||
55
+ this.props.selectedGridCells !== prevProps.selectedGridCells) {
56
+ this.loadPermittedValues();
57
+ }
58
+ }
25
59
  render() {
26
60
  let placeholderText = 'Select';
27
- let sortedColumnValues = [];
28
61
  let allowNew = this.props.allowNew != null ? this.props.allowNew : true;
29
62
  if (allowNew) {
30
63
  // placeholderText += ' or enter free text';
31
64
  }
65
+ const baseClassName = 'ab-column-value-selector';
66
+ const className = join_1.default('ab-column-value-selector', this.state.isDistinctColumnValuesLoading && `${baseClassName}--loading`);
32
67
  const fieldWidth = 150;
33
- if (this.props.selectedColumn != null) {
34
- // JW "fixed" this by replacing display values with raw values but really we should do it nicer in some way
35
- // so that you we show the display value but we work on the raw value
36
- let columnDisplayValuePairs = this.props.api.columnApi.getDistinctRawValuesForColumn(this.props.selectedColumn.ColumnId);
37
- let test = ArrayExtensions_1.ArrayExtensions.sortArray(columnDisplayValuePairs, Enums_1.SortOrder.Asc);
38
- sortedColumnValues = test.map((v) => ({
39
- label: v,
40
- value: v,
41
- onClick: () => this.onSelectedValueChange([{ DisplayValue: v }]),
42
- }));
43
- }
68
+ const items = this.state.isDistinctColumnValuesLoading
69
+ ? [
70
+ {
71
+ label: 'Loading',
72
+ disabled: true,
73
+ },
74
+ ]
75
+ : this.state.distinctColumnValues;
44
76
  const dd = (React.createElement("div", null,
45
- React.createElement(DropdownButton_1.default, { className: "ab-column-value-selector", columns: ['label'], variant: "text", showClearButton: true, onClear: () => this.onSelectedValueChange([]), style: { fontSize: 'small' }, disabled: this.props.disabled, items: sortedColumnValues }, this.props.selectedColumnValue ? this.props.selectedColumnValue : placeholderText)));
77
+ React.createElement(DropdownButton_1.default, { className: className, columns: ['label'], variant: "text", showClearButton: true, onClear: () => this.onSelectedValueChange([]), style: { fontSize: 'small' }, disabled: this.props.disabled, items: items, onExpand: this.handleSelectedValueExpand }, this.props.selectedColumnValue ? this.props.selectedColumnValue : placeholderText)));
46
78
  const input = (React.createElement(AdaptableInput_1.default, { type: this.props.selectedColumn
47
- ? UIHelper_1.default.getDescriptionForDataType(this.props.selectedColumn.DataType)
79
+ ? UIHelper_1.default.getDescriptionForDataType(this.props.selectedColumn.dataType)
48
80
  : 'text', placeholder: this.props.selectedColumn
49
- ? UIHelper_1.default.getPlaceHolderforDataType(this.props.selectedColumn.DataType)
81
+ ? UIHelper_1.default.getPlaceHolderforDataType(this.props.selectedColumn.dataType)
50
82
  : 'Enter Value', autoFocus: true, disabled: this.props.disabled, style: { width: fieldWidth }, value: this.props.selectedColumnValue, onChange: (e) => {
51
83
  this.onSelectedValueChange([
52
84
  { customOption: true, DisplayValue: e.target.value },
@@ -154,11 +154,11 @@ const AdaptableToolPanelComponent = (props) => {
154
154
  ];
155
155
  props.Columns.forEach((col, index) => {
156
156
  colItems.push({
157
- id: col.ColumnId,
157
+ id: col.columnId,
158
158
  onClick: () => {
159
- onSetColumnVisibility(col.ColumnId);
159
+ onSetColumnVisibility(col.columnId);
160
160
  },
161
- label: (React.createElement(CheckBox_1.CheckBox, { as: "div", className: "ab-dd-checkbox", variant: "agGrid", my: 0, value: col.ColumnId, key: col.ColumnId, checked: col.Visible, onMouseDown: preventDefault }, col.FriendlyName)),
161
+ label: (React.createElement(CheckBox_1.CheckBox, { as: "div", className: "ab-dd-checkbox", variant: "agGrid", my: 0, value: col.columnId, key: col.columnId, checked: col.visible, onMouseDown: preventDefault }, col.friendlyName)),
162
162
  });
163
163
  });
164
164
  return (React.createElement(DropdownButton_1.default, { listMinWidth: 150, variant: "text", tone: "none", collapseOnItemClick: false, items: colItems, columns: ['label'], className: "ab-Toolpanel__columns", key: 'dropdown-cols', id: 'dropdown-cols', tooltip: "Select Columns" }, colsGlyph));
@@ -213,11 +213,11 @@ const AdaptableToolPanelComponent = (props) => {
213
213
  let changedColumn = props.api.columnApi.getColumnFromId(name);
214
214
  let columns = [].concat(props.Columns);
215
215
  changedColumn = Object.assign({}, changedColumn, {
216
- Visible: !changedColumn.Visible,
216
+ Visible: !changedColumn.visible,
217
217
  });
218
- let index = columns.findIndex((x) => x.ColumnId == name);
218
+ let index = columns.findIndex((x) => x.columnId == name);
219
219
  columns[index] = changedColumn;
220
- props.onNewColumnListOrder(columns.filter((c) => c.Visible).map((c) => c.ColumnId));
220
+ props.onNewColumnListOrder(columns.filter((c) => c.visible).map((c) => c.columnId));
221
221
  };
222
222
  const onSetToolPanelVisibility = (name, checked) => {
223
223
  if (checked) {
@@ -61,7 +61,7 @@ class ConditionalStylePopupComponent extends React.Component {
61
61
  if (this.props.popupParams.action == 'New') {
62
62
  _editedConditionalStyle = ObjectFactory_1.ObjectFactory.CreateEmptyConditionalStyle();
63
63
  _editedConditionalStyle.Scope = {
64
- ColumnIds: [column.ColumnId],
64
+ ColumnIds: [column.columnId],
65
65
  };
66
66
  this.setState({
67
67
  editedAdaptableObject: _editedConditionalStyle,
@@ -57,7 +57,7 @@ class ConditionalStyleSummaryComponent extends React.Component {
57
57
  onNew() {
58
58
  let configEntity = ObjectFactory_1.ObjectFactory.CreateEmptyConditionalStyle();
59
59
  configEntity.Scope = {
60
- ColumnIds: [this.props.summarisedColumn.ColumnId],
60
+ ColumnIds: [this.props.summarisedColumn.columnId],
61
61
  };
62
62
  this.setState({
63
63
  editedAdaptableObject: configEntity,
@@ -14,10 +14,10 @@ class CustomSortEntityRow extends React.Component {
14
14
  let customSort = this.props.adaptableObject;
15
15
  const columnSortComparer = this.props.api.internalApi.getCustomSortComparer(this.props.column);
16
16
  let colItems = Helper_1.cloneObject(this.props.colItems);
17
- colItems[0].Content = React.createElement(EntityRowItem_1.EntityRowItem, { Content: this.props.column.FriendlyName });
17
+ colItems[0].Content = React.createElement(EntityRowItem_1.EntityRowItem, { Content: this.props.column.friendlyName });
18
18
  colItems[1].Content = (React.createElement(EntityRowItem_1.EntityRowItem, { Content: customSort ? this.getCustomSortedValues(customSort) : 'Custom Sort Function' }));
19
19
  colItems[2].Content = (React.createElement(EntityListActionButtons_1.EntityListActionButtons, { showSuspend: true, suspendableObject: customSort, confirmDeleteAction: this.props.onDeleteConfirm, editClick: () => this.props.onEdit(customSort), shareClick: (config) => this.props.onShare(config), showShare: this.props.teamSharingActivated, overrideDisableEdit: columnSortComparer != undefined ||
20
- this.props.column.FriendlyName.includes(GeneralConstants.MISSING_COLUMN), entityType: this.props.moduleInfo.FriendlyName, accessLevel: this.props.accessLevel, onSuspend: this.props.onSuspend, onUnSuspend: this.props.onUnSuspend }));
20
+ this.props.column.friendlyName.includes(GeneralConstants.MISSING_COLUMN), entityType: this.props.moduleInfo.FriendlyName, accessLevel: this.props.accessLevel, onSuspend: this.props.onSuspend, onUnSuspend: this.props.onUnSuspend }));
21
21
  return React.createElement(AdaptableObjectRow_1.AdaptableObjectRow, { isSuspended: customSort.IsSuspended, colItems: colItems });
22
22
  }
23
23
  getCustomSortedValues(customSort) {
@@ -53,7 +53,7 @@ class CustomSortPopupComponent extends React.Component {
53
53
  componentDidMount() {
54
54
  if (this.props.popupParams) {
55
55
  if (this.props.popupParams.action && this.props.popupParams.column) {
56
- let columnId = this.props.popupParams.column.ColumnId;
56
+ let columnId = this.props.popupParams.column.columnId;
57
57
  if (this.props.popupParams.action == 'New') {
58
58
  let newCustomSort = ObjectFactory_1.ObjectFactory.CreateEmptyCustomSort();
59
59
  newCustomSort.ColumnId = columnId;
@@ -36,11 +36,11 @@ class CustomSortSummaryComponent extends React.Component {
36
36
  this.state = UIHelper_1.UIHelper.getEmptyConfigState();
37
37
  }
38
38
  render() {
39
- const customSort = this.props.CustomSorts.find((c) => c.ColumnId == this.props.summarisedColumn.ColumnId);
39
+ const customSort = this.props.CustomSorts.find((c) => c.ColumnId == this.props.summarisedColumn.columnId);
40
40
  const columnSortComparer = this.props.api.internalApi.getCustomSortComparer(this.props.summarisedColumn);
41
41
  let noCustomSort = customSort == null && columnSortComparer == null;
42
42
  let customSortRow;
43
- if (!this.props.summarisedColumn.Sortable) {
43
+ if (!this.props.summarisedColumn.sortable) {
44
44
  customSortRow = (React.createElement(ModuleHeader_1.ModuleHeader, { key: this.props.moduleInfo.FriendlyName, moduleInfo: this.props.moduleInfo, moduleSummary: 'Column is not sortable', newButtonDisabled: true, onNew: () => this.onNew(), newButtonTooltip: this.props.moduleInfo.FriendlyName, accessLevel: this.props.accessLevel }));
45
45
  }
46
46
  else if (noCustomSort) {
@@ -59,7 +59,7 @@ class CustomSortSummaryComponent extends React.Component {
59
59
  }
60
60
  onNew() {
61
61
  let configEntity = ObjectFactory_1.ObjectFactory.CreateEmptyCustomSort();
62
- configEntity.ColumnId = this.props.summarisedColumn.ColumnId;
62
+ configEntity.ColumnId = this.props.summarisedColumn.columnId;
63
63
  this.setState({
64
64
  editedAdaptableObject: configEntity,
65
65
  wizardStartIndex: 1,
@@ -29,16 +29,16 @@ exports.CustomSortColumnWizardSection = (props) => {
29
29
  const customSorts = api.customSortApi.getAllCustomSort();
30
30
  const columnSortComparers = ((_b = (_a = api.internalApi.getAdaptableOptions()) === null || _a === void 0 ? void 0 : _a.generalOptions) === null || _b === void 0 ? void 0 : _b.customSortComparers) || [];
31
31
  const usedColumnIds = [
32
- ...customSorts.map((column) => column.ColumnId),
32
+ ...customSorts.map((customSort) => customSort.ColumnId),
33
33
  ...columnSortComparers.map((comparer) => comparer.columnId),
34
34
  ];
35
35
  // filter out used colum ids, but include the current one
36
36
  return sortableColumns.filter((column) => {
37
- if (!props.isNew && column.ColumnId === (data === null || data === void 0 ? void 0 : data.ColumnId)) {
37
+ if (!props.isNew && column.columnId === (data === null || data === void 0 ? void 0 : data.ColumnId)) {
38
38
  return true;
39
39
  }
40
40
  return usedColumnIds.every((usedColumnId) => {
41
- return column.ColumnId !== usedColumnId;
41
+ return column.columnId !== usedColumnId;
42
42
  });
43
43
  });
44
44
  }, []);
@@ -5,7 +5,10 @@ const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
6
  const react_1 = require("react");
7
7
  const rebass_1 = require("rebass");
8
+ const Loader_1 = require("../../../components/Loader");
8
9
  const Tabs_1 = require("../../../components/Tabs");
10
+ const join_1 = tslib_1.__importDefault(require("../../../components/utils/join"));
11
+ const runIfNotResolvedIn_1 = require("../../../Utilities/runIfNotResolvedIn");
9
12
  const sortWithOrder_1 = require("../../../Utilities/sortWithOrder");
10
13
  const ValueSelector_1 = require("../../Components/ValueSelector");
11
14
  const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
@@ -21,8 +24,23 @@ exports.renderCustomSortValuesSummary = (data) => {
21
24
  };
22
25
  exports.CustomSortValuesWizardSection = (props) => {
23
26
  const { data, api } = OnePageAdaptableWizard_1.useOnePageWizardContext();
24
- const distinctValues = react_1.useMemo(() => {
25
- return api.columnApi.getDistinctDisplayValuesForColumn(data.ColumnId);
27
+ const [distinctValues, setDistinctValues] = react_1.useState([]);
28
+ const [isDistinctValuesLoading, setIsDistinctValuesLoading] = react_1.useState(false);
29
+ react_1.useEffect(() => {
30
+ let isMounted = true;
31
+ (async () => {
32
+ // for sync and very fast resolving promises does not make sense to show a loader
33
+ setDistinctValues([]);
34
+ const newValues = await runIfNotResolvedIn_1.runIfNotResolvedIn(api.columnApi.getDistinctCustomSortDisplayValuesForColumn(data.ColumnId), () => isMounted && setIsDistinctValuesLoading(true));
35
+ if (!isMounted) {
36
+ return;
37
+ }
38
+ setIsDistinctValuesLoading(false);
39
+ setDistinctValues(newValues);
40
+ })();
41
+ return () => {
42
+ isMounted = false;
43
+ };
26
44
  }, [data.ColumnId]);
27
45
  const sortedValuesMap = react_1.useMemo(() => {
28
46
  if (!data.SortedValues || !data.SortedValues.length) {
@@ -37,14 +55,14 @@ exports.CustomSortValuesWizardSection = (props) => {
37
55
  return sortedValuesMap.has(option);
38
56
  }, [sortedValuesMap]);
39
57
  const options = react_1.useMemo(() => {
40
- // if (!allowReorder) {
41
- // return distinctValues;
42
- // }
43
58
  return sortWithOrder_1.sortWithOrderArray(distinctValues, data.SortedValues, { sortUnorderedItems: false });
44
59
  }, [allowReorder, distinctValues, data.SortedValues]);
45
- return (React.createElement(Tabs_1.Tabs, { style: { height: '100%' } },
60
+ const baseClassName = 'ab-CustomSortWizard__SortOrder';
61
+ const className = join_1.default(baseClassName, isDistinctValuesLoading && `${baseClassName}--loading`);
62
+ return (React.createElement(Tabs_1.Tabs, { style: { height: '100%' }, className: className },
46
63
  React.createElement(Tabs_1.Tabs.Tab, null, "Sort Order"),
47
64
  React.createElement(Tabs_1.Tabs.Content, null,
65
+ isDistinctValuesLoading && React.createElement(Loader_1.Loader, null, "Loading"),
48
66
  React.createElement(ValueSelector_1.ValueSelector, { toIdentifier: (x) => `${x}`, toLabel: (x) => `${x}`, options: options, value: data.SortedValues, allowReorder: allowReorder, xSelectedLabel: () => {
49
67
  return `Your Sort Order:`;
50
68
  }, onChange: (SortedValues) => {
@@ -195,7 +195,7 @@ const buildAdaptableOptions = (mainAdaptableInstance, gridOptions, adaptableCont
195
195
  };
196
196
  const buildGridOptions = (mainAdaptableInstance, changeHistoryLog) => {
197
197
  var _a, _b;
198
- const mainPrimaryKeyColumnHeader = (_b = (_a = mainAdaptableInstance.api.columnApi.getPrimaryKeyColumn()) === null || _a === void 0 ? void 0 : _a.FriendlyName) !== null && _b !== void 0 ? _b : 'Row ID';
198
+ const mainPrimaryKeyColumnHeader = (_b = (_a = mainAdaptableInstance.api.columnApi.getPrimaryKeyColumn()) === null || _a === void 0 ? void 0 : _a.friendlyName) !== null && _b !== void 0 ? _b : 'Row ID';
199
199
  const options = {
200
200
  suppressLoadingOverlay: true,
201
201
  overlayNoRowsTemplate: '<div style="font-size: var(--ab-font-size-2);color: var(--ab-color-text-on-primary);">No Data Changes</div>',
@@ -295,7 +295,7 @@ const mapChangeHistoryRowData = (changeHistoryLog = {}, mainAdaptableInstance) =
295
295
  primaryKey: `${changeKey}::${changeInfo.changedAt}`,
296
296
  changeKey,
297
297
  changeTriggerLabel: getChangeTriggerLabel(changeInfo),
298
- changedColumnLabel: getColumnHeaderLabel(changeInfo.columnId, mainAdaptableInstance),
298
+ changedColumnLabel: getColumnHeaderLabel(changeInfo.column.columnId, mainAdaptableInstance),
299
299
  changeInfo,
300
300
  };
301
301
  });
@@ -305,7 +305,7 @@ const headerMap = new Map();
305
305
  const getColumnHeaderLabel = (columnId, mainAdaptableInstance) => {
306
306
  var _a, _b;
307
307
  if (!headerMap.has(columnId)) {
308
- headerMap.set(columnId, (_b = (_a = mainAdaptableInstance.api.columnApi.getColumnFromId(columnId)) === null || _a === void 0 ? void 0 : _a.FriendlyName) !== null && _b !== void 0 ? _b : columnId);
308
+ headerMap.set(columnId, (_b = (_a = mainAdaptableInstance.api.columnApi.getColumnFromId(columnId)) === null || _a === void 0 ? void 0 : _a.friendlyName) !== null && _b !== void 0 ? _b : columnId);
309
309
  }
310
310
  return headerMap.get(columnId);
311
311
  };