@adaptabletools/adaptable 18.1.0-canary.0 → 18.1.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.
- package/base.css +5 -0
- package/base.css.map +1 -1
- package/index.css +7 -0
- package/index.css.map +1 -1
- package/package.json +1 -1
- package/src/AdaptableInterfaces/IAdaptable.d.ts +4 -4
- package/src/AdaptableOptions/ColumnFilterOptions.d.ts +39 -24
- package/src/Api/ColumnApi.d.ts +5 -0
- package/src/Api/Implementation/ColumnApiImpl.d.ts +1 -0
- package/src/Api/Implementation/ColumnApiImpl.js +3 -0
- package/src/Api/Implementation/ConfigApiImpl.js +3 -1
- package/src/Api/Internal/ColumnFilterInternalApi.js +6 -6
- package/src/Api/Internal/GridInternalApi.d.ts +29 -13
- package/src/Api/Internal/GridInternalApi.js +129 -39
- package/src/PredefinedConfig/Common/AdaptableField.d.ts +1 -1
- package/src/PredefinedConfig/Common/AdaptablePredicate.js +5 -1
- package/src/Utilities/Constants/DocumentationLinkConstants.js +4 -4
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.js +5 -5
- package/src/View/Components/FilterForm/FilterForm.js +2 -2
- package/src/View/Components/FilterForm/ListBoxFilterForm.js +2 -1
- package/src/View/Components/FilterForm/QuickFilterValues.d.ts +1 -1
- package/src/View/Components/FilterForm/QuickFilterValues.js +20 -43
- package/src/View/Components/Selectors/PermittedValuesSelector.js +1 -1
- package/src/agGrid/AdaptableAgGrid.d.ts +4 -4
- package/src/agGrid/AdaptableAgGrid.js +21 -16
- package/src/agGrid/FilterWrapper.js +12 -7
- package/src/agGrid/defaultAdaptableOptions.js +2 -2
- package/src/components/ExpressionEditor/EditorInput.js +1 -1
- package/src/components/ExpressionEditor/index.js +1 -3
- package/src/env.js +2 -2
- package/src/metamodel/adaptable.metamodel.d.ts +45 -2
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/parser/src/predicate/mapExpressionToQlPredicate.js +1 -0
- package/src/types.d.ts +1 -1
- 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
|
|
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
|
-
.
|
|
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 =
|
|
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 ||
|
|
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, {
|
|
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:
|
|
154
|
+
bottom: true,
|
|
172
155
|
left: false,
|
|
173
156
|
topRight: false,
|
|
174
|
-
bottomRight:
|
|
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",
|
|
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:
|
|
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
|
-
.
|
|
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 {
|
|
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:
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
4
|
-
VERSION: "18.1.0
|
|
3
|
+
PUBLISH_TIMESTAMP: 1717156602322 || Date.now(),
|
|
4
|
+
VERSION: "18.1.0" || '--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: {
|