@vuu-ui/vuu-utils 0.13.76 → 0.13.78
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/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js +55 -47
- package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -1
- package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js +9 -0
- package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/index.js +1 -2
- package/cjs/packages/vuu-utils/src/index.js.map +1 -1
- package/cjs/packages/vuu-utils/src/range-utils.js +3 -3
- package/cjs/packages/vuu-utils/src/range-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js +56 -48
- package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -1
- package/esm/packages/vuu-utils/src/datasource/datasource-utils.js +9 -1
- package/esm/packages/vuu-utils/src/datasource/datasource-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/index.js +1 -2
- package/esm/packages/vuu-utils/src/index.js.map +1 -1
- package/esm/packages/vuu-utils/src/range-utils.js +3 -3
- package/esm/packages/vuu-utils/src/range-utils.js.map +1 -1
- package/package.json +6 -6
- package/types/datasource/BaseDataSource.d.ts +3 -3
- package/types/datasource/datasource-utils.d.ts +2 -0
- package/types/index.d.ts +0 -1
- package/cjs/packages/vuu-utils/src/moving-window.js +0 -108
- package/cjs/packages/vuu-utils/src/moving-window.js.map +0 -1
- package/esm/packages/vuu-utils/src/moving-window.js +0 -106
- package/esm/packages/vuu-utils/src/moving-window.js.map +0 -1
- package/types/moving-window.d.ts +0 -23
|
@@ -36,8 +36,8 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
36
36
|
// This should simply be id
|
|
37
37
|
__publicField(this, "viewport");
|
|
38
38
|
__publicField(this, "_clientCallback");
|
|
39
|
-
__publicField(this, "
|
|
40
|
-
__publicField(this, "
|
|
39
|
+
__publicField(this, "_configWithVisualLink", datasourceUtils.vanillaConfig);
|
|
40
|
+
__publicField(this, "_impendingConfigWithVisualLink");
|
|
41
41
|
__publicField(this, "_range", rangeUtils.Range(0, 0));
|
|
42
42
|
__publicField(this, "_size", 0);
|
|
43
43
|
__publicField(this, "_title");
|
|
@@ -45,14 +45,14 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
45
45
|
__privateAdd(this, _freezeTimestamp);
|
|
46
46
|
__privateAdd(this, _pageCount, 0);
|
|
47
47
|
__publicField(this, "awaitingConfirmationOfConfigChanges", false);
|
|
48
|
-
this.
|
|
49
|
-
...this.
|
|
50
|
-
aggregations: aggregations || this.
|
|
51
|
-
baseFilterSpec: baseFilterSpec || this.
|
|
52
|
-
columns: columns || this.
|
|
53
|
-
filterSpec: filterSpec || this.
|
|
54
|
-
groupBy: groupBy || this.
|
|
55
|
-
sort: sort || this.
|
|
48
|
+
this._configWithVisualLink = {
|
|
49
|
+
...this._configWithVisualLink,
|
|
50
|
+
aggregations: aggregations || this._configWithVisualLink.aggregations,
|
|
51
|
+
baseFilterSpec: baseFilterSpec || this._configWithVisualLink.baseFilterSpec,
|
|
52
|
+
columns: columns || this._configWithVisualLink.columns,
|
|
53
|
+
filterSpec: filterSpec || this._configWithVisualLink.filterSpec,
|
|
54
|
+
groupBy: groupBy || this._configWithVisualLink.groupBy,
|
|
55
|
+
sort: sort || this._configWithVisualLink.sort
|
|
56
56
|
};
|
|
57
57
|
this._defaultSuspenseProps = suspenseProps;
|
|
58
58
|
this._title = title;
|
|
@@ -71,14 +71,14 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
71
71
|
this._clientCallback = callback;
|
|
72
72
|
this.viewport = viewport;
|
|
73
73
|
if (aggregations || baseFilterSpec || columns || filterSpec || groupBy || sort) {
|
|
74
|
-
this.
|
|
75
|
-
...this.
|
|
76
|
-
aggregations: aggregations || this.
|
|
77
|
-
baseFilterSpec: baseFilterSpec || this.
|
|
78
|
-
columns: columns || this.
|
|
79
|
-
filterSpec: filterSpec || this.
|
|
80
|
-
groupBy: groupBy || this.
|
|
81
|
-
sort: sort || this.
|
|
74
|
+
this._configWithVisualLink = {
|
|
75
|
+
...this._configWithVisualLink,
|
|
76
|
+
aggregations: aggregations || this._configWithVisualLink.aggregations,
|
|
77
|
+
baseFilterSpec: baseFilterSpec || this._configWithVisualLink.baseFilterSpec,
|
|
78
|
+
columns: columns || this._configWithVisualLink.columns,
|
|
79
|
+
filterSpec: filterSpec || this._configWithVisualLink.filterSpec,
|
|
80
|
+
groupBy: groupBy || this._configWithVisualLink.groupBy,
|
|
81
|
+
sort: sort || this._configWithVisualLink.sort
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
84
|
if (range) {
|
|
@@ -87,54 +87,54 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
get aggregations() {
|
|
90
|
-
return this.
|
|
90
|
+
return this._configWithVisualLink.aggregations;
|
|
91
91
|
}
|
|
92
92
|
set aggregations(aggregations) {
|
|
93
93
|
this.config = {
|
|
94
|
-
...this.
|
|
94
|
+
...this._configWithVisualLink,
|
|
95
95
|
aggregations
|
|
96
96
|
};
|
|
97
|
-
this.emit("config", this.
|
|
97
|
+
this.emit("config", this._configWithVisualLink, this.range);
|
|
98
98
|
}
|
|
99
99
|
get baseFilter() {
|
|
100
|
-
return this.
|
|
100
|
+
return this._configWithVisualLink.baseFilterSpec;
|
|
101
101
|
}
|
|
102
102
|
set baseFilter(baseFilter) {
|
|
103
103
|
this.config = {
|
|
104
|
-
...this.
|
|
104
|
+
...this._configWithVisualLink,
|
|
105
105
|
baseFilterSpec: baseFilter
|
|
106
106
|
};
|
|
107
107
|
}
|
|
108
108
|
get columns() {
|
|
109
|
-
return this.
|
|
109
|
+
return this._configWithVisualLink.columns;
|
|
110
110
|
}
|
|
111
111
|
set columns(columns) {
|
|
112
112
|
this.config = {
|
|
113
|
-
...this.
|
|
113
|
+
...this._configWithVisualLink,
|
|
114
114
|
columns
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
117
|
get filter() {
|
|
118
|
-
return this.
|
|
118
|
+
return this._configWithVisualLink.filterSpec;
|
|
119
119
|
}
|
|
120
120
|
set filter(filter) {
|
|
121
121
|
this.config = {
|
|
122
|
-
...this.
|
|
122
|
+
...this._configWithVisualLink,
|
|
123
123
|
filterSpec: filter
|
|
124
124
|
};
|
|
125
125
|
}
|
|
126
126
|
get isAwaitingConfirmationOfConfigChange() {
|
|
127
|
-
return this.
|
|
127
|
+
return this._impendingConfigWithVisualLink !== void 0;
|
|
128
128
|
}
|
|
129
129
|
confirmConfigChange() {
|
|
130
|
-
if (this.
|
|
131
|
-
this.
|
|
130
|
+
if (this._impendingConfigWithVisualLink) {
|
|
131
|
+
this._configWithVisualLink = this._impendingConfigWithVisualLink;
|
|
132
132
|
console.log(
|
|
133
133
|
"%cclear impending config and emit config change",
|
|
134
134
|
"color:red"
|
|
135
135
|
);
|
|
136
|
-
this.
|
|
137
|
-
this.emit("config", this.
|
|
136
|
+
this._impendingConfigWithVisualLink = void 0;
|
|
137
|
+
this.emit("config", this._configWithVisualLink, this.range, true);
|
|
138
138
|
} else {
|
|
139
139
|
throw Error(
|
|
140
140
|
`[BaseDataSource], unexpected call to confirmConfigChange, no changes pending`
|
|
@@ -142,7 +142,9 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
get config() {
|
|
145
|
-
return
|
|
145
|
+
return datasourceUtils.stripVisualLink(
|
|
146
|
+
this._impendingConfigWithVisualLink ?? this._configWithVisualLink
|
|
147
|
+
);
|
|
146
148
|
}
|
|
147
149
|
set config(config) {
|
|
148
150
|
const confirmed = this.awaitingConfirmationOfConfigChanges ? true : void 0;
|
|
@@ -150,12 +152,18 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
150
152
|
const configChanges = this.applyConfig(config);
|
|
151
153
|
if (configChanges) {
|
|
152
154
|
requestAnimationFrame(() => {
|
|
153
|
-
this.emit(
|
|
155
|
+
this.emit(
|
|
156
|
+
"config",
|
|
157
|
+
this._configWithVisualLink,
|
|
158
|
+
this.range,
|
|
159
|
+
confirmed,
|
|
160
|
+
configChanges
|
|
161
|
+
);
|
|
154
162
|
});
|
|
155
163
|
}
|
|
156
164
|
}
|
|
157
165
|
get impendingConfig() {
|
|
158
|
-
return this.
|
|
166
|
+
return this._impendingConfigWithVisualLink;
|
|
159
167
|
}
|
|
160
168
|
/**
|
|
161
169
|
* This can be set by subclass in cases where we want to await ACK of async request
|
|
@@ -211,14 +219,14 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
211
219
|
}
|
|
212
220
|
}
|
|
213
221
|
get sort() {
|
|
214
|
-
return this.
|
|
222
|
+
return this._configWithVisualLink.sort;
|
|
215
223
|
}
|
|
216
224
|
set sort(sort) {
|
|
217
225
|
this.config = {
|
|
218
|
-
...this.
|
|
226
|
+
...this._configWithVisualLink,
|
|
219
227
|
sort
|
|
220
228
|
};
|
|
221
|
-
this.emit("config", this.
|
|
229
|
+
this.emit("config", this._configWithVisualLink, this.range);
|
|
222
230
|
}
|
|
223
231
|
get title() {
|
|
224
232
|
return this._title ?? "";
|
|
@@ -229,7 +237,7 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
229
237
|
}
|
|
230
238
|
applyConfig(config, preserveExistingConfigAttributes = false) {
|
|
231
239
|
const { noChanges, ...otherChanges } = datasourceUtils.isConfigChanged(
|
|
232
|
-
this.
|
|
240
|
+
this._configWithVisualLink,
|
|
233
241
|
config
|
|
234
242
|
);
|
|
235
243
|
if (noChanges !== true) {
|
|
@@ -243,23 +251,23 @@ class BaseDataSource extends eventEmitter.EventEmitter {
|
|
|
243
251
|
} : config;
|
|
244
252
|
if (preserveExistingConfigAttributes) {
|
|
245
253
|
if (this.awaitingConfirmationOfConfigChanges) {
|
|
246
|
-
this.
|
|
247
|
-
...this.
|
|
254
|
+
this._impendingConfigWithVisualLink = {
|
|
255
|
+
...this._configWithVisualLink,
|
|
248
256
|
...config
|
|
249
257
|
};
|
|
250
258
|
} else {
|
|
251
|
-
this.
|
|
252
|
-
this.
|
|
253
|
-
...this.
|
|
259
|
+
this._impendingConfigWithVisualLink = void 0;
|
|
260
|
+
this._configWithVisualLink = {
|
|
261
|
+
...this._configWithVisualLink,
|
|
254
262
|
...config
|
|
255
263
|
};
|
|
256
264
|
}
|
|
257
265
|
} else {
|
|
258
266
|
if (this.awaitingConfirmationOfConfigChanges) {
|
|
259
|
-
this.
|
|
267
|
+
this._impendingConfigWithVisualLink = datasourceUtils.withConfigDefaults(newConfig);
|
|
260
268
|
} else {
|
|
261
|
-
this.
|
|
262
|
-
this.
|
|
269
|
+
this._impendingConfigWithVisualLink = void 0;
|
|
270
|
+
this._configWithVisualLink = datasourceUtils.withConfigDefaults(newConfig);
|
|
263
271
|
}
|
|
264
272
|
}
|
|
265
273
|
return otherChanges;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDataSource.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/BaseDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceSuspenseProps,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuRpcEditRequest,\n VuuRpcEditResponse,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { uuid } from \"../nanoid\";\nimport {\n DataSourceConfigChanges,\n isConfigChanged,\n vanillaConfig,\n withConfigDefaults,\n} from \"./datasource-utils\";\nimport { Range } from \"../range-utils\";\n\nexport type RuntimeConfig = WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n};\n\nexport const defaultSuspenseProps: DataSourceSuspenseProps = {\n escalateToDisable: true,\n};\n\nexport abstract class BaseDataSource\n extends EventEmitter<DataSourceEvents>\n implements Pick<DataSource, \"config\">\n{\n // This should simply be id\n public viewport: string;\n\n protected _clientCallback: DataSourceSubscribeCallback | undefined;\n protected _config: RuntimeConfig = vanillaConfig;\n protected _impendingConfig: RuntimeConfig | undefined = undefined;\n protected _range = Range(0, 0);\n protected _size = 0;\n protected _title: string | undefined;\n protected _defaultSuspenseProps: DataSourceSuspenseProps;\n\n #freezeTimestamp: number | undefined = undefined;\n #pageCount = 0;\n\n private awaitingConfirmationOfConfigChanges = false;\n\n constructor({\n aggregations,\n baseFilterSpec,\n columns,\n filterSpec,\n groupBy,\n sort,\n suspenseProps = defaultSuspenseProps,\n title,\n viewport,\n }: Omit<DataSourceConstructorProps, \"table\">) {\n super();\n this._config = {\n ...this._config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n this._defaultSuspenseProps = suspenseProps;\n this._title = title;\n this.viewport = viewport ?? \"\";\n }\n\n subscribe(\n {\n baseFilterSpec,\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n viewport = this.viewport || (this.viewport = uuid()),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this._clientCallback = callback;\n this.viewport = viewport;\n\n if (\n aggregations ||\n baseFilterSpec ||\n columns ||\n filterSpec ||\n groupBy ||\n sort\n ) {\n this._config = {\n ...this._config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n }\n\n // store the range before we await the server. It's is possible the\n // range will be updated from the client before we have been able to\n // subscribe. This ensures we will subscribe with latest value.\n if (range) {\n this._range = range;\n this.emit(\"range\", range);\n }\n }\n\n get aggregations() {\n return this._config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.config = {\n ...this._config,\n aggregations,\n };\n this.emit(\"config\", this._config, this.range);\n }\n\n get baseFilter() {\n return this._config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n this.config = {\n ...this._config,\n baseFilterSpec: baseFilter,\n };\n }\n\n get columns() {\n return this._config.columns;\n }\n\n set columns(columns: string[]) {\n this.config = {\n ...this._config,\n columns,\n };\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this._config,\n filterSpec: filter,\n };\n }\n\n get isAwaitingConfirmationOfConfigChange() {\n return this._impendingConfig !== undefined;\n }\n\n protected confirmConfigChange() {\n if (this._impendingConfig) {\n this._config = this._impendingConfig;\n console.log(\n \"%cclear impending config and emit config change\",\n \"color:red\",\n );\n this._impendingConfig = undefined;\n this.emit(\"config\", this._config, this.range, true);\n } else {\n throw Error(\n `[BaseDataSource], unexpected call to confirmConfigChange, no changes pending`,\n );\n }\n }\n\n get config() {\n return this._impendingConfig ?? this._config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const confirmed = this.awaitingConfirmationOfConfigChanges\n ? true\n : undefined;\n // TODO what happens if config is set and we still have an unconfirmed change ?\n this.awaitingConfirmationOfConfigChanges = false;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n requestAnimationFrame(() => {\n this.emit(\"config\", this.config, this.range, confirmed, configChanges);\n });\n }\n }\n\n get impendingConfig() {\n return this._impendingConfig;\n }\n /**\n * This can be set by subclass in cases where we want to await ACK of async request\n * before we go ahead and apply change to config.\n * It is set in place of 'config' itself and it is then the responsibility of the client\n * to call 'confirmConfigChange' once confirmation of the change is received.\n * Client can check 'isAwaitingConfirmationOfConfigChange' to see if a change is pending\n * confirmation.\n */\n set impendingConfig(config: undefined | WithBaseFilter<WithFullConfig>) {\n if (config) {\n this.awaitingConfirmationOfConfigChanges = true;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n this.emit(\"config\", this.config, this.range, false, configChanges);\n }\n } else {\n throw Error(\n `[BaseDataSource] ''unsetting impendingConfig is not currently supported`,\n );\n }\n }\n\n get pageCount() {\n return this.#pageCount;\n }\n\n set pageCount(pageCount: number) {\n if (pageCount !== this.#pageCount) {\n this.#pageCount = pageCount;\n this.emit(\"page-count\", pageCount);\n }\n }\n\n get range() {\n return this._range;\n }\n\n set range(range: Range) {\n if (range.from !== this._range.from || range.to !== this._range.to) {\n this._range = range;\n this.pageCount = Math.ceil(this._size / (range.to - range.from));\n this.rangeRequest(range);\n requestAnimationFrame(() => {\n this.emit(\"range\", range);\n });\n }\n }\n\n get size() {\n return this._size;\n }\n\n set size(size: number) {\n this._size = size;\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(size / (this.range.to - this.range.from));\n this.pageCount = pageCount;\n }\n }\n\n get sort() {\n return this._config.sort;\n }\n\n set sort(sort: VuuSort) {\n this.config = {\n ...this._config,\n sort,\n };\n this.emit(\"config\", this._config, this.range);\n }\n\n get title() {\n return this._title ?? \"\";\n }\n\n set title(title: string) {\n this._title = title;\n this.emit(\"title-changed\", this.viewport ?? \"\", title);\n }\n\n private applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._config,\n config,\n );\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfig = {\n ...this._config,\n ...config,\n };\n } else {\n this._impendingConfig = undefined;\n this._config = {\n ...this._config,\n ...config,\n };\n }\n } else {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfig = withConfigDefaults(newConfig);\n } else {\n this._impendingConfig = undefined;\n this._config = withConfigDefaults(newConfig);\n }\n }\n return otherChanges;\n }\n }\n }\n\n freeze() {\n if (!this.isFrozen) {\n this.#freezeTimestamp = new Date().getTime();\n this.emit(\"freeze\", true, this.#freezeTimestamp);\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n unfreeze() {\n if (this.isFrozen) {\n const freezeTimestamp = this.#freezeTimestamp as number;\n this.#freezeTimestamp = undefined;\n this.emit(\"freeze\", false, freezeTimestamp);\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n get freezeTimestamp() {\n return this.#freezeTimestamp;\n }\n\n get isFrozen() {\n return typeof this.#freezeTimestamp === \"number\";\n }\n\n abstract rangeRequest(range: VuuRange): void;\n\n async editRpcCall(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rpcRequest: Omit<VuuRpcEditRequest, \"vpId\">,\n ): Promise<VuuRpcEditResponse> {\n throw Error(\n `[BaseDataSource] editRpcCall not supported in BaseDataSource, it must be implemented in child class`,\n );\n }\n}\n"],"names":["EventEmitter","vanillaConfig","Range","uuid","isConfigChanged","parseFilter","withConfigDefaults"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseDataSource.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/BaseDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceSuspenseProps,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuRpcEditRequest,\n VuuRpcEditResponse,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { uuid } from \"../nanoid\";\nimport {\n DataSourceConfigChanges,\n isConfigChanged,\n stripVisualLink,\n vanillaConfig,\n withConfigDefaults,\n} from \"./datasource-utils\";\nimport { Range } from \"../range-utils\";\n\nexport type ConfigWithVisualLink = WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n};\n\nexport const defaultSuspenseProps: DataSourceSuspenseProps = {\n escalateToDisable: true,\n};\n\nexport abstract class BaseDataSource\n extends EventEmitter<DataSourceEvents>\n implements Pick<DataSource, \"config\">\n{\n // This should simply be id\n public viewport: string;\n\n protected _clientCallback: DataSourceSubscribeCallback | undefined;\n protected _configWithVisualLink: ConfigWithVisualLink = vanillaConfig;\n protected _impendingConfigWithVisualLink: ConfigWithVisualLink | undefined =\n undefined;\n protected _range = Range(0, 0);\n protected _size = 0;\n protected _title: string | undefined;\n protected _defaultSuspenseProps: DataSourceSuspenseProps;\n\n #freezeTimestamp: number | undefined = undefined;\n #pageCount = 0;\n\n private awaitingConfirmationOfConfigChanges = false;\n\n constructor({\n aggregations,\n baseFilterSpec,\n columns,\n filterSpec,\n groupBy,\n sort,\n suspenseProps = defaultSuspenseProps,\n title,\n viewport,\n }: Omit<DataSourceConstructorProps, \"table\">) {\n super();\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n aggregations: aggregations || this._configWithVisualLink.aggregations,\n baseFilterSpec:\n baseFilterSpec || this._configWithVisualLink.baseFilterSpec,\n columns: columns || this._configWithVisualLink.columns,\n filterSpec: filterSpec || this._configWithVisualLink.filterSpec,\n groupBy: groupBy || this._configWithVisualLink.groupBy,\n sort: sort || this._configWithVisualLink.sort,\n };\n this._defaultSuspenseProps = suspenseProps;\n this._title = title;\n this.viewport = viewport ?? \"\";\n }\n\n subscribe(\n {\n baseFilterSpec,\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n viewport = this.viewport || (this.viewport = uuid()),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this._clientCallback = callback;\n this.viewport = viewport;\n\n if (\n aggregations ||\n baseFilterSpec ||\n columns ||\n filterSpec ||\n groupBy ||\n sort\n ) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n aggregations: aggregations || this._configWithVisualLink.aggregations,\n baseFilterSpec:\n baseFilterSpec || this._configWithVisualLink.baseFilterSpec,\n columns: columns || this._configWithVisualLink.columns,\n filterSpec: filterSpec || this._configWithVisualLink.filterSpec,\n groupBy: groupBy || this._configWithVisualLink.groupBy,\n sort: sort || this._configWithVisualLink.sort,\n };\n }\n\n // store the range before we await the server. It's is possible the\n // range will be updated from the client before we have been able to\n // subscribe. This ensures we will subscribe with latest value.\n if (range) {\n this._range = range;\n this.emit(\"range\", range);\n }\n }\n\n get aggregations() {\n return this._configWithVisualLink.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.config = {\n ...this._configWithVisualLink,\n aggregations,\n };\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n get baseFilter() {\n return this._configWithVisualLink.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n this.config = {\n ...this._configWithVisualLink,\n baseFilterSpec: baseFilter,\n };\n }\n\n get columns() {\n return this._configWithVisualLink.columns;\n }\n\n set columns(columns: string[]) {\n this.config = {\n ...this._configWithVisualLink,\n columns,\n };\n }\n\n get filter() {\n return this._configWithVisualLink.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this._configWithVisualLink,\n filterSpec: filter,\n };\n }\n\n get isAwaitingConfirmationOfConfigChange() {\n return this._impendingConfigWithVisualLink !== undefined;\n }\n\n protected confirmConfigChange() {\n if (this._impendingConfigWithVisualLink) {\n this._configWithVisualLink = this._impendingConfigWithVisualLink;\n console.log(\n \"%cclear impending config and emit config change\",\n \"color:red\",\n );\n this._impendingConfigWithVisualLink = undefined;\n this.emit(\"config\", this._configWithVisualLink, this.range, true);\n } else {\n throw Error(\n `[BaseDataSource], unexpected call to confirmConfigChange, no changes pending`,\n );\n }\n }\n\n get config() {\n return stripVisualLink(\n this._impendingConfigWithVisualLink ?? this._configWithVisualLink,\n );\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const confirmed = this.awaitingConfirmationOfConfigChanges\n ? true\n : undefined;\n // TODO what happens if config is set and we still have an unconfirmed change ?\n this.awaitingConfirmationOfConfigChanges = false;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n requestAnimationFrame(() => {\n this.emit(\n \"config\",\n this._configWithVisualLink,\n this.range,\n confirmed,\n configChanges,\n );\n });\n }\n }\n\n get impendingConfig() {\n return this._impendingConfigWithVisualLink;\n }\n /**\n * This can be set by subclass in cases where we want to await ACK of async request\n * before we go ahead and apply change to config.\n * It is set in place of 'config' itself and it is then the responsibility of the client\n * to call 'confirmConfigChange' once confirmation of the change is received.\n * Client can check 'isAwaitingConfirmationOfConfigChange' to see if a change is pending\n * confirmation.\n */\n set impendingConfig(config: undefined | WithBaseFilter<WithFullConfig>) {\n if (config) {\n this.awaitingConfirmationOfConfigChanges = true;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n this.emit(\"config\", this.config, this.range, false, configChanges);\n }\n } else {\n throw Error(\n `[BaseDataSource] ''unsetting impendingConfig is not currently supported`,\n );\n }\n }\n\n get pageCount() {\n return this.#pageCount;\n }\n\n set pageCount(pageCount: number) {\n if (pageCount !== this.#pageCount) {\n this.#pageCount = pageCount;\n this.emit(\"page-count\", pageCount);\n }\n }\n\n get range() {\n return this._range;\n }\n\n set range(range: Range) {\n if (range.from !== this._range.from || range.to !== this._range.to) {\n this._range = range;\n this.pageCount = Math.ceil(this._size / (range.to - range.from));\n this.rangeRequest(range);\n requestAnimationFrame(() => {\n this.emit(\"range\", range);\n });\n }\n }\n\n get size() {\n return this._size;\n }\n\n set size(size: number) {\n this._size = size;\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(size / (this.range.to - this.range.from));\n this.pageCount = pageCount;\n }\n }\n\n get sort() {\n return this._configWithVisualLink.sort;\n }\n\n set sort(sort: VuuSort) {\n this.config = {\n ...this._configWithVisualLink,\n sort,\n };\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n get title() {\n return this._title ?? \"\";\n }\n\n set title(title: string) {\n this._title = title;\n this.emit(\"title-changed\", this.viewport ?? \"\", title);\n }\n\n private applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._configWithVisualLink,\n config,\n );\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfigWithVisualLink = {\n ...this._configWithVisualLink,\n ...config,\n };\n } else {\n this._impendingConfigWithVisualLink = undefined;\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n ...config,\n };\n }\n } else {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfigWithVisualLink = withConfigDefaults(newConfig);\n } else {\n this._impendingConfigWithVisualLink = undefined;\n this._configWithVisualLink = withConfigDefaults(newConfig);\n }\n }\n return otherChanges;\n }\n }\n }\n\n freeze() {\n if (!this.isFrozen) {\n this.#freezeTimestamp = new Date().getTime();\n this.emit(\"freeze\", true, this.#freezeTimestamp);\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n unfreeze() {\n if (this.isFrozen) {\n const freezeTimestamp = this.#freezeTimestamp as number;\n this.#freezeTimestamp = undefined;\n this.emit(\"freeze\", false, freezeTimestamp);\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n get freezeTimestamp() {\n return this.#freezeTimestamp;\n }\n\n get isFrozen() {\n return typeof this.#freezeTimestamp === \"number\";\n }\n\n abstract rangeRequest(range: VuuRange): void;\n\n async editRpcCall(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rpcRequest: Omit<VuuRpcEditRequest, \"vpId\">,\n ): Promise<VuuRpcEditResponse> {\n throw Error(\n `[BaseDataSource] editRpcCall not supported in BaseDataSource, it must be implemented in child class`,\n );\n }\n}\n"],"names":["EventEmitter","vanillaConfig","Range","uuid","stripVisualLink","isConfigChanged","parseFilter","withConfigDefaults"],"mappings":"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"}
|
|
@@ -9,6 +9,14 @@ const vanillaConfig = {
|
|
|
9
9
|
groupBy: [],
|
|
10
10
|
sort: NoSort
|
|
11
11
|
};
|
|
12
|
+
const stripVisualLink = (configWithVisualLink) => {
|
|
13
|
+
if (configWithVisualLink.visualLink) {
|
|
14
|
+
const { visualLink, ...config } = configWithVisualLink;
|
|
15
|
+
return config;
|
|
16
|
+
} else {
|
|
17
|
+
return configWithVisualLink;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
12
20
|
const equivalentAggregations = ({ aggregations: agg1 }, { aggregations: agg2 }) => agg1 === void 0 && agg2?.length === 0 || agg2 === void 0 && agg1?.length === 0;
|
|
13
21
|
const equivalentColumns = ({ columns: cols1 }, { columns: cols2 }) => cols1 === void 0 && cols2?.length === 0 || cols2 === void 0 && cols1?.length === 0;
|
|
14
22
|
const equivalentFilter = ({ filterSpec: f1 }, { filterSpec: f2 }) => f1 === void 0 && f2?.filter === "" || f2 === void 0 && f1?.filter === "";
|
|
@@ -204,6 +212,7 @@ exports.isVisualLinkMessage = isVisualLinkMessage;
|
|
|
204
212
|
exports.messageHasDataRows = messageHasDataRows;
|
|
205
213
|
exports.messageHasResult = messageHasResult;
|
|
206
214
|
exports.messageHasSize = messageHasSize;
|
|
215
|
+
exports.stripVisualLink = stripVisualLink;
|
|
207
216
|
exports.vanillaConfig = vanillaConfig;
|
|
208
217
|
exports.withConfigDefaults = withConfigDefaults;
|
|
209
218
|
//# sourceMappingURL=datasource-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-utils.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceDataMessage,\n DataSourceRow,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithBaseFilter,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuCreateVisualLink,\n VuuFilter,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcEditError,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"../column-utils\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filterSpec: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n baseFilterChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: WithBaseFilter<DataSourceConfig>,\n newConfig: WithBaseFilter<DataSourceConfig>,\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 },\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 },\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filterSpec: f1 },\n { filterSpec: f2 },\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 },\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType,\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isBaseFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.baseFilterSpec?.filter !== c2.baseFilterSpec?.filter;\n }\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filterSpec?.filter !== c2.filterSpec?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType,\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = (\n { visualLink: v1 },\n { visualLink: v2 },\n) => {\n if (exactlyTheSame(v1, v2)) {\n return false;\n }\n if (v1 === undefined || v2 === undefined) {\n return true;\n }\n return v1.label !== v2.label || v2.parentVpId !== v2.parentVpId;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n baseFilterChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined,\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const baseFilterChanged = isBaseFilterChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n baseFilterChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n baseFilterChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (\n config?: WithBaseFilter<DataSourceConfig>,\n): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasBaseFilter = (\n config?: WithBaseFilter<DataSourceConfig>,\n): config is WithFilter =>\n config?.baseFilterSpec !== undefined &&\n config.baseFilterSpec.filter.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filterSpec !== undefined && config.filterSpec.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown,\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchemaMessage = (\n message: VuuUIMessageIn,\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionQualityMetrics = (\n msg: object,\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: Partial<RpcResponse>,\n): response is VuuRpcEditError => response?.type === \"VP_EDIT_RPC_REJECT\";\n\nexport const isVisualLinkMessage = (\n msg: unknown,\n): msg is VuuCreateVisualLink | VuuRemoveVisualLink =>\n (msg as VuuCreateVisualLink).type.endsWith(\"_VISUAL_LINK\");\n\nexport const isViewportMessage = (\n msg: object,\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport type DataSourceDataMessageWithRows = Omit<\n DataSourceDataMessage,\n \"rows\"\n> & {\n rows: DataSourceRow[];\n};\nexport type DataSourceDataMessageWithSize = Omit<\n DataSourceDataMessage,\n \"size\"\n> & {\n size: number;\n};\nexport const messageHasDataRows = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithRows =>\n message.type === \"viewport-update\" && Array.isArray(message.rows);\n\nexport const messageHasSize = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithSize =>\n message.type === \"viewport-update\" && typeof message.size === \"number\";\n\nexport const withConfigDefaults = (\n config: WithBaseFilter<DataSourceConfig>,\n): WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n} => {\n if (\n config.aggregations &&\n config.baseFilterSpec &&\n config.columns &&\n config.filterSpec &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n baseFilterSpec: baseFilter = { filter: \"\" },\n columns = [],\n filterSpec: filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n baseFilterSpec: baseFilter,\n columns,\n filterSpec: filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n\nexport type Entity = Record<string, VuuRowDataItemType>;\n// export type EntityKey<T extends Entity = Entity> = Extract<keyof T, \"string\">;\n\nexport const dataSourceRowToEntity = <T extends Entity = Entity>(\n row: DataSourceRow,\n columnMap: ColumnMap,\n) =>\n Object.entries(columnMap).reduce(\n (entity, [name, index]) => ({\n ...entity,\n [name]: row[index],\n }),\n {} as T,\n );\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"datasource-utils.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceDataMessage,\n DataSourceRow,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithBaseFilter,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuCreateVisualLink,\n VuuFilter,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcEditError,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"../column-utils\";\nimport { ConfigWithVisualLink } from \"./BaseDataSource\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filterSpec: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport const stripVisualLink = (\n configWithVisualLink: ConfigWithVisualLink,\n): WithBaseFilter<WithFullConfig> => {\n if (configWithVisualLink.visualLink) {\n const { visualLink, ...config } = configWithVisualLink;\n return config;\n } else {\n return configWithVisualLink;\n }\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n baseFilterChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: WithBaseFilter<DataSourceConfig>,\n newConfig: WithBaseFilter<DataSourceConfig>,\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 },\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 },\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filterSpec: f1 },\n { filterSpec: f2 },\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 },\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType,\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isBaseFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.baseFilterSpec?.filter !== c2.baseFilterSpec?.filter;\n }\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filterSpec?.filter !== c2.filterSpec?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType,\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = (\n { visualLink: v1 },\n { visualLink: v2 },\n) => {\n if (exactlyTheSame(v1, v2)) {\n return false;\n }\n if (v1 === undefined || v2 === undefined) {\n return true;\n }\n return v1.label !== v2.label || v2.parentVpId !== v2.parentVpId;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n baseFilterChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined,\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const baseFilterChanged = isBaseFilterChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n baseFilterChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n baseFilterChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (\n config?: WithBaseFilter<DataSourceConfig>,\n): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasBaseFilter = (\n config?: WithBaseFilter<DataSourceConfig>,\n): config is WithFilter =>\n config?.baseFilterSpec !== undefined &&\n config.baseFilterSpec.filter.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filterSpec !== undefined && config.filterSpec.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown,\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchemaMessage = (\n message: VuuUIMessageIn,\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionQualityMetrics = (\n msg: object,\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: Partial<RpcResponse>,\n): response is VuuRpcEditError => response?.type === \"VP_EDIT_RPC_REJECT\";\n\nexport const isVisualLinkMessage = (\n msg: unknown,\n): msg is VuuCreateVisualLink | VuuRemoveVisualLink =>\n (msg as VuuCreateVisualLink).type.endsWith(\"_VISUAL_LINK\");\n\nexport const isViewportMessage = (\n msg: object,\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport type DataSourceDataMessageWithRows = Omit<\n DataSourceDataMessage,\n \"rows\"\n> & {\n rows: DataSourceRow[];\n};\nexport type DataSourceDataMessageWithSize = Omit<\n DataSourceDataMessage,\n \"size\"\n> & {\n size: number;\n};\nexport const messageHasDataRows = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithRows =>\n message.type === \"viewport-update\" && Array.isArray(message.rows);\n\nexport const messageHasSize = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithSize =>\n message.type === \"viewport-update\" && typeof message.size === \"number\";\n\nexport const withConfigDefaults = (\n config: WithBaseFilter<DataSourceConfig>,\n): WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n} => {\n if (\n config.aggregations &&\n config.baseFilterSpec &&\n config.columns &&\n config.filterSpec &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n baseFilterSpec: baseFilter = { filter: \"\" },\n columns = [],\n filterSpec: filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n baseFilterSpec: baseFilter,\n columns,\n filterSpec: filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n\nexport type Entity = Record<string, VuuRowDataItemType>;\n// export type EntityKey<T extends Entity = Entity> = Extract<keyof T, \"string\">;\n\nexport const dataSourceRowToEntity = <T extends Entity = Entity>(\n row: DataSourceRow,\n columnMap: ColumnMap,\n) =>\n Object.entries(columnMap).reduce(\n (entity, [name, index]) => ({\n ...entity,\n [name]: row[index],\n }),\n {} as T,\n );\n"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,6 @@ var listUtils = require('./list-utils.js');
|
|
|
42
42
|
var localStorageUtils = require('./local-storage-utils.js');
|
|
43
43
|
var loggingUtils = require('./logging-utils.js');
|
|
44
44
|
var moduleUtils = require('./module-utils.js');
|
|
45
|
-
var movingWindow = require('./moving-window.js');
|
|
46
45
|
var index$2 = require('./nanoid/index.js');
|
|
47
46
|
var reactUtils = require('./react-utils.js');
|
|
48
47
|
var roundDecimal = require('./round-decimal.js');
|
|
@@ -229,6 +228,7 @@ exports.isVisualLinkMessage = datasourceUtils.isVisualLinkMessage;
|
|
|
229
228
|
exports.messageHasDataRows = datasourceUtils.messageHasDataRows;
|
|
230
229
|
exports.messageHasResult = datasourceUtils.messageHasResult;
|
|
231
230
|
exports.messageHasSize = datasourceUtils.messageHasSize;
|
|
231
|
+
exports.stripVisualLink = datasourceUtils.stripVisualLink;
|
|
232
232
|
exports.vanillaConfig = datasourceUtils.vanillaConfig;
|
|
233
233
|
exports.withConfigDefaults = datasourceUtils.withConfigDefaults;
|
|
234
234
|
exports.Time = dateUtils.Time;
|
|
@@ -340,7 +340,6 @@ exports.getLoggingConfigForWorker = loggingUtils.getLoggingConfigForWorker;
|
|
|
340
340
|
exports.logUnhandledMessage = loggingUtils.logUnhandledMessage;
|
|
341
341
|
exports.logger = loggingUtils.logger;
|
|
342
342
|
exports.isModule = moduleUtils.isModule;
|
|
343
|
-
exports.MovingWindow = movingWindow.MovingWindow;
|
|
344
343
|
exports.uuid = index$2.uuid;
|
|
345
344
|
exports.asReactElements = reactUtils.asReactElements;
|
|
346
345
|
exports.createSyntheticEvent = reactUtils.createSyntheticEvent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -16,14 +16,14 @@ const defaultRangeOptions = {
|
|
|
16
16
|
rowCount: -1
|
|
17
17
|
};
|
|
18
18
|
const _RangeImpl = class _RangeImpl {
|
|
19
|
+
// We have to keep from and to as simple public properties (not getters) so they survive structuredClone
|
|
19
20
|
constructor(from, to, rangeOptions = defaultRangeOptions) {
|
|
21
|
+
this.from = from;
|
|
22
|
+
this.to = to;
|
|
20
23
|
__privateAdd(this, _baseFrom);
|
|
21
24
|
__privateAdd(this, _renderBufferSize, 0);
|
|
22
25
|
__privateAdd(this, _rowCount, -1);
|
|
23
26
|
__privateAdd(this, _baseTo);
|
|
24
|
-
// We have to keep these as simple public properties (not getters) so they survive structuredClone
|
|
25
|
-
__publicField(this, "from", 0);
|
|
26
|
-
__publicField(this, "to", 0);
|
|
27
27
|
__privateSet(this, _baseFrom, from);
|
|
28
28
|
__privateSet(this, _baseTo, to);
|
|
29
29
|
this.renderBufferSize = rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range-utils.js","sources":["../../../../../../packages/vuu-utils/src/range-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport interface Range extends VuuRange {\n equals: (vuuRange: VuuRange) => boolean;\n firstRowInViewport: number;\n lastRowInViewport: number;\n renderBufferSize?: number;\n reset: Range;\n rowCount?: number;\n}\n\nexport interface RangeOptions {\n renderBufferSize?: number;\n rowCount?: number;\n}\n\nconst defaultRangeOptions = {\n renderBufferSize: 0,\n rowCount: -1,\n};\nclass RangeImpl implements Range {\n #baseFrom: number;\n #renderBufferSize = 0;\n #rowCount = -1;\n #baseTo: number;\n\n // We have to keep these as simple public properties (not getters) so they survive structuredClone\n public from = 0;\n public to = 0;\n\n constructor(\n /** Index position of first visible row in viewport */\n from: number,\n /** Index position of last visible row in viewport + 1 */\n to: number,\n rangeOptions: RangeOptions = defaultRangeOptions,\n ) {\n this.#baseFrom = from;\n this.#baseTo = to;\n this.renderBufferSize =\n rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;\n this.rowCount = rangeOptions.rowCount ?? defaultRangeOptions.rowCount;\n }\n\n get firstRowInViewport() {\n return this.#baseFrom + 1;\n }\n\n get lastRowInViewport() {\n if (this.#rowCount > 0) {\n return Math.min(this.#baseTo, this.#rowCount);\n } else {\n return this.#baseTo;\n }\n }\n\n get renderBufferSize() {\n return this.#renderBufferSize;\n }\n\n set renderBufferSize(value: number) {\n this.#renderBufferSize = value;\n this.from = Math.max(0, this.#baseFrom - value);\n if (this.#rowCount > 0) {\n this.to = Math.max(this.#baseTo + this.#renderBufferSize, this.#rowCount);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get rowCount() {\n return this.#rowCount;\n }\n\n set rowCount(value: number) {\n this.#rowCount = value;\n if (value > 0) {\n this.to = Math.min(this.#baseTo + this.#renderBufferSize, value);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get reset() {\n return new RangeImpl(0, this.#baseTo - this.#baseFrom, {\n rowCount: this.#rowCount,\n renderBufferSize: this.#renderBufferSize,\n });\n }\n\n equals(range: VuuRange) {\n return range.from === this.#baseFrom && range.to === this.#baseTo;\n }\n\n toJson() {\n return {\n from: this.from,\n to: this.to,\n baseFrom: this.#baseFrom,\n baseTo: this.#baseTo,\n renderBufferSize: this.#renderBufferSize,\n rowCount: this.#rowCount,\n };\n }\n}\n\nexport const Range = (\n from: number,\n to: number,\n rangeOptions?: RangeOptions,\n): Range => new RangeImpl(from, to, rangeOptions);\n\nexport const NULL_RANGE = Range(0, 0);\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER,\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange,\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"range-utils.js","sources":["../../../../../../packages/vuu-utils/src/range-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport interface Range extends VuuRange {\n equals: (vuuRange: VuuRange) => boolean;\n firstRowInViewport: number;\n lastRowInViewport: number;\n renderBufferSize?: number;\n reset: Range;\n rowCount?: number;\n}\n\nexport interface RangeOptions {\n renderBufferSize?: number;\n rowCount?: number;\n}\n\nconst defaultRangeOptions = {\n renderBufferSize: 0,\n rowCount: -1,\n};\nclass RangeImpl implements Range {\n #baseFrom: number;\n #renderBufferSize = 0;\n #rowCount = -1;\n #baseTo: number;\n\n // We have to keep from and to as simple public properties (not getters) so they survive structuredClone\n constructor(\n /** Index position of first visible row in viewport */\n public from: number,\n /** Index position of last visible row in viewport + 1 */\n public to: number,\n rangeOptions: RangeOptions = defaultRangeOptions,\n ) {\n this.#baseFrom = from;\n this.#baseTo = to;\n this.renderBufferSize =\n rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;\n this.rowCount = rangeOptions.rowCount ?? defaultRangeOptions.rowCount;\n }\n\n get firstRowInViewport() {\n return this.#baseFrom + 1;\n }\n\n get lastRowInViewport() {\n if (this.#rowCount > 0) {\n return Math.min(this.#baseTo, this.#rowCount);\n } else {\n return this.#baseTo;\n }\n }\n\n get renderBufferSize() {\n return this.#renderBufferSize;\n }\n\n set renderBufferSize(value: number) {\n this.#renderBufferSize = value;\n this.from = Math.max(0, this.#baseFrom - value);\n if (this.#rowCount > 0) {\n this.to = Math.max(this.#baseTo + this.#renderBufferSize, this.#rowCount);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get rowCount() {\n return this.#rowCount;\n }\n\n set rowCount(value: number) {\n this.#rowCount = value;\n if (value > 0) {\n this.to = Math.min(this.#baseTo + this.#renderBufferSize, value);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get reset() {\n return new RangeImpl(0, this.#baseTo - this.#baseFrom, {\n rowCount: this.#rowCount,\n renderBufferSize: this.#renderBufferSize,\n });\n }\n\n equals(range: VuuRange) {\n return range.from === this.#baseFrom && range.to === this.#baseTo;\n }\n\n toJson() {\n return {\n from: this.from,\n to: this.to,\n baseFrom: this.#baseFrom,\n baseTo: this.#baseTo,\n renderBufferSize: this.#renderBufferSize,\n rowCount: this.#rowCount,\n };\n }\n}\n\nexport const Range = (\n from: number,\n to: number,\n rangeOptions?: RangeOptions,\n): Range => new RangeImpl(from, to, rangeOptions);\n\nexport const NULL_RANGE = Range(0, 0);\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER,\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange,\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
|