cx 26.5.1 → 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/locale/de-de.js +1 -0
- package/build/locale/en-us.js +1 -0
- package/build/locale/es-es.js +1 -0
- package/build/locale/fr-fr.js +1 -0
- package/build/locale/nl-nl.js +1 -0
- package/build/locale/pt-pt.js +1 -0
- package/build/locale/sr-latn-ba.js +1 -0
- 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/LookupField.d.ts +6 -0
- package/build/widgets/form/LookupField.d.ts.map +1 -1
- package/build/widgets/form/LookupField.js +12 -0
- package/build/widgets/form/NumberField.js +1 -0
- package/build/widgets/grid/Grid.d.ts +24 -3
- package/build/widgets/grid/Grid.d.ts.map +1 -1
- package/build/widgets/grid/Grid.js +5 -2
- 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 +857 -857
- package/dist/ui.js +94 -9
- package/dist/widgets.css +8 -0
- package/dist/widgets.js +60 -12
- 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/locale/de-de.ts +1 -0
- package/src/locale/en-us.ts +1 -0
- package/src/locale/es-es.ts +1 -0
- package/src/locale/fr-fr.ts +1 -0
- package/src/locale/nl-nl.ts +1 -0
- package/src/locale/pt-pt.ts +1 -0
- package/src/locale/sr-latn-ba.ts +1 -0
- 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/LookupField.spec.tsx +149 -0
- package/src/widgets/form/LookupField.tsx +27 -0
- package/src/widgets/form/NumberField.scss +4 -0
- package/src/widgets/form/NumberField.tsx +1 -0
- package/src/widgets/grid/Grid.scss +6 -0
- package/src/widgets/grid/Grid.tsx +31 -4
- 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/locale/de-de.js
CHANGED
|
@@ -12,6 +12,7 @@ Localization.localize(c, "cx/widgets/LookupField", {
|
|
|
12
12
|
queryErrorText: "Bei der Abfrage der gesuchten Daten ist ein Felhler aufgetreten.",
|
|
13
13
|
noResultsText: "Keine Ergebnisse gefunden.",
|
|
14
14
|
minQueryLengthMessageText: "Geben Sie mindestens {0} Zeichen ein.",
|
|
15
|
+
invalidOptionText: "Die ausgewählte Option ist nicht mehr verfügbar.",
|
|
15
16
|
});
|
|
16
17
|
// In common for Calendar and MonthPicker
|
|
17
18
|
const calendarErrorMessages = {
|
package/build/locale/en-us.js
CHANGED
|
@@ -12,6 +12,7 @@ Localization.localize(c, "cx/widgets/LookupField", {
|
|
|
12
12
|
queryErrorText: "Error occurred while querying for lookup data.",
|
|
13
13
|
noResultsText: "No results found.",
|
|
14
14
|
minQueryLengthMessageText: "Type in at least {0} character(s).",
|
|
15
|
+
invalidOptionText: "The selected option is no longer available.",
|
|
15
16
|
});
|
|
16
17
|
// In common for Calendar and MonthPicker
|
|
17
18
|
const calendarErrorMessages = {
|
package/build/locale/es-es.js
CHANGED
|
@@ -12,6 +12,7 @@ Localization.localize(c, "cx/widgets/LookupField", {
|
|
|
12
12
|
queryErrorText: "Se produjo un error al consultar los datos de búsqueda.",
|
|
13
13
|
noResultsText: "No se han encontrado resultados.",
|
|
14
14
|
minQueryLengthMessageText: "Escriba al menos {0} caracteres.",
|
|
15
|
+
invalidOptionText: "La opción seleccionada ya no está disponible.",
|
|
15
16
|
});
|
|
16
17
|
// In common for Calendar and MonthPicker
|
|
17
18
|
const calendarErrorMessages = {
|
package/build/locale/fr-fr.js
CHANGED
|
@@ -12,6 +12,7 @@ Localization.localize(c, "cx/widgets/LookupField", {
|
|
|
12
12
|
queryErrorText: "Une erreur s'est produite lors de l'interrogation des données de recherche.",
|
|
13
13
|
noResultsText: "Aucun résultat trouvé.",
|
|
14
14
|
minQueryLengthMessageText: "Tapez au moins {0} caractère (s).",
|
|
15
|
+
invalidOptionText: "L'option sélectionnée n'est plus disponible.",
|
|
15
16
|
});
|
|
16
17
|
// In common for Calendar and MonthPicker
|
|
17
18
|
const calendarErrorMessages = {
|
package/build/locale/nl-nl.js
CHANGED
|
@@ -12,6 +12,7 @@ Localization.localize(c, "cx/widgets/LookupField", {
|
|
|
12
12
|
queryErrorText: "Er is een fout opgetreden bij het weergeven van gegevens.",
|
|
13
13
|
noResultsText: "Geen resultaten gevonden",
|
|
14
14
|
minQueryLengthMessageText: "Voer minimaal {0} tekens in.",
|
|
15
|
+
invalidOptionText: "De geselecteerde optie is niet meer beschikbaar.",
|
|
15
16
|
});
|
|
16
17
|
// In common for Calendar and MonthPicker
|
|
17
18
|
const calendarErrorMessages = {
|
package/build/locale/pt-pt.js
CHANGED
|
@@ -12,6 +12,7 @@ Localization.localize(c, "cx/widgets/LookupField", {
|
|
|
12
12
|
queryErrorText: "Ocorreu um erro ao consultar os dados de pesquisa.",
|
|
13
13
|
noResultsText: "Nenhum resultado encontrado.",
|
|
14
14
|
minQueryLengthMessageText: "Digite pelo menos {0} caractere(s).",
|
|
15
|
+
invalidOptionText: "A opção selecionada já não está disponível.",
|
|
15
16
|
});
|
|
16
17
|
// In common for Calendar and MonthPicker
|
|
17
18
|
const calendarErrorMessages = {
|
|
@@ -12,6 +12,7 @@ Localization.localize(c, "cx/widgets/LookupField", {
|
|
|
12
12
|
queryErrorText: "Došlo je do greške kod pribavljanja podataka za prikaz.",
|
|
13
13
|
noResultsText: "Rezultati nisu pronađeni.",
|
|
14
14
|
minQueryLengthMessageText: "Unesite najmanje {0} karakter(a).",
|
|
15
|
+
invalidOptionText: "Izabrana opcija više nije dostupna.",
|
|
15
16
|
});
|
|
16
17
|
// In common for Calendar and MonthPicker
|
|
17
18
|
const calendarErrorMessages = {
|
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 {
|
|
@@ -53,6 +53,10 @@ interface LookupFieldBaseConfig<TOption = any> extends FieldConfig {
|
|
|
53
53
|
loadingText?: string;
|
|
54
54
|
/** Error message displayed if server query throws an exception. */
|
|
55
55
|
queryErrorText?: string;
|
|
56
|
+
/** Set to `true` to report a validation error when the selected value is not present in `options`. Only applies when `options` is an array. Default is `false`. */
|
|
57
|
+
validateOptionExists?: boolean;
|
|
58
|
+
/** Error message displayed when the selected value is not present in `options`. */
|
|
59
|
+
invalidOptionText?: string;
|
|
56
60
|
/** Message to be displayed if no entries match the user query. */
|
|
57
61
|
noResultsText?: string;
|
|
58
62
|
/** Name of the field which holds the id of the option. Default is `id`. */
|
|
@@ -146,6 +150,8 @@ export declare class LookupField<TOption = any, TRecord = any> extends Field<Loo
|
|
|
146
150
|
minOptionsForSearchField: number;
|
|
147
151
|
loadingText: string;
|
|
148
152
|
queryErrorText: string;
|
|
153
|
+
validateOptionExists: boolean;
|
|
154
|
+
invalidOptionText: string;
|
|
149
155
|
noResultsText: string;
|
|
150
156
|
optionIdField: string;
|
|
151
157
|
optionTextField: string;
|