@adaptabletools/adaptable 17.0.0-canary.8 → 17.0.0-canary.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "17.0.0-canary.8",
3
+ "version": "17.0.0-canary.9",
4
4
  "description": "Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements",
5
5
  "keywords": [
6
6
  "web-components",
@@ -1,2 +1,2 @@
1
- declare const _default: 1705055572519;
1
+ declare const _default: 1705222747066;
2
2
  export default _default;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = 1705055572519;
3
+ exports.default = 1705222747066;
@@ -127,14 +127,6 @@ export interface QuickFilterOptions<TData = any> {
127
127
  * @noCodeItem
128
128
  */
129
129
  quickFilterTrigger?: 'mouseenter' | 'click';
130
- /**
131
- * Open Quick Filter Values dropdown with mouse hover or click
132
- *
133
- * @defaultValue 'mouseenter'
134
- * @gridInfoItem
135
- * @noCodeItem
136
- */
137
- quickFilterValuesTrigger?: 'mouseenter' | 'click';
138
130
  /**
139
131
  * Sets a height for Quick Filter Bar (if not provided AG Grid's default is used)
140
132
  *
@@ -231,6 +223,14 @@ export interface ValuesFilterOptions<TData = any> {
231
223
  * @gridInfoItem
232
224
  */
233
225
  sortValuesFilter?: boolean;
226
+ /**
227
+ * Open Values dropdown with mouse hover or click
228
+ *
229
+ * @defaultValue 'mouseenter'
230
+ * @gridInfoItem
231
+ * @noCodeItem
232
+ */
233
+ valuesFilterTrigger?: 'mouseenter' | 'click';
234
234
  }
235
235
  /**
236
236
  * Context provided when Column Filtering
@@ -186,7 +186,6 @@ exports.DefaultAdaptableOptions = {
186
186
  hideQuickFilterDropdown: undefined,
187
187
  hideQuickFilterInput: undefined,
188
188
  quickFilterTrigger: 'mouseenter',
189
- quickFilterValuesTrigger: 'mouseenter',
190
189
  quickFilterDebounce: 250,
191
190
  quickFilterHeight: null,
192
191
  showQuickFilter: true,
@@ -198,6 +197,7 @@ exports.DefaultAdaptableOptions = {
198
197
  defaultFilterFormTab: 'Values',
199
198
  },
200
199
  valuesFilterOptions: {
200
+ valuesFilterTrigger: 'mouseenter',
201
201
  sortValuesFilter: false,
202
202
  filterValuesUsingTime: false,
203
203
  showDistinctFilteredValuesOnly: false,
@@ -106,7 +106,7 @@ class ModuleService {
106
106
  case 'ColumnFilter':
107
107
  return learnUrl + 'handbook-column-filter';
108
108
  case 'GridFilter':
109
- return learnUrl + 'handbook-column-filter';
109
+ return learnUrl + 'handbook-grid-filter';
110
110
  case 'FlashingCell':
111
111
  return learnUrl + 'handbook-flashing-cell';
112
112
  case 'FormatColumn':
@@ -50,7 +50,7 @@ const CalculatedColumnExpressionWizardSection = (props) => {
50
50
  return 'quantileAggregatedScalar';
51
51
  }
52
52
  };
53
- return (React.createElement(Tabs_1.Tabs, { autoFocus: false },
53
+ return (React.createElement(Tabs_1.Tabs, { autoFocus: false, height: "100%" },
54
54
  React.createElement(Tabs_1.Tabs.Tab, null, (0, StringExtensions_1.Humanize)(props.expressionType)),
55
55
  React.createElement(Tabs_1.Tabs.Content, null, (() => {
56
56
  switch (props.expressionType) {
@@ -100,7 +100,7 @@ const CalculatedColumnWizard = (props) => {
100
100
  isValid: CalculatedColumnExpressionWizardSection_1.isValidCalculatedColumnExpression,
101
101
  renderSummary: CalculatedColumnExpressionWizardSection_1.renderCalculatedColumnExpressionSummary,
102
102
  render: () => {
103
- return (React.createElement(rebass_1.Box, { p: 2 },
103
+ return (React.createElement(rebass_1.Box, { height: "100%", p: 2 },
104
104
  React.createElement(CalculatedColumnExpressionWizardSection_1.CalculatedColumnExpressionWizardSection, { expressionType: expressionType, onChange: setCalculatedColumn })));
105
105
  },
106
106
  },
@@ -110,7 +110,8 @@ class FilterFormComponent extends React.Component {
110
110
  }
111
111
  }
112
112
  async loadPermittedValues(filter = '') {
113
- const { values: distinctColumnValues, suppressClientSideFilter } = await (0, runIfNotResolvedIn_1.runIfNotResolvedIn)(this.props.api.gridApi.internalApi.getDistinctFilterDisplayValuesForColumn(this.props.currentColumn.columnId, filter, this.props.api.optionsApi.getColumnFilterOptions().valuesFilterOptions.showDistinctFilteredValuesOnly), () => this._isMounted && this.setState({ isDistinctColumnValuesLoading: true }));
113
+ const { values: distinctColumnValues, suppressClientSideFilter } = await (0, runIfNotResolvedIn_1.runIfNotResolvedIn)(this.props.api.gridApi.internalApi.getDistinctFilterDisplayValuesForColumn(this.props.currentColumn.columnId, filter, this.props.api.optionsApi.getColumnFilterOptions().valuesFilterOptions
114
+ .showDistinctFilteredValuesOnly), () => this._isMounted && this.setState({ isDistinctColumnValuesLoading: true }));
114
115
  if (this._isMounted) {
115
116
  this.setState({
116
117
  distinctColumnValues,
@@ -178,7 +179,13 @@ class FilterFormComponent extends React.Component {
178
179
  } })));
179
180
  }
180
181
  return (_a = predicateDef.inputs) === null || _a === void 0 ? void 0 : _a.map((predicateInput, index) => (React.createElement(rebass_1.Flex, { key: index, flexDirection: "row" },
181
- React.createElement(AdaptableInput_1.default, { disabled: this.isFilterDisabled(), type: predicateInput.type, autoFocus: index === 0, value: filter.Predicate.Inputs[index], onChange: (e) => this.changeColumnPredicateInput(e.target.value, index), mb: 1, flex: 1, fontSize: 2 }))));
182
+ React.createElement(AdaptableInput_1.default, { onMouseDown: (event) => {
183
+ console.log('onMouseDown', predicateInput.type, event);
184
+ if (predicateInput.type === 'date') {
185
+ // This prevents the ag-grid dropdown closing when a date is selected
186
+ event.stopPropagation();
187
+ }
188
+ }, disabled: this.isFilterDisabled(), type: predicateInput.type, autoFocus: index === 0, value: filter.Predicate.Inputs[index], onChange: (e) => this.changeColumnPredicateInput(e.target.value, index), mb: 1, flex: 1, fontSize: 2 }))));
182
189
  }
183
190
  isFilterDisabled() {
184
191
  var _a;
@@ -57,7 +57,8 @@ class QuickFilterFormComponent extends React.Component {
57
57
  hideEvent = 'blur';
58
58
  }
59
59
  let showQuickFilterDropdown = true;
60
- let hideQuickFilterDropdownFunction = this.props.api.optionsApi.getColumnFilterOptions().quickFilterOptions.hideQuickFilterDropdown;
60
+ let hideQuickFilterDropdownFunction = this.props.api.optionsApi.getColumnFilterOptions().quickFilterOptions
61
+ .hideQuickFilterDropdown;
61
62
  if (hideQuickFilterDropdownFunction) {
62
63
  const columnFilterContext = {
63
64
  column: this.props.currentColumn,
@@ -102,7 +103,7 @@ class QuickFilterFormComponent extends React.Component {
102
103
  api.show();
103
104
  this.shouldOpenValuesDropdown = false;
104
105
  }
105
- }, quickFilterValuesTrigger: this.props.quickFilterValuesTrigger }));
106
+ }, valuesFilterTrigger: this.props.valuesFilterTrigger }));
106
107
  }
107
108
  return (activePredicateDef &&
108
109
  (activePredicateDef === null || activePredicateDef === void 0 ? void 0 : activePredicateDef.inputs) === undefined && (React.createElement(rebass_1.Box, { color: this.isFilterDisabled() ? undefined : 'var(--ab-color-text-on-primary)', disabled: this.isFilterDisabled(), p: 1, alignSelf: "center" }, activePredicateDef.label)));
@@ -252,6 +253,6 @@ function mapDispatchToProps(dispatch) {
252
253
  const QuickFilterForm = (0, react_redux_1.connect)(mapStateToProps, mapDispatchToProps)(QuickFilterFormComponent);
253
254
  const QuickFilterFormReact = (columnFilterProps) => {
254
255
  var _a, _b, _c;
255
- return (0, renderWithAdaptableContext_1.renderWithAdaptableContext)(React.createElement(QuickFilterForm, { api: columnFilterProps.Adaptable.api, quickFilterTrigger: (_a = columnFilterProps.Adaptable.adaptableOptions.columnFilterOptions) === null || _a === void 0 ? void 0 : _a.quickFilterOptions.quickFilterTrigger, quickFilterValuesTrigger: (_b = columnFilterProps.Adaptable.adaptableOptions.columnFilterOptions) === null || _b === void 0 ? void 0 : _b.quickFilterOptions.quickFilterValuesTrigger, quickFilterDebounce: (_c = columnFilterProps.Adaptable.adaptableOptions.columnFilterOptions) === null || _c === void 0 ? void 0 : _c.quickFilterOptions.quickFilterDebounce, currentColumn: columnFilterProps.Column, teamSharingActivated: false, embedColumnMenu: columnFilterProps.Adaptable.embedColumnMenu }), columnFilterProps.Adaptable);
256
+ return (0, renderWithAdaptableContext_1.renderWithAdaptableContext)(React.createElement(QuickFilterForm, { api: columnFilterProps.Adaptable.api, quickFilterTrigger: (_a = columnFilterProps.Adaptable.adaptableOptions.columnFilterOptions) === null || _a === void 0 ? void 0 : _a.quickFilterOptions.quickFilterTrigger, valuesFilterTrigger: (_b = columnFilterProps.Adaptable.adaptableOptions.columnFilterOptions) === null || _b === void 0 ? void 0 : _b.valuesFilterOptions.valuesFilterTrigger, quickFilterDebounce: (_c = columnFilterProps.Adaptable.adaptableOptions.columnFilterOptions) === null || _c === void 0 ? void 0 : _c.quickFilterOptions.quickFilterDebounce, currentColumn: columnFilterProps.Column, teamSharingActivated: false, embedColumnMenu: columnFilterProps.Adaptable.embedColumnMenu }), columnFilterProps.Adaptable);
256
257
  };
257
258
  exports.QuickFilterFormReact = QuickFilterFormReact;
@@ -2,7 +2,7 @@
2
2
  import { ColumnFilter } from '../../../PredefinedConfig/Common/ColumnFilter';
3
3
  import { AdaptableApi } from '../../../Api/AdaptableApi';
4
4
  import { AdaptableColumn } from '../../../PredefinedConfig/Common/AdaptableColumn';
5
- import { QuickFilterOptions } from '../../../types';
5
+ import { ValuesFilterOptions } from '../../../types';
6
6
  export interface QuickFilterValuesProps {
7
7
  api: AdaptableApi;
8
8
  currentColumn: AdaptableColumn;
@@ -14,6 +14,6 @@ export interface QuickFilterValuesProps {
14
14
  show: () => any;
15
15
  hide: () => any;
16
16
  }) => void;
17
- quickFilterValuesTrigger?: QuickFilterOptions['quickFilterValuesTrigger'];
17
+ valuesFilterTrigger?: ValuesFilterOptions['valuesFilterTrigger'];
18
18
  }
19
19
  export declare const QuickFilterValues: (props: QuickFilterValuesProps) => JSX.Element;
@@ -99,7 +99,7 @@ const QuickFilterValues = (props) => {
99
99
  }
100
100
  };
101
101
  let showEvent = 'mouseenter';
102
- if (props.quickFilterValuesTrigger === 'click') {
102
+ if (props.valuesFilterTrigger === 'click') {
103
103
  showEvent = 'click';
104
104
  }
105
105
  let selectedValues = props.columnFilter.Predicate.PredicateId === 'Values' ? 'Select Values' : 'Exclude Values';
@@ -9,6 +9,7 @@ const FieldWrap_1 = tslib_1.__importDefault(require("../../components/FieldWrap"
9
9
  const FormLayout_1 = tslib_1.__importStar(require("../../components/FormLayout"));
10
10
  const Input_1 = tslib_1.__importDefault(require("../../components/Input"));
11
11
  const Panel_1 = tslib_1.__importDefault(require("../../components/Panel"));
12
+ const StringExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/StringExtensions"));
12
13
  const ButtonClear_1 = require("../Components/Buttons/ButtonClear");
13
14
  const ButtonExpand_1 = require("../Components/Buttons/ButtonExpand");
14
15
  const ButtonInvalid_1 = require("../Components/Buttons/ButtonInvalid");
@@ -20,23 +21,24 @@ const PopupPanel_1 = require("../Components/Popups/AdaptablePopup/PopupPanel");
20
21
  const NamedQuerySelector_1 = require("./NamedQuerySelector");
21
22
  const useGridFilterExpressionEditor_1 = require("./useGridFilterExpressionEditor");
22
23
  const GridFilterPopup = () => {
23
- const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, } = (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, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
24
25
  const handleEnter = (e) => {
25
26
  if (e.key === 'Enter') {
26
27
  runQuery();
27
28
  }
28
29
  };
29
30
  const disabled = isSuspended || gridFilterAccessLevel === 'ReadOnly';
30
- return (React.createElement(PopupPanel_1.PopupPanel, { className: "ab-GridFilter", headerText: "Grid Filter", glyphicon: "grid-filter" },
31
+ return (React.createElement(PopupPanel_1.PopupPanel, { className: "ab-GridFilter", headerText: "Grid Filter", glyphicon: "grid-filter", infoLink: gridFilterHelpPage, infoLinkDisabled: gridFilterLinkDisabled },
31
32
  React.createElement(Panel_1.default, { bodyProps: { height: '100%' }, height: "100%" },
32
33
  React.createElement(FormLayout_1.default, null,
33
34
  React.createElement(FormLayout_1.FormRow, { label: "Expression" },
34
35
  React.createElement(FieldWrap_1.default, { marginRight: 1, width: "100%" },
35
- React.createElement(ButtonExpand_1.ButtonExpand, { disabled: disabled, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Open Expression Editor", marginLeft: 1 }),
36
+ React.createElement(ButtonExpand_1.ButtonExpand, { disabled: disabled, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Edit the Expression in UI", marginLeft: 1 }),
36
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 } }),
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 })) : (React.createElement(ButtonInvalid_1.ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
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 })),
39
+ gridFilter && !isExpressionValid && (React.createElement(ButtonInvalid_1.ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
38
40
  ' ',
39
- (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) !== '' && (React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))),
41
+ StringExtensions_1.default.IsNotNullOrEmpty(expression) && (React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))),
40
42
  React.createElement(FormLayout_1.FormRow, { label: "" },
41
43
  React.createElement(rebass_1.Flex, { justifyContent: "space-around" },
42
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"),
@@ -29,7 +29,7 @@ const QueryViewPanelComponent = (props) => {
29
29
  runQuery();
30
30
  }
31
31
  };
32
- const buttonExpand = (React.createElement(ButtonExpand_1.ButtonExpand, { disabled: isSuspended, accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Open Expression Editor", marginLeft: 1 }));
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
33
  const renderTextInput = () => {
34
34
  return props.viewType === 'Toolbar' ? (React.createElement(FieldWrap_1.default, { marginRight: 1, width: 500 },
35
35
  buttonExpand,
@@ -21,4 +21,6 @@ export declare const useGridFilterExpressionEditor: () => {
21
21
  unSuspendGridFilter: () => void;
22
22
  setGridFilterExpression: (expression: string) => void;
23
23
  gridFilterAccessLevel: import("../../types").AccessLevel;
24
+ gridFilterHelpPage: string;
25
+ gridFilterLinkDisabled: boolean;
24
26
  };
@@ -27,6 +27,8 @@ const useGridFilterExpressionEditor = () => {
27
27
  const onAddCachedQuery = (cachedQuery) => {
28
28
  dispatch(SystemRedux.SystemCachedQueryAdd(cachedQuery));
29
29
  };
30
+ const gridFilterHelpPage = adaptable.ModuleService.getModuleById('GridFilter').moduleInfo.HelpPage;
31
+ const gridFilterLinkDisabled = !adaptable.api.internalApi.isDocumentationLinksDisplayed();
30
32
  React.useEffect(() => {
31
33
  adaptable.api.eventApi.on('AdaptableReady', () => {
32
34
  setIsAdaptableReady(true);
@@ -45,7 +47,11 @@ const useGridFilterExpressionEditor = () => {
45
47
  let availableColumns = adaptable.api.columnApi.getColumns().map((col) => {
46
48
  return {
47
49
  label: col.friendlyName,
48
- onClick: () => setExpression(expression + `[${col.columnId}]`),
50
+ onClick: () => {
51
+ // Bogdan - im sure there is a better way to do this check with fancy operators i dont know
52
+ const newExp = StringExtensions_1.default.IsNotNullOrEmpty(expression) ? expression : '';
53
+ setExpression(newExp + `[${col.columnId}]`);
54
+ },
49
55
  };
50
56
  });
51
57
  const clearQuery = () => {
@@ -123,6 +129,8 @@ const useGridFilterExpressionEditor = () => {
123
129
  adaptable.api.gridFilterApi.setGridFilterExpression(expression);
124
130
  },
125
131
  gridFilterAccessLevel,
132
+ gridFilterHelpPage,
133
+ gridFilterLinkDisabled,
126
134
  };
127
135
  };
128
136
  exports.useGridFilterExpressionEditor = useGridFilterExpressionEditor;
@@ -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
  }
@@ -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;
@@ -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
  }