cx 24.3.7 → 24.3.9

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.
@@ -1,138 +1,141 @@
1
- import { ArrayAdapter } from "./ArrayAdapter";
2
- import { ReadOnlyDataView } from "../../data/ReadOnlyDataView";
3
- import { Grouper } from "../../data/Grouper";
4
- import { isArray } from "../../util/isArray";
5
- import { isDefined } from "../../util/isDefined";
6
- import { getComparer } from "../../data/comparer";
7
- import { Culture } from "../Culture";
8
-
9
- export class GroupAdapter extends ArrayAdapter {
10
- init() {
11
- super.init();
12
-
13
- if (this.groupRecordsAlias) this.groupRecordsName = this.groupRecordsAlias;
14
-
15
- if (this.groupings) this.groupBy(this.groupings);
16
- }
17
-
18
- getRecords(context, instance, records, parentStore) {
19
- let result = super.getRecords(context, instance, records, parentStore);
20
-
21
- if (this.groupings) {
22
- let groupedResults = [];
23
- this.processLevel([], result, groupedResults, parentStore);
24
- result = groupedResults;
25
- }
26
-
27
- return result;
28
- }
29
-
30
- processLevel(keys, records, result, parentStore) {
31
- let level = keys.length;
32
- let inverseLevel = this.groupings.length - level;
33
-
34
- if (inverseLevel == 0) {
35
- for (let i = 0; i < records.length; i++) {
36
- records[i].store.setStore(parentStore);
37
- result.push(records[i]);
38
- }
39
- return;
40
- }
41
-
42
- let grouping = this.groupings[level];
43
- let { grouper } = grouping;
44
- grouper.reset();
45
- grouper.processAll(records);
46
- let results = grouper.getResults();
47
- if (grouping.comparer) results.sort(grouping.comparer);
48
-
49
- results.forEach((gr) => {
50
- keys.push(gr.key);
51
-
52
- let key = keys
53
- .map((key) =>
54
- Object.keys(key)
55
- .map((k) => key[k])
56
- .join(":")
57
- )
58
- .join("|");
59
-
60
- let $group = {
61
- ...gr.key,
62
- ...gr.aggregates,
63
- $name: gr.name,
64
- $level: inverseLevel,
65
- $records: gr.records || [],
66
- $key: key,
67
- };
68
-
69
- let data = {
70
- [this.recordName]: gr.records.length > 0 ? gr.records[0].data : null,
71
- [this.groupName]: $group,
72
- };
73
-
74
- let groupStore = new ReadOnlyDataView({
75
- store: parentStore,
76
- data,
77
- immutable: this.immutable,
78
- });
79
-
80
- let group = {
81
- key,
82
- data,
83
- group: $group,
84
- grouping,
85
- store: groupStore,
86
- level: inverseLevel,
87
- };
88
-
89
- if (grouping.includeHeader !== false)
90
- result.push({
91
- ...group,
92
- type: "group-header",
93
- key: "header:" + group.key,
94
- });
95
-
96
- this.processLevel(keys, gr.records, result, groupStore);
97
-
98
- if (grouping.includeFooter !== false)
99
- result.push({
100
- ...group,
101
- type: "group-footer",
102
- key: "footer:" + group.key,
103
- });
104
-
105
- keys.pop();
106
- });
107
- }
108
-
109
- groupBy(groupings) {
110
- if (!groupings) this.groupings = null;
111
- else if (isArray(groupings)) {
112
- this.groupings = groupings;
113
- this.groupings.forEach((g) => {
114
- let groupSorters = [];
115
- let key = {};
116
- for (let name in g.key) {
117
- if (!g.key[name] || !isDefined(g.key[name].direction) || !isDefined(g.key[name].value))
118
- g.key[name] = { value: g.key[name], direction: "ASC" };
119
- key[name] = g.key[name].value;
120
- groupSorters.push({
121
- field: name,
122
- direction: g.key[name].direction,
123
- });
124
- }
125
- g.grouper = new Grouper(key, { ...this.aggregates, ...g.aggregates }, (r) => r.store.getData(), g.text);
126
- g.comparer = null;
127
- if (groupSorters.length > 0)
128
- g.comparer = getComparer(
129
- groupSorters,
130
- (x) => x.key,
131
- this.sortOptions ? Culture.getComparer(this.sortOptions) : null
132
- );
133
- });
134
- } else throw new Error("Invalid grouping provided.");
135
- }
136
- }
137
-
138
- GroupAdapter.prototype.groupName = "$group";
1
+ import { ArrayAdapter } from "./ArrayAdapter";
2
+ import { ReadOnlyDataView } from "../../data/ReadOnlyDataView";
3
+ import { Grouper } from "../../data/Grouper";
4
+ import { isArray } from "../../util/isArray";
5
+ import { isDefined } from "../../util/isDefined";
6
+ import { getComparer } from "../../data/comparer";
7
+ import { Culture } from "../Culture";
8
+ import { isObject } from "../../util/isObject";
9
+
10
+ export class GroupAdapter extends ArrayAdapter {
11
+ init() {
12
+ super.init();
13
+
14
+ if (this.groupRecordsAlias) this.groupRecordsName = this.groupRecordsAlias;
15
+
16
+ if (this.groupings) this.groupBy(this.groupings);
17
+ }
18
+
19
+ getRecords(context, instance, records, parentStore) {
20
+ let result = super.getRecords(context, instance, records, parentStore);
21
+
22
+ if (this.groupings) {
23
+ let groupedResults = [];
24
+ this.processLevel([], result, groupedResults, parentStore);
25
+ result = groupedResults;
26
+ }
27
+
28
+ return result;
29
+ }
30
+
31
+ processLevel(keys, records, result, parentStore) {
32
+ let level = keys.length;
33
+ let inverseLevel = this.groupings.length - level;
34
+
35
+ if (inverseLevel == 0) {
36
+ for (let i = 0; i < records.length; i++) {
37
+ records[i].store.setStore(parentStore);
38
+ result.push(records[i]);
39
+ }
40
+ return;
41
+ }
42
+
43
+ let grouping = this.groupings[level];
44
+ let { grouper } = grouping;
45
+ grouper.reset();
46
+ grouper.processAll(records);
47
+ let results = grouper.getResults();
48
+ if (grouping.comparer) results.sort(grouping.comparer);
49
+
50
+ results.forEach((gr) => {
51
+ keys.push(gr.key);
52
+
53
+ let key = keys.map(serializeKey).join("|");
54
+
55
+ let $group = {
56
+ ...gr.key,
57
+ ...gr.aggregates,
58
+ $name: gr.name,
59
+ $level: inverseLevel,
60
+ $records: gr.records || [],
61
+ $key: key,
62
+ };
63
+
64
+ let data = {
65
+ [this.recordName]: gr.records.length > 0 ? gr.records[0].data : null,
66
+ [this.groupName]: $group,
67
+ };
68
+
69
+ let groupStore = new ReadOnlyDataView({
70
+ store: parentStore,
71
+ data,
72
+ immutable: this.immutable,
73
+ });
74
+
75
+ let group = {
76
+ key,
77
+ data,
78
+ group: $group,
79
+ grouping,
80
+ store: groupStore,
81
+ level: inverseLevel,
82
+ };
83
+
84
+ if (grouping.includeHeader !== false)
85
+ result.push({
86
+ ...group,
87
+ type: "group-header",
88
+ key: "header:" + group.key,
89
+ });
90
+
91
+ this.processLevel(keys, gr.records, result, groupStore);
92
+
93
+ if (grouping.includeFooter !== false)
94
+ result.push({
95
+ ...group,
96
+ type: "group-footer",
97
+ key: "footer:" + group.key,
98
+ });
99
+
100
+ keys.pop();
101
+ });
102
+ }
103
+
104
+ groupBy(groupings) {
105
+ if (!groupings) this.groupings = null;
106
+ else if (isArray(groupings)) {
107
+ this.groupings = groupings;
108
+ this.groupings.forEach((g) => {
109
+ let groupSorters = [];
110
+ let key = {};
111
+ for (let name in g.key) {
112
+ if (!g.key[name] || !isDefined(g.key[name].direction) || !isDefined(g.key[name].value))
113
+ g.key[name] = { value: g.key[name], direction: "ASC" };
114
+ key[name] = g.key[name].value;
115
+ groupSorters.push({
116
+ field: name,
117
+ direction: g.key[name].direction,
118
+ });
119
+ }
120
+ g.grouper = new Grouper(key, { ...this.aggregates, ...g.aggregates }, (r) => r.store.getData(), g.text);
121
+ g.comparer = null;
122
+ if (groupSorters.length > 0)
123
+ g.comparer = getComparer(
124
+ groupSorters,
125
+ (x) => x.key,
126
+ this.sortOptions ? Culture.getComparer(this.sortOptions) : null,
127
+ );
128
+ });
129
+ } else throw new Error("Invalid grouping provided.");
130
+ }
131
+ }
132
+
133
+ GroupAdapter.prototype.groupName = "$group";
134
+
135
+ function serializeKey(data) {
136
+ if (isObject(data))
137
+ return Object.keys(data)
138
+ .map((k) => serializeKey(data[k]))
139
+ .join(":");
140
+ return data?.toString() ?? "";
141
+ }
package/src/ui/index.d.ts CHANGED
@@ -1,42 +1,43 @@
1
- export * from "./Controller";
2
- export * from "./Widget";
3
- export * from "./Container";
4
- export * from "./PureContainer";
5
- export * from "./Repeater";
6
- export * from "./Rescope";
7
- export * from "./StaticText";
8
- export * from "./Text";
9
- export * from "./CSS";
10
- export * from "./CSSHelper";
11
- export * from "./FocusManager";
12
- export * from "./ResizeManager";
13
- export * from "./ZIndexManager";
14
- export * from "./Format";
15
- export * from "./Culture";
16
- export * from "./Localization";
17
- export * from "./Cx";
18
- export * from "./Instance";
19
- export * from "./RenderingContext";
20
- export * from "./ContentResolver";
21
- export * from "./batchUpdates";
22
- export * from "./IsolatedScope";
23
- export * from "./DetachedScope";
24
- export * from "./Restate";
25
- export * from "./DataProxy";
26
- export * from "./keyboardShortcuts";
27
- export * from "./createFunctionalComponent";
28
- export * from "./StructuredInstanceDataAccessor";
29
- export * from "./HoverSync";
30
-
31
- export * from "./selection/index";
32
- export * from "./layout/index";
33
- export * from "./app/index";
34
- export * from "./adapter/index";
35
-
36
- export * from "./bind";
37
- export * from "./tpl";
38
- export * from "./expr";
39
-
40
- //re-export computable here
41
- import { computable } from "../data/computable";
42
- export { computable };
1
+ export * from "./Controller";
2
+ export * from "./Widget";
3
+ export * from "./Container";
4
+ export * from "./PureContainer";
5
+ export * from "./Repeater";
6
+ export * from "./Rescope";
7
+ export * from "./StaticText";
8
+ export * from "./Text";
9
+ export * from "./CSS";
10
+ export * from "./CSSHelper";
11
+ export * from "./FocusManager";
12
+ export * from "./ResizeManager";
13
+ export * from "./ZIndexManager";
14
+ export * from "./Format";
15
+ export * from "./Culture";
16
+ export * from "./Localization";
17
+ export * from "./Cx";
18
+ export * from "./Instance";
19
+ export * from "./RenderingContext";
20
+ export * from "./ContentResolver";
21
+ export * from "./batchUpdates";
22
+ export * from "./IsolatedScope";
23
+ export * from "./DetachedScope";
24
+ export * from "./Restate";
25
+ export * from "./DataProxy";
26
+ export * from "./keyboardShortcuts";
27
+ export * from "./createFunctionalComponent";
28
+ export * from "./StructuredInstanceDataAccessor";
29
+ export * from "./HoverSync";
30
+ export * from "./CultureScope";
31
+
32
+ export * from "./selection/index";
33
+ export * from "./layout/index";
34
+ export * from "./app/index";
35
+ export * from "./adapter/index";
36
+
37
+ export * from "./bind";
38
+ export * from "./tpl";
39
+ export * from "./expr";
40
+
41
+ //re-export computable here
42
+ import { computable } from "../data/computable";
43
+ export { computable };
package/src/ui/index.js CHANGED
@@ -1,44 +1,45 @@
1
- export * from './Controller';
2
- export * from './Widget';
3
- export * from './Container';
4
- export * from './PureContainer';
5
- export * from './Repeater';
6
- export * from './Rescope';
7
- export * from './StaticText';
8
- export * from './Text';
9
- export * from './CSS';
10
- export * from './CSSHelper';
11
- export * from './FocusManager';
12
- export * from './ResizeManager';
13
- export * from './ZIndexManager';
14
- export * from './Format';
15
- export * from './Culture';
16
- export * from './Localization';
17
- export * from './Cx';
18
- export * from './Instance';
19
- export * from './RenderingContext';
20
- export * from './ContentResolver';
21
- export * from './batchUpdates';
22
- export * from './IsolatedScope';
23
- export * from './DetachedScope';
24
- export * from './Restate';
25
- export * from './DataProxy';
26
- export * from './keyboardShortcuts';
27
- export * from "./StructuredInstanceDataAccessor";
28
- export * from "./HoverSync";
29
-
30
- export * from "./createFunctionalComponent";
31
- export * from "./flattenProps";
32
-
33
- export * from "./selection/index";
34
- export * from "./layout/index";
35
- export * from "./app/index";
36
- export * from "./adapter/index";
37
-
38
- export * from "./bind";
39
- export * from "./tpl";
40
- export * from "./expr";
41
-
42
- //re-export computable here
43
- import { computable } from "../data/computable";
44
- export { computable };
1
+ export * from "./Controller";
2
+ export * from "./Widget";
3
+ export * from "./Container";
4
+ export * from "./PureContainer";
5
+ export * from "./Repeater";
6
+ export * from "./Rescope";
7
+ export * from "./StaticText";
8
+ export * from "./Text";
9
+ export * from "./CSS";
10
+ export * from "./CSSHelper";
11
+ export * from "./FocusManager";
12
+ export * from "./ResizeManager";
13
+ export * from "./ZIndexManager";
14
+ export * from "./Format";
15
+ export * from "./Culture";
16
+ export * from "./Localization";
17
+ export * from "./Cx";
18
+ export * from "./Instance";
19
+ export * from "./RenderingContext";
20
+ export * from "./ContentResolver";
21
+ export * from "./batchUpdates";
22
+ export * from "./IsolatedScope";
23
+ export * from "./DetachedScope";
24
+ export * from "./Restate";
25
+ export * from "./DataProxy";
26
+ export * from "./keyboardShortcuts";
27
+ export * from "./StructuredInstanceDataAccessor";
28
+ export * from "./HoverSync";
29
+ export * from "./CultureScope";
30
+
31
+ export * from "./createFunctionalComponent";
32
+ export * from "./flattenProps";
33
+
34
+ export * from "./selection/index";
35
+ export * from "./layout/index";
36
+ export * from "./app/index";
37
+ export * from "./adapter/index";
38
+
39
+ export * from "./bind";
40
+ export * from "./tpl";
41
+ export * from "./expr";
42
+
43
+ //re-export computable here
44
+ import { computable } from "../data/computable";
45
+ export { computable };
@@ -1,14 +1,18 @@
1
- declare type Formatter = (any) => string;
2
-
3
- export class Format {
4
-
5
- static value(v: any, format: string): string;
6
-
7
- static parse(format: string): Formatter;
8
-
9
- static register(format: string | string[], formatter: Formatter): void;
10
-
11
- static registerFactory(format: string | string[], factory: (...args) => Formatter): void;
12
- }
13
-
14
- export function resolveMinMaxFractionDigits(minimumFractionDigits, maximumFractionDigits);
1
+ declare type Formatter = (any) => string;
2
+
3
+ export class Format {
4
+ static value(v: any, format: string): string;
5
+
6
+ static parse(format: string): Formatter;
7
+
8
+ static register(format: string | string[], formatter: Formatter): void;
9
+
10
+ static registerFactory(format: string | string[], factory: (...args) => Formatter): void;
11
+ }
12
+
13
+ export function resolveMinMaxFractionDigits(
14
+ minimumFractionDigits: number,
15
+ maximumFractionDigits: number,
16
+ ): { minimumFractionDigits: number; maximumFractionDigits: number };
17
+
18
+ export function setGetFormatCacheCallback(callback: () => {}): void;