@adaptabletools/adaptable 12.0.6 → 12.0.9

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 (42) hide show
  1. package/bundle.cjs.js +96 -96
  2. package/package.json +1 -1
  3. package/publishTimestamp.d.ts +1 -1
  4. package/publishTimestamp.js +1 -1
  5. package/src/Api/EventApi.d.ts +13 -1
  6. package/src/Api/Events/AdaptableStateReloaded.d.ts +23 -0
  7. package/src/Api/Events/AdaptableStateReloaded.js +2 -0
  8. package/src/Api/GridApi.d.ts +2 -1
  9. package/src/Api/Implementation/ConfigApiImpl.js +11 -0
  10. package/src/Api/Implementation/GridApiImpl.d.ts +1 -1
  11. package/src/Api/Implementation/GridApiImpl.js +1 -1
  12. package/src/Api/Implementation/InternalApiImpl.js +3 -0
  13. package/src/PredefinedConfig/Common/CellSummary.d.ts +2 -6
  14. package/src/Redux/Store/AdaptableStore.js +1 -1
  15. package/src/Strategy/AdaptableModuleBase.d.ts +2 -0
  16. package/src/Strategy/AdaptableModuleBase.js +6 -0
  17. package/src/Strategy/AlertModule.js +2 -2
  18. package/src/Strategy/CalculatedColumnModule.d.ts +2 -0
  19. package/src/Strategy/CalculatedColumnModule.js +4 -0
  20. package/src/Strategy/CellSummaryModule.js +4 -3
  21. package/src/Strategy/FlashingCellModule.js +2 -2
  22. package/src/Strategy/TeamSharingModule.js +4 -2
  23. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +10 -0
  24. package/src/Utilities/Services/CalculatedColumnExpressionService.js +26 -10
  25. package/src/Utilities/Services/ReportService.js +1 -1
  26. package/src/Utilities/Services/RowEditService.js +4 -1
  27. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.d.ts +8 -0
  28. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/{ConfigurationForm.js → AdaptableOptionsForm.js} +3 -39
  29. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +27 -3
  30. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/{ConfigurationForm.d.ts → EntitlementsForm.d.ts} +3 -3
  31. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +17 -0
  32. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.d.ts +8 -0
  33. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.js +54 -0
  34. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +0 -1
  35. package/src/agGrid/Adaptable.d.ts +1 -0
  36. package/src/agGrid/Adaptable.js +23 -8
  37. package/src/agGrid/agGridHelper.js +2 -2
  38. package/src/components/ExpressionEditor/BaseEditorInput.js +3 -0
  39. package/src/components/ExpressionEditor/index.js +2 -2
  40. package/src/metamodel/adaptable.metamodel.js +1 -1
  41. package/version.d.ts +1 -1
  42. package/version.js +1 -1
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const React = tslib_1.__importStar(require("react"));
5
+ const FormLayout_1 = tslib_1.__importStar(require("../../../components/FormLayout"));
6
+ const CheckBox_1 = require("../../../components/CheckBox");
7
+ const HelpBlock_1 = tslib_1.__importDefault(require("../../../components/HelpBlock"));
8
+ const DefaultAdaptableOptions_1 = require("../../../Utilities/Defaults/DefaultAdaptableOptions");
9
+ const GridOptionsForm = (props) => {
10
+ var _a;
11
+ let abOptions = props.adaptableOptions;
12
+ const gridOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.gridOptions), abOptions.gridOptions);
13
+ return (React.createElement(React.Fragment, null,
14
+ React.createElement(HelpBlock_1.default, null, "Grid Options"),
15
+ React.createElement(FormLayout_1.default, { margin: 2, columns: [{ name: 'children' }, { name: 'label', style: { textAlign: 'start' } }] },
16
+ React.createElement(FormLayout_1.FormRow, { label: "Show ToolPanel" },
17
+ React.createElement(CheckBox_1.CheckBox, { checked: gridOptions.sideBar == true, onChange: (addSideBar) => {
18
+ abOptions = Object.assign({}, abOptions);
19
+ abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
20
+ abOptions.gridOptions.sideBar = addSideBar;
21
+ props.onChangeadaptableOptions(abOptions);
22
+ } })),
23
+ React.createElement(FormLayout_1.FormRow, { label: "Enable Range Selection" },
24
+ React.createElement(CheckBox_1.CheckBox, { checked: gridOptions.enableRangeSelection, onChange: (enableRangeSelection) => {
25
+ abOptions = Object.assign({}, abOptions);
26
+ abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
27
+ abOptions.gridOptions.enableRangeSelection = enableRangeSelection;
28
+ props.onChangeadaptableOptions(abOptions);
29
+ } })),
30
+ React.createElement(FormLayout_1.FormRow, { label: "Show Quick Filter" },
31
+ React.createElement(CheckBox_1.CheckBox, { checked: (_a = gridOptions.defaultColDef) === null || _a === void 0 ? void 0 : _a.floatingFilter, onChange: (floatingFilter) => {
32
+ abOptions = Object.assign({}, abOptions);
33
+ abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
34
+ abOptions.gridOptions.defaultColDef = {
35
+ floatingFilter,
36
+ };
37
+ props.onChangeadaptableOptions(abOptions);
38
+ } })),
39
+ React.createElement(FormLayout_1.FormRow, { label: "Suppress Column Virtualisation" },
40
+ React.createElement(CheckBox_1.CheckBox, { checked: gridOptions.suppressColumnVirtualisation, onChange: (suppressColumnVirtualisation) => {
41
+ abOptions = Object.assign({}, abOptions);
42
+ abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
43
+ abOptions.gridOptions.suppressColumnVirtualisation = suppressColumnVirtualisation;
44
+ props.onChangeadaptableOptions(abOptions);
45
+ } })),
46
+ React.createElement(FormLayout_1.FormRow, { label: "Show Column Menu Button" },
47
+ React.createElement(CheckBox_1.CheckBox, { checked: gridOptions.suppressMenuHide, onChange: (suppressMenuHide) => {
48
+ abOptions = Object.assign({}, abOptions);
49
+ abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
50
+ abOptions.gridOptions.suppressMenuHide = suppressMenuHide;
51
+ props.onChangeadaptableOptions(abOptions);
52
+ } })))));
53
+ };
54
+ exports.default = GridOptionsForm;
@@ -324,7 +324,6 @@ const renderStringFormat = (data, _onChange, setFormatOption, scopedCustomFormat
324
324
  if (data.DisplayFormat.Formatter !== 'StringFormatter') {
325
325
  return null;
326
326
  }
327
- console.log('formatters', scopedCustomFormatters);
328
327
  return (React.createElement(rebass_1.Box, { "data-name": 'format-column-display-format', padding: 2 },
329
328
  React.createElement(Tabs_1.Tabs, null,
330
329
  React.createElement(Tabs_1.Tabs.Tab, null, "Format"),
@@ -95,6 +95,7 @@ export declare class Adaptable implements IAdaptable {
95
95
  private listenerGlobalSetRowSelection;
96
96
  private listenerGlobalColumnEventsThatTriggerStateChange;
97
97
  private listenerGlobalColumnEventsThatTriggerAutoLayoutSave;
98
+ private listenerGlobalRowGroupEventsThatTriggerAutoLayoutSave;
98
99
  static init(adaptableOptions: AdaptableOptions): Promise<AdaptableApi>;
99
100
  /**
100
101
  * Lazy static constructor for Adaptable
@@ -1394,13 +1394,6 @@ class Adaptable {
1394
1394
  shouldUpdateHeaders = this.setupColumnHeader(colSetupInfo) || shouldUpdateHeaders;
1395
1395
  });
1396
1396
  isChanged = isChanged || shouldUpdateHeaders;
1397
- if (this.api.layoutApi.areExpandedRowGroupsSavedInLayouts() &&
1398
- ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(layout.ExpandedRowGroupValues)) {
1399
- this.expandRowGroupsForValues(layout.ExpandedRowGroupValues);
1400
- }
1401
- if (this.adaptableOptions.layoutOptions.displayRowGroups === 'expanded') {
1402
- this.expandAllRowGroups();
1403
- }
1404
1397
  if (isChanged) {
1405
1398
  // it's important we set pivot mode
1406
1399
  // before we set column state
@@ -1421,6 +1414,15 @@ class Adaptable {
1421
1414
  // so we figured out the following line fixes the issue
1422
1415
  // this.gridOptions.api.setColumnDefs(this.gridOptions.api.getColumnDefs()); //TODO find a solution for weighted averages - column floating filters are not showing
1423
1416
  GridApi_setColumnDefs.call(this.gridOptions.api, this.gridOptions.api.getColumnDefs());
1417
+ // these updates need to be at the end, the methods are based on the grid state/col defs
1418
+ // the layout needs to be applied for them to work
1419
+ if (this.api.layoutApi.areExpandedRowGroupsSavedInLayouts() &&
1420
+ ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(layout.ExpandedRowGroupValues)) {
1421
+ this.expandRowGroupsForValues(layout.ExpandedRowGroupValues);
1422
+ }
1423
+ if (this.adaptableOptions.layoutOptions.displayRowGroups === 'expanded') {
1424
+ this.expandAllRowGroups();
1425
+ }
1424
1426
  // this.updateColumnsIntoStore();// no longer needed
1425
1427
  }
1426
1428
  const colsToAutoSizeArray = Object.keys(colsToAutoSize);
@@ -2513,6 +2515,7 @@ class Adaptable {
2513
2515
  this.gridOptions.api.removeGlobalListener(this.listenerGlobalSetRowSelection);
2514
2516
  this.gridOptions.api.removeGlobalListener(this.listenerGlobalColumnEventsThatTriggerStateChange);
2515
2517
  this.gridOptions.api.removeGlobalListener(this.listenerGlobalColumnEventsThatTriggerAutoLayoutSave);
2518
+ this.gridOptions.api.removeGlobalListener(this.listenerGlobalRowGroupEventsThatTriggerAutoLayoutSave);
2516
2519
  this.listenerFirstDataRendered = null;
2517
2520
  this.listenerPivotModeChanged = null;
2518
2521
  this.listenerPivotChanged = null;
@@ -2524,6 +2527,7 @@ class Adaptable {
2524
2527
  this.listenerModelUpdated = null;
2525
2528
  this.listenerGlobalColumnEventsThatTriggerStateChange = null;
2526
2529
  this.listenerGlobalColumnEventsThatTriggerAutoLayoutSave = null;
2530
+ this.listenerGlobalRowGroupEventsThatTriggerAutoLayoutSave = null;
2527
2531
  this.gridOptions.api.__adaptable = null;
2528
2532
  this.gridOptions.api.setColumnDefs = GridApi_setColumnDefs;
2529
2533
  this.gridOptions.getRowStyle = null;
@@ -2757,7 +2761,6 @@ class Adaptable {
2757
2761
  all_modules_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,
2758
2762
  all_modules_1.Events.EVENT_SORT_CHANGED,
2759
2763
  all_modules_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,
2760
- all_modules_1.Events.EVENT_ROW_GROUP_OPENED,
2761
2764
  all_modules_1.Events.EVENT_COLUMN_VALUE_CHANGED,
2762
2765
  ];
2763
2766
  // ADD filter event
@@ -2766,6 +2769,18 @@ class Adaptable {
2766
2769
  this.debouncedSaveGridLayout();
2767
2770
  }
2768
2771
  }));
2772
+ // Save Layout if Display Row Groups is "dynamic"
2773
+ const rowGroupEventsThatTriggersAutoLayoutSave = [
2774
+ all_modules_1.Events.EVENT_ROW_GROUP_OPENED,
2775
+ all_modules_1.Events.EVENT_EXPAND_COLLAPSE_ALL,
2776
+ ];
2777
+ this.gridOptions.api.addGlobalListener((this.listenerGlobalRowGroupEventsThatTriggerAutoLayoutSave = (type) => {
2778
+ if (rowGroupEventsThatTriggersAutoLayoutSave.indexOf(type) > -1) {
2779
+ if (this.adaptableOptions.layoutOptions.displayRowGroups == 'dynamic') {
2780
+ this.debouncedSaveGridLayout();
2781
+ }
2782
+ }
2783
+ }));
2769
2784
  /**
2770
2785
  * Use Case: A visible Column has become row grouped and 'hideColumnWhenGrouped' is true
2771
2786
  * Action: Make the column invisible
@@ -162,9 +162,9 @@ class agGridHelper {
162
162
  const customFriendlyName = typeof columnFriendlyName === 'function'
163
163
  ? columnFriendlyName({ colId: colId, agColumn: agGridColumn })
164
164
  : null;
165
- const FriendlyName = (customFriendlyName !== null && customFriendlyName !== void 0 ? customFriendlyName : isActionRowButtonColumn)
165
+ const FriendlyName = customFriendlyName !== null && customFriendlyName !== void 0 ? customFriendlyName : (isActionRowButtonColumn
166
166
  ? GeneralConstants_1.ADAPTABLE_ROW_ACTION_BUTTONS_FRIENDLY_NAME
167
- : this.gridOptions.columnApi.getDisplayNameForColumn(agGridColumn, 'header');
167
+ : this.gridOptions.columnApi.getDisplayNameForColumn(agGridColumn, 'header'));
168
168
  if (!this.initialAgGridColDefs[colId]) {
169
169
  this.initialAgGridColDefs[colId] = Object.assign({}, agGridColumn.getUserProvidedColDef());
170
170
  }
@@ -40,6 +40,9 @@ function BaseEditorInput(props) {
40
40
  };
41
41
  const testRowNode = react_1.useMemo(() => {
42
42
  const firstRowNode = props.api.gridApi.getFirstRowNode();
43
+ if (!firstRowNode || !firstRowNode.data) {
44
+ return {};
45
+ }
43
46
  // clone the class instance to still keep the prototype methods
44
47
  return Object.assign(Object.create(Object.getPrototypeOf(firstRowNode)), firstRowNode);
45
48
  }, []);
@@ -112,9 +112,9 @@ function ExpressionEditor(props) {
112
112
  cursor: 'grab',
113
113
  marginRight: 'var(--ab-space-1)',
114
114
  }, data: `[${column.columnId}]`, "data-name": "column", icon: "drag" },
115
- React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start" }, showColumnIds ? `[${column.columnId}]` : column.friendlyName)) }, column.dataType === 'Number' ? (React.createElement(Input_1.default, { type: "number", "data-name": "column-input", value: getColValue(column), onChange: (e) => setData(updateColValue(data, column, Number(e.target.value))), width: "100%", disabled: column.readOnly })) : column.dataType === 'String' ? (React.createElement(Input_1.default, { type: "text", "data-name": "column-input", value: getColValue(column), onChange: (e) => setData(updateColValue(data, column, e.target.value)), width: "100%", disabled: column.readOnly })) : column.dataType === 'Date' ? (React.createElement(AdaptableInput_1.default, { type: "date", "data-name": "column-input", value: getColDateValue(column), onChange: (e) => {
115
+ React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start" }, showColumnIds ? `[${column.columnId}]` : column.friendlyName)) }, column.dataType === 'Number' ? (React.createElement(Input_1.default, { type: "number", "data-name": "column-input", "data-value": column.columnId, value: getColValue(column), onChange: (e) => setData(updateColValue(data, column, Number(e.target.value))), width: "100%", disabled: column.readOnly })) : column.dataType === 'String' ? (React.createElement(Input_1.default, { type: "text", "data-name": "column-input", "data-value": column.columnId, value: getColValue(column), onChange: (e) => setData(updateColValue(data, column, e.target.value)), width: "100%", disabled: column.readOnly })) : column.dataType === 'Date' ? (React.createElement(AdaptableInput_1.default, { type: "date", "data-name": "column-input", "data-value": column.columnId, value: getColDateValue(column), onChange: (e) => {
116
116
  setData(updateColValue(data, column, new Date(e.target.value)));
117
- }, style: { width: '100%' }, disabled: column.readOnly })) : column.dataType === 'Boolean' ? (React.createElement(CheckBox_1.CheckBox, { "data-name": "column-input", checked: getColValue(column), onChange: (checked) => setData(updateColValue(data, column, checked)), disabled: column.readOnly })) : null))))));
117
+ }, style: { width: '100%' }, disabled: column.readOnly })) : column.dataType === 'Boolean' ? (React.createElement(CheckBox_1.CheckBox, { "data-name": "column-input", "data-value": column.columnId, checked: getColValue(column), onChange: (checked) => setData(updateColValue(data, column, checked)), disabled: column.readOnly })) : null))))));
118
118
  const namedQueries = (React.createElement("div", null, props.namedQueries.map((namedQuery) => (React.createElement(rebass_1.Flex, { key: namedQuery.Uuid, flexDirection: "column", alignItems: "start", style: {
119
119
  padding: 3,
120
120
  marginTop: 'var(--ab-space-2)',