@adaptabletools/adaptable 13.0.1 → 13.0.2

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 (43) hide show
  1. package/bundle.cjs.js +149 -143
  2. package/package.json +1 -1
  3. package/publishTimestamp.d.ts +1 -1
  4. package/publishTimestamp.js +1 -1
  5. package/src/AdaptableInterfaces/IAdaptable.d.ts +1 -0
  6. package/src/AdaptableOptions/ActionOptions.d.ts +15 -1
  7. package/src/AdaptableOptions/AdaptableOptions.d.ts +1 -0
  8. package/src/AdaptableOptions/AdaptableQLOptions.d.ts +1 -0
  9. package/src/AdaptableOptions/FilterOptions.d.ts +6 -0
  10. package/src/AdaptableOptions/GeneralOptions.d.ts +2 -0
  11. package/src/AdaptableOptions/LayoutOptions.d.ts +1 -0
  12. package/src/AdaptableOptions/NotificationsOptions.d.ts +2 -1
  13. package/src/Api/EventApi.d.ts +13 -22
  14. package/src/Api/Implementation/StyledColumnApiImpl.d.ts +1 -0
  15. package/src/Api/Implementation/StyledColumnApiImpl.js +17 -0
  16. package/src/Api/StyledColumnApi.d.ts +5 -0
  17. package/src/Strategy/FilterModule.js +1 -1
  18. package/src/Strategy/LayoutModule.js +7 -1
  19. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +1 -0
  20. package/src/Utilities/Extensions/StringExtensions.d.ts +2 -0
  21. package/src/Utilities/Extensions/StringExtensions.js +21 -1
  22. package/src/Utilities/Services/CalculatedColumnExpressionService.js +1 -1
  23. package/src/Utilities/Services/Interface/IMetamodelService.d.ts +1 -0
  24. package/src/Utilities/Services/MetamodelService.js +6 -4
  25. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.d.ts +3 -5
  26. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.js +103 -92
  27. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.d.ts +2 -1
  28. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.js +2 -2
  29. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +4 -3
  30. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizardColumnsStep.js +8 -3
  31. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +7 -34
  32. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.js +7 -7
  33. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.js +2 -1
  34. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UiOptionsForm.js +2 -1
  35. package/src/View/Components/FilterForm/QuickFilterForm.js +2 -2
  36. package/src/agGrid/ActionColumnRenderer.js +2 -0
  37. package/src/agGrid/Adaptable.d.ts +2 -0
  38. package/src/agGrid/Adaptable.js +76 -52
  39. package/src/metamodel/adaptable.metamodel.d.ts +87 -0
  40. package/src/metamodel/adaptable.metamodel.js +1 -1
  41. package/src/types.d.ts +2 -1
  42. package/version.d.ts +1 -1
  43. package/version.js +1 -1
@@ -5,10 +5,11 @@ export interface NocodeColumn extends Partial<ColDef> {
5
5
  type?: string | string[];
6
6
  caption?: string;
7
7
  }
8
- declare const _default: React.MemoExoticComponent<({ columns: cols, handle, onValidityChange, onChange, onSelectionChange, selectedColumns, }: {
8
+ declare const _default: React.MemoExoticComponent<({ columns: cols, handle, onValidityChange, onChange, onSelectionChange, selectedColumns, theme, }: {
9
9
  onValidityChange: (valid: boolean) => any;
10
10
  handle: React.MutableRefObject<any>;
11
11
  columns: NocodeColumn[];
12
+ theme?: string;
12
13
  onChange?: (columns: NocodeColumn[]) => void;
13
14
  onSelectionChange?: (column: any, flag: boolean) => void;
14
15
  selectedColumns?: {
@@ -58,7 +58,7 @@ const tableDOMProps = {
58
58
  minHeight: 600,
59
59
  },
60
60
  };
61
- const ColumnsList = ({ columns: cols, handle, onValidityChange, onChange, onSelectionChange, selectedColumns, }) => {
61
+ const ColumnsList = ({ columns: cols, handle, onValidityChange, onChange, onSelectionChange, selectedColumns, theme, }) => {
62
62
  const rerender = useForceRender();
63
63
  const columnsRef = (0, react_1.useRef)(cols);
64
64
  const silentSetColumns = (columns) => {
@@ -316,7 +316,7 @@ const ColumnsList = ({ columns: cols, handle, onValidityChange, onChange, onSele
316
316
  },
317
317
  },
318
318
  };
319
- return (React.createElement(rebass_1.Box, { p: 2, style: { height: '100%' }, className: "light" },
319
+ return (React.createElement(rebass_1.Box, { p: 2, style: { height: '100%' }, className: theme },
320
320
  React.createElement(InfiniteTable_1.DataSource, { data: data, primaryKey: "colId" },
321
321
  React.createElement(InfiniteTable_1.InfiniteTable, { columnTypes: {
322
322
  default: {
@@ -8,10 +8,11 @@ const StringExtensions_1 = tslib_1.__importDefault(require("../../../Utilities/E
8
8
  const OnePageWizards_1 = require("../../Wizard/OnePageWizards");
9
9
  const ConfigurationWizardColumnsStep_1 = require("./ConfigurationWizardColumnsStep");
10
10
  const GridOptionsForm_1 = tslib_1.__importDefault(require("./GridOptionsForm"));
11
- const AdaptableOptionsForm_1 = tslib_1.__importDefault(require("./AdaptableOptionsForm"));
12
11
  const EntitlementsForm_1 = tslib_1.__importDefault(require("./EntitlementsForm"));
13
12
  const UiOptionsForm_1 = require("./UIOptions/UiOptionsForm");
14
13
  const FinanceForm_1 = require("./FinanceForm");
14
+ const DefaultAdaptableOptions_1 = require("../../../Utilities/Defaults/DefaultAdaptableOptions");
15
+ const AdaptableOptionsForm_1 = require("./AdaptableOptionsForm");
15
16
  const ConfigurationWizard = (props) => {
16
17
  var _a, _b;
17
18
  const [isPrimaryKeySelected, setIsValid] = React.useState(true);
@@ -22,7 +23,7 @@ const ConfigurationWizard = (props) => {
22
23
  toolPanels: ['columns', 'filters', 'adaptable'],
23
24
  },
24
25
  };
25
- return Object.assign(Object.assign({}, props.adaptableOptions), { gridOptions: Object.assign(Object.assign({}, gridOptionDefaults), (_a = props === null || props === void 0 ? void 0 : props.adaptableOptions) === null || _a === void 0 ? void 0 : _a.gridOptions) });
26
+ return Object.assign(Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions), props.adaptableOptions), { gridOptions: Object.assign(Object.assign({}, gridOptionDefaults), (_a = props === null || props === void 0 ? void 0 : props.adaptableOptions) === null || _a === void 0 ? void 0 : _a.gridOptions) });
26
27
  });
27
28
  const [selectedColumns, setSelectedColumns] = (0, react_1.useState)(() => {
28
29
  return props.adaptableOptions.gridOptions.columnDefs.reduce((acc, col) => {
@@ -77,7 +78,7 @@ const ConfigurationWizard = (props) => {
77
78
  title: 'Adaptable Options',
78
79
  details: 'Configure Adaptable Options',
79
80
  isValid: () => (adaptableOptions.adaptableId ? true : 'Adaptable ID is required'),
80
- render: () => (React.createElement(AdaptableOptionsForm_1.default, { adaptableOptions: adaptableOptions, onChangeadAptableOptions: setAdaptableOptions })),
81
+ render: () => (React.createElement(AdaptableOptionsForm_1.AdaptableOptionsForm, { adaptableOptions: adaptableOptions, onChangeadAptableOptions: setAdaptableOptions })),
81
82
  },
82
83
  {
83
84
  title: 'Grid Options',
@@ -5,9 +5,14 @@ const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
6
  const ColumnsList_1 = tslib_1.__importDefault(require("./ColumnsList"));
7
7
  const ConfigurationWizardColumnsStep = (props) => {
8
- var _a, _b;
9
- return (React.createElement(ColumnsList_1.default, { handle: props.columnsHandle, onValidityChange: (valid) => {
8
+ var _a, _b, _c;
9
+ let theme = 'light';
10
+ if (typeof props.adaptableOptions.predefinedConfig === 'object' &&
11
+ ((_a = props.adaptableOptions.predefinedConfig.Theme) === null || _a === void 0 ? void 0 : _a.CurrentTheme)) {
12
+ theme = props.adaptableOptions.predefinedConfig.Theme.CurrentTheme;
13
+ }
14
+ return (React.createElement(ColumnsList_1.default, { theme: theme, handle: props.columnsHandle, onValidityChange: (valid) => {
10
15
  props.setPrimaryKeyIsNotSelected(valid);
11
- }, selectedColumns: props.selectedColumns, onChange: props.onColumnChange, onSelectionChange: props.onSelectionChange, columns: (_b = (_a = props.adaptableOptions) === null || _a === void 0 ? void 0 : _a.gridOptions) === null || _b === void 0 ? void 0 : _b.columnDefs }));
16
+ }, selectedColumns: props.selectedColumns, onChange: props.onColumnChange, onSelectionChange: props.onSelectionChange, columns: (_c = (_b = props.adaptableOptions) === null || _b === void 0 ? void 0 : _b.gridOptions) === null || _c === void 0 ? void 0 : _c.columnDefs }));
12
17
  };
13
18
  exports.ConfigurationWizardColumnsStep = ConfigurationWizardColumnsStep;
@@ -4,7 +4,6 @@ const tslib_1 = require("tslib");
4
4
  const React = tslib_1.__importStar(require("react"));
5
5
  const HelpBlock_1 = tslib_1.__importDefault(require("../../../components/HelpBlock"));
6
6
  const Types_1 = require("../../../PredefinedConfig/Common/Types");
7
- const AdaptableObjectRow_1 = require("../../Components/AdaptableObjectRow");
8
7
  const rebass_1 = require("rebass");
9
8
  const Radio_1 = tslib_1.__importDefault(require("../../../components/Radio"));
10
9
  const FormLayout_1 = tslib_1.__importStar(require("../../../components/FormLayout"));
@@ -19,7 +18,7 @@ const tableDOMProps = {
19
18
  },
20
19
  };
21
20
  const EntitlementsListForm = (props) => {
22
- var _a, _b;
21
+ var _a, _b, _c;
23
22
  let abOptions = props.adaptableOptions;
24
23
  const entitlements = (_b = (_a = abOptions === null || abOptions === void 0 ? void 0 : abOptions.entitlementOptions) === null || _a === void 0 ? void 0 : _a.moduleEntitlements) !== null && _b !== void 0 ? _b : [];
25
24
  if (typeof entitlements === 'function') {
@@ -31,28 +30,6 @@ const EntitlementsListForm = (props) => {
31
30
  return acc;
32
31
  }, {});
33
32
  }, [abOptions === null || abOptions === void 0 ? void 0 : abOptions.entitlementOptions]);
34
- const colItems = [
35
- {
36
- Content: React.createElement(rebass_1.Box, { style: { textAlign: 'left' } }, "Entitlement"),
37
- Size: 3,
38
- key: 'name',
39
- },
40
- {
41
- Content: 'Visible',
42
- Size: 3,
43
- key: 'Visible',
44
- },
45
- {
46
- Content: 'Read Only',
47
- Size: 3,
48
- key: 'ReadOnly',
49
- },
50
- {
51
- Content: 'Hidden',
52
- Size: 3,
53
- key: 'Hidden',
54
- },
55
- ];
56
33
  const handleOnChange = React.useCallback((module, accessLevel) => {
57
34
  let newEntitlements = entitlements;
58
35
  // change
@@ -73,15 +50,6 @@ const EntitlementsListForm = (props) => {
73
50
  }
74
51
  props.onChangeadAptableOptions(Object.assign(Object.assign({}, abOptions), { entitlementOptions: Object.assign(Object.assign({}, abOptions.entitlementOptions), { moduleEntitlements: newEntitlements }) }));
75
52
  }, [abOptions === null || abOptions === void 0 ? void 0 : abOptions.entitlementOptions]);
76
- const items = ALL_ENTITLEMENTS_MODULES.map((module) => {
77
- const cItems = colItems.map((item) => (Object.assign({}, item)));
78
- const accessLevel = entitlementsMap[module];
79
- cItems[0].Content = React.createElement(rebass_1.Box, { style: { textAlign: 'left' } }, ModuleConstants_1.ADAPTABLE_MODULE_MAP[module]);
80
- cItems[1].Content = (React.createElement(Radio_1.default, { onClick: () => handleOnChange(module, 'Full'), checked: accessLevel === 'Full' }));
81
- cItems[2].Content = (React.createElement(Radio_1.default, { onClick: () => handleOnChange(module, 'ReadOnly'), checked: accessLevel === 'ReadOnly' }));
82
- cItems[3].Content = (React.createElement(Radio_1.default, { onClick: () => handleOnChange(module, 'Hidden'), checked: accessLevel === 'Hidden' }));
83
- return React.createElement(AdaptableObjectRow_1.AdaptableObjectRow, { key: module, colItems: cItems, style: { cursor: 'pointer' } });
84
- });
85
53
  if (typeof entitlements === 'function') {
86
54
  return (React.createElement(HelpBlock_1.default, { mb: 2 }, "Entitlements cannot be customized, they are handled by a custom function."));
87
55
  }
@@ -119,7 +87,12 @@ const EntitlementsListForm = (props) => {
119
87
  },
120
88
  };
121
89
  const data = ALL_ENTITLEMENTS_MODULES.map((module) => ({ name: ModuleConstants_1.ADAPTABLE_MODULE_MAP[module] }));
122
- return (React.createElement(rebass_1.Box, { flex: 1, height: "100%", className: "light" },
90
+ let theme = 'light';
91
+ if (typeof props.adaptableOptions.predefinedConfig === 'object' &&
92
+ ((_c = props.adaptableOptions.predefinedConfig.Theme) === null || _c === void 0 ? void 0 : _c.CurrentTheme)) {
93
+ theme = props.adaptableOptions.predefinedConfig.Theme.CurrentTheme;
94
+ }
95
+ return (React.createElement(rebass_1.Box, { flex: 1, height: "100%", className: theme },
123
96
  React.createElement(InfiniteTable_1.DataSource, { data: data, primaryKey: "name" },
124
97
  React.createElement(InfiniteTable_1.InfiniteTable, { columnTypes: {
125
98
  default: {
@@ -71,11 +71,11 @@ const FDC3InstrumentColumnBuilder = (props) => {
71
71
  return (React.createElement(rebass_1.Flex, null,
72
72
  React.createElement(FormLayout_1.default, { mr: 2 }, fields.slice(0, 4).map((field) => {
73
73
  var _a;
74
- return (React.createElement(FDC3ColumnSelector, Object.assign({}, field, { value: (_a = props.column[field.id]) !== null && _a !== void 0 ? _a : 'Select Column', onChange: (columnId) => props.onColumnFieldChange(field.id, columnId), columnOptions: props.columnOptions })));
74
+ return (React.createElement(FDC3ColumnSelector, Object.assign({}, field, { key: field.id, value: (_a = props.column[field.id]) !== null && _a !== void 0 ? _a : 'Select Column', onChange: (columnId) => props.onColumnFieldChange(field.id, columnId), columnOptions: props.columnOptions })));
75
75
  })),
76
76
  React.createElement(FormLayout_1.default, null, fields.slice(4).map((field) => {
77
77
  var _a;
78
- return (React.createElement(FDC3ColumnSelector, Object.assign({}, field, { value: (_a = props.column[field.id]) !== null && _a !== void 0 ? _a : 'Select Column', onChange: (columnId) => props.onColumnFieldChange(field.id, columnId), columnOptions: props.columnOptions })));
78
+ return (React.createElement(FDC3ColumnSelector, Object.assign({}, field, { key: field.id, value: (_a = props.column[field.id]) !== null && _a !== void 0 ? _a : 'Select Column', onChange: (columnId) => props.onColumnFieldChange(field.id, columnId), columnOptions: props.columnOptions })));
79
79
  })),
80
80
  React.createElement(rebass_1.Flex, { ml: 3, flexDirection: "column" }, fdc3ColumnDefinitions.instrumentColumns.intents.map((intent) => {
81
81
  var _a, _b;
@@ -89,7 +89,7 @@ const FDC3BaseColumnBuilder = (props) => {
89
89
  React.createElement(FormLayout_1.default, null,
90
90
  fields.map((field) => {
91
91
  var _a, _b;
92
- return (React.createElement(FDC3ColumnSelector, Object.assign({}, field, { columnOptions: props.columnOptions, onChange: (columnId) => props.onColumnFieldChange(field.id, columnId), value: (_b = (_a = props.column) === null || _a === void 0 ? void 0 : _a[field.id]) !== null && _b !== void 0 ? _b : '' })));
92
+ return (React.createElement(FDC3ColumnSelector, Object.assign({}, field, { key: field.id, columnOptions: props.columnOptions, onChange: (columnId) => props.onColumnFieldChange(field.id, columnId), value: (_b = (_a = props.column) === null || _a === void 0 ? void 0 : _a[field.id]) !== null && _b !== void 0 ? _b : '' })));
93
93
  }),
94
94
  React.createElement(FormLayout_1.FormRow, { label: "" },
95
95
  React.createElement(rebass_1.Flex, { flexDirection: "column" }, intents.map((intent) => {
@@ -132,7 +132,7 @@ const FDC3ColumnBuilder = (props) => {
132
132
  props.onChange(Object.assign(Object.assign({}, props.fdc3Column), { broadcastContextMenuLabel: (_a = event.target.value) !== null && _a !== void 0 ? _a : '' }));
133
133
  }, [props.fdc3Column]);
134
134
  return (React.createElement(FormBox_1.NocodeWizardFormBox, null,
135
- React.createElement(rebass_1.Flex, null,
135
+ React.createElement(rebass_1.Flex, { flexWrap: "wrap" },
136
136
  React.createElement(FormLayout_1.default, { mr: 3, mb: 3 },
137
137
  props.beforeContent,
138
138
  React.createElement(FormLayout_1.FormRow, { label: React.createElement(React.Fragment, null,
@@ -210,7 +210,7 @@ const FDC3ColumnCreator = (props) => {
210
210
  }
211
211
  return (React.createElement(FDC3ColumnBuilder, { disabled: fieldsDisabled, columnOptions: props.columnOptions, fdc3Column: fdc3Column, fdc3ColumnType: fdc3ColumnType, onChange: (newFDC3Column) => setFDC3Column(newFDC3Column), beforeContent: typeSelector, footer: React.createElement(rebass_1.Flex, null,
212
212
  React.createElement(rebass_1.Box, { flex: 1 }),
213
- React.createElement(rebass_1.Flex, { alignItems: "center", mr: 3 }, errors.slice(0, 1).map((error) => (React.createElement(AlertMessage, { ml: 2 }, error)))),
213
+ React.createElement(rebass_1.Flex, { alignItems: "center", mr: 3 }, errors.slice(0, 1).map((error) => (React.createElement(AlertMessage, { key: error, ml: 2 }, error)))),
214
214
  React.createElement(SimpleButton_1.default, { disabled: fieldsDisabled || !fdc3Column.columnId, onClick: handleOnNew, icon: "plus", variant: "raised" }, "Add FDC3 Column")) }));
215
215
  };
216
216
  const FinanceFormSectionTitle = (props) => (React.createElement(rebass_1.Box, Object.assign({}, props, { mb: 2 }),
@@ -238,8 +238,8 @@ const FinanceForm = (props) => {
238
238
  props.onChangeadAptableOptions(Object.assign(Object.assign({}, props.adaptableOptions), { plugins: [...props.adaptableOptions.plugins] }));
239
239
  };
240
240
  const renderEditor = (fdc3ColumnType, fdc3ColumnsItems) => {
241
- return fdc3ColumnsItems.map((fdc3Column, currentFDCColumnId) => (React.createElement(rebass_1.Box, { mb: 3 },
242
- React.createElement(FDC3ColumnEditor, { key: currentFDCColumnId, columnOptions: columnOptions, fdc3Column: fdc3Column, fdc3ColumnType: fdc3ColumnType, onChange: (editedFDC3Column) => {
241
+ return fdc3ColumnsItems.map((fdc3Column, currentFDCColumnId) => (React.createElement(rebass_1.Box, { key: currentFDCColumnId, mb: 3 },
242
+ React.createElement(FDC3ColumnEditor, { columnOptions: columnOptions, fdc3Column: fdc3Column, fdc3ColumnType: fdc3ColumnType, onChange: (editedFDC3Column) => {
243
243
  const newFDC3Columns = fdc3ColumnsItems.map((fdc3Column, index) => {
244
244
  if (index === currentFDCColumnId) {
245
245
  return editedFDC3Column;
@@ -6,11 +6,12 @@ const FormLayout_1 = tslib_1.__importStar(require("../../../components/FormLayou
6
6
  const CheckBox_1 = require("../../../components/CheckBox");
7
7
  const HelpBlock_1 = tslib_1.__importDefault(require("../../../components/HelpBlock"));
8
8
  const DefaultAdaptableOptions_1 = require("../../../Utilities/Defaults/DefaultAdaptableOptions");
9
+ const rebass_1 = require("rebass");
9
10
  const GridOptionsForm = (props) => {
10
11
  var _a;
11
12
  let abOptions = props.adaptableOptions;
12
13
  const gridOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.gridOptions), abOptions.gridOptions);
13
- return (React.createElement(React.Fragment, null,
14
+ return (React.createElement(rebass_1.Box, { p: 2 },
14
15
  React.createElement(HelpBlock_1.default, null, "Grid Options"),
15
16
  React.createElement(FormLayout_1.default, { margin: 2, columns: [{ name: 'children' }, { name: 'label', style: { textAlign: 'start' } }] },
16
17
  React.createElement(FormLayout_1.FormRow, { label: "Enable Range Selection" },
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UIElementsForm = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
+ const rebass_1 = require("rebass");
6
7
  const UIOptionsActionColumnsForm_1 = require("./UIOptionsActionColumnsForm");
7
8
  const UIOptionsSidebarForm_1 = require("./UIOptionsSidebarForm");
8
9
  const UIOptionsStatusbarForm_1 = require("./UIOptionsStatusbarForm");
9
10
  const UIElementsForm = (props) => {
10
11
  let abOptions = props.adaptableOptions;
11
- return (React.createElement(React.Fragment, null,
12
+ return (React.createElement(rebass_1.Box, { p: 2 },
12
13
  React.createElement(UIOptionsActionColumnsForm_1.UIOptionsActionColumnsForm, { abOptions: abOptions, onChange: props.onChangeadAptableOptions }),
13
14
  React.createElement(UIOptionsSidebarForm_1.UIOptionsSidebarForm, { abOptions: abOptions, onChange: props.onChangeadAptableOptions }),
14
15
  React.createElement(UIOptionsStatusbarForm_1.UIOptionsStatusbarForm, { abOptions: abOptions, onChange: props.onChangeadAptableOptions })));
@@ -210,8 +210,8 @@ class QuickFilterFormComponent extends React.Component {
210
210
  e.nativeEvent.stopPropagation();
211
211
  this.clearFilter();
212
212
  }
213
- }, flex: 1, style: {
214
- minWidth: 0,
213
+ }, style: {
214
+ width: '100%',
215
215
  padding: 'var(--ab-space-1)',
216
216
  borderRadius: 0,
217
217
  borderLeftWidth: 0,
@@ -70,6 +70,7 @@ const ReactActionColumnRenderer = (props) => {
70
70
  primaryKeyValue: pkValue,
71
71
  rowNode: props.node,
72
72
  adaptableApi: adaptable.api,
73
+ data: props.data,
73
74
  };
74
75
  return (React.createElement("div", { className: "ab-ActionColumn" }, renderActionButtons(actionButtons, adaptable.api, buttonContext, rerender)));
75
76
  };
@@ -96,6 +97,7 @@ class ActionColumnRenderer {
96
97
  primaryKeyValue: pkValue,
97
98
  rowNode: params.node,
98
99
  adaptableApi: adaptable.api,
100
+ data: params.data,
99
101
  };
100
102
  const eGui = this.eGui;
101
103
  const doRender = () => {
@@ -233,6 +233,7 @@ export declare class Adaptable implements IAdaptable {
233
233
  redrawRow(rowNode: RowNode): void;
234
234
  redrawRows(rowNodes: RowNode[]): void;
235
235
  refreshCells(rowNodes: RowNode[], columns: (string | Column)[], forceUpdate: boolean, suppressFlash?: boolean): void;
236
+ refreshColumns(columns: (string | Column)[], forceUpdate: boolean, suppressFlash?: boolean): void;
236
237
  jumpToRow(rowNode: RowNode): void;
237
238
  jumpToColumn(columnId: string): void;
238
239
  jumpToCell(columnId: string, rowNode: RowNode): void;
@@ -305,6 +306,7 @@ export declare class Adaptable implements IAdaptable {
305
306
  private getExpressionStylesChanges;
306
307
  private getStyledColumnComparisonChanges;
307
308
  private checkChangedCellCurrentlySelected;
309
+ refreshColumnForRelativeRangeStyledColumns(cellDataChangedInfos: CellDataChangedInfo[]): void;
308
310
  private getColumnSorts;
309
311
  private onSortChanged;
310
312
  expandAllRowGroups(): void;
@@ -2157,6 +2157,9 @@ class Adaptable {
2157
2157
  };
2158
2158
  api.refreshCells(refreshCellParams);
2159
2159
  }
2160
+ refreshColumns(columns, forceUpdate, suppressFlash) {
2161
+ this.refreshCells(null, columns, forceUpdate, suppressFlash);
2162
+ }
2160
2163
  jumpToRow(rowNode) {
2161
2164
  this.gridOptions.api.ensureNodeVisible(rowNode, 'middle');
2162
2165
  }
@@ -2247,57 +2250,64 @@ class Adaptable {
2247
2250
  if (!(actionRowButtons === null || actionRowButtons === void 0 ? void 0 : actionRowButtons.length)) {
2248
2251
  return [];
2249
2252
  }
2253
+ const defaultEditButtonConfiguration = {
2254
+ create: {
2255
+ icon: {
2256
+ name: 'add-row',
2257
+ },
2258
+ tooltip: 'Create',
2259
+ onClick: () => {
2260
+ this.api.actionApi.displayCreateActionRow();
2261
+ },
2262
+ },
2263
+ edit: {
2264
+ icon: {
2265
+ name: 'edit',
2266
+ },
2267
+ tooltip: 'Edit',
2268
+ onClick: (button, context) => {
2269
+ this.api.actionApi.displayEditActionRow(context.primaryKeyValue);
2270
+ },
2271
+ },
2272
+ clone: {
2273
+ icon: {
2274
+ name: 'clone',
2275
+ },
2276
+ tooltip: 'Clone',
2277
+ onClick: (button, context) => {
2278
+ this.api.actionApi.displayCloneActionRow(context.primaryKeyValue);
2279
+ },
2280
+ },
2281
+ delete: {
2282
+ icon: {
2283
+ name: 'delete',
2284
+ },
2285
+ tooltip: 'Delete',
2286
+ onClick: (button, context) => {
2287
+ var _a, _b;
2288
+ const eventInfo = {
2289
+ type: 'rowDeleted',
2290
+ rowNode: context.rowNode,
2291
+ adaptableApi: context.adaptableApi,
2292
+ };
2293
+ this.api.eventApi.emit('ActionRowSubmitted', eventInfo);
2294
+ (_b = (_a = this.adaptableOptions.actionOptions.actionRowFormOptions).onFormSubmit) === null || _b === void 0 ? void 0 : _b.call(_a, eventInfo);
2295
+ },
2296
+ },
2297
+ };
2250
2298
  const editButtons = actionRowButtons
2251
- .map((buttonName) => {
2252
- const button = buttonName === 'create'
2253
- ? {
2254
- icon: {
2255
- name: 'add-row',
2256
- },
2257
- tooltip: 'Create',
2258
- onClick: () => {
2259
- this.api.actionApi.displayCreateActionRow();
2260
- },
2261
- }
2262
- : buttonName === 'edit'
2263
- ? {
2264
- icon: {
2265
- name: 'edit',
2266
- },
2267
- tooltip: 'Edit',
2268
- onClick: (button, context) => {
2269
- this.api.actionApi.displayEditActionRow(context.primaryKeyValue);
2270
- },
2271
- }
2272
- : buttonName === 'clone'
2273
- ? {
2274
- icon: {
2275
- name: 'clone',
2276
- },
2277
- tooltip: 'Clone',
2278
- onClick: (button, context) => {
2279
- this.api.actionApi.displayCloneActionRow(context.primaryKeyValue);
2280
- },
2281
- }
2282
- : buttonName === 'delete'
2283
- ? {
2284
- icon: {
2285
- name: 'delete',
2286
- },
2287
- tooltip: 'Delete',
2288
- onClick: (button, context) => {
2289
- var _a, _b;
2290
- const eventInfo = {
2291
- type: 'rowDeleted',
2292
- rowNode: context.rowNode,
2293
- adaptableApi: context.adaptableApi,
2294
- };
2295
- this.api.eventApi.emit('ActionRowSubmitted', eventInfo);
2296
- (_b = (_a = this.adaptableOptions.actionOptions.actionRowFormOptions).onFormSubmit) === null || _b === void 0 ? void 0 : _b.call(_a, eventInfo);
2297
- },
2298
- }
2299
- : undefined;
2300
- return button;
2299
+ .map((actionRowButtonType) => {
2300
+ var _a, _b;
2301
+ const defaultButtonConfig = defaultEditButtonConfiguration[actionRowButtonType];
2302
+ if (!defaultButtonConfig) {
2303
+ // should NOT happen unless the user sent some invalid button type in the predefined config
2304
+ return;
2305
+ }
2306
+ const customButtonConfig = (_b = (_a = this.adaptableOptions.actionOptions).actionRowButtonCustomConfiguration) === null || _b === void 0 ? void 0 : _b.call(_a, {
2307
+ adaptableApi: this.api,
2308
+ actionRowButtonType,
2309
+ });
2310
+ return Object.assign(Object.assign({}, defaultButtonConfig), customButtonConfig);
2301
2311
  })
2302
2312
  .filter(Boolean);
2303
2313
  if (!editButtons.length) {
@@ -2313,8 +2323,8 @@ class Adaptable {
2313
2323
  colId: GeneralConstants_1.ADAPTABLE_ROW_ACTION_BUTTONS,
2314
2324
  hide: false,
2315
2325
  editable: false,
2316
- // 17px is the icon widht + left&right padding
2317
- width: editButtons.length * (UIHelper_1.default.getSimpleButtonPaddingWidth() * 2 + 17) + 3,
2326
+ // 15px is the icon width + left&right padding + left&right border
2327
+ width: editButtons.length * (UIHelper_1.default.getSimpleButtonPaddingWidth() * 2 + 15) + 2,
2318
2328
  resizable: false,
2319
2329
  lockVisible: true,
2320
2330
  suppressColumnsToolPanel: true,
@@ -3678,6 +3688,7 @@ class Adaptable {
3678
3688
  }
3679
3689
  }
3680
3690
  }
3691
+ this.refreshColumnForRelativeRangeStyledColumns(cellDataChangedInfos);
3681
3692
  firstInfo.trigger == 'tick' ? this.filterOnTickingDataChange() : this.filterOnEditDataChange();
3682
3693
  }
3683
3694
  getExpressionStylesChanges(dataChangedScope, cellDataChangedInfos) {
@@ -3742,6 +3753,19 @@ class Adaptable {
3742
3753
  }
3743
3754
  }
3744
3755
  }
3756
+ refreshColumnForRelativeRangeStyledColumns(cellDataChangedInfos) {
3757
+ const columnIdMap = new Set();
3758
+ cellDataChangedInfos.forEach((cellDataChangeInfo) => {
3759
+ const styledColumn = this.api.styledColumnApi.getActiveStyledColumnForColumn(cellDataChangeInfo.column);
3760
+ if (styledColumn && this.api.styledColumnApi.hasStyledColumnRelativeCellRange(styledColumn)) {
3761
+ columnIdMap.add(styledColumn.ColumnId);
3762
+ }
3763
+ });
3764
+ const columnIdsToUpdate = [...columnIdMap];
3765
+ if (columnIdsToUpdate.length) {
3766
+ this.refreshColumns(columnIdsToUpdate, true);
3767
+ }
3768
+ }
3745
3769
  getColumnSorts() {
3746
3770
  const columnSorts = [];
3747
3771
  const columnState = this.gridOptions.columnApi.getColumnState();