@adaptabletools/adaptable 17.0.0-canary.8 → 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 (71) 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/AdaptableOptions/ColumnFilterOptions.d.ts +8 -8
  10. package/src/Api/EventApi.d.ts +19 -8
  11. package/src/Api/Events/CellSelectionChanged.d.ts +11 -0
  12. package/src/Api/Events/RowSelectionChanged.d.ts +11 -0
  13. package/src/Api/Events/RowSelectionChanged.js +2 -0
  14. package/src/Redux/ActionsReducers/PlusMinusRedux.d.ts +16 -0
  15. package/src/Redux/ActionsReducers/PlusMinusRedux.js +47 -1
  16. package/src/Strategy/LayoutModule.d.ts +12 -4
  17. package/src/Strategy/LayoutModule.js +11 -5
  18. package/src/Strategy/NotesModule.js +1 -1
  19. package/src/Strategy/PlusMinusModule.js +2 -0
  20. package/src/Strategy/Utilities/Export/getExportRowsViewItems.d.ts +2 -1
  21. package/src/Strategy/Utilities/Export/getExportRowsViewItems.js +14 -5
  22. package/src/Strategy/Utilities/getExpressionViewItems.js +8 -2
  23. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +1 -1
  24. package/src/Utilities/Services/ModuleService.js +1 -1
  25. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +1 -1
  26. package/src/View/CalculatedColumn/Wizard/CalculatedColumnWizard.js +1 -1
  27. package/src/View/Components/FilterForm/FilterForm.js +8 -2
  28. package/src/View/Components/FilterForm/ListBoxFilterForm.js +1 -3
  29. package/src/View/Components/FilterForm/QuickFilterForm.js +5 -4
  30. package/src/View/Components/FilterForm/QuickFilterValues.d.ts +2 -2
  31. package/src/View/Components/FilterForm/QuickFilterValues.js +4 -3
  32. package/src/View/Components/Selectors/ColumnSelector.d.ts +1 -0
  33. package/src/View/Components/Selectors/ColumnSelector.js +2 -1
  34. package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +2 -2
  35. package/src/View/Export/Wizard/ReportRowsWizardSection.js +3 -1
  36. package/src/View/GridFilter/GridFilterExpressionEditor.js +1 -1
  37. package/src/View/GridFilter/GridFilterPopup.js +10 -8
  38. package/src/View/GridFilter/GridFilterViewPanel.js +11 -10
  39. package/src/View/GridFilter/NamedQuerySelector.js +1 -1
  40. package/src/View/GridFilter/useGridFilterExpressionEditor.d.ts +3 -0
  41. package/src/View/GridFilter/useGridFilterExpressionEditor.js +16 -5
  42. package/src/View/Layout/Wizard/getGridFilterPreview.d.ts +6 -0
  43. package/src/View/Layout/Wizard/getGridFilterPreview.js +16 -0
  44. package/src/View/Layout/Wizard/sections/FilterSection.js +1 -1
  45. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  46. package/src/View/Notes/NotesPopup.js +2 -2
  47. package/src/View/PlusMinus/MovePlusMinus.d.ts +7 -0
  48. package/src/View/PlusMinus/MovePlusMinus.js +27 -0
  49. package/src/agGrid/Adaptable.js +2 -2
  50. package/src/agGrid/agGridHelper.d.ts +2 -1
  51. package/src/agGrid/agGridHelper.js +13 -3
  52. package/src/components/Datepicker/index.js +4 -4
  53. package/src/components/ExpressionEditor/ExpressionPreview.d.ts +7 -0
  54. package/src/components/ExpressionEditor/ExpressionPreview.js +25 -0
  55. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.js +2 -2
  56. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +11 -7
  57. package/src/components/ExpressionEditor/index.js +4 -7
  58. package/src/components/InputGroup/InputGroup.d.ts +7 -0
  59. package/src/components/InputGroup/InputGroup.js +12 -0
  60. package/src/components/InputGroup/index.d.ts +1 -0
  61. package/src/components/InputGroup/index.js +4 -0
  62. package/src/components/OverlayTrigger/index.js +7 -2
  63. package/src/components/Select/Select.d.ts +0 -1
  64. package/src/components/Select/Select.js +4 -4
  65. package/src/metamodel/adaptable.metamodel.js +1 -1
  66. package/src/renderReactRoot.js +16 -10
  67. package/src/types.d.ts +2 -1
  68. package/version.d.ts +1 -1
  69. package/version.js +1 -1
  70. package/src/Api/Events/SelectionChanged.d.ts +0 -16
  71. /package/src/Api/Events/{SelectionChanged.js → CellSelectionChanged.js} +0 -0
@@ -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
@@ -17,13 +17,13 @@ const DatepickerContext_1 = require("./DatepickerContext");
17
17
  const addDays_1 = tslib_1.__importDefault(require("date-fns/addDays"));
18
18
  const addBusinessDays_1 = tslib_1.__importDefault(require("date-fns/addBusinessDays"));
19
19
  const react_day_picker_1 = require("react-day-picker");
20
- const DatepickerOverlay = ({ onHide, children, onKeyDown, }) => {
20
+ const DatepickerOverlay = ({ onHide, children, onKeyDown, onMouseDown, }) => {
21
21
  const domRef = React.useRef(null);
22
22
  React.useEffect(() => {
23
23
  var _a;
24
24
  (_a = domRef.current) === null || _a === void 0 ? void 0 : _a.focus();
25
25
  }, []);
26
- return (React.createElement("div", { className: "ab-Datepicker-Overlay", ref: domRef, tabIndex: -1, onKeyDown: onKeyDown, onBlur: (e) => {
26
+ return (React.createElement("div", { className: "ab-Datepicker-Overlay", ref: domRef, tabIndex: -1, onKeyDown: onKeyDown, onMouseDown: onMouseDown, onBlur: (e) => {
27
27
  var _a;
28
28
  const { relatedTarget } = e;
29
29
  const node = domRef.current;
@@ -87,7 +87,7 @@ exports.Datepicker = React.forwardRef((props, ref) => {
87
87
  }, accessLevel: 'Full' })) : null;
88
88
  const calendarButton = (React.createElement(SimpleButton_1.default, { disabled: disabled, variant: "text", icon: "calendar", tooltip: "Date", iconSize: 20, px: 0, py: 0, onClick: () => setVisible(true) }));
89
89
  return (React.createElement(rebass_1.Flex, null,
90
- React.createElement(OverlayTrigger_1.default, { visible: visible, render: () => (React.createElement(DatepickerOverlay, { onHide: () => setVisible(false), onKeyDown: (e) => {
90
+ React.createElement(OverlayTrigger_1.default, { visible: visible, render: () => (React.createElement(DatepickerOverlay, { onMouseDown: props.onMouseDown, onHide: () => setVisible(false), onKeyDown: (e) => {
91
91
  if (e.key === 'Escape' || e.key === 'Enter') {
92
92
  setVisible(false, e.key);
93
93
  }
@@ -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;
@@ -110,9 +110,9 @@ const QueryBuilder = (props) => {
110
110
  } },
111
111
  React.createElement(QueryBuilderContext.Provider, { value: context },
112
112
  React.createElement(rebass_1.Box, { className: QUERY_BUILDER_CLASSNAME },
113
- React.createElement(HelpBlock_1.default, { mt: 2, mb: 2, p: 2, fontSize: 3 }, "Build the Grid Filter by adding Column Conditions and AND / OR Groups as required"),
113
+ React.createElement(HelpBlock_1.default, { "data-name": "query-builder-help", mt: 2, mb: 2, p: 2, fontSize: 3 }, "Build the Grid Filter by adding Column Conditions and AND / OR Groups as required"),
114
114
  errorOrEditor,
115
- React.createElement(Panel_1.default, { variant: "default", header: "AdapTableQL Expression", mt: 3 },
115
+ React.createElement(Panel_1.default, { "data-name": "query-builder-expression-preview", variant: "default", header: "AdapTableQL Expression", mt: 3 },
116
116
  React.createElement(rebass_1.Box, { className: `${QUERY_BUILDER_CLASSNAME}__expression`, minHeight: 48, my: 2, p: 3 }, expressionStr || 'Outputted Expression will display here'))))));
117
117
  };
118
118
  exports.QueryBuilder = QueryBuilder;
@@ -11,6 +11,7 @@ const PermittedValuesSelector_1 = require("../../../View/Components/Selectors/Pe
11
11
  const CheckBox_1 = require("../../CheckBox");
12
12
  const DropdownButton_1 = tslib_1.__importDefault(require("../../DropdownButton"));
13
13
  const icons_1 = require("../../icons");
14
+ const InputGroup_1 = require("../../InputGroup");
14
15
  const Select_1 = require("../../Select");
15
16
  const QueryBuilder_1 = require("./QueryBuilder");
16
17
  const utils_1 = require("./utils");
@@ -85,22 +86,25 @@ const PrimiteValueInput = (props) => {
85
86
  }
86
87
  const options = [
87
88
  {
88
- label: 'Column',
89
+ label: (react_1.default.createElement(rebass_1.Flex, null,
90
+ react_1.default.createElement(icons_1.Icon, { name: "columns" }),
91
+ react_1.default.createElement(rebass_1.Text, { ml: 2 }, "Column"))),
89
92
  icon: 'columns',
90
93
  value: 'column-name',
91
94
  },
92
95
  {
93
- label: 'Value',
96
+ label: (react_1.default.createElement(rebass_1.Flex, null,
97
+ react_1.default.createElement(icons_1.Icon, { name: "edit" }),
98
+ react_1.default.createElement(rebass_1.Text, { ml: 2 }, "Value"))),
94
99
  icon: 'edit',
95
100
  value: 'input-value',
96
101
  },
97
102
  ];
98
103
  const typeOption = options.find((option) => option.value === type);
99
- return (react_1.default.createElement(rebass_1.Flex, { "data-id": "query-input-wrapper", mr: 2 },
100
- react_1.default.createElement(rebass_1.Flex, null,
101
- react_1.default.createElement(Select_1.Select, { rederSingleValue: (value) => {
102
- return (react_1.default.createElement(react_1.default.Fragment, null, typeOption.value === 'column-name' ? react_1.default.createElement(icons_1.Icon, { name: "grid" }) : react_1.default.createElement(icons_1.Icon, { name: "edit" })));
103
- }, variant: "raised", value: typeOption.value, options: options, onChange: (value) => handleTypeChange(value) })),
104
+ return (react_1.default.createElement(InputGroup_1.InputGroup, { Component: rebass_1.Flex, "data-id": "query-input-wrapper", mr: 2 },
105
+ react_1.default.createElement(Select_1.Select, { rederSingleValue: (value) => {
106
+ return (react_1.default.createElement(react_1.default.Fragment, null, typeOption.value === 'column-name' ? react_1.default.createElement(icons_1.Icon, { name: "grid" }) : react_1.default.createElement(icons_1.Icon, { name: "edit" })));
107
+ }, value: typeOption.value, options: options, onChange: (value) => handleTypeChange(value) }),
104
108
  editor));
105
109
  };
106
110
  exports.PrimiteValueInput = PrimiteValueInput;
@@ -32,6 +32,7 @@ function ExpressionEditor(props) {
32
32
  const { type, module } = props;
33
33
  const [data, setData] = (0, react_1.useState)(props.initialData);
34
34
  const [showColumnIds, setShowColumnIds] = (0, react_1.useState)(false);
35
+ const [inlineQuery, setInlineQuery] = (0, react_1.useState)(false);
35
36
  const [showNamedQueries, setShowNamedQueries] = (0, react_1.useState)(false);
36
37
  const baseClassName = `ab-ExpressionEditor`;
37
38
  const [selectedFunction, setSelectedFunction] = (0, react_1.useState)(null);
@@ -94,12 +95,8 @@ function ExpressionEditor(props) {
94
95
  setData(updateColValue(data, column, new Date(e.target.value)));
95
96
  }, 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))))));
96
97
  const namedQueries = (React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start", style: { marginTop: 2 } },
97
- React.createElement(CheckBox_1.CheckBox, { checked: showColumnIds, onChange: (checked) => setShowColumnIds(checked), style: {
98
- float: 'right',
99
- margin: 0,
100
- paddingTop: 'var(--ab-space-1)',
101
- paddingBottom: 'var(--ab-space-1)',
102
- } }, 'Show Column IDs'),
98
+ React.createElement(CheckBox_1.CheckBox, { checked: showColumnIds, onChange: (checked) => setShowColumnIds(checked) }, "Show Column IDs"),
99
+ React.createElement(CheckBox_1.CheckBox, { checked: inlineQuery, onChange: (checked) => setInlineQuery(checked) }, "Inline Query"),
103
100
  props.namedQueries.map((namedQuery) => (React.createElement(rebass_1.Flex, { key: namedQuery.Uuid, flexDirection: "column", alignItems: "start", style: {
104
101
  padding: 3,
105
102
  marginTop: 'var(--ab-space-2)',
@@ -110,7 +107,7 @@ function ExpressionEditor(props) {
110
107
  React.createElement(EditorButton_1.default, { width: "100%", height: "100%", style: {
111
108
  background: 'var(--ab-color-primary)',
112
109
  cursor: 'grab',
113
- }, data: `QUERY("${namedQuery.Name}")`, "data-name": "column", icon: "drag" },
110
+ }, data: inlineQuery ? namedQuery.BooleanExpression : `QUERY("${namedQuery.Name}")`, "data-name": "column", icon: "drag" },
114
111
  React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start" }, namedQuery.Name)),
115
112
  React.createElement(rebass_1.Flex, { alignItems: "start", style: {
116
113
  padding: 5,
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ type InputGroupProps<T extends React.ComponentType<any>> = {
3
+ Component?: T;
4
+ children: React.ReactNode;
5
+ } & React.ComponentProps<T>;
6
+ export declare const InputGroup: <T extends React.ComponentType<any>>({ Component, children, ...rest }: InputGroupProps<T>) => JSX.Element;
7
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InputGroup = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const InputGroup = (_a) => {
7
+ var _b;
8
+ var { Component = 'div', children } = _a, rest = tslib_1.__rest(_a, ["Component", "children"]);
9
+ const Comp = Component;
10
+ return (React.createElement(Comp, Object.assign({}, rest, { className: `ab-cmp-input-group ${(_b = rest.className) !== null && _b !== void 0 ? _b : ''}` }), children));
11
+ };
12
+ exports.InputGroup = InputGroup;
@@ -0,0 +1 @@
1
+ export * from './InputGroup';
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./InputGroup"), exports);
@@ -4,6 +4,7 @@ exports.getConstrainRect = exports.getConstrainElement = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
6
  const react_1 = require("react");
7
+ const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
7
8
  const batchUpdate_1 = tslib_1.__importDefault(require("../utils/batchUpdate"));
8
9
  const selectParent_1 = tslib_1.__importDefault(require("../utils/selectParent"));
9
10
  const useProperty_1 = tslib_1.__importDefault(require("../utils/useProperty"));
@@ -72,7 +73,11 @@ const OverlayTrigger = React.forwardRef((props, ref) => {
72
73
  const overlayRef = (0, react_1.useRef)(null);
73
74
  const [visible, doSetVisible] = (0, useProperty_1.default)(props, 'visible', false);
74
75
  const hideTimeoutRef = (0, react_1.useRef)(null);
75
- const setVisible = React.useCallback((visible) => {
76
+ const setVisible = React.useCallback(
77
+ // visible state may quickly change from true -> false -> true
78
+ // when moving the mouse cursor from the trigger to the overlay
79
+ // for this case we debounce the visible change for a very small amount of time
80
+ (0, debounce_1.default)((visible) => {
76
81
  onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(visible);
77
82
  if (!visible) {
78
83
  hideTimeoutRef.current = setTimeout(() => {
@@ -86,7 +91,7 @@ const OverlayTrigger = React.forwardRef((props, ref) => {
86
91
  hideTimeoutRef.current = null;
87
92
  }
88
93
  doSetVisible(true);
89
- }, []);
94
+ }, 50), []);
90
95
  const prevVisible = (0, usePrevious_1.default)(visible, false);
91
96
  ensurePortalElement();
92
97
  const onShow = React.useCallback((event) => {
@@ -24,7 +24,6 @@ export type SelectProps<SelectValue extends unknown, IsMulti extends boolean = f
24
24
  accessLevel?: AccessLevel;
25
25
  style?: React.CSSProperties;
26
26
  onInputChange?: (value: string) => void;
27
- variant?: 'default' | 'raised';
28
27
  size?: 'small' | 'normal';
29
28
  isCreatable?: boolean;
30
29
  };
@@ -71,7 +71,9 @@ const Select = function (props) {
71
71
  };
72
72
  }, []);
73
73
  const SelectComponent = props.isCreatable ? creatable_1.default : react_select_1.default;
74
- return (React.createElement(SelectComponent, { onInputChange: props.onInputChange, onFocus: props.onFocus, isLoading: props.isLoding, options: props.options, className: props.className, isDisabled: disabled, isMulti: props.isMulti, value: selectedOption, menuPosition: (_g = props.menuPosition) !== null && _g !== void 0 ? _g : 'fixed', isClearable: props.isClearable, onChange: (option) => {
74
+ return (React.createElement(SelectComponent, { onInputChange: props.onInputChange, onFocus: props.onFocus, isLoading: props.isLoding, options: props.options, className: props.className, isDisabled: disabled, isMulti: props.isMulti, value: selectedOption, menuPosition: (_g = props.menuPosition) !== null && _g !== void 0 ? _g : 'absolute',
75
+ // This needed so the menu is not clipped by overflow: hidden
76
+ menuPortalTarget: document.body, isClearable: props.isClearable, onChange: (option) => {
75
77
  if (props.isMulti) {
76
78
  props.onChange(option.map((x) => x === null || x === void 0 ? void 0 : x.value));
77
79
  }
@@ -136,9 +138,7 @@ const Select = function (props) {
136
138
  state;
137
139
  return Object.assign(Object.assign(Object.assign({}, baseStyle), commonStyles(state)), {
138
140
  // height: 30,
139
- minHeight: props.size === 'small' ? 0 : 32, boxShadow: state.isFocused ? 'var(--ab-cmp-select-focused__box-shadow)' : 'none', outline: state.isFocused ? 'var(--ab-cmp-select-focused__outline)' : 'none', border: props.variant && props.variant === 'raised'
140
- ? '1px solid transparent'
141
- : 'var(--ab-cmp-select__border)', '&:hover': {
141
+ minHeight: props.size === 'small' ? 0 : 32, boxShadow: state.isFocused ? 'var(--ab-cmp-select-focused__box-shadow)' : 'none', outline: state.isFocused ? 'var(--ab-cmp-select-focused__outline)' : 'none', border: 'var(--ab-cmp-select__border)', borderRadius: 'var(--ab-cmp-select__border-radius)', '&:hover': {
142
142
  border: 'var(--ab-cmp-select__border)',
143
143
  } });
144
144
  },