@adaptabletools/adaptable 18.1.0-canary.0 → 18.1.0-canary.1

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 (35) hide show
  1. package/base.css +5 -0
  2. package/base.css.map +1 -1
  3. package/index.css +7 -0
  4. package/index.css.map +1 -1
  5. package/package.json +1 -1
  6. package/src/AdaptableInterfaces/IAdaptable.d.ts +4 -4
  7. package/src/AdaptableOptions/ColumnFilterOptions.d.ts +39 -24
  8. package/src/Api/ColumnApi.d.ts +5 -0
  9. package/src/Api/Implementation/ColumnApiImpl.d.ts +1 -0
  10. package/src/Api/Implementation/ColumnApiImpl.js +3 -0
  11. package/src/Api/Implementation/ConfigApiImpl.js +3 -1
  12. package/src/Api/Internal/ColumnFilterInternalApi.js +6 -6
  13. package/src/Api/Internal/GridInternalApi.d.ts +29 -13
  14. package/src/Api/Internal/GridInternalApi.js +129 -39
  15. package/src/PredefinedConfig/Common/AdaptableField.d.ts +1 -1
  16. package/src/PredefinedConfig/Common/AdaptablePredicate.js +5 -1
  17. package/src/Utilities/Constants/DocumentationLinkConstants.js +4 -4
  18. package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.js +5 -5
  19. package/src/View/Components/FilterForm/FilterForm.js +2 -2
  20. package/src/View/Components/FilterForm/ListBoxFilterForm.js +2 -1
  21. package/src/View/Components/FilterForm/QuickFilterValues.d.ts +1 -1
  22. package/src/View/Components/FilterForm/QuickFilterValues.js +20 -43
  23. package/src/View/Components/Selectors/PermittedValuesSelector.js +1 -1
  24. package/src/agGrid/AdaptableAgGrid.d.ts +4 -4
  25. package/src/agGrid/AdaptableAgGrid.js +21 -16
  26. package/src/agGrid/FilterWrapper.js +12 -7
  27. package/src/agGrid/defaultAdaptableOptions.js +2 -2
  28. package/src/components/ExpressionEditor/EditorInput.js +1 -1
  29. package/src/components/ExpressionEditor/index.js +1 -3
  30. package/src/env.js +2 -2
  31. package/src/metamodel/adaptable.metamodel.d.ts +45 -2
  32. package/src/metamodel/adaptable.metamodel.js +1 -1
  33. package/src/parser/src/predicate/mapExpressionToQlPredicate.js +1 -0
  34. package/src/types.d.ts +1 -1
  35. package/tsconfig.esm.tsbuildinfo +1 -1
@@ -1,41 +1,17 @@
1
+ import { isSameDay } from 'date-fns';
2
+ import { Resizable } from 're-resizable';
1
3
  import * as React from 'react';
2
4
  import { useCallback, useEffect, useRef } from 'react';
5
+ import { Flex } from 'rebass';
3
6
  import ArrayExtensions from '../../../Utilities/Extensions/ArrayExtensions';
4
- import SimpleButton from '../../../components/SimpleButton';
5
- import { isSameDay } from 'date-fns';
6
7
  import OverlayTrigger from '../../../components/OverlayTrigger';
7
- import { Flex } from 'rebass';
8
+ import SimpleButton from '../../../components/SimpleButton';
8
9
  import { ListBoxFilterForm } from './ListBoxFilterForm';
9
- import { Resizable } from 're-resizable';
10
10
  export const QuickFilterValues = (props) => {
11
11
  const { api } = props;
12
12
  const currentOverlayVisible = useRef(false);
13
13
  const valuesDropdownRef = React.useRef(null);
14
14
  const [quickFilterValues, setQuickFilterValues] = React.useState({ values: [], suppressClientSideFilter: false, dataLoadIsComplete: false });
15
- const quickFilterValuesWithPredicates = React.useMemo(() => {
16
- var _a, _b, _c;
17
- let values = quickFilterValues.values;
18
- const predicateIds = api.columnFilterApi.internalApi.getValuesFitlerPredicateIds(props.currentColumn);
19
- if (ArrayExtensions.IsNullOrEmpty(predicateIds)) {
20
- return values;
21
- }
22
- const predicatesPosition = (_c = (_b = (_a = api.optionsApi.getColumnFilterOptions()) === null || _a === void 0 ? void 0 : _a.valuesFilterOptions) === null || _b === void 0 ? void 0 : _b.predicatesPosition) !== null && _c !== void 0 ? _c : 'End';
23
- const predicateValues = predicateIds.map(predicateId => {
24
- var _a;
25
- const predicateDef = api.predicateApi.getPredicateDefById(predicateId);
26
- return {
27
- value: predicateId,
28
- label: ((_a = predicateDef.label) !== null && _a !== void 0 ? _a : predicateId),
29
- };
30
- });
31
- if (predicatesPosition === 'End') {
32
- values = [...values, ...predicateValues];
33
- }
34
- else {
35
- values = [...predicateValues, ...values];
36
- }
37
- return values;
38
- }, [quickFilterValues.values]);
39
15
  const [isDistinctColumnValuesLoading, setIsDistinctColumnValuesLoading] = React.useState(false);
40
16
  const [textFilterValue, setTextFilterValue] = React.useState('');
41
17
  const [valuesLoadTrigger, setValuesLoadTrigger] = React.useState({
@@ -72,7 +48,7 @@ export const QuickFilterValues = (props) => {
72
48
  let ignore = false;
73
49
  setIsDistinctColumnValuesLoading(true);
74
50
  api.gridApi.internalApi
75
- .getDistinctFilterDisplayValuesForColumn(props.columnFilter.ColumnId, textFilterValue, api.optionsApi.getColumnFilterOptions().valuesFilterOptions.showDistinctFilteredValuesOnly)
51
+ .getDistinctFilterDisplayValuesForColumnForFiltersUI(props.columnFilter.ColumnId, textFilterValue, api.optionsApi.getColumnFilterOptions().valuesFilterOptions.showCurrentlyFilteredValuesOnly)
76
52
  .then((distinctFilterDisplayValues) => {
77
53
  if (ignore) {
78
54
  return;
@@ -126,13 +102,13 @@ export const QuickFilterValues = (props) => {
126
102
  let selectedValues = props.columnFilter.Predicate.PredicateId === 'Values' ? 'Select Values' : 'Exclude Values';
127
103
  if (props.columnFilter.Predicate.Inputs.length) {
128
104
  selectedValues = props.columnFilter.Predicate.Inputs.map((input) => {
129
- var _a;
130
- const label = (_a = quickFilterValuesWithPredicates === null || quickFilterValuesWithPredicates === void 0 ? void 0 : quickFilterValuesWithPredicates.find((distinctValue) => {
105
+ var _a, _b;
106
+ const label = (_b = (_a = quickFilterValues.values) === null || _a === void 0 ? void 0 : _a.find((distinctValue) => {
131
107
  if (input instanceof Date) {
132
108
  return isSameDay(input, distinctValue.value);
133
109
  }
134
110
  return distinctValue.value === input;
135
- })) === null || _a === void 0 ? void 0 : _a.label;
111
+ })) === null || _b === void 0 ? void 0 : _b.label;
136
112
  return label !== null && label !== void 0 ? label : input;
137
113
  }).join(', ');
138
114
  }
@@ -147,6 +123,7 @@ export const QuickFilterValues = (props) => {
147
123
  }
148
124
  return null;
149
125
  };
126
+ const [defaultSize, setDefaultSize] = React.useState(undefined);
150
127
  return (React.createElement(OverlayTrigger, { showEvent: showEvent,
151
128
  // cannot hide on blur, because the form input receives the input when this is opened
152
129
  hideEvent: "mouseleave", hideDelay: 50, ref: (api) => {
@@ -160,18 +137,24 @@ export const QuickFilterValues = (props) => {
160
137
  }
161
138
  }, render: ({ targetWidth }) => {
162
139
  var _a;
163
- return (React.createElement(Resizable, { style: {
140
+ return (React.createElement(Resizable, { onResizeStop: (_e, _direction, element, _delta) => {
141
+ const { width, height } = element.getBoundingClientRect();
142
+ setDefaultSize({ width, height });
143
+ }, defaultSize: defaultSize, style: {
164
144
  fontSize: 'var(--ab-font-size-2)',
165
145
  border: '1px solid var(--ab-color-primarydark)',
166
146
  background: 'var(--ab-color-defaultbackground)',
167
147
  zIndex: 1000,
148
+ display: 'flex',
149
+ flexFlow: 'column',
150
+ flexWrap: 'nowrap',
168
151
  }, enable: {
169
152
  top: false,
170
153
  right: true,
171
- bottom: false,
154
+ bottom: true,
172
155
  left: false,
173
156
  topRight: false,
174
- bottomRight: false,
157
+ bottomRight: true,
175
158
  bottomLeft: false,
176
159
  topLeft: false,
177
160
  }, minWidth: getPopoverWidth(targetWidth) },
@@ -187,13 +170,7 @@ export const QuickFilterValues = (props) => {
187
170
  (_a = valuesDropdownRef.current) === null || _a === void 0 ? void 0 : _a.show();
188
171
  });
189
172
  }
190
- }, "data-name": "quick-filter-form", flexDirection: "column", style: {
191
- // fontSize: 'var(--ab-font-size-2)',
192
- // border: '1px solid var(--ab-color-primarydark)',
193
- // background: 'var(--ab-color-defaultbackground)',
194
- // zIndex: 1000,
195
- // width: getPopoverWidth(targetWidth),
196
- } },
173
+ }, "data-name": "quick-filter-form", flexDirection: "column", flex: 1, display: 'flex' },
197
174
  React.createElement(Flex, { m: 2 },
198
175
  React.createElement(SimpleButton, { onClick: () => clearColumnFilter() }, "Clear Filter"),
199
176
  ((_a = api.optionsApi.getColumnFilterOptions()) === null || _a === void 0 ? void 0 : _a.autoApplyFilter) == false && (React.createElement(SimpleButton, { ml: 2, onClick: () => {
@@ -201,7 +178,7 @@ export const QuickFilterValues = (props) => {
201
178
  props.updateColumnFilter(transientColumnFilter);
202
179
  }
203
180
  } }, "Apply Filter"))),
204
- React.createElement(ListBoxFilterForm, { disabled: props.isFilterDisabled, suppressClientSideFilter: quickFilterValues.suppressClientSideFilter, isLoading: isDistinctColumnValuesLoading, onFilterChange: handleFilterChange, currentColumn: props.currentColumn, columns: [], columnDistinctValues: quickFilterValuesWithPredicates, dataType: props.currentColumn.dataType, uiSelectedColumnValues: props.columnFilter.Predicate.Inputs.filter((input) => input !== ''), useAgGridStyle: true, onColumnValueSelectedChange: (list) => onColumnValueSelectedChange(list) }))));
181
+ React.createElement(ListBoxFilterForm, { disabled: props.isFilterDisabled, suppressClientSideFilter: quickFilterValues.suppressClientSideFilter, isLoading: isDistinctColumnValuesLoading, onFilterChange: handleFilterChange, currentColumn: props.currentColumn, columns: [], columnDistinctValues: quickFilterValues.values, dataType: props.currentColumn.dataType, uiSelectedColumnValues: props.columnFilter.Predicate.Inputs.filter((input) => input !== ''), useAgGridStyle: true, onColumnValueSelectedChange: (list) => onColumnValueSelectedChange(list) }))));
205
182
  } },
206
183
  React.createElement(SimpleButton, { "data-name": 'Select Values', style: {
207
184
  flex: 1,
@@ -18,7 +18,7 @@ export const PermittedValuesSelector = function (props) {
18
18
  setIsLoading(true);
19
19
  (async () => {
20
20
  const { values: distinctColumnValues } = await runIfNotResolvedIn(adaptable.api.gridApi.internalApi.getDistinctFilterDisplayValuesForColumn(props.columnId, filter, adaptable.api.optionsApi.getColumnFilterOptions().valuesFilterOptions
21
- .showDistinctFilteredValuesOnly), () => {
21
+ .showCurrentlyFilteredValuesOnly), () => {
22
22
  setIsLoading(true);
23
23
  });
24
24
  setIsLoading(false);
@@ -2,7 +2,7 @@ import { AdaptableOptions } from '../AdaptableOptions/AdaptableOptions';
2
2
  import { ChartRef, Column, GridApi, GridOptions, IRowNode, Module, RowModelType } from '@ag-grid-community/core';
3
3
  import { AdaptableLogger } from './AdaptableLogger';
4
4
  import { AdaptableApi } from '../Api/AdaptableApi';
5
- import { DistinctValuesParams, IAdaptable } from '../AdaptableInterfaces/IAdaptable';
5
+ import { DistinctColumnValuesParams, IAdaptable } from '../AdaptableInterfaces/IAdaptable';
6
6
  import { EmitterCallback } from '../Utilities/Emitter';
7
7
  import { AdaptablePlugin } from '../AdaptableOptions/AdaptablePlugin';
8
8
  import { AgGridAdapter } from './AgGridAdapter';
@@ -195,6 +195,7 @@ export declare class AdaptableAgGrid implements IAdaptable {
195
195
  getNormalisedValueFromRawValue(rawValue: any, column: AdaptableColumn): string | number | boolean | Date | unknown;
196
196
  updateColumnModelAndRefreshGrid(config?: {
197
197
  skipColDefsRefresh?: boolean;
198
+ preemptiveColumnStateRefresh?: boolean;
198
199
  }): void;
199
200
  redrawBody(): void;
200
201
  refreshHeader(): void;
@@ -237,13 +238,12 @@ export declare class AdaptableAgGrid implements IAdaptable {
237
238
  autoSizeAllColumns(): void;
238
239
  setColumnOrder(VisibleColumnList: string[]): void;
239
240
  private getSortedColumnStateForVisibleColumns;
240
- getDistinctValuesForColumn(column: AdaptableColumn, distinctValuesParams: DistinctValuesParams): GridCell[];
241
+ getDistinctValuesForColumn(column: AdaptableColumn, distinctValuesParams: DistinctColumnValuesParams): GridCell[];
241
242
  private getGridCellsForPermittedValues;
242
243
  private getDistinctGridCellsForColumn;
243
- addBlankValueToGridCell(gridCell: GridCell): void;
244
244
  private addDistinctColumnValue;
245
245
  private getUniqueGridCells;
246
- getGridCellsForColumn(columnId: string, includeBlanks?: boolean): GridCell[] | undefined;
246
+ getGridCellsForColumn(columnId: string, includeBlanks?: boolean, onlyVisibleRows?: boolean): GridCell[] | undefined;
247
247
  getRowNodesForPrimaryKeys(primaryKeyValues: any[]): any[];
248
248
  getRowNodeByIndex(index: number): IRowNode;
249
249
  getAgGridStatusPanels(): import("@ag-grid-community/core").StatusPanelDef[];
@@ -8,7 +8,7 @@ import Emitter from '../Utilities/Emitter';
8
8
  import { applyDefaultAdaptableOptions } from './defaultAdaptableOptions';
9
9
  import { AgGridAdapter } from './AgGridAdapter';
10
10
  import * as GeneralConstants from '../Utilities/Constants/GeneralConstants';
11
- import { AB_FDC3_COLUMN, AB_SPECIAL_COLUMN, ADAPTABLE_ROW_ACTION_BUTTONS, AUTOGENERATED_PK_COLUMN, BLANK_DISTINCT_COLUMN_VALUE, DARK_THEME, DEFAULT_LAYOUT, GROUP_PATH_SEPARATOR, HALF_SECOND, LIGHT_THEME, } from '../Utilities/Constants/GeneralConstants';
11
+ import { AB_FDC3_COLUMN, AB_SPECIAL_COLUMN, ADAPTABLE_ROW_ACTION_BUTTONS, AUTOGENERATED_PK_COLUMN, DARK_THEME, DEFAULT_LAYOUT, GROUP_PATH_SEPARATOR, HALF_SECOND, LIGHT_THEME, } from '../Utilities/Constants/GeneralConstants';
12
12
  import { DataService } from '../Utilities/Services/DataService';
13
13
  import { AdaptableStore } from '../Redux/Store/AdaptableStore';
14
14
  import { AdaptableApiImpl } from '../Api/Implementation/AdaptableApiImpl';
@@ -1815,6 +1815,12 @@ export class AdaptableAgGrid {
1815
1815
  if (result == undefined && rowNode.data) {
1816
1816
  result = rowNode.data[this.adaptableOptions.primaryKey];
1817
1817
  }
1818
+ if (result == undefined && rowNode.id != undefined) {
1819
+ // when getPrimaryKeyValueFromRowNode is called for group rows,
1820
+ // which don't have a rowNode.data object, the result is undefined
1821
+ // but we do have an id property on the rowNode object, so we'll use that
1822
+ result = rowNode.id;
1823
+ }
1818
1824
  return result;
1819
1825
  }
1820
1826
  getRawValueFromRowNode(rowNode, columnId) {
@@ -1892,6 +1898,9 @@ export class AdaptableAgGrid {
1892
1898
  return rawValue;
1893
1899
  }
1894
1900
  updateColumnModelAndRefreshGrid(config) {
1901
+ if (config === null || config === void 0 ? void 0 : config.preemptiveColumnStateRefresh) {
1902
+ this.deriveAdaptableColumnStateFromAgGrid();
1903
+ }
1895
1904
  if (!(config === null || config === void 0 ? void 0 : config.skipColDefsRefresh)) {
1896
1905
  this.refreshColDefs();
1897
1906
  }
@@ -2300,13 +2309,10 @@ export class AdaptableAgGrid {
2300
2309
  }
2301
2310
  getDistinctGridCellsForColumn(column, distinctValuesParams) {
2302
2311
  let gridCells = [];
2303
- if (distinctValuesParams.visibleRowsOnly) {
2312
+ if (distinctValuesParams.visibleRowsOnly === true) {
2304
2313
  this.agGridAdapter.getAgGridApi().forEachNodeAfterFilter((rowNode) => {
2305
2314
  const gridCell = this.addDistinctColumnValue(rowNode, column.columnId);
2306
2315
  if (gridCell && gridCell.rowNode !== distinctValuesParams.skipRowNode) {
2307
- if (gridCell.rawValue == undefined && distinctValuesParams.addBlankValue) {
2308
- this.addBlankValueToGridCell(gridCell);
2309
- }
2310
2316
  gridCells.push(gridCell);
2311
2317
  }
2312
2318
  });
@@ -2315,20 +2321,12 @@ export class AdaptableAgGrid {
2315
2321
  this.agGridAdapter.getAgGridApi().forEachNode((rowNode) => {
2316
2322
  const gridCell = this.addDistinctColumnValue(rowNode, column.columnId);
2317
2323
  if (gridCell && gridCell.rowNode !== distinctValuesParams.skipRowNode) {
2318
- if (gridCell.rawValue == undefined && distinctValuesParams.addBlankValue) {
2319
- this.addBlankValueToGridCell(gridCell);
2320
- }
2321
2324
  gridCells.push(gridCell);
2322
2325
  }
2323
2326
  });
2324
2327
  }
2325
2328
  return gridCells;
2326
2329
  }
2327
- addBlankValueToGridCell(gridCell) {
2328
- gridCell.rawValue = BLANK_DISTINCT_COLUMN_VALUE;
2329
- gridCell.displayValue = BLANK_DISTINCT_COLUMN_VALUE;
2330
- gridCell.normalisedValue = BLANK_DISTINCT_COLUMN_VALUE;
2331
- }
2332
2330
  addDistinctColumnValue(rowNode, columnId) {
2333
2331
  // we do not return the values of the aggregates when in grouping mode
2334
2332
  // otherwise they would appear in the filter dropdown etc....
@@ -2355,9 +2353,9 @@ export class AdaptableAgGrid {
2355
2353
  }
2356
2354
  return uniqueVals.slice(0, this.api.columnFilterApi.internalApi.getFilterValuesMaxNumberOfItems(column));
2357
2355
  }
2358
- getGridCellsForColumn(columnId, includeBlanks = false) {
2356
+ getGridCellsForColumn(columnId, includeBlanks = false, onlyVisibleRows = false) {
2359
2357
  let returnValues = [];
2360
- this.agGridAdapter.getAgGridApi().forEachNode((rowNode) => {
2358
+ const handler = (rowNode) => {
2361
2359
  const gridCell = this.getGridCellFromRowNode(rowNode, columnId);
2362
2360
  if (gridCell) {
2363
2361
  if (gridCell.rawValue == undefined || gridCell.rawValue == null) {
@@ -2369,7 +2367,13 @@ export class AdaptableAgGrid {
2369
2367
  returnValues.push(gridCell);
2370
2368
  }
2371
2369
  }
2372
- });
2370
+ };
2371
+ if (onlyVisibleRows) {
2372
+ this.agGridAdapter.getAgGridApi().forEachNodeAfterFilter(handler);
2373
+ }
2374
+ else {
2375
+ this.agGridAdapter.getAgGridApi().forEachNode(handler);
2376
+ }
2373
2377
  return returnValues;
2374
2378
  }
2375
2379
  getRowNodesForPrimaryKeys(primaryKeyValues) {
@@ -3739,6 +3743,7 @@ export class AdaptableAgGrid {
3739
3743
  */
3740
3744
  updateLayoutFromGrid() {
3741
3745
  var _a, _b;
3746
+ this.logger.info('updateLayoutFromGrid()');
3742
3747
  const agGridApi = this.agGridAdapter.getAgGridApi();
3743
3748
  const columnState = agGridApi.getColumnState();
3744
3749
  const expandedState = agGridApi.getState().rowGroupExpansion || { expandedRowGroupIds: [] };
@@ -27,16 +27,21 @@ export const FilterWrapperFactory = (adaptable) => {
27
27
  const [filterProps, setFilterProps] = useState(null);
28
28
  const colId = props.column.getId();
29
29
  const column = adaptable.api.columnApi.getColumnWithColumnId(colId);
30
+ const afterGuidAttached = React.useCallback((params) => {
31
+ var _a;
32
+ const hidePopup = (_a = params === null || params === void 0 ? void 0 : params.hidePopup) !== null && _a !== void 0 ? _a : null;
33
+ const filterProps = getFilterProps(colId, !!hidePopup);
34
+ adaptable.hideFilterFormPopup = hidePopup;
35
+ setFilterProps(filterProps);
36
+ }, [colId]);
37
+ React.useEffect(() => {
38
+ afterGuidAttached();
39
+ }, []);
30
40
  useImperativeHandle(ref, () => {
31
41
  return {
32
42
  isFilterActive: () => isFilterActive(colId),
33
- afterGuiAttached: (params) => {
34
- var _a;
35
- const hidePopup = (_a = params === null || params === void 0 ? void 0 : params.hidePopup) !== null && _a !== void 0 ? _a : null;
36
- const filterProps = getFilterProps(colId, !!hidePopup);
37
- adaptable.hideFilterFormPopup = hidePopup;
38
- setFilterProps(filterProps);
39
- },
43
+ // left here for backward compatibility
44
+ afterGuidAttached,
40
45
  getModel: () => { },
41
46
  setModel: () => { },
42
47
  //we do not filter here.... we filter using the doesExternalFilterPass. Not sure there is a difference....
@@ -189,10 +189,10 @@ const DefaultAdaptableOptions = {
189
189
  valuesFilterTrigger: 'mouseenter',
190
190
  sortValuesFilter: false,
191
191
  filterValuesUsingTime: false,
192
- showDistinctFilteredValuesOnly: false,
192
+ showCurrentlyFilteredValuesOnly: false,
193
193
  maxFilterValuesToDisplay: undefined,
194
- includeBlankFilterValues: false,
195
194
  showValuesCount: undefined,
195
+ valuesFilterPredicateOptions: undefined,
196
196
  },
197
197
  indicateFilteredColumns: true,
198
198
  useAdaptableColumnFiltering: true,
@@ -17,7 +17,7 @@ function EditorInput(props) {
17
17
  if (type === 'aggregatedScalar') {
18
18
  const excludeSet = new Set([
19
19
  // we cannot have a hardcodede set of functions,
20
- // we need to allow custom expresions
20
+ // we need to allow custom expressions
21
21
  ...cumulativeAggregatedExpressionFunctions,
22
22
  ...quantileAggregatedExpressionFunctions,
23
23
  ]);
@@ -87,9 +87,7 @@ export function ExpressionEditor(props) {
87
87
  StringExtensions.IsNullOrEmpty(expressionText === null || expressionText === void 0 ? void 0 : expressionText.trim()) && renderQueryHints(type),
88
88
  showDocumentationLinks && (React.createElement(HelpBlock, { "data-name": "query-documentation", mt: 2, mb: 2, fontSize: 3 },
89
89
  React.createElement(ButtonInfo, { mr: 2, onClick: () => window.open(queryDocumentationLink, '_blank') }),
90
- "See ",
91
- StringExtensions.CapitaliseFirstLetter(type),
92
- " Query documentation for more details and examples")),
90
+ "See documentation for more details and examples")),
93
91
  React.createElement(Box, { flex: 1 }),
94
92
  showNamedQueryStuff && saveAsNamedQueryElement),
95
93
  React.createElement(Box, { className: `${baseClassName}__sidebar`, "data-name": "expression-sidebar", pb: 2, paddingLeft: 2, pr: 2 },
package/src/env.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export default {
2
2
  INFINITE_TABLE_LICENSE_KEY: "StartDate=2021-06-29|EndDate=2030-01-01|Owner=Adaptable|Type=distribution|TS=1624971462479|C=137829811,1004007071,2756196225,1839832928,3994409405,636616862" || '',
3
- PUBLISH_TIMESTAMP: 1716641872713 || Date.now(),
4
- VERSION: "18.1.0-canary.0" || '--current-version--',
3
+ PUBLISH_TIMESTAMP: 1717151599246 || Date.now(),
4
+ VERSION: "18.1.0-canary.1" || '--current-version--',
5
5
  };
@@ -3787,6 +3787,11 @@ export declare const ADAPTABLE_METAMODEL: {
3787
3787
  kind: string;
3788
3788
  desc: string;
3789
3789
  };
3790
+ IsRowFilterableContext: {
3791
+ name: string;
3792
+ kind: string;
3793
+ desc: string;
3794
+ };
3790
3795
  Layout: {
3791
3796
  name: string;
3792
3797
  kind: string;
@@ -5475,6 +5480,7 @@ export declare const ADAPTABLE_METAMODEL: {
5475
5480
  noCode: string;
5476
5481
  defVal: string;
5477
5482
  gridInfo?: undefined;
5483
+ ref?: undefined;
5478
5484
  } | {
5479
5485
  name: string;
5480
5486
  kind: string;
@@ -5483,22 +5489,59 @@ export declare const ADAPTABLE_METAMODEL: {
5483
5489
  gridInfo: string;
5484
5490
  noCode: string;
5485
5491
  defVal: string;
5492
+ ref?: undefined;
5493
+ } | {
5494
+ name: string;
5495
+ kind: string;
5496
+ desc: string;
5497
+ isOpt: boolean;
5498
+ gridInfo: string;
5499
+ defVal: string;
5500
+ noCode?: undefined;
5501
+ ref?: undefined;
5486
5502
  } | {
5487
5503
  name: string;
5488
5504
  kind: string;
5489
5505
  desc: string;
5490
5506
  isOpt: boolean;
5507
+ ref: string;
5491
5508
  noCode?: undefined;
5492
5509
  defVal?: undefined;
5493
5510
  gridInfo?: undefined;
5511
+ })[];
5512
+ };
5513
+ ValuesFilterPredicateContext: {
5514
+ name: string;
5515
+ kind: string;
5516
+ desc: string;
5517
+ props: ({
5518
+ name: string;
5519
+ kind: string;
5520
+ desc: string;
5521
+ ref?: undefined;
5522
+ } | {
5523
+ name: string;
5524
+ kind: string;
5525
+ desc: string;
5526
+ ref: string;
5527
+ })[];
5528
+ };
5529
+ ValuesFilterPredicateOptions: {
5530
+ name: string;
5531
+ kind: string;
5532
+ desc: string;
5533
+ props: ({
5534
+ name: string;
5535
+ kind: string;
5536
+ desc: string;
5537
+ isOpt?: undefined;
5538
+ defVal?: undefined;
5494
5539
  } | {
5495
5540
  name: string;
5496
5541
  kind: string;
5497
5542
  desc: string;
5498
5543
  isOpt: boolean;
5499
- gridInfo: string;
5500
5544
  defVal: string;
5501
- noCode?: undefined;
5502
5545
  })[];
5503
5546
  };
5504
5547
  WeightedAverageAggregation: {