cx 26.6.0 → 26.7.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/build/data/ExposedValueView.js +1 -1
- package/build/data/comparer.d.ts +6 -8
- package/build/data/comparer.d.ts.map +1 -1
- package/build/ui/Prop.d.ts +1 -1
- package/build/ui/Prop.d.ts.map +1 -1
- package/build/ui/adapter/ArrayAdapter.d.ts +4 -6
- package/build/ui/adapter/ArrayAdapter.d.ts.map +1 -1
- package/build/ui/adapter/GroupAdapter.d.ts +22 -2
- package/build/ui/adapter/GroupAdapter.d.ts.map +1 -1
- package/build/ui/adapter/GroupAdapter.js +80 -5
- package/build/widgets/drag-drop/DragSource.d.ts +3 -2
- package/build/widgets/drag-drop/DragSource.d.ts.map +1 -1
- package/build/widgets/drag-drop/DropZone.d.ts +4 -4
- package/build/widgets/drag-drop/DropZone.d.ts.map +1 -1
- package/build/widgets/drag-drop/ops.d.ts +13 -2
- package/build/widgets/drag-drop/ops.d.ts.map +1 -1
- package/build/widgets/drag-drop/ops.js +36 -9
- package/build/widgets/form/NumberField.js +1 -0
- package/build/widgets/grid/Grid.d.ts +19 -3
- package/build/widgets/grid/Grid.d.ts.map +1 -1
- package/build/widgets/grid/Grid.js +2 -0
- package/build/widgets/overlay/captureMouse.d.ts +4 -4
- package/build/widgets/overlay/captureMouse.d.ts.map +1 -1
- package/build/widgets/overlay/captureMouse.js +8 -3
- package/dist/data.js +1 -1
- package/dist/manifest.js +766 -766
- package/dist/ui.js +94 -9
- package/dist/widgets.css +4 -0
- package/dist/widgets.js +42 -10
- package/package.json +1 -1
- package/src/data/ExposedValueView.spec.ts +57 -0
- package/src/data/ExposedValueView.ts +1 -1
- package/src/data/comparer.ts +6 -7
- package/src/ui/Prop.ts +1 -1
- package/src/ui/adapter/ArrayAdapter.ts +6 -8
- package/src/ui/adapter/GroupAdapter.spec.ts +75 -0
- package/src/ui/adapter/GroupAdapter.ts +103 -10
- package/src/widgets/drag-drop/DragSource.tsx +3 -3
- package/src/widgets/drag-drop/DropZone.tsx +5 -5
- package/src/widgets/drag-drop/ops.tsx +54 -12
- package/src/widgets/form/NumberField.scss +4 -0
- package/src/widgets/form/NumberField.tsx +1 -0
- package/src/widgets/grid/Grid.tsx +23 -2
- package/src/widgets/overlay/captureMouse.ts +14 -7
|
@@ -45,7 +45,7 @@ export class ExposedValueView extends View {
|
|
|
45
45
|
if (path == this.recordName) {
|
|
46
46
|
data = this.getData();
|
|
47
47
|
container = this.containerBinding.value(data);
|
|
48
|
-
if (!container || !container.hasOwnProperty(
|
|
48
|
+
if (!container || !container.hasOwnProperty(this.key))
|
|
49
49
|
return false;
|
|
50
50
|
newContainer = Object.assign({}, container);
|
|
51
51
|
delete newContainer[this.key];
|
package/build/data/comparer.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
field?: string;
|
|
4
|
-
direction?: string;
|
|
1
|
+
import type { CollatorOptions, Sorter } from "../ui/Prop";
|
|
2
|
+
export interface ExtendedSorter extends Sorter {
|
|
5
3
|
comparer?: (a: any, b: any) => number;
|
|
6
4
|
compare?: (a: any, b: any) => number;
|
|
5
|
+
sortOptions?: CollatorOptions;
|
|
7
6
|
}
|
|
8
|
-
export declare function getComparer(sorters:
|
|
9
|
-
export declare function indexSorter(sorters:
|
|
10
|
-
export declare function sorter(sorters:
|
|
11
|
-
export {};
|
|
7
|
+
export declare function getComparer(sorters: ExtendedSorter[], dataAccessor?: (x: any) => any, comparer?: (a: any, b: any) => number): (a: any, b: any) => number;
|
|
8
|
+
export declare function indexSorter(sorters: ExtendedSorter[], dataAccessor?: (x: any) => any, compare?: (a: any, b: any) => number): (data: any[]) => number[];
|
|
9
|
+
export declare function sorter(sorters: ExtendedSorter[], dataAccessor?: (x: any) => any, compare?: (a: any, b: any) => number): (data: any[]) => any[];
|
|
12
10
|
//# sourceMappingURL=comparer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparer.d.ts","sourceRoot":"","sources":["../../src/data/comparer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"comparer.d.ts","sourceRoot":"","sources":["../../src/data/comparer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC3C,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,wBAAgB,WAAW,CACxB,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,EAC9B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,MAAM,GACrC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,MAAM,CAkC5B;AAED,wBAAgB,WAAW,CACxB,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,EAC9B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,MAAM,GACpC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,EAAE,CAO3B;AAED,wBAAgB,MAAM,CACnB,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,EAC9B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,MAAM,GACpC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,CAQxB"}
|
package/build/ui/Prop.d.ts
CHANGED
|
@@ -82,7 +82,7 @@ export type RecordAlias = string | {
|
|
|
82
82
|
export type SortDirection = "ASC" | "DESC";
|
|
83
83
|
export interface Sorter {
|
|
84
84
|
field?: string;
|
|
85
|
-
value?:
|
|
85
|
+
value?: Prop<any>;
|
|
86
86
|
direction: SortDirection;
|
|
87
87
|
}
|
|
88
88
|
export interface CollatorOptions {
|
package/build/ui/Prop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Prop.d.ts","sourceRoot":"","sources":["../../src/ui/Prop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Prop.d.ts","sourceRoot":"","sources":["../../src/ui/Prop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { DataAdapter, DataAdapterRecord, DataAdapterConfig } from "./DataAdapter";
|
|
2
|
+
import { type ExtendedSorter } from "../../data/comparer";
|
|
2
3
|
import { Accessor } from "../../data/getAccessor";
|
|
3
4
|
import { RenderingContext } from "../RenderingContext";
|
|
4
5
|
import { Instance } from "../Instance";
|
|
5
6
|
import { View } from "../../data/View";
|
|
6
|
-
import { Prop,
|
|
7
|
+
import { Prop, CollatorOptions } from "../Prop";
|
|
7
8
|
export interface RecordStoreCache {
|
|
8
9
|
recordStoreCache: WeakMap<any, View>;
|
|
9
10
|
cacheByKey: Record<string | number, View>;
|
|
@@ -17,10 +18,7 @@ export interface ArrayAdapterConfig extends DataAdapterConfig {
|
|
|
17
18
|
sortOptions?: CollatorOptions;
|
|
18
19
|
preserveOrder?: boolean;
|
|
19
20
|
}
|
|
20
|
-
export
|
|
21
|
-
comparer?: (a: any, b: any) => number;
|
|
22
|
-
sortOptions?: CollatorOptions;
|
|
23
|
-
}
|
|
21
|
+
export type { ExtendedSorter } from "../../data/comparer";
|
|
24
22
|
export interface ResolvedSorter {
|
|
25
23
|
getter: (x: any) => any;
|
|
26
24
|
factor: number;
|
|
@@ -44,6 +42,6 @@ export declare class ArrayAdapter<T = any> extends DataAdapter<T> {
|
|
|
44
42
|
setFilter(filterFn?: (data: T) => boolean): void;
|
|
45
43
|
getComparer(sortOptions?: CollatorOptions): ((a: any, b: any) => number) | undefined;
|
|
46
44
|
buildSorter(sorters: ExtendedSorter[]): void;
|
|
47
|
-
sort(sorters?:
|
|
45
|
+
sort(sorters?: ExtendedSorter[]): void;
|
|
48
46
|
}
|
|
49
47
|
//# sourceMappingURL=ArrayAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayAdapter.d.ts","sourceRoot":"","sources":["../../../src/ui/adapter/ArrayAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ArrayAdapter.d.ts","sourceRoot":"","sources":["../../../src/ui/adapter/ArrayAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Grouper } from "../../data/Grouper";
|
|
2
2
|
import { View } from "../../data/View";
|
|
3
3
|
import { Instance } from "../Instance";
|
|
4
|
-
import { Prop, SortDirection, StructuredProp } from "../Prop";
|
|
4
|
+
import { Prop, SortDirection, Sorter, StructuredProp } from "../Prop";
|
|
5
5
|
import { RenderingContext } from "../RenderingContext";
|
|
6
|
-
import { ArrayAdapter, ArrayAdapterConfig, RecordStoreCache } from "./ArrayAdapter";
|
|
6
|
+
import { ArrayAdapter, ArrayAdapterConfig, ExtendedSorter, RecordStoreCache } from "./ArrayAdapter";
|
|
7
7
|
import { DataAdapterRecord } from "./DataAdapter";
|
|
8
8
|
export interface GroupKey {
|
|
9
9
|
[field: string]: Prop<any> | {
|
|
@@ -17,7 +17,17 @@ export interface GroupingConfig {
|
|
|
17
17
|
text?: Prop<string>;
|
|
18
18
|
includeHeader?: boolean;
|
|
19
19
|
includeFooter?: boolean;
|
|
20
|
+
/** Custom group comparer. Takes precedence over `sortField`/`sortDirection`/`sorters`. */
|
|
20
21
|
comparer?: ((a: any, b: any) => number) | null;
|
|
22
|
+
/**
|
|
23
|
+
* Sort groups by a single field resolved against the group's `key`, `aggregates` and `name`.
|
|
24
|
+
* Use an aggregate alias (e.g. `"total"`) to sort by an aggregate, or a key field to sort by key.
|
|
25
|
+
*/
|
|
26
|
+
sortField?: string;
|
|
27
|
+
/** Sort direction used together with `sortField`. Defaults to `"ASC"`. */
|
|
28
|
+
sortDirection?: SortDirection;
|
|
29
|
+
/** Multi-field group sorting. Each sorter's `field` is resolved against the group's `key`, `aggregates` and `name`. */
|
|
30
|
+
sorters?: Sorter[];
|
|
21
31
|
header?: any;
|
|
22
32
|
footer?: any;
|
|
23
33
|
}
|
|
@@ -42,6 +52,8 @@ export interface GroupAdapterConfig extends ArrayAdapterConfig {
|
|
|
42
52
|
groupRecordsName?: string;
|
|
43
53
|
groupings?: GroupingConfig[] | null;
|
|
44
54
|
groupName?: string;
|
|
55
|
+
/** When enabled, the active record sorters also reorder groups (resolved against each group's key/aggregates/name). */
|
|
56
|
+
sortGroupsBySorters?: boolean;
|
|
45
57
|
}
|
|
46
58
|
export declare class GroupAdapter<T = any> extends ArrayAdapter<T> {
|
|
47
59
|
aggregates?: StructuredProp;
|
|
@@ -49,7 +61,15 @@ export declare class GroupAdapter<T = any> extends ArrayAdapter<T> {
|
|
|
49
61
|
groupRecordsName?: string;
|
|
50
62
|
groupings?: ResolvedGrouping[] | null;
|
|
51
63
|
groupName: string;
|
|
64
|
+
sortGroupsBySorters?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Per-level comparer derived from the active record sorters, used to reorder groups when
|
|
67
|
+
* `sortGroupsBySorters` is set. A level's entry is `null` when no active sorter maps to that
|
|
68
|
+
* level's key/aggregate, so the grouping's own configured order is kept.
|
|
69
|
+
*/
|
|
70
|
+
protected groupSortComparers?: (((a: any, b: any) => number) | null)[];
|
|
52
71
|
constructor(config?: GroupAdapterConfig);
|
|
72
|
+
sort(sorters?: ExtendedSorter[]): void;
|
|
53
73
|
init(): void;
|
|
54
74
|
getRecords(context: RenderingContext, instance: Instance & Partial<RecordStoreCache>, records: T[], parentStore: View): DataAdapterRecord<T>[];
|
|
55
75
|
protected processLevel(keys: any[], records: DataAdapterRecord<T>[], result: DataAdapterRecord<T>[], parentStore: View): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupAdapter.d.ts","sourceRoot":"","sources":["../../../src/ui/adapter/GroupAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupAdapter.d.ts","sourceRoot":"","sources":["../../../src/ui/adapter/GroupAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,40 @@ import { Grouper } from "../../data/Grouper";
|
|
|
3
3
|
import { ReadOnlyDataView } from "../../data/ReadOnlyDataView";
|
|
4
4
|
import { isDataRecord } from "../../util";
|
|
5
5
|
import { isArray } from "../../util/isArray";
|
|
6
|
+
import { isDefined } from "../../util/isDefined";
|
|
7
|
+
import { isNonEmptyArray } from "../../util/isNonEmptyArray";
|
|
6
8
|
import { Culture } from "../Culture";
|
|
7
9
|
import { ArrayAdapter } from "./ArrayAdapter";
|
|
8
10
|
export class GroupAdapter extends ArrayAdapter {
|
|
11
|
+
/**
|
|
12
|
+
* Per-level comparer derived from the active record sorters, used to reorder groups when
|
|
13
|
+
* `sortGroupsBySorters` is set. A level's entry is `null` when no active sorter maps to that
|
|
14
|
+
* level's key/aggregate, so the grouping's own configured order is kept.
|
|
15
|
+
*/
|
|
16
|
+
groupSortComparers;
|
|
9
17
|
constructor(config) {
|
|
10
18
|
super(config);
|
|
11
19
|
}
|
|
20
|
+
sort(sorters) {
|
|
21
|
+
super.sort(sorters);
|
|
22
|
+
// When enabled, derive a group comparer from the active record sorters so that interactive
|
|
23
|
+
// column sorting also reorders the groups. A column only reorders groups at levels where its
|
|
24
|
+
// field is a group key or aggregate; other levels keep their configured order. The record-level
|
|
25
|
+
// value selector is ignored — the field is resolved against the group's key/aggregates/name.
|
|
26
|
+
if (this.sortGroupsBySorters && this.groupings) {
|
|
27
|
+
const cultureComparer = this.sortOptions ? Culture.getComparer(this.sortOptions) : undefined;
|
|
28
|
+
const colSorters = isNonEmptyArray(sorters)
|
|
29
|
+
? sorters.map((s) => ({ field: s.field, direction: s.direction, comparer: s.comparer }))
|
|
30
|
+
: [];
|
|
31
|
+
this.groupSortComparers = this.groupings.map((g) => {
|
|
32
|
+
if (colSorters.length === 0)
|
|
33
|
+
return null;
|
|
34
|
+
const fields = groupFieldNames(g, this.aggregates);
|
|
35
|
+
const applicable = colSorters.filter((s) => s.field && fields.has(s.field));
|
|
36
|
+
return applicable.length > 0 ? buildGroupComparer(applicable, cultureComparer) : null;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
12
40
|
init() {
|
|
13
41
|
super.init();
|
|
14
42
|
if (this.groupRecordsAlias) {
|
|
@@ -44,8 +72,12 @@ export class GroupAdapter extends ArrayAdapter {
|
|
|
44
72
|
grouper.reset();
|
|
45
73
|
grouper.processAll(records);
|
|
46
74
|
let results = grouper.getResults();
|
|
47
|
-
|
|
48
|
-
|
|
75
|
+
// An active column sort that maps to this level's key/aggregate (when `sortGroupsBySorters` is
|
|
76
|
+
// enabled) takes over; otherwise the grouping's configured comparer (or implicit key order) applies.
|
|
77
|
+
const dynamicComparer = this.sortGroupsBySorters ? this.groupSortComparers?.[level] : undefined;
|
|
78
|
+
const comparer = dynamicComparer ?? grouping.comparer;
|
|
79
|
+
if (comparer && !this.preserveOrder) {
|
|
80
|
+
results.sort(comparer);
|
|
49
81
|
}
|
|
50
82
|
results.forEach((gr) => {
|
|
51
83
|
keys.push(gr.key);
|
|
@@ -118,10 +150,21 @@ export class GroupAdapter extends ArrayAdapter {
|
|
|
118
150
|
});
|
|
119
151
|
}
|
|
120
152
|
const grouper = new Grouper(key, { ...this.aggregates, ...g.aggregates }, (r) => r.store.getData(), g.text);
|
|
153
|
+
const cultureComparer = this.sortOptions ? Culture.getComparer(this.sortOptions) : undefined;
|
|
154
|
+
// Sort groups by an aggregate/key/name through `sortField`/`sortDirection` or a `sorters` array.
|
|
155
|
+
let sortSorters = null;
|
|
156
|
+
if (isNonEmptyArray(g.sorters))
|
|
157
|
+
sortSorters = g.sorters;
|
|
158
|
+
else if (g.sortField)
|
|
159
|
+
sortSorters = [{ field: g.sortField, direction: g.sortDirection ?? "ASC" }];
|
|
160
|
+
// `comparer`, `sortField`/`sorters` and the implicit key order are equivalent alternatives; an
|
|
161
|
+
// explicit `comparer` wins, then declarative sorters, then sorting by key in declaration order.
|
|
121
162
|
const comparer = g.comparer ??
|
|
122
|
-
(
|
|
123
|
-
?
|
|
124
|
-
:
|
|
163
|
+
(sortSorters
|
|
164
|
+
? buildGroupComparer(sortSorters, cultureComparer)
|
|
165
|
+
: groupSorters.length > 0
|
|
166
|
+
? getComparer(groupSorters, (x) => x.key, cultureComparer)
|
|
167
|
+
: null);
|
|
125
168
|
return {
|
|
126
169
|
...g,
|
|
127
170
|
key: resolvedKey,
|
|
@@ -137,6 +180,38 @@ export class GroupAdapter extends ArrayAdapter {
|
|
|
137
180
|
}
|
|
138
181
|
GroupAdapter.prototype.groupName = "$group";
|
|
139
182
|
GroupAdapter.prototype.preserveOrder = false;
|
|
183
|
+
GroupAdapter.prototype.sortGroupsBySorters = false;
|
|
184
|
+
// The set of fields a group can be sorted by at a given level: its key fields, its aggregate aliases
|
|
185
|
+
// and the group name. Used to decide whether an active column sort applies to that grouping level.
|
|
186
|
+
function groupFieldNames(grouping, adapterAggregates) {
|
|
187
|
+
const names = new Set();
|
|
188
|
+
for (const k of grouping.grouper.keys)
|
|
189
|
+
names.add(k.name);
|
|
190
|
+
const aggregates = { ...adapterAggregates, ...grouping.aggregates };
|
|
191
|
+
for (const a in aggregates)
|
|
192
|
+
names.add(a);
|
|
193
|
+
names.add("name");
|
|
194
|
+
names.add("$name");
|
|
195
|
+
return names;
|
|
196
|
+
}
|
|
197
|
+
// Reads a sort field straight from the GroupResult — first its key fields, then its aggregates, then
|
|
198
|
+
// its name. Returns a plain selector so groups can be sorted without cloning the result per comparison.
|
|
199
|
+
function groupFieldSelector(field) {
|
|
200
|
+
if (field === "name" || field === "$name")
|
|
201
|
+
return (gr) => gr?.name;
|
|
202
|
+
return (gr) => {
|
|
203
|
+
if (gr?.key && field in gr.key)
|
|
204
|
+
return gr.key[field];
|
|
205
|
+
if (gr?.aggregates && field in gr.aggregates)
|
|
206
|
+
return gr.aggregates[field];
|
|
207
|
+
return undefined;
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// Builds a group comparer from a list of sorters. Each sorter resolves by its explicit `value`
|
|
211
|
+
// selector, or by `field` looked up against the group's key/aggregates/name.
|
|
212
|
+
function buildGroupComparer(sorters, cultureComparer) {
|
|
213
|
+
return getComparer(sorters.map((s) => (isDefined(s.value) || !s.field ? s : { ...s, value: groupFieldSelector(s.field) })), undefined, cultureComparer);
|
|
214
|
+
}
|
|
140
215
|
function serializeKey(data) {
|
|
141
216
|
if (isDataRecord(data)) {
|
|
142
217
|
return Object.keys(data)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** @jsxImportSource react */
|
|
2
2
|
import { StyledContainerBase, StyledContainerConfig } from "../../ui/Container";
|
|
3
|
+
import { DragEndEvent } from "./ops";
|
|
3
4
|
import { Instance } from "../../ui/Instance";
|
|
4
5
|
import { StringProp, StyleProp, ClassProp, Config } from "../../ui/Prop";
|
|
5
6
|
import { RenderingContext } from "../../ui/RenderingContext";
|
|
@@ -19,7 +20,7 @@ export interface DragSourceConfig extends StyledContainerConfig {
|
|
|
19
20
|
/** Base CSS class to be applied to the element. Defaults to 'dragsource'. */
|
|
20
21
|
baseClass?: string;
|
|
21
22
|
onDragStart?: (e: React.MouseEvent | React.TouchEvent, instance: Instance) => any;
|
|
22
|
-
onDragEnd?: (e:
|
|
23
|
+
onDragEnd?: (e: DragEndEvent, instance: Instance) => void;
|
|
23
24
|
id?: StringProp;
|
|
24
25
|
/** Custom contents to be displayed during drag & drop operation. */
|
|
25
26
|
clone?: Config;
|
|
@@ -45,7 +46,7 @@ export declare class DragSource extends StyledContainerBase<DragSourceConfig, Dr
|
|
|
45
46
|
cloneStyle: any;
|
|
46
47
|
draggedStyle: any;
|
|
47
48
|
onDragStart?: (e: React.MouseEvent | React.TouchEvent, instance: DragSourceInstance) => any;
|
|
48
|
-
onDragEnd?: (e:
|
|
49
|
+
onDragEnd?: (e: DragEndEvent, instance: DragSourceInstance) => void;
|
|
49
50
|
constructor(config?: DragSourceConfig);
|
|
50
51
|
init(): void;
|
|
51
52
|
declareData(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragSource.d.ts","sourceRoot":"","sources":["../../../src/widgets/drag-drop/DragSource.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAG7B,OAAO,EAAkC,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"DragSource.d.ts","sourceRoot":"","sources":["../../../src/widgets/drag-drop/DragSource.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAG7B,OAAO,EAAkC,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAyE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG5G,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC5D;;;OAGG;IACH,IAAI,CAAC,EAAE,GAAG,CAAC;IAEX;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,sGAAsG;IACtG,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK,GAAG,CAAC;IAElF,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IAE1D,EAAE,CAAC,EAAE,UAAU,CAAC;IAEhB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB,oFAAoF;IACpF,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,uEAAuE;IACvE,YAAY,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAmB,SAAQ,QAAQ,CAAC,UAAU,CAAC;IAC7D,WAAW,EAAE,GAAG,EAAE,CAAC;CACrB;AAED,qBAAa,UAAW,SAAQ,mBAAmB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;IAC9E,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,KAAK,GAAG,CAAC;IAC5F,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;gBAEhE,MAAM,CAAC,EAAE,gBAAgB;IAIrC,IAAI;IAMJ,WAAW;IAWX,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,kBAAkB;IAK/D,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,kBAAkB;IAItE,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM;CAO7E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @jsxImportSource react */
|
|
2
2
|
import { StyledContainerBase, StyledContainerConfig } from "../../ui/Container";
|
|
3
|
-
import { DragEvent } from "./ops";
|
|
3
|
+
import { DragEvent, DragEndEvent } from "./ops";
|
|
4
4
|
import { Instance } from "../../ui/Instance";
|
|
5
5
|
import { StyleProp, ClassProp, StructuredProp } from "../../ui/Prop";
|
|
6
6
|
import { RenderingContext } from "../../ui/RenderingContext";
|
|
@@ -63,8 +63,8 @@ export interface DropZoneConfig extends StyledContainerConfig {
|
|
|
63
63
|
onDragLeave?: string | ((event: DragEvent, instance: Instance) => void);
|
|
64
64
|
/** A callback method invoked when at the beginning of the drag & drop operation. */
|
|
65
65
|
onDragStart?: string | ((event: DragEvent, instance: Instance) => void);
|
|
66
|
-
/** A callback method invoked when at the end of the drag & drop operation. */
|
|
67
|
-
onDragEnd?: string | ((event:
|
|
66
|
+
/** A callback method invoked when at the end of the drag & drop operation. `event.cancelled` is `true` when the operation was cancelled (e.g. via Esc) instead of dropped. */
|
|
67
|
+
onDragEnd?: string | ((event: DragEndEvent, instance: Instance) => void);
|
|
68
68
|
/** Match height of the item being dragged */
|
|
69
69
|
matchHeight?: boolean;
|
|
70
70
|
/** Match width of the item being dragged */
|
|
@@ -95,7 +95,7 @@ export declare class DropZone extends StyledContainerBase<DropZoneConfig, DropZo
|
|
|
95
95
|
onDragEnter?: string | ((event?: DragEvent, instance?: Instance) => void);
|
|
96
96
|
onDragLeave?: string | ((event?: DragEvent, instance?: Instance) => void);
|
|
97
97
|
onDragStart?: string | ((event?: DragEvent, instance?: Instance) => void);
|
|
98
|
-
onDragEnd?: string | ((event?:
|
|
98
|
+
onDragEnd?: string | ((event?: DragEndEvent, instance?: Instance) => void);
|
|
99
99
|
constructor(config?: DropZoneConfig);
|
|
100
100
|
init(): void;
|
|
101
101
|
declareData(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropZone.d.ts","sourceRoot":"","sources":["../../../src/widgets/drag-drop/DropZone.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAG7B,OAAO,EAAkC,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhH,OAAO,EAAqC,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DropZone.d.ts","sourceRoot":"","sources":["../../../src/widgets/drag-drop/DropZone.tsx"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,17 @@ export interface DragEvent {
|
|
|
16
16
|
dataTransfer?: DataTransfer;
|
|
17
17
|
result?: any;
|
|
18
18
|
}
|
|
19
|
+
export interface DragEndEvent {
|
|
20
|
+
type: "dragend";
|
|
21
|
+
/** The triggering pointer event, or `null` when the operation was cancelled via the keyboard. */
|
|
22
|
+
event: DragEvent["event"] | null;
|
|
23
|
+
/** Cursor position, or `null` when the operation was cancelled via the keyboard. */
|
|
24
|
+
cursor: CursorPosition | null;
|
|
25
|
+
source: DragEvent["source"];
|
|
26
|
+
/** `true` when the operation was cancelled (e.g. by pressing Esc) instead of dropped. */
|
|
27
|
+
cancelled: boolean;
|
|
28
|
+
result?: any;
|
|
29
|
+
}
|
|
19
30
|
export interface DragDropOptions {
|
|
20
31
|
sourceEl?: Element | null;
|
|
21
32
|
clone?: any;
|
|
@@ -30,7 +41,7 @@ export interface IDropZone {
|
|
|
30
41
|
onDragStart?: DragEventHandler;
|
|
31
42
|
onDragAway?: DragEventHandler;
|
|
32
43
|
onDragNear?: DragEventHandler;
|
|
33
|
-
onDragEnd?:
|
|
44
|
+
onDragEnd?: (e: DragEndEvent) => void;
|
|
34
45
|
onDragMeasure?: (e: DragEvent, operation: DragDropOperationContext) => {
|
|
35
46
|
over: number | false;
|
|
36
47
|
near: number | boolean;
|
|
@@ -44,7 +55,7 @@ export interface IDropZone {
|
|
|
44
55
|
}
|
|
45
56
|
export type UnregisterFunction = () => void;
|
|
46
57
|
export declare function registerDropZone(dropZone: IDropZone): UnregisterFunction;
|
|
47
|
-
export declare function initiateDragDrop(e: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent, options?: DragDropOptions, onDragEnd?: (e?:
|
|
58
|
+
export declare function initiateDragDrop(e: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent, options?: DragDropOptions, onDragEnd?: (e?: DragEndEvent) => void): void;
|
|
48
59
|
export declare function ddMouseDown(e: React.MouseEvent | React.TouchEvent): void;
|
|
49
60
|
export declare function ddMouseUp(): void;
|
|
50
61
|
export declare function ddDetect(e: MouseEvent | TouchEvent | React.TouchEvent | React.MouseEvent): void | true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../../src/widgets/drag-drop/ops.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAqC,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE5F,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAIvC,MAAM,WAAW,SAAS;IACvB,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5C,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACrE,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,EAAE,IAAI,CAAC;QACZ,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;KACvB,CAAC;IACF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC7B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACtC,IAAI,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;AAEtD,MAAM,WAAW,SAAS;IACvB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC;IACvC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../../src/widgets/drag-drop/ops.tsx"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ let puppet = null;
|
|
|
19
19
|
let scrollTimer = null;
|
|
20
20
|
let vscrollParent = null;
|
|
21
21
|
let hscrollParent = null;
|
|
22
|
+
let releaseCapture = null;
|
|
22
23
|
export function registerDropZone(dropZone) {
|
|
23
24
|
dropZones.push(dropZone);
|
|
24
25
|
return () => {
|
|
@@ -107,7 +108,16 @@ export function initiateDragDrop(e, options = {}, onDragEnd) {
|
|
|
107
108
|
dragStartedZones.set(zone, true);
|
|
108
109
|
});
|
|
109
110
|
notifyDragMove(e, null);
|
|
110
|
-
captureMouseOrTouch(e, notifyDragMove, notifyDragDrop);
|
|
111
|
+
releaseCapture = captureMouseOrTouch(e, notifyDragMove, notifyDragDrop);
|
|
112
|
+
document.addEventListener("keydown", onDragKeyDown, true);
|
|
113
|
+
}
|
|
114
|
+
function onDragKeyDown(e) {
|
|
115
|
+
if (!puppet || e.key !== "Escape")
|
|
116
|
+
return;
|
|
117
|
+
//cancel the operation without dropping; there is no pointer event to report
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
e.stopPropagation();
|
|
120
|
+
notifyDragDrop(null, true);
|
|
111
121
|
}
|
|
112
122
|
function notifyDragMove(e, _captureData) {
|
|
113
123
|
let event = getDragEvent(e, "dragmove");
|
|
@@ -222,27 +232,44 @@ function clearScrollTimer() {
|
|
|
222
232
|
scrollTimer = null;
|
|
223
233
|
}
|
|
224
234
|
}
|
|
225
|
-
function notifyDragDrop(e) {
|
|
235
|
+
function notifyDragDrop(e, cancelled = false) {
|
|
236
|
+
if (!puppet)
|
|
237
|
+
return;
|
|
226
238
|
clearScrollTimer();
|
|
227
|
-
|
|
239
|
+
document.removeEventListener("keydown", onDragKeyDown, true);
|
|
228
240
|
if (puppet.stop)
|
|
229
241
|
puppet.stop();
|
|
230
|
-
|
|
231
|
-
|
|
242
|
+
//a keyboard cancellation has no pointer event, so the drop and away notifications are skipped
|
|
243
|
+
let dropEvent = !cancelled && e ? getDragEvent(e, "dragdrop") : null;
|
|
244
|
+
let result;
|
|
245
|
+
if (dropEvent && activeZone && activeZone.onDrop)
|
|
246
|
+
result = activeZone.onDrop(dropEvent);
|
|
247
|
+
let endEvent = {
|
|
248
|
+
type: "dragend",
|
|
249
|
+
event: e,
|
|
250
|
+
cursor: e ? getCursorPos(e) : null,
|
|
251
|
+
source: puppet.source,
|
|
252
|
+
cancelled,
|
|
253
|
+
result,
|
|
254
|
+
};
|
|
232
255
|
dropZones.forEach((zone) => {
|
|
233
|
-
if (nearZones != null && zone.onDragAway && nearZones.has(zone))
|
|
234
|
-
zone.onDragAway(
|
|
256
|
+
if (dropEvent && nearZones != null && zone.onDragAway && nearZones.has(zone))
|
|
257
|
+
zone.onDragAway(dropEvent);
|
|
235
258
|
if (!dragStartedZones.has(zone))
|
|
236
259
|
return;
|
|
237
260
|
if (zone.onDragEnd)
|
|
238
|
-
zone.onDragEnd(
|
|
261
|
+
zone.onDragEnd(endEvent);
|
|
239
262
|
});
|
|
240
263
|
if (puppet.onDragEnd)
|
|
241
|
-
puppet.onDragEnd(
|
|
264
|
+
puppet.onDragEnd(endEvent);
|
|
265
|
+
//tear down the mouse/touch capture when cancelling; on a normal drop the capture ends itself
|
|
266
|
+
if (cancelled && releaseCapture)
|
|
267
|
+
releaseCapture();
|
|
242
268
|
nearZones = null;
|
|
243
269
|
activeZone = null;
|
|
244
270
|
puppet = null;
|
|
245
271
|
dragStartedZones = null;
|
|
272
|
+
releaseCapture = null;
|
|
246
273
|
}
|
|
247
274
|
function getDragEvent(event, type) {
|
|
248
275
|
return {
|
|
@@ -141,6 +141,7 @@ class Input extends VDOM.Component {
|
|
|
141
141
|
visited: state.visited,
|
|
142
142
|
focus: this.state.focus,
|
|
143
143
|
icon: !!icon,
|
|
144
|
+
clear: insideButton != null,
|
|
144
145
|
empty: empty && !data.placeholder,
|
|
145
146
|
error: data.error &&
|
|
146
147
|
(state.visited || !suppressErrorsUntilVisited || !empty),
|
|
@@ -5,14 +5,14 @@ import { DataAdapter, DataAdapterRecord } from "../../ui/adapter/DataAdapter";
|
|
|
5
5
|
import { GroupAdapter } from "../../ui/adapter/GroupAdapter";
|
|
6
6
|
import { ContainerBase, StyledContainerConfig } from "../../ui/Container";
|
|
7
7
|
import { Instance } from "../../ui/Instance";
|
|
8
|
-
import { BooleanProp, ClassProp, CollatorOptions, Config, DataRecord, NumberProp, Prop, RecordAlias, SortDirection, SortersProp, StringProp, StructuredProp, StyleProp, UnknownProp } from "../../ui/Prop";
|
|
8
|
+
import { BooleanProp, ClassProp, CollatorOptions, Config, DataRecord, NumberProp, Prop, RecordAlias, Sorter, SortDirection, SortersProp, StringProp, StructuredProp, StyleProp, UnknownProp } from "../../ui/Prop";
|
|
9
9
|
import { PureContainerConfig } from "../../ui/PureContainer";
|
|
10
10
|
import { RenderingContext } from "../../ui/RenderingContext";
|
|
11
11
|
import { Selection, SimpleSelection } from "../../ui/selection/Selection";
|
|
12
12
|
import type { KeySelection } from "../../ui/selection/KeySelection";
|
|
13
13
|
import type { PropertySelection } from "../../ui/selection/PropertySelection";
|
|
14
14
|
import { WidgetConfig } from "../../ui/Widget";
|
|
15
|
-
import { DragEvent } from "../drag-drop/ops";
|
|
15
|
+
import { DragEvent, DragEndEvent } from "../drag-drop/ops";
|
|
16
16
|
import { GridRow, GridRowConfig, GridRowInstance } from "./GridRow";
|
|
17
17
|
import { CreateConfig } from "../../util";
|
|
18
18
|
import type { TreeAdapter } from "../../ui/adapter/TreeAdapter";
|
|
@@ -81,6 +81,15 @@ export interface GridGroupingConfig<T> {
|
|
|
81
81
|
name?: StringProp;
|
|
82
82
|
text?: StringProp;
|
|
83
83
|
comparer?: (a: GroupingResult<T>, b: GroupingResult<T>) => number;
|
|
84
|
+
/**
|
|
85
|
+
* Sort groups by a single field resolved against the group's key, aggregates and name.
|
|
86
|
+
* Use an aggregate alias to sort by an aggregate, or a key field to sort by key.
|
|
87
|
+
*/
|
|
88
|
+
sortField?: string;
|
|
89
|
+
/** Sort direction used together with `sortField`. Defaults to `"ASC"`. */
|
|
90
|
+
sortDirection?: SortDirection;
|
|
91
|
+
/** Multi-field group sorting. Each sorter's `field` is resolved against the group's key, aggregates and name. */
|
|
92
|
+
sorters?: Sorter[];
|
|
84
93
|
}
|
|
85
94
|
export interface GridColumnHeaderConfig {
|
|
86
95
|
text?: StringProp;
|
|
@@ -250,7 +259,7 @@ export interface GridConfig<T = any> extends StyledContainerConfig {
|
|
|
250
259
|
onDrop?: string | ((e: GridDragEvent<T>, instance: Instance) => void);
|
|
251
260
|
onDropTest?: string | ((e: DragEvent, instance: Instance) => boolean);
|
|
252
261
|
onDragStart?: string | ((e: DragEvent, instance: Instance) => void);
|
|
253
|
-
onDragEnd?: string | ((e:
|
|
262
|
+
onDragEnd?: string | ((e: DragEndEvent, instance: Instance) => void);
|
|
254
263
|
onDragOver?: string | ((e: GridDragEvent<T>, instance: Instance) => void | boolean);
|
|
255
264
|
onRowDropTest?: string | ((e: DragEvent, instance: Instance) => boolean);
|
|
256
265
|
onRowDragOver?: string | ((e: GridRowDragEvent<T>, instance: Instance) => void | boolean);
|
|
@@ -331,6 +340,12 @@ export interface GridConfig<T = any> extends StyledContainerConfig {
|
|
|
331
340
|
onRef?: string | ((element: any, instance: GridInstance) => void);
|
|
332
341
|
/** When enabled, groups are shown in the same order as the source records. */
|
|
333
342
|
preserveGroupOrder?: boolean;
|
|
343
|
+
/**
|
|
344
|
+
* When enabled, sorting by a column header also reorders groups. The active sort field is resolved
|
|
345
|
+
* against each group's key fields, aggregates and name, so it works for both grouping columns and
|
|
346
|
+
* aggregate columns. Ignored when `preserveGroupOrder` is set.
|
|
347
|
+
*/
|
|
348
|
+
sortGroups?: boolean;
|
|
334
349
|
}
|
|
335
350
|
export interface GridCellInfo {
|
|
336
351
|
column: any;
|
|
@@ -452,6 +467,7 @@ export declare class Grid<T = unknown> extends ContainerBase<GridConfig<T>, Grid
|
|
|
452
467
|
onCreateIsRecordDraggable?: any;
|
|
453
468
|
onRef?: any;
|
|
454
469
|
preserveGroupOrder: boolean;
|
|
470
|
+
sortGroups: boolean;
|
|
455
471
|
styled: boolean;
|
|
456
472
|
selectable?: boolean;
|
|
457
473
|
recordsAccessor: any;
|