@olenbetong/appframe-ds 1.0.3 → 1.2.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/CHANGELOG.md +13 -0
- package/package.json +8 -7
- package/scripts/copyAssets.mjs +27 -55
- package/src/AfLookup/Lookup.css +129 -125
- package/src/AfLookup/Lookup.tsx +184 -162
- package/src/AfLookup/LookupCombobox.css +78 -78
- package/src/AfLookup/LookupCombobox.tsx +237 -237
- package/src/AfLookup/LookupEdit.tsx +130 -130
- package/src/AfLookup/LookupGrid.tsx +124 -124
- package/src/AfLookup/index.ts +5 -5
- package/src/autocomplete/Autocomplete.css +256 -256
- package/src/autocomplete/Autocomplete.tsx +320 -320
- package/src/autocomplete/AutocompleteFrame.tsx +168 -168
- package/src/autocomplete/Combobox.tsx +286 -286
- package/src/autocomplete/index.ts +4 -4
- package/src/autocomplete/types.ts +204 -204
- package/src/autocomplete/utils.ts +183 -183
- package/src/binding/BoundNumericTextField.tsx +102 -102
- package/src/binding/BoundTextField.tsx +49 -49
- package/src/binding/CancelButton.tsx +30 -30
- package/src/binding/CancelIconButton.tsx +30 -30
- package/src/binding/DataEditToolbar.tsx +92 -92
- package/src/binding/DeleteButton.tsx +35 -35
- package/src/binding/DeleteIconButton.tsx +35 -35
- package/src/binding/RefreshButton.tsx +31 -31
- package/src/binding/RefreshIconButton.tsx +33 -33
- package/src/binding/RefreshRowIconButton.tsx +33 -33
- package/src/binding/SaveButton.tsx +37 -37
- package/src/binding/SaveIconButton.tsx +38 -38
- package/src/container/Container.tsx +49 -49
- package/src/container/index.ts +1 -1
- package/src/cutoff/CutOffPicker.css +12 -0
- package/src/cutoff/CutOffPicker.tsx +165 -0
- package/src/cutoff/context.tsx +194 -0
- package/src/cutoff/dsCutOffDates.ts +21 -0
- package/src/cutoff/index.ts +4 -0
- package/src/cutoff/utils.test.ts +59 -0
- package/src/cutoff/utils.ts +276 -0
- package/src/filter/ChipListInput.tsx +79 -79
- package/src/filter/FieldFilterPanel.css +150 -150
- package/src/filter/FieldFilterPanel.tsx +309 -309
- package/src/filter/FilterBuilder.css +152 -152
- package/src/filter/FilterBuilder.test.tsx +153 -153
- package/src/filter/FilterBuilder.tsx +435 -435
- package/src/filter/FilterEditor.css +231 -231
- package/src/filter/FilterEditor.test.tsx +259 -259
- package/src/filter/FilterEditor.tsx +75 -74
- package/src/filter/FilterGroupEditor.tsx +160 -160
- package/src/filter/FilterNameDialog.css +22 -22
- package/src/filter/FilterNameDialog.tsx +81 -81
- package/src/filter/FilterRow.tsx +117 -117
- package/src/filter/FilterShareDialog.css +28 -28
- package/src/filter/FilterShareDialog.tsx +201 -201
- package/src/filter/FilterStringField.tsx +78 -77
- package/src/filter/FilterValueEditor.tsx +220 -220
- package/src/filter/SavedFilterTree.css +107 -107
- package/src/filter/SavedFilterTree.test.tsx +94 -94
- package/src/filter/SavedFilterTree.tsx +218 -222
- package/src/filter/fieldFilter.test.ts +158 -158
- package/src/filter/fieldFilter.ts +139 -139
- package/src/filter/index.ts +27 -27
- package/src/filter/types.ts +38 -38
- package/src/filter/useDistinctValues.test.ts +102 -102
- package/src/filter/useDistinctValues.ts +230 -230
- package/src/global.d.ts +11 -11
- package/src/grid/AfGridColumnsPanel.tsx +118 -118
- package/src/grid/AfGridContext.tsx +51 -51
- package/src/grid/AfGridError.tsx +46 -46
- package/src/grid/AfHeaderFilterCell.tsx +147 -151
- package/src/grid/AfHeaderFilterPanel.tsx +111 -111
- package/src/grid/GridEditLookup.css +12 -0
- package/src/grid/GridEditLookup.tsx +121 -0
- package/src/grid/Toolbar.tsx +233 -233
- package/src/grid/editing.ts +100 -100
- package/src/grid/filter.ts +78 -78
- package/src/grid/formatters.ts +48 -48
- package/src/grid/index.css +245 -245
- package/src/grid/index.tsx +489 -484
- package/src/grid/license.ts +48 -48
- package/src/grid/localization.ts +369 -369
- package/src/grid/slots/index.tsx +307 -307
- package/src/grid/slots/slots.css +64 -64
- package/src/grid/theme.tsx +138 -138
- package/src/grid/useAfColumns.tsx +371 -371
- package/src/grid/useAfCurrentIndex.ts +63 -63
- package/src/grid/useAfData.ts +20 -20
- package/src/grid/useAfFilter.ts +160 -160
- package/src/grid/useAfFilterFields.ts +55 -55
- package/src/grid/useAfGridApi.ts +71 -71
- package/src/grid/useAfKeyBindings.ts +36 -36
- package/src/grid/useAfNewItemRow.ts +258 -258
- package/src/grid/useAfPagination.ts +53 -53
- package/src/grid/useAfPersistedState.ts +230 -230
- package/src/grid/useAfRowEditModel.ts +145 -145
- package/src/grid/useAfRowGrouping.ts +47 -47
- package/src/grid/useAfServerAggregation.ts +145 -145
- package/src/grid/useAfSortModel.ts +84 -84
- package/src/i18n.ts +13 -0
- package/src/index.ts +14 -12
- package/src/input/InputAdornments.css +75 -75
- package/src/input/InputAdornments.tsx +102 -102
- package/src/input/index.ts +1 -1
- package/src/layout/AppMenu.tsx +74 -75
- package/src/layout/AppMenuDrawer.css +70 -70
- package/src/layout/AppMenuDrawer.tsx +122 -122
- package/src/layout/ErrorBoundary.tsx +162 -162
- package/src/layout/ResponsiveDialog.css +86 -0
- package/src/layout/ResponsiveDialog.tsx +55 -0
- package/src/layout/index.tsx +69 -68
- package/src/link/Link.tsx +23 -0
- package/src/link/index.ts +1 -0
- package/src/mdi/Mdi.css +138 -138
- package/src/mdi/Mdi.test.tsx +91 -87
- package/src/mdi/Mdi.tsx +141 -141
- package/src/mdi/MdiConfirmCloseDialog.tsx +47 -47
- package/src/mdi/MdiContext.tsx +59 -59
- package/src/mdi/MdiDocumentContext.tsx +60 -60
- package/src/mdi/MdiPanel.tsx +61 -61
- package/src/mdi/MdiRestore.test.tsx +86 -82
- package/src/mdi/MdiTab.tsx +30 -30
- package/src/mdi/controller.test.ts +382 -382
- package/src/mdi/controller.ts +656 -656
- package/src/mdi/dockviewHost.ts +132 -132
- package/src/mdi/fakeHost.ts +200 -200
- package/src/mdi/host.ts +44 -44
- package/src/mdi/ids.test.ts +20 -20
- package/src/mdi/ids.ts +18 -18
- package/src/mdi/index.ts +31 -31
- package/src/mdi/layoutRestore.test.ts +156 -156
- package/src/mdi/layoutRestore.ts +311 -311
- package/src/mdi/layoutSpec.test.ts +143 -143
- package/src/mdi/layoutSpec.ts +214 -214
- package/src/mdi/layoutStore.test.ts +93 -93
- package/src/mdi/layoutStore.ts +99 -99
- package/src/mdi/memorySettingsStore.ts +21 -21
- package/src/mdi/registry.ts +34 -34
- package/src/mdi/testTypes.ts +37 -37
- package/src/mdi/theme.ts +22 -22
- package/src/mdi/types.ts +214 -214
- package/src/page/Page.css +53 -53
- package/src/page/PageBlock.css +64 -64
- package/src/page/PageBlock.tsx +92 -92
- package/src/page/PageHeader.css +88 -88
- package/src/page/PageHeader.tsx +115 -116
- package/src/page/PageTitle.css +5 -0
- package/src/page/PageTitle.tsx +21 -0
- package/src/page/index.ts +4 -3
- package/src/paper/Paper.tsx +52 -52
- package/src/progress/LinearProgress.css +93 -93
- package/src/progress/LinearProgress.tsx +104 -104
- package/src/progress/index.ts +1 -1
- package/src/report-downloader/ReportDownloader.css +67 -67
- package/src/report-downloader/components/StatusItem.tsx +87 -86
- package/src/report-downloader/components/StatusList.tsx +28 -28
- package/src/report-downloader/index.ts +41 -41
- package/src/report-downloader/status.tsx +92 -92
- package/src/sortable/DropIndicator.css +51 -51
- package/src/sortable/DropIndicator.tsx +27 -27
- package/src/sortable/SortableItemList.css +21 -21
- package/src/sortable/SortableItemList.tsx +264 -264
- package/src/sortable/index.ts +8 -8
- package/src/sortable/reorderSortOrder.ts +126 -126
- package/src/sortable/sortOrder.ts +101 -101
- package/src/sortable/types.ts +9 -9
- package/src/sortable/useSortableContainer.ts +53 -53
- package/src/sortable/useSortableItem.ts +95 -95
- package/src/sortable/useSortableList.ts +117 -117
- package/src/test/happy-dom-document-class.ts +24 -24
- package/src/test/setup.ts +12 -12
- package/src/theme/useDsColorScheme.ts +53 -53
- package/tsconfig.build.json +9 -9
- package/tsconfig.json +8 -8
- package/vitest.config.ts +10 -10
package/src/filter/types.ts
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import type { FieldMetadata, FilterTree } from "@olenbetong/appframe-core";
|
|
2
|
-
|
|
3
|
-
/** A selectable value for a field that has a fixed list of values. */
|
|
4
|
-
export type FilterValueOption = {
|
|
5
|
-
value: string;
|
|
6
|
-
label?: string;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Resolves the list of values offered in the value editor for a field. Return
|
|
11
|
-
* `undefined` to fall back to a free text editor.
|
|
12
|
-
*
|
|
13
|
-
* Lookup fields carry a `valueListRecordSource` in their metadata, but loading
|
|
14
|
-
* that record source needs a data object, which is out of scope for this
|
|
15
|
-
* component. Supply the options from the outside instead.
|
|
16
|
-
*/
|
|
17
|
-
export type GetFieldOptions = (field: FieldMetadata) => FilterValueOption[] | undefined;
|
|
18
|
-
|
|
19
|
-
export type FilterEditorSize = "sm" | "md" | "lg";
|
|
20
|
-
|
|
21
|
-
export type FilterEditorProps = {
|
|
22
|
-
/** The fields the user can filter on. Fields with `excludeFromFilter` are hidden. */
|
|
23
|
-
fields: FieldMetadata[];
|
|
24
|
-
/** The filter tree. Use together with `onChange` for a controlled component. */
|
|
25
|
-
value?: FilterTree | null;
|
|
26
|
-
/** The initial filter tree when uncontrolled. */
|
|
27
|
-
defaultValue?: FilterTree | null;
|
|
28
|
-
onChange?: (filter: FilterTree) => void;
|
|
29
|
-
/** Renders the tree without any editing affordances. */
|
|
30
|
-
readOnly?: boolean;
|
|
31
|
-
/** Shows the filter string below the tree, editable unless `readOnly`. */
|
|
32
|
-
showFilterString?: boolean;
|
|
33
|
-
/** View the filter applies to. Passed to the conversion endpoint. */
|
|
34
|
-
viewName?: string;
|
|
35
|
-
getFieldOptions?: GetFieldOptions;
|
|
36
|
-
className?: string;
|
|
37
|
-
"data-size"?: FilterEditorSize;
|
|
38
|
-
};
|
|
1
|
+
import type { FieldMetadata, FilterTree } from "@olenbetong/appframe-core";
|
|
2
|
+
|
|
3
|
+
/** A selectable value for a field that has a fixed list of values. */
|
|
4
|
+
export type FilterValueOption = {
|
|
5
|
+
value: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the list of values offered in the value editor for a field. Return
|
|
11
|
+
* `undefined` to fall back to a free text editor.
|
|
12
|
+
*
|
|
13
|
+
* Lookup fields carry a `valueListRecordSource` in their metadata, but loading
|
|
14
|
+
* that record source needs a data object, which is out of scope for this
|
|
15
|
+
* component. Supply the options from the outside instead.
|
|
16
|
+
*/
|
|
17
|
+
export type GetFieldOptions = (field: FieldMetadata) => FilterValueOption[] | undefined;
|
|
18
|
+
|
|
19
|
+
export type FilterEditorSize = "sm" | "md" | "lg";
|
|
20
|
+
|
|
21
|
+
export type FilterEditorProps = {
|
|
22
|
+
/** The fields the user can filter on. Fields with `excludeFromFilter` are hidden. */
|
|
23
|
+
fields: FieldMetadata[];
|
|
24
|
+
/** The filter tree. Use together with `onChange` for a controlled component. */
|
|
25
|
+
value?: FilterTree | null;
|
|
26
|
+
/** The initial filter tree when uncontrolled. */
|
|
27
|
+
defaultValue?: FilterTree | null;
|
|
28
|
+
onChange?: (filter: FilterTree) => void;
|
|
29
|
+
/** Renders the tree without any editing affordances. */
|
|
30
|
+
readOnly?: boolean;
|
|
31
|
+
/** Shows the filter string below the tree, editable unless `readOnly`. */
|
|
32
|
+
showFilterString?: boolean;
|
|
33
|
+
/** View the filter applies to. Passed to the conversion endpoint. */
|
|
34
|
+
viewName?: string;
|
|
35
|
+
getFieldOptions?: GetFieldOptions;
|
|
36
|
+
className?: string;
|
|
37
|
+
"data-size"?: FilterEditorSize;
|
|
38
|
+
};
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import type { FieldMetadata, FilterExpression, FilterTree } from "@olenbetong/appframe-core";
|
|
2
|
-
import { describe, expect, test } from "vitest";
|
|
3
|
-
|
|
4
|
-
import { buildDistinctParameters } from "./useDistinctValues.js";
|
|
5
|
-
|
|
6
|
-
const field: FieldMetadata = { name: "Name", caption: "Name", type: "string", nullable: true };
|
|
7
|
-
|
|
8
|
-
function expression(column: string, value = "x"): FilterExpression {
|
|
9
|
-
return { type: "expression", column, operator: "contains", value } as FilterExpression;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function tree(...items: FilterTree["items"]): FilterTree {
|
|
13
|
-
return { type: "group", mode: "and", items };
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
describe("buildDistinctParameters", () => {
|
|
17
|
-
test("groups by the field and counts another field", () => {
|
|
18
|
-
let parameters = buildDistinctParameters({
|
|
19
|
-
field,
|
|
20
|
-
countField: "PrimKey",
|
|
21
|
-
filter: null,
|
|
22
|
-
withCounts: true,
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
expect(parameters.fields).toEqual([{ name: "Name" }, { name: "PrimKey", aggregate: "COUNT" }]);
|
|
26
|
-
expect(parameters).toMatchObject({ groupBy: ["Name"], sortOrder: [{ Name: "asc" }] });
|
|
27
|
-
expect(parameters).not.toHaveProperty("distinctRows");
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
test("falls back to a plain distinct list without counts", () => {
|
|
31
|
-
let parameters = buildDistinctParameters({
|
|
32
|
-
field,
|
|
33
|
-
countField: "PrimKey",
|
|
34
|
-
filter: null,
|
|
35
|
-
withCounts: false,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
expect(parameters.fields).toEqual([{ name: "Name" }]);
|
|
39
|
-
expect(parameters).toMatchObject({ distinctRows: true });
|
|
40
|
-
expect(parameters).not.toHaveProperty("groupBy");
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
test("has no counts when no other field is available to count", () => {
|
|
44
|
-
let parameters = buildDistinctParameters({ field, countField: null, filter: null, withCounts: true });
|
|
45
|
-
|
|
46
|
-
expect(parameters.fields).toEqual([{ name: "Name" }]);
|
|
47
|
-
expect(parameters).toMatchObject({ distinctRows: true });
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
test("keeps other criteria but drops the field's own", () => {
|
|
51
|
-
let filter = tree(expression("Name"), expression("Other"));
|
|
52
|
-
let parameters = buildDistinctParameters({ field, countField: "PrimKey", filter, withCounts: true });
|
|
53
|
-
|
|
54
|
-
expect(parameters.filterObject).toEqual(tree(expression("Other")));
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test("has no filter when the field owns every criterion", () => {
|
|
58
|
-
let parameters = buildDistinctParameters({
|
|
59
|
-
field,
|
|
60
|
-
countField: "PrimKey",
|
|
61
|
-
filter: tree(expression("Name")),
|
|
62
|
-
withCounts: true,
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
expect(parameters.filterObject).toBe(null);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
test("adds the search text as a criterion on the field", () => {
|
|
69
|
-
let parameters = buildDistinctParameters({
|
|
70
|
-
field,
|
|
71
|
-
countField: "PrimKey",
|
|
72
|
-
filter: null,
|
|
73
|
-
search: "ab",
|
|
74
|
-
withCounts: true,
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
expect(parameters.filterObject).toMatchObject({
|
|
78
|
-
type: "group",
|
|
79
|
-
items: [{ column: "Name", operator: "contains", value: "ab" }],
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
test("combines the search text with the other criteria", () => {
|
|
84
|
-
let parameters = buildDistinctParameters({
|
|
85
|
-
field,
|
|
86
|
-
countField: "PrimKey",
|
|
87
|
-
filter: tree(expression("Other")),
|
|
88
|
-
search: "ab",
|
|
89
|
-
withCounts: true,
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
expect(parameters.filterObject).toMatchObject({
|
|
93
|
-
items: [tree(expression("Other")), { column: "Name", value: "ab" }],
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
test("caps the number of values loaded", () => {
|
|
98
|
-
let parameters = buildDistinctParameters({ field, countField: "PrimKey", filter: null, withCounts: true });
|
|
99
|
-
|
|
100
|
-
expect(parameters.maxRecords).toBe(200);
|
|
101
|
-
});
|
|
102
|
-
});
|
|
1
|
+
import type { FieldMetadata, FilterExpression, FilterTree } from "@olenbetong/appframe-core";
|
|
2
|
+
import { describe, expect, test } from "vitest";
|
|
3
|
+
|
|
4
|
+
import { buildDistinctParameters } from "./useDistinctValues.js";
|
|
5
|
+
|
|
6
|
+
const field: FieldMetadata = { name: "Name", caption: "Name", type: "string", nullable: true };
|
|
7
|
+
|
|
8
|
+
function expression(column: string, value = "x"): FilterExpression {
|
|
9
|
+
return { type: "expression", column, operator: "contains", value } as FilterExpression;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function tree(...items: FilterTree["items"]): FilterTree {
|
|
13
|
+
return { type: "group", mode: "and", items };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe("buildDistinctParameters", () => {
|
|
17
|
+
test("groups by the field and counts another field", () => {
|
|
18
|
+
let parameters = buildDistinctParameters({
|
|
19
|
+
field,
|
|
20
|
+
countField: "PrimKey",
|
|
21
|
+
filter: null,
|
|
22
|
+
withCounts: true,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
expect(parameters.fields).toEqual([{ name: "Name" }, { name: "PrimKey", aggregate: "COUNT" }]);
|
|
26
|
+
expect(parameters).toMatchObject({ groupBy: ["Name"], sortOrder: [{ Name: "asc" }] });
|
|
27
|
+
expect(parameters).not.toHaveProperty("distinctRows");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("falls back to a plain distinct list without counts", () => {
|
|
31
|
+
let parameters = buildDistinctParameters({
|
|
32
|
+
field,
|
|
33
|
+
countField: "PrimKey",
|
|
34
|
+
filter: null,
|
|
35
|
+
withCounts: false,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
expect(parameters.fields).toEqual([{ name: "Name" }]);
|
|
39
|
+
expect(parameters).toMatchObject({ distinctRows: true });
|
|
40
|
+
expect(parameters).not.toHaveProperty("groupBy");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("has no counts when no other field is available to count", () => {
|
|
44
|
+
let parameters = buildDistinctParameters({ field, countField: null, filter: null, withCounts: true });
|
|
45
|
+
|
|
46
|
+
expect(parameters.fields).toEqual([{ name: "Name" }]);
|
|
47
|
+
expect(parameters).toMatchObject({ distinctRows: true });
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("keeps other criteria but drops the field's own", () => {
|
|
51
|
+
let filter = tree(expression("Name"), expression("Other"));
|
|
52
|
+
let parameters = buildDistinctParameters({ field, countField: "PrimKey", filter, withCounts: true });
|
|
53
|
+
|
|
54
|
+
expect(parameters.filterObject).toEqual(tree(expression("Other")));
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("has no filter when the field owns every criterion", () => {
|
|
58
|
+
let parameters = buildDistinctParameters({
|
|
59
|
+
field,
|
|
60
|
+
countField: "PrimKey",
|
|
61
|
+
filter: tree(expression("Name")),
|
|
62
|
+
withCounts: true,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
expect(parameters.filterObject).toBe(null);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("adds the search text as a criterion on the field", () => {
|
|
69
|
+
let parameters = buildDistinctParameters({
|
|
70
|
+
field,
|
|
71
|
+
countField: "PrimKey",
|
|
72
|
+
filter: null,
|
|
73
|
+
search: "ab",
|
|
74
|
+
withCounts: true,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
expect(parameters.filterObject).toMatchObject({
|
|
78
|
+
type: "group",
|
|
79
|
+
items: [{ column: "Name", operator: "contains", value: "ab" }],
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test("combines the search text with the other criteria", () => {
|
|
84
|
+
let parameters = buildDistinctParameters({
|
|
85
|
+
field,
|
|
86
|
+
countField: "PrimKey",
|
|
87
|
+
filter: tree(expression("Other")),
|
|
88
|
+
search: "ab",
|
|
89
|
+
withCounts: true,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
expect(parameters.filterObject).toMatchObject({
|
|
93
|
+
items: [tree(expression("Other")), { column: "Name", value: "ab" }],
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("caps the number of values loaded", () => {
|
|
98
|
+
let parameters = buildDistinctParameters({ field, countField: "PrimKey", filter: null, withCounts: true });
|
|
99
|
+
|
|
100
|
+
expect(parameters.maxRecords).toBe(200);
|
|
101
|
+
});
|
|
102
|
+
});
|