@adaptabletools/adaptable 17.0.0-canary.9 → 17.0.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 (62) hide show
  1. package/base.css +24 -1
  2. package/base.css.map +1 -1
  3. package/bundle.cjs.js +199 -226
  4. package/index.css +34 -1
  5. package/index.css.map +1 -1
  6. package/package.json +1 -2
  7. package/publishTimestamp.d.ts +1 -1
  8. package/publishTimestamp.js +1 -1
  9. package/src/Api/EventApi.d.ts +19 -8
  10. package/src/Api/Events/CellSelectionChanged.d.ts +11 -0
  11. package/src/Api/Events/RowSelectionChanged.d.ts +11 -0
  12. package/src/Api/Events/RowSelectionChanged.js +2 -0
  13. package/src/Redux/ActionsReducers/PlusMinusRedux.d.ts +16 -0
  14. package/src/Redux/ActionsReducers/PlusMinusRedux.js +47 -1
  15. package/src/Strategy/LayoutModule.d.ts +12 -4
  16. package/src/Strategy/LayoutModule.js +11 -5
  17. package/src/Strategy/NotesModule.js +1 -1
  18. package/src/Strategy/PlusMinusModule.js +2 -0
  19. package/src/Strategy/Utilities/Export/getExportRowsViewItems.d.ts +2 -1
  20. package/src/Strategy/Utilities/Export/getExportRowsViewItems.js +14 -5
  21. package/src/Strategy/Utilities/getExpressionViewItems.js +8 -2
  22. package/src/View/Components/FilterForm/FilterForm.js +0 -1
  23. package/src/View/Components/FilterForm/ListBoxFilterForm.js +1 -3
  24. package/src/View/Components/FilterForm/QuickFilterForm.js +1 -1
  25. package/src/View/Components/FilterForm/QuickFilterValues.js +3 -2
  26. package/src/View/Components/Selectors/ColumnSelector.d.ts +1 -0
  27. package/src/View/Components/Selectors/ColumnSelector.js +2 -1
  28. package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +2 -2
  29. package/src/View/Export/Wizard/ReportRowsWizardSection.js +3 -1
  30. package/src/View/GridFilter/GridFilterExpressionEditor.js +1 -1
  31. package/src/View/GridFilter/GridFilterPopup.js +5 -5
  32. package/src/View/GridFilter/GridFilterViewPanel.js +11 -10
  33. package/src/View/GridFilter/NamedQuerySelector.js +1 -1
  34. package/src/View/GridFilter/useGridFilterExpressionEditor.d.ts +1 -0
  35. package/src/View/GridFilter/useGridFilterExpressionEditor.js +7 -4
  36. package/src/View/Layout/Wizard/getGridFilterPreview.d.ts +6 -0
  37. package/src/View/Layout/Wizard/getGridFilterPreview.js +16 -0
  38. package/src/View/Layout/Wizard/sections/FilterSection.js +1 -1
  39. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  40. package/src/View/Notes/NotesPopup.js +2 -2
  41. package/src/View/PlusMinus/MovePlusMinus.d.ts +7 -0
  42. package/src/View/PlusMinus/MovePlusMinus.js +27 -0
  43. package/src/agGrid/Adaptable.js +2 -2
  44. package/src/agGrid/agGridHelper.d.ts +2 -1
  45. package/src/agGrid/agGridHelper.js +13 -3
  46. package/src/components/Datepicker/index.js +1 -1
  47. package/src/components/ExpressionEditor/ExpressionPreview.d.ts +7 -0
  48. package/src/components/ExpressionEditor/ExpressionPreview.js +25 -0
  49. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +11 -7
  50. package/src/components/ExpressionEditor/index.js +4 -7
  51. package/src/components/InputGroup/InputGroup.d.ts +7 -0
  52. package/src/components/InputGroup/InputGroup.js +12 -0
  53. package/src/components/InputGroup/index.d.ts +1 -0
  54. package/src/components/InputGroup/index.js +4 -0
  55. package/src/components/OverlayTrigger/index.js +7 -2
  56. package/src/components/Select/Select.d.ts +0 -1
  57. package/src/components/Select/Select.js +1 -3
  58. package/src/types.d.ts +2 -1
  59. package/version.d.ts +1 -1
  60. package/version.js +1 -1
  61. package/src/Api/Events/SelectionChanged.d.ts +0 -16
  62. /package/src/Api/Events/{SelectionChanged.js → CellSelectionChanged.js} +0 -0
@@ -12,6 +12,7 @@ const getScopeViewItems_1 = require("./Utilities/getScopeViewItems");
12
12
  const PlusMinusWizard_1 = require("../View/PlusMinus/Wizard/PlusMinusWizard");
13
13
  const getRuleViewItems_1 = require("./Utilities/getRuleViewItems");
14
14
  const getObjectTagsViewItems_1 = require("./Utilities/getObjectTagsViewItems");
15
+ const MovePlusMinus_1 = require("../View/PlusMinus/MovePlusMinus");
15
16
  class PlusMinusModule extends AdaptableModuleBase_1.AdaptableModuleBase {
16
17
  constructor(api) {
17
18
  super(ModuleConstants.PlusMinusModuleId, ModuleConstants.PlusMinusFriendlyName, 'add-circle', 'PlusMinusPopup', 'Configure how a cell value will edit when the + or - keys are pressed', api);
@@ -218,6 +219,7 @@ class PlusMinusModule extends AdaptableModuleBase_1.AdaptableModuleBase {
218
219
  }
219
220
  getViewProperties() {
220
221
  return {
222
+ actions: [MovePlusMinus_1.MovePlusMinus],
221
223
  getEditAction: PlusMinusRedux.PlusMinusNudgeEdit,
222
224
  getDeleteAction: PlusMinusRedux.PlusMinusNudgeDelete,
223
225
  getSuspendAction: PlusMinusRedux.PlusMinusNudgeSuspend,
@@ -1,5 +1,6 @@
1
+ /// <reference types="react" />
1
2
  import { AdaptableApi, Report } from '../../../types';
2
3
  export declare const getExportRowsViewItems: (report: Report, api: AdaptableApi) => {
3
4
  name: string;
4
- values: string[];
5
+ view: JSX.Element;
5
6
  };
@@ -1,14 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getExportRowsViewItems = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const ExpressionPreview_1 = require("../../../components/ExpressionEditor/ExpressionPreview");
7
+ const Tag_1 = require("../../../components/Tag");
4
8
  const getExportRowsViewItems = (report, api) => {
9
+ let element = null;
10
+ if (report.ReportRowScope === 'ExpressionRows') {
11
+ element = React.createElement(ExpressionPreview_1.ExpressionPreview, { query: report.Query });
12
+ }
13
+ else {
14
+ element = api.internalApi
15
+ .getReportService()
16
+ .GetReportExpressionDescription(report, api.columnApi.getColumns());
17
+ }
5
18
  return {
6
19
  name: 'Rows',
7
- values: [
8
- api.internalApi
9
- .getReportService()
10
- .GetReportExpressionDescription(report, api.columnApi.getColumns()),
11
- ],
20
+ view: React.createElement(Tag_1.Tag, null, element),
12
21
  };
13
22
  };
14
23
  exports.getExportRowsViewItems = getExportRowsViewItems;
@@ -1,11 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getExpressionViewItems = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const ExpressionPreview_1 = require("../../components/ExpressionEditor/ExpressionPreview");
7
+ const Tag_1 = require("../../components/Tag");
4
8
  const getExpressionViewItems = (query, api) => {
5
- const expressionText = api.internalApi.getAdaptableQueryExpressionText(query);
9
+ // const expressionText = api.internalApi.getAdaptableQueryExpressionText(query);
6
10
  return {
7
11
  name: 'Expression',
8
- values: [expressionText],
12
+ // values: [],
13
+ view: (React.createElement(Tag_1.Tag, null,
14
+ React.createElement(ExpressionPreview_1.ExpressionPreview, { query: query }))),
9
15
  };
10
16
  };
11
17
  exports.getExpressionViewItems = getExpressionViewItems;
@@ -180,7 +180,6 @@ class FilterFormComponent extends React.Component {
180
180
  }
181
181
  return (_a = predicateDef.inputs) === null || _a === void 0 ? void 0 : _a.map((predicateInput, index) => (React.createElement(rebass_1.Flex, { key: index, flexDirection: "row" },
182
182
  React.createElement(AdaptableInput_1.default, { onMouseDown: (event) => {
183
- console.log('onMouseDown', predicateInput.type, event);
184
183
  if (predicateInput.type === 'date') {
185
184
  // This prevents the ag-grid dropdown closing when a date is selected
186
185
  event.stopPropagation();
@@ -78,9 +78,7 @@ const ListBoxFilterForm = (props) => {
78
78
  const textClear = (React.createElement(AdaptableFormControlTextClear_1.AdaptableFormControlTextClear, { autoFocus: true, type: "text", placeholder: "Search Column Values", value: FilterValue, style: {
79
79
  paddingTop: 'var(--ab-space-1)',
80
80
  paddingBottom: 'var(--ab-space-1)',
81
- paddingLeft: 'var(--ab-space-1)',
82
- borderRadius: 'var(--ab__border-radius)',
83
- }, OnTextChange: handleFilterValueChange }));
81
+ }, inputStyle: { padding: 'var(--ab-space-1)' }, OnTextChange: handleFilterValueChange }));
84
82
  const baseClassName = 'ab-ListBoxFilterForm';
85
83
  return (React.createElement("div", { className: (0, join_1.default)(baseClassName, props.useAgGridStyle ? `${baseClassName}--aggrid-style` : null, props.isLoading && `${baseClassName}--loading`) },
86
84
  React.createElement(rebass_1.Box, { px: 2 },
@@ -80,7 +80,7 @@ class QuickFilterFormComponent extends React.Component {
80
80
  showQuickFilterInput = !hideQuickFilterInputFunction(columnFilterContext);
81
81
  }
82
82
  return (React.createElement(React.Fragment, null,
83
- showQuickFilterDropdown && (React.createElement(OverlayTrigger_1.default, { className: "ab-QuickFilter", showEvent: showEvent, hideEvent: hideEvent, preventPortalEventPropagation: showEvent === 'click', targetOffset: 10, hideDelay: 300, "data-name": "quick-filter-overlay", render: () => (React.createElement(rebass_1.Flex, { className: "ab-QuickFilter__dropdown", flexDirection: "column", "data-name": "quick-filter", fontSize: 2 },
83
+ showQuickFilterDropdown && (React.createElement(OverlayTrigger_1.default, { className: "ab-QuickFilter", showEvent: showEvent, hideEvent: hideEvent, preventPortalEventPropagation: showEvent === 'click', targetOffset: 10, hideDelay: 50, "data-name": "quick-filter-overlay", render: () => (React.createElement(rebass_1.Flex, { className: "ab-QuickFilter__dropdown", flexDirection: "column", "data-name": "quick-filter", fontSize: 2 },
84
84
  (transientColumnFilter === null || transientColumnFilter === void 0 ? void 0 : transientColumnFilter.Predicate.PredicateId) && (React.createElement(SimpleButton_1.default, { p: 2, variant: "text", onClick: () => this.clearFilter() },
85
85
  React.createElement("span", { style: { width: 20, marginRight: 10 } },
86
86
  React.createElement(icons_1.Icon, { name: "delete" })),
@@ -115,7 +115,8 @@ const QuickFilterValues = (props) => {
115
115
  return label !== null && label !== void 0 ? label : input;
116
116
  }).join(', ');
117
117
  }
118
- const quickFilterValuesWidth = props.api.optionsApi.getAdaptableOptions().columnFilterOptions.quickFilterOptions.quickFilterValuesWidth;
118
+ const quickFilterValuesWidth = props.api.optionsApi.getAdaptableOptions().columnFilterOptions.quickFilterOptions
119
+ .quickFilterValuesWidth;
119
120
  const getPopoverWidth = (targetWidth) => {
120
121
  if (quickFilterValuesWidth === 'auto') {
121
122
  return Math.max(180, targetWidth);
@@ -127,7 +128,7 @@ const QuickFilterValues = (props) => {
127
128
  };
128
129
  return (React.createElement(OverlayTrigger_1.default, { showEvent: showEvent,
129
130
  // cannot hide on blur, because the form input receives the input when this is opened
130
- hideEvent: "mouseleave", hideDelay: 300, ref: (api) => {
131
+ hideEvent: "mouseleave", hideDelay: 50, ref: (api) => {
131
132
  valuesDropdownRef.current = api;
132
133
  props.registerValuesDropdownApi(api);
133
134
  }, onVisibleChange: (visible) => {
@@ -9,5 +9,6 @@ export type ColumnSelectorProps<IsMulti extends boolean = false> = {
9
9
  filterColumn?: (column: AdaptableColumn) => boolean;
10
10
  value?: IsMulti extends true ? string[] : string;
11
11
  onChange: (column: IsMulti extends true ? string[] : string) => void;
12
+ placeholder?: string;
12
13
  };
13
14
  export declare const ColumnSelector: <IsMulti extends boolean = false>(props: ColumnSelectorProps<IsMulti>) => JSX.Element;
@@ -6,6 +6,7 @@ const React = tslib_1.__importStar(require("react"));
6
6
  const Select_1 = require("../../../components/Select");
7
7
  const AdaptableContext_1 = require("../../AdaptableContext");
8
8
  const ColumnSelector = function (props) {
9
+ var _a;
9
10
  const { api } = (0, AdaptableContext_1.useAdaptable)();
10
11
  const columns = React.useMemo(() => {
11
12
  return api.columnApi.getColumnsOfType(props.type);
@@ -25,7 +26,7 @@ const ColumnSelector = function (props) {
25
26
  }
26
27
  return true;
27
28
  });
28
- return (React.createElement(Select_1.Select, { "data-name": "column-selector", disabled: props.disabled, isMulti: props.isMulti, menuPosition: props.menuPosition, value: props.value, placeholder: "Select Column", onChange: (colId) => {
29
+ return (React.createElement(Select_1.Select, { "data-name": "column-selector", disabled: props.disabled, isMulti: props.isMulti, menuPosition: props.menuPosition, value: props.value, placeholder: (_a = props.placeholder) !== null && _a !== void 0 ? _a : 'Select Column', onChange: (colId) => {
29
30
  props.onChange(colId);
30
31
  }, options: options }));
31
32
  };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DataPreview = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const lodash_1 = require("lodash");
5
+ const flatten_1 = tslib_1.__importDefault(require("lodash/flatten"));
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const HelpBlock_1 = tslib_1.__importDefault(require("../../../../components/HelpBlock"));
8
8
  const icons_1 = require("../../../../components/icons");
@@ -130,7 +130,7 @@ const DataPreview = (props) => {
130
130
  };
131
131
  return (React.createElement(InfiniteTable_1.DataSource, { data: props.data, primaryKey: primaryKey, onDataMutations: (params) => {
132
132
  const newRowData = [...props.data];
133
- const mutationsList = (0, lodash_1.flatten)(Array.from(params.mutations.values()));
133
+ const mutationsList = (0, flatten_1.default)(Array.from(params.mutations.values()));
134
134
  if (!mutationsList.length) {
135
135
  return;
136
136
  }
@@ -6,6 +6,7 @@ const React = tslib_1.__importStar(require("react"));
6
6
  const react_1 = require("react");
7
7
  const rebass_1 = require("rebass");
8
8
  const ExpressionEditor_1 = require("../../../components/ExpressionEditor");
9
+ const ExpressionPreview_1 = require("../../../components/ExpressionEditor/ExpressionPreview");
9
10
  const Radio_1 = tslib_1.__importDefault(require("../../../components/Radio"));
10
11
  const Tabs_1 = require("../../../components/Tabs");
11
12
  const Tag_1 = require("../../../components/Tag");
@@ -32,7 +33,8 @@ const renderReportRowsSummary = (report) => {
32
33
  report.ReportRowScope === 'ExpressionRows' ? (React.createElement(React.Fragment, null,
33
34
  "Include Rows matching the query:",
34
35
  ' ',
35
- React.createElement(Tag_1.Tag, null, api.internalApi.getAdaptableQueryExpressionText(report.Query)))) : null));
36
+ React.createElement(Tag_1.Tag, null,
37
+ React.createElement(ExpressionPreview_1.ExpressionPreview, { query: report.Query })))) : null));
36
38
  };
37
39
  exports.renderReportRowsSummary = renderReportRowsSummary;
38
40
  const ReportRowsWizardSection = (props) => {
@@ -99,7 +99,7 @@ const GridFilterExpressionEditor = (props) => {
99
99
  } }, "CLOSE")),
100
100
  React.createElement(rebass_1.Box, { flex: 1 }),
101
101
  React.createElement(SimpleButton_1.default, { disabled: actionsDisabled, onClick: handleSaveQuery, icon: "save" }, "Save Query"),
102
- React.createElement(SimpleButton_1.default, { variant: "raised", tone: "accent", "data-name": "action-run", margin: 1, onClick: () => {
102
+ React.createElement(SimpleButton_1.default, { variant: "raised", tone: "accent", "data-name": "action-run", margin: 1, icon: "play", onClick: () => {
103
103
  var _a;
104
104
  if (namedQuery) {
105
105
  onAddNamedQuery({
@@ -21,13 +21,13 @@ const PopupPanel_1 = require("../Components/Popups/AdaptablePopup/PopupPanel");
21
21
  const NamedQuerySelector_1 = require("./NamedQuerySelector");
22
22
  const useGridFilterExpressionEditor_1 = require("./useGridFilterExpressionEditor");
23
23
  const GridFilterPopup = () => {
24
- const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, gridFilterHelpPage, gridFilterLinkDisabled, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
24
+ const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, gridFilterHelpPage, gridFilterLinkDisabled, isReadOnly, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
25
25
  const handleEnter = (e) => {
26
26
  if (e.key === 'Enter') {
27
27
  runQuery();
28
28
  }
29
29
  };
30
- const disabled = isSuspended || gridFilterAccessLevel === 'ReadOnly';
30
+ const disabled = isReadOnly || isSuspended || gridFilterAccessLevel === 'ReadOnly';
31
31
  return (React.createElement(PopupPanel_1.PopupPanel, { className: "ab-GridFilter", headerText: "Grid Filter", glyphicon: "grid-filter", infoLink: gridFilterHelpPage, infoLinkDisabled: gridFilterLinkDisabled },
32
32
  React.createElement(Panel_1.default, { bodyProps: { height: '100%' }, height: "100%" },
33
33
  React.createElement(FormLayout_1.default, null,
@@ -35,14 +35,14 @@ const GridFilterPopup = () => {
35
35
  React.createElement(FieldWrap_1.default, { marginRight: 1, width: "100%" },
36
36
  React.createElement(ButtonExpand_1.ButtonExpand, { disabled: disabled, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Edit the Expression in UI", marginLeft: 1 }),
37
37
  React.createElement(Input_1.default, { onKeyDown: handleEnter, disabled: disabled, type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { fontFamily: 'monospace', fontSize: 12 } }),
38
- isExpressionValid && (React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: isSuspended || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })),
38
+ isExpressionValid && (React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })),
39
39
  gridFilter && !isExpressionValid && (React.createElement(ButtonInvalid_1.ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
40
40
  ' ',
41
41
  StringExtensions_1.default.IsNotNullOrEmpty(expression) && (React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))),
42
42
  React.createElement(FormLayout_1.FormRow, { label: "" },
43
43
  React.createElement(rebass_1.Flex, { justifyContent: "space-around" },
44
- React.createElement(ButtonSave_1.ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }, "Save"),
45
- isSuspended ? (React.createElement(ButtonUnsuspend_1.ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Resume")) : (React.createElement(ButtonPause_1.ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: isSuspended || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Suspend")),
44
+ React.createElement(ButtonSave_1.ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: disabled || !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }, "Save"),
45
+ isSuspended ? (React.createElement(ButtonUnsuspend_1.ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Resume")) : (React.createElement(ButtonPause_1.ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Suspend")),
46
46
  React.createElement(DropdownButton_1.default, { disabled: disabled, variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns", icon: "list", iconPosition: "start" }, "Columns"),
47
47
  React.createElement(NamedQuerySelector_1.NamedQuerySelector, { disabled: disabled, namedQueries: namedQueries, cachedQueries: cachedQueries, currentQuery: gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression, onSelect: (query) => runQuery(query), setGridFilterExpression: (query) => setGridFilterExpression(query) }, "Named Queries")))))));
48
48
  };
@@ -19,34 +19,35 @@ const ButtonUnsuspend_1 = require("../Components/Buttons/ButtonUnsuspend");
19
19
  const NamedQuerySelector_1 = require("./NamedQuerySelector");
20
20
  const useGridFilterExpressionEditor_1 = require("./useGridFilterExpressionEditor");
21
21
  const QueryViewPanelComponent = (props) => {
22
- const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, isAdaptableReady, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
22
+ const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, isAdaptableReady, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, isReadOnly, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
23
23
  if (!isAdaptableReady) {
24
24
  return null;
25
25
  }
26
26
  const elementType = props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
27
+ const disabled = isReadOnly || isSuspended || gridFilterAccessLevel === 'ReadOnly';
27
28
  const handleEnter = (e) => {
28
29
  if (e.key === 'Enter') {
29
30
  runQuery();
30
31
  }
31
32
  };
32
- const buttonExpand = (React.createElement(ButtonExpand_1.ButtonExpand, { disabled: isSuspended, accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Edit the Expression in UI", marginLeft: 1 }));
33
+ const buttonExpand = (React.createElement(ButtonExpand_1.ButtonExpand, { disabled: disabled, accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Edit the Expression in UI", marginLeft: 1 }));
33
34
  const renderTextInput = () => {
34
35
  return props.viewType === 'Toolbar' ? (React.createElement(FieldWrap_1.default, { marginRight: 1, width: 500 },
35
36
  buttonExpand,
36
- React.createElement(Input_1.default, { disabled: isSuspended || gridFilterAccessLevel == 'ReadOnly', type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { fontFamily: 'monospace', fontSize: 12 } }),
37
- isExpressionValid && (React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: isSuspended || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })),
37
+ React.createElement(Input_1.default, { disabled: disabled, type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { fontFamily: 'monospace', fontSize: 12 } }),
38
+ isExpressionValid && (React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })),
38
39
  gridFilter && !isExpressionValid && (React.createElement(ButtonInvalid_1.ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
39
40
  ' ',
40
41
  StringExtensions_1.default.IsNotNullOrEmpty(expression) && (React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))) : (React.createElement(FieldWrap_1.default, null,
41
42
  ' ',
42
43
  buttonExpand,
43
- React.createElement(Input_1.default, { disabled: isSuspended || gridFilterAccessLevel == 'ReadOnly', type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { width: '100%' } })));
44
+ React.createElement(Input_1.default, { disabled: disabled, type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { width: '100%' } })));
44
45
  };
45
- const saveButton = (React.createElement(ButtonSave_1.ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: isSuspended || !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }));
46
- const suspendButton = (React.createElement(ButtonPause_1.ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
47
- const unSuspendButton = (React.createElement(ButtonUnsuspend_1.ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
46
+ const saveButton = (React.createElement(ButtonSave_1.ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: disabled || !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }));
47
+ const suspendButton = (React.createElement(ButtonPause_1.ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
48
+ const unSuspendButton = (React.createElement(ButtonUnsuspend_1.ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
48
49
  const namedQuerySelector = (React.createElement(NamedQuerySelector_1.NamedQuerySelector, { namedQueries: namedQueries, cachedQueries: cachedQueries, currentQuery: gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression, onSelect: (query) => runQuery(query), setGridFilterExpression: (query) => setGridFilterExpression(query) }));
49
- const columnsDropdown = (React.createElement(DropdownButton_1.default, { disabled: isSuspended, accessLevel: gridFilterAccessLevel, variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns" },
50
+ const columnsDropdown = (React.createElement(DropdownButton_1.default, { disabled: disabled, accessLevel: gridFilterAccessLevel, variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns" },
50
51
  React.createElement(icons_1.Icon, { name: 'list' })));
51
52
  const renderButtons = () => {
52
53
  return props.viewType === 'Toolbar' ? (React.createElement(React.Fragment, null,
@@ -55,7 +56,7 @@ const QueryViewPanelComponent = (props) => {
55
56
  columnsDropdown,
56
57
  namedQuerySelector,
57
58
  ' ')) : (React.createElement(React.Fragment, null,
58
- React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: "Run Grid Filter", accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: isSuspended || !isExpressionValid || expression == '' || expression == gridFilter, marginRight: 1 }),
59
+ React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: "Run Grid Filter", accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || !isExpressionValid || expression == '' || expression == gridFilter, marginRight: 1 }),
59
60
  ' ',
60
61
  React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel, disabled: expression == '' }),
61
62
  ' ',
@@ -48,7 +48,7 @@ const NamedQuerySelector = (props) => {
48
48
  cachedQueries ? (React.createElement(React.Fragment, null,
49
49
  React.createElement(Panel_1.default, { mt: 2, header: "Recent Grid Filters" },
50
50
  React.createElement(rebass_1.Flex, { flexDirection: "column" }, cachedQueries.map((cachedQuery, index) => {
51
- return (React.createElement(SimpleButton_1.default, { mb: 2, variant: "text", key: index, onClick: cachedQuery.onClick }, cachedQuery.label));
51
+ return (React.createElement(SimpleButton_1.default, { disabled: props.disabled, mb: 2, variant: "text", key: index, onClick: cachedQuery.onClick }, cachedQuery.label));
52
52
  }))))) : null),
53
53
  ] },
54
54
  React.createElement(SimpleButton_1.default, { disabled: props.disabled, variant: "text", icon: "folder-open" }, props.children))) : (React.createElement(ButtonOpen_1.ButtonOpen, { tooltip: "Load Named Query", disabled: true }));
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { CachedQuery } from '../../PredefinedConfig/NamedQueryState';
3
3
  export declare const useGridFilterExpressionEditor: () => {
4
+ isReadOnly: boolean;
4
5
  namedQueryModuleAccessLevel: import("../../types").AccessLevel;
5
6
  cachedQueries: CachedQuery[];
6
7
  expression: string;
@@ -13,10 +13,11 @@ const useGridFilterExpressionEditor = () => {
13
13
  var _a, _b, _c;
14
14
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
15
15
  const dispatch = (0, react_redux_1.useDispatch)();
16
- const gridFilter = (0, react_redux_1.useSelector)((state) => {
17
- var _a;
18
- return (_a = state.Layout.Layouts.find((l) => l.Name == state.Layout.CurrentLayout)) === null || _a === void 0 ? void 0 : _a.GridFilter;
16
+ const currentLayout = (0, react_redux_1.useSelector)((state) => {
17
+ return state.Layout.Layouts.find((l) => l.Name == state.Layout.CurrentLayout);
19
18
  });
19
+ const isReadOnly = Boolean(currentLayout === null || currentLayout === void 0 ? void 0 : currentLayout.IsReadOnly);
20
+ const gridFilter = currentLayout === null || currentLayout === void 0 ? void 0 : currentLayout.GridFilter;
20
21
  const [isAdaptableReady, setIsAdaptableReady] = React.useState(false);
21
22
  const [expression, setExpression] = React.useState(() => {
22
23
  return adaptable.api.gridFilterApi.getCurrentGridFilterExpression();
@@ -35,8 +36,9 @@ const useGridFilterExpressionEditor = () => {
35
36
  });
36
37
  }, []);
37
38
  React.useEffect(() => {
39
+ var _a;
38
40
  if ((gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) != expression) {
39
- setExpression(gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression);
41
+ setExpression((_a = gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) !== null && _a !== void 0 ? _a : '');
40
42
  }
41
43
  }, [gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression]);
42
44
  const isExpressionValid = expression == '' ||
@@ -107,6 +109,7 @@ const useGridFilterExpressionEditor = () => {
107
109
  adaptable.api.gridFilterApi.unSuspendGridFilter();
108
110
  };
109
111
  return {
112
+ isReadOnly,
110
113
  namedQueryModuleAccessLevel,
111
114
  cachedQueries,
112
115
  expression,
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { Layout } from '../../../types';
3
+ export declare const getGridFilterViewItems: (layout: Layout) => {
4
+ name: string;
5
+ view: JSX.Element;
6
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGridFilterViewItems = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const ExpressionPreview_1 = require("../../../components/ExpressionEditor/ExpressionPreview");
7
+ const Tag_1 = require("../../../components/Tag");
8
+ const getGridFilterViewItems = (layout) => {
9
+ var _a;
10
+ return {
11
+ name: 'Grid Filters',
12
+ view: (React.createElement(Tag_1.Tag, null,
13
+ React.createElement(ExpressionPreview_1.ExpressionPreview, { query: { BooleanExpression: (_a = layout.GridFilter) === null || _a === void 0 ? void 0 : _a.Expression } }))),
14
+ };
15
+ };
16
+ exports.getGridFilterViewItems = getGridFilterViewItems;
@@ -58,7 +58,7 @@ const FilterSection = (props) => {
58
58
  React.createElement(Tabs_1.Tabs.Content, null,
59
59
  React.createElement(FormLayout_1.default, { mb: 2 },
60
60
  React.createElement(FormLayout_1.FormRow, { label: "Add Column Filter" },
61
- React.createElement(ColumnSelector_1.ColumnSelector, { filterColumn: (column) => column.filterable && !layoutFilters.some((f) => f.ColumnId === column.columnId), value: "none", onChange: (option) => {
61
+ React.createElement(ColumnSelector_1.ColumnSelector, { filterColumn: (column) => column.filterable && !layoutFilters.some((f) => f.ColumnId === column.columnId), placeholder: "Select column to create filter", onChange: (option) => {
62
62
  props.onChange(Object.assign(Object.assign({}, layout), { ColumnFilters: [
63
63
  ...layoutFilters,
64
64
  {
@@ -30,7 +30,7 @@ exports.renderNamedQueryExpressionSummary = renderNamedQueryExpressionSummary;
30
30
  const NamedQueryExpressionWizardSection = (props) => {
31
31
  const { data, moduleInfo, api } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
32
32
  const initialData = (0, react_1.useMemo)(() => api.internalApi.getQueryPreviewData(), []);
33
- return (React.createElement(ExpressionEditor_1.ExpressionEditor, { allowSaveNamedQuery: false, type: 'boolean', module: moduleInfo.ModuleName, value: data.BooleanExpression, onChange: (BooleanExpression) => {
33
+ return (React.createElement(ExpressionEditor_1.ExpressionEditor, { allowSaveNamedQuery: false, showQueryBuilder: true, type: 'boolean', module: moduleInfo.ModuleName, value: data.BooleanExpression, onChange: (BooleanExpression) => {
34
34
  props.onChange(Object.assign(Object.assign({}, data), { BooleanExpression }));
35
35
  }, initialData: initialData, columns: api.columnApi.getQueryableColumns(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api }));
36
36
  };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NotePopup = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const lodash_1 = require("lodash");
5
+ const throttle_1 = tslib_1.__importDefault(require("lodash/throttle"));
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const react_redux_1 = require("react-redux");
8
8
  const rebass_1 = require("rebass");
@@ -15,7 +15,7 @@ const NoteEditor = ({ note, onNoteChange, onClose, editMode, isReadonly }) => {
15
15
  const textAreaRef = React.useRef(null);
16
16
  const [liveValue, setLiveValue] = React.useState(note || '');
17
17
  const throttledOnChange = React.useMemo(() => {
18
- const throttled = (0, lodash_1.throttle)((value) => onNoteChange(value), 300);
18
+ const throttled = (0, throttle_1.default)((value) => onNoteChange(value), 300);
19
19
  return (value) => {
20
20
  setLiveValue(value);
21
21
  throttled(value);
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import { AccessLevel, PlusMinusNudge } from '../../types';
3
+ export declare const MovePlusMinus: React.FunctionComponent<{
4
+ data: PlusMinusNudge;
5
+ id?: string;
6
+ accessLevel: AccessLevel;
7
+ }>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MovePlusMinus = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const SimpleButton_1 = tslib_1.__importDefault(require("../../components/SimpleButton"));
7
+ const PlusMinusRedux = tslib_1.__importStar(require("../../Redux/ActionsReducers/PlusMinusRedux"));
8
+ const react_redux_1 = require("react-redux");
9
+ const AdaptableContext_1 = require("../AdaptableContext");
10
+ const MovePlusMinus = (props) => {
11
+ const dispatch = (0, react_redux_1.useDispatch)();
12
+ const adaptable = (0, AdaptableContext_1.useAdaptable)();
13
+ const plusMinusNudges = (0, react_redux_1.useSelector)((state) => state.PlusMinus.PlusMinusNudges);
14
+ const handleMoveUp = React.useCallback(() => {
15
+ dispatch(PlusMinusRedux.PlusMinusMoveUp(props.data));
16
+ }, []);
17
+ const handleMoveDown = React.useCallback(() => {
18
+ dispatch(PlusMinusRedux.PlusMinusMoveDown(props.data));
19
+ }, []);
20
+ if ((plusMinusNudges === null || plusMinusNudges === void 0 ? void 0 : plusMinusNudges.length) <= 1) {
21
+ return React.createElement(React.Fragment, null);
22
+ }
23
+ return (React.createElement(React.Fragment, null,
24
+ React.createElement(SimpleButton_1.default, { "data-id": "move-up", title: "move up", onClick: handleMoveUp, variant: "text", icon: "arrow-up" }),
25
+ React.createElement(SimpleButton_1.default, { "data-name": "move-down", title: "move down", onClick: handleMoveDown, variant: "text", icon: "arrow-down" })));
26
+ };
27
+ exports.MovePlusMinus = MovePlusMinus;
@@ -1784,7 +1784,7 @@ class Adaptable {
1784
1784
  };
1785
1785
  this.api.gridApi.internalApi.setSelectedCells(selectedCellInfo);
1786
1786
  this._emit('CellsSelected');
1787
- this.agGridHelper.fireSelectionChangedEvent();
1787
+ this.agGridHelper.fireCellSelectionChangedEvent();
1788
1788
  return selectedCellInfo;
1789
1789
  }
1790
1790
  setSelectedRows() {
@@ -1818,7 +1818,7 @@ class Adaptable {
1818
1818
  }
1819
1819
  const selectedRowInfo = { gridRows: selectedRows };
1820
1820
  this.api.gridApi.internalApi.setSelectedRows(selectedRowInfo);
1821
- this.agGridHelper.fireSelectionChangedEvent();
1821
+ this.agGridHelper.fireRowSelectionChangedEvent();
1822
1822
  return selectedRowInfo;
1823
1823
  }
1824
1824
  setDataValue(value, column, primaryKeyValue, rowNode) {
@@ -30,7 +30,8 @@ export declare class agGridHelper {
30
30
  isSideBarDefObject(sidebarDef: unknown): sidebarDef is SideBarDef;
31
31
  mapToolPanelDefs(toolPanelDefs?: (ToolPanelDef | string)[]): (ToolPanelDef | string)[];
32
32
  reselectSelectedCells(): void;
33
- fireSelectionChangedEvent(): void;
33
+ fireCellSelectionChangedEvent(): void;
34
+ fireRowSelectionChangedEvent(): void;
34
35
  private isColumnReadonly;
35
36
  private isColumnFieldonly;
36
37
  private isColumnSortable;
@@ -300,15 +300,25 @@ class agGridHelper {
300
300
  this.gridOptions.api.addCellRange(cellRangeParams);
301
301
  }
302
302
  }
303
- fireSelectionChangedEvent() {
304
- let selectionChangedInfo = {
303
+ fireCellSelectionChangedEvent() {
304
+ let cellSelectionChangedInfo = {
305
305
  adaptableApi: this.adaptable.api,
306
306
  selectedCellInfo: this.adaptable.api.gridApi.getGridState().SelectedCellInfo,
307
+ // selectedRowInfo: this.adaptable.api.gridApi.getGridState().SelectedRowInfo,
308
+ userName: this.adaptable.api.optionsApi.getUserName(),
309
+ adaptableId: this.adaptable.api.optionsApi.getAdaptableId(),
310
+ };
311
+ this.adaptable.api.eventApi.emit('CellSelectionChanged', cellSelectionChangedInfo);
312
+ }
313
+ fireRowSelectionChangedEvent() {
314
+ let rowSelectionChangedInfo = {
315
+ adaptableApi: this.adaptable.api,
316
+ // selectedCellInfo: this.adaptable.api.gridApi.getGridState().SelectedCellInfo,
307
317
  selectedRowInfo: this.adaptable.api.gridApi.getGridState().SelectedRowInfo,
308
318
  userName: this.adaptable.api.optionsApi.getUserName(),
309
319
  adaptableId: this.adaptable.api.optionsApi.getAdaptableId(),
310
320
  };
311
- this.adaptable.api.eventApi.emit('SelectionChanged', selectionChangedInfo);
321
+ this.adaptable.api.eventApi.emit('RowSelectionChanged', rowSelectionChangedInfo);
312
322
  }
313
323
  isColumnReadonly(colDef) {
314
324
  // if the column has conditional/dynamic editability, we assume some rows may be editable
@@ -97,7 +97,7 @@ exports.Datepicker = React.forwardRef((props, ref) => {
97
97
  borderRadius: style === null || style === void 0 ? void 0 : style.borderRadius,
98
98
  width: style === null || style === void 0 ? void 0 : style.width,
99
99
  maxWidth: style === null || style === void 0 ? void 0 : style.maxWidth,
100
- }, onFocus: () => {
100
+ }, className: "ab-Datepicker", onFocus: () => {
101
101
  if (!visible) {
102
102
  setVisible(true);
103
103
  }
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import { AdaptableQuery } from '../../types';
3
+ interface ExpressionPreviewProps {
4
+ query: AdaptableQuery;
5
+ }
6
+ export declare const ExpressionPreview: React.FunctionComponent<ExpressionPreviewProps>;
7
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpressionPreview = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const AdaptableContext_1 = require("../../View/AdaptableContext");
7
+ const ExpressionPreview = (props) => {
8
+ var _a;
9
+ const adaptable = (0, AdaptableContext_1.useAdaptable)();
10
+ const displayColumnFriendlyNames = (_a = adaptable.api.optionsApi.getExpressionOptions()) === null || _a === void 0 ? void 0 : _a.displayColumnFriendlyNamesForExpressions;
11
+ if (!displayColumnFriendlyNames) {
12
+ return React.createElement(React.Fragment, null, adaptable.api.expressionApi.getAdaptableQueryExpression(props.query));
13
+ }
14
+ const expressionWithFriendlyNames = adaptable.api.expressionApi.getAdaptableQueryExpressionWithColumnFriendlyNames(props.query);
15
+ // '[Column Name] > 2' => ['[Column Name]', '>', '2']
16
+ // not the prettiest
17
+ const strWithMarkedGroupes = expressionWithFriendlyNames.replace(/\]/gi, '],').split(',');
18
+ return (React.createElement(React.Fragment, null, strWithMarkedGroupes.map((part, index) => {
19
+ const partEl = part.includes('[') ? React.createElement("i", null, part.replace(/[\[\]]/g, '')) : part;
20
+ return React.createElement(React.Fragment, { key: index },
21
+ "\u00A0",
22
+ partEl);
23
+ })));
24
+ };
25
+ exports.ExpressionPreview = ExpressionPreview;