@vuu-ui/vuu-data-remote 0.13.13 → 0.13.15
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/ConnectionManager.js.map +1 -1
- package/cjs/DedicatedWorker.js.map +1 -1
- package/cjs/VuuDataSource.js +18 -0
- package/cjs/VuuDataSource.js.map +1 -1
- package/cjs/WebSocketConnection.js.map +1 -1
- package/cjs/authenticate.js.map +1 -1
- package/cjs/constants.js.map +1 -1
- package/cjs/data-source.js.map +1 -1
- package/cjs/index.js +0 -2
- package/cjs/index.js.map +1 -1
- package/cjs/inlined-worker.js +33 -23
- package/cjs/inlined-worker.js.map +1 -1
- package/cjs/message-utils.js.map +1 -1
- package/esm/ConnectionManager.js.map +1 -1
- package/esm/DedicatedWorker.js.map +1 -1
- package/esm/VuuDataSource.js +18 -0
- package/esm/VuuDataSource.js.map +1 -1
- package/esm/WebSocketConnection.js.map +1 -1
- package/esm/authenticate.js.map +1 -1
- package/esm/constants.js.map +1 -1
- package/esm/data-source.js.map +1 -1
- package/esm/index.js +0 -1
- package/esm/index.js.map +1 -1
- package/esm/inlined-worker.js +33 -23
- package/esm/inlined-worker.js.map +1 -1
- package/esm/message-utils.js.map +1 -1
- package/package.json +7 -7
- package/types/VuuDataSource.d.ts +2 -0
- package/types/index.d.ts +0 -1
- package/types/inlined-worker.d.ts +1 -1
- package/types/server-proxy/viewport.d.ts +3 -3
- package/cjs/rest-data/RestDataSource.js +0 -172
- package/cjs/rest-data/RestDataSource.js.map +0 -1
- package/cjs/rest-data/moving-window.js +0 -66
- package/cjs/rest-data/moving-window.js.map +0 -1
- package/cjs/rest-data/rest-utils.js +0 -60
- package/cjs/rest-data/rest-utils.js.map +0 -1
- package/esm/rest-data/RestDataSource.js +0 -170
- package/esm/rest-data/RestDataSource.js.map +0 -1
- package/esm/rest-data/moving-window.js +0 -64
- package/esm/rest-data/moving-window.js.map +0 -1
- package/esm/rest-data/rest-utils.js +0 -55
- package/esm/rest-data/rest-utils.js.map +0 -1
- package/types/rest-data/RestDataSource.d.ts +0 -42
- package/types/rest-data/moving-window.d.ts +0 -14
- package/types/rest-data/rest-utils.d.ts +0 -14
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
var restUtils = require('./rest-utils.js');
|
|
5
|
-
var movingWindow = require('./moving-window.js');
|
|
6
|
-
|
|
7
|
-
var __defProp = Object.defineProperty;
|
|
8
|
-
var __typeError = (msg) => {
|
|
9
|
-
throw TypeError(msg);
|
|
10
|
-
};
|
|
11
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
13
|
-
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
14
|
-
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
15
|
-
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
16
|
-
var _columnMap, _dataWindow;
|
|
17
|
-
const _RestDataSource = class _RestDataSource extends vuuUtils.BaseDataSource {
|
|
18
|
-
constructor(props) {
|
|
19
|
-
super(props);
|
|
20
|
-
__privateAdd(this, _columnMap, vuuUtils.buildColumnMap([
|
|
21
|
-
"bbg",
|
|
22
|
-
"currency",
|
|
23
|
-
"description",
|
|
24
|
-
"exchange",
|
|
25
|
-
"ric",
|
|
26
|
-
"lotSize"
|
|
27
|
-
]));
|
|
28
|
-
__privateAdd(this, _dataWindow, new movingWindow.MovingWindow(vuuUtils.NULL_RANGE));
|
|
29
|
-
__publicField(this, "groupBy", []);
|
|
30
|
-
__publicField(this, "selectedRowsCount", 0);
|
|
31
|
-
__publicField(this, "status", "initialising");
|
|
32
|
-
__publicField(this, "table");
|
|
33
|
-
__publicField(this, "fetchData", async () => {
|
|
34
|
-
const { recordCount } = await this.fetchMetaData();
|
|
35
|
-
const pageCount = Math.ceil(recordCount / this.pageSize);
|
|
36
|
-
this.emit("page-count", pageCount);
|
|
37
|
-
const start = performance.now();
|
|
38
|
-
const allDone = () => {
|
|
39
|
-
const end = performance.now();
|
|
40
|
-
console.log(
|
|
41
|
-
`processing ${__privateGet(this, _dataWindow).data.length} rows took ${end - start}ms`
|
|
42
|
-
);
|
|
43
|
-
this._clientCallback?.({
|
|
44
|
-
clientViewportId: this.viewport,
|
|
45
|
-
mode: "update",
|
|
46
|
-
range: this._range,
|
|
47
|
-
rows: __privateGet(this, _dataWindow).data,
|
|
48
|
-
size: recordCount,
|
|
49
|
-
type: "viewport-update"
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
console.log(`base ${_RestDataSource.api}`);
|
|
53
|
-
fetch(this.dataUrl, {
|
|
54
|
-
headers: this.httpHeaders,
|
|
55
|
-
mode: "cors"
|
|
56
|
-
}).then(
|
|
57
|
-
restUtils.NDJsonReader(
|
|
58
|
-
this._range.from,
|
|
59
|
-
(index, json) => __privateGet(this, _dataWindow).add(
|
|
60
|
-
restUtils.jsonToDataSourceRow(index, json, __privateGet(this, _columnMap))
|
|
61
|
-
),
|
|
62
|
-
allDone
|
|
63
|
-
)
|
|
64
|
-
);
|
|
65
|
-
});
|
|
66
|
-
__publicField(this, "fetchMetaData", async () => new Promise((resolve, reject) => {
|
|
67
|
-
fetch(this.metaDataUrl, {
|
|
68
|
-
headers: this.httpHeaders,
|
|
69
|
-
mode: "cors"
|
|
70
|
-
}).then((response) => {
|
|
71
|
-
if (response.ok) {
|
|
72
|
-
resolve(response.json());
|
|
73
|
-
} else {
|
|
74
|
-
reject(response.status);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}));
|
|
78
|
-
__publicField(this, "applyEdit", async () => {
|
|
79
|
-
return "Method not implemented";
|
|
80
|
-
});
|
|
81
|
-
__publicField(this, "openTreeNode", () => {
|
|
82
|
-
throw new Error("openTreeNode, Method not implemented.");
|
|
83
|
-
});
|
|
84
|
-
__publicField(this, "closeTreeNode", () => {
|
|
85
|
-
throw new Error("closeTreeNode, Method not implemented.");
|
|
86
|
-
});
|
|
87
|
-
__publicField(this, "remoteProcedureCall", async () => "Method not implemented");
|
|
88
|
-
__publicField(this, "menuRpcCall", async () => {
|
|
89
|
-
return "Method not supported";
|
|
90
|
-
});
|
|
91
|
-
__publicField(this, "rpcCall", async () => {
|
|
92
|
-
return "Method not supported";
|
|
93
|
-
});
|
|
94
|
-
__publicField(this, "select", () => {
|
|
95
|
-
throw new Error("remoteProcedureCall, Method not implemented.");
|
|
96
|
-
});
|
|
97
|
-
const { table } = props;
|
|
98
|
-
if (!table) throw Error("RestDataSource constructor called without table");
|
|
99
|
-
this.table = table;
|
|
100
|
-
}
|
|
101
|
-
async subscribe(subscribeProps, callback) {
|
|
102
|
-
super.subscribe(subscribeProps, callback);
|
|
103
|
-
console.log(`subscribe ${JSON.stringify(subscribeProps, null, 2)}`);
|
|
104
|
-
this.rangeRequest(this._range);
|
|
105
|
-
}
|
|
106
|
-
unsubscribe() {
|
|
107
|
-
console.log("unsubscribe");
|
|
108
|
-
}
|
|
109
|
-
get pageSize() {
|
|
110
|
-
return this._range.to - this._range.from;
|
|
111
|
-
}
|
|
112
|
-
static get api() {
|
|
113
|
-
return this._api;
|
|
114
|
-
}
|
|
115
|
-
static set api(url) {
|
|
116
|
-
this._api = url;
|
|
117
|
-
}
|
|
118
|
-
get url() {
|
|
119
|
-
return `${_RestDataSource.api}/${this.table.table}`;
|
|
120
|
-
}
|
|
121
|
-
get dataUrl() {
|
|
122
|
-
const { from, to } = this._range;
|
|
123
|
-
return `${this.url}?origin=${from}&limit=${to - from}${this.queryStringParameters}`;
|
|
124
|
-
}
|
|
125
|
-
get httpHeaders() {
|
|
126
|
-
return void 0;
|
|
127
|
-
}
|
|
128
|
-
get metaDataUrl() {
|
|
129
|
-
return `${this.url}/summary`;
|
|
130
|
-
}
|
|
131
|
-
get queryStringParameters() {
|
|
132
|
-
const params = [];
|
|
133
|
-
if (vuuUtils.hasSort(this._config)) {
|
|
134
|
-
params.push(restUtils.sortToQueryString(this._config.sort));
|
|
135
|
-
}
|
|
136
|
-
if (vuuUtils.hasFilter(this._config)) {
|
|
137
|
-
params.push(restUtils.filterToQueryString(this._config.filterSpec));
|
|
138
|
-
}
|
|
139
|
-
return params.join("");
|
|
140
|
-
}
|
|
141
|
-
get title() {
|
|
142
|
-
return this._title ?? `${this.table.module} ${this.table.table}`;
|
|
143
|
-
}
|
|
144
|
-
set title(title) {
|
|
145
|
-
this._title = title;
|
|
146
|
-
}
|
|
147
|
-
rangeRequest(range) {
|
|
148
|
-
console.log(`set range ${JSON.stringify(range)}`);
|
|
149
|
-
__privateGet(this, _dataWindow).setRange(range);
|
|
150
|
-
this.fetchData();
|
|
151
|
-
}
|
|
152
|
-
get config() {
|
|
153
|
-
return super.config;
|
|
154
|
-
}
|
|
155
|
-
set config(config) {
|
|
156
|
-
const previousConfig = this._config;
|
|
157
|
-
super.config = config;
|
|
158
|
-
if (this._config !== previousConfig) {
|
|
159
|
-
this.fetchData();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
sendRowsToClient() {
|
|
163
|
-
console.log(`send rows to client`);
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
_columnMap = new WeakMap();
|
|
167
|
-
_dataWindow = new WeakMap();
|
|
168
|
-
__publicField(_RestDataSource, "_api", "/api");
|
|
169
|
-
let RestDataSource = _RestDataSource;
|
|
170
|
-
|
|
171
|
-
exports.RestDataSource = RestDataSource;
|
|
172
|
-
//# sourceMappingURL=RestDataSource.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RestDataSource.js","sources":["../../src/rest-data/RestDataSource.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConstructorProps,\n DataSourceEditHandler,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { VuuTable, VuuGroupBy, VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n BaseDataSource,\n ColumnMap,\n NULL_RANGE,\n buildColumnMap,\n hasFilter,\n hasSort,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n NDJsonReader,\n filterToQueryString,\n jsonToDataSourceRow,\n sortToQueryString,\n} from \"./rest-utils\";\nimport { MovingWindow } from \"./moving-window\";\n\nexport type RestMetaData = {\n recordCount: number;\n};\n\nexport class RestDataSource extends BaseDataSource implements DataSource {\n private static _api = \"/api\";\n\n #columnMap: ColumnMap = buildColumnMap([\n \"bbg\",\n \"currency\",\n \"description\",\n \"exchange\",\n \"ric\",\n \"lotSize\",\n ]);\n #dataWindow = new MovingWindow(NULL_RANGE);\n\n groupBy: VuuGroupBy = [];\n selectedRowsCount = 0;\n status: DataSourceStatus = \"initialising\";\n table: VuuTable;\n\n constructor(props: DataSourceConstructorProps & { url?: string }) {\n super(props);\n\n const { table } = props;\n\n if (!table) throw Error(\"RestDataSource constructor called without table\");\n this.table = table;\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n super.subscribe(subscribeProps, callback);\n\n console.log(`subscribe ${JSON.stringify(subscribeProps, null, 2)}`);\n\n this.rangeRequest(this._range);\n }\n\n unsubscribe() {\n console.log(\"unsubscribe\");\n }\n\n private get pageSize() {\n return this._range.to - this._range.from;\n }\n\n static get api() {\n return this._api;\n }\n\n static set api(url: string) {\n this._api = url;\n }\n\n get url() {\n return `${RestDataSource.api}/${this.table.table}`;\n }\n\n get dataUrl() {\n const { from, to } = this._range;\n return `${this.url}?origin=${from}&limit=${to - from}${this.queryStringParameters}`;\n }\n\n get httpHeaders(): Headers | undefined {\n return undefined;\n }\n\n get metaDataUrl() {\n return `${this.url}/summary`;\n }\n\n private get queryStringParameters() {\n const params: string[] = [];\n if (hasSort(this._config)) {\n params.push(sortToQueryString(this._config.sort));\n }\n\n if (hasFilter(this._config)) {\n params.push(filterToQueryString(this._config.filterSpec));\n }\n\n return params.join(\"\");\n }\n\n get title() {\n return this._title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this._title = title;\n }\n\n rangeRequest(range: VuuRange) {\n console.log(`set range ${JSON.stringify(range)}`);\n this.#dataWindow.setRange(range);\n this.fetchData();\n }\n\n get config() {\n return super.config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const previousConfig = this._config;\n super.config = config;\n\n if (this._config !== previousConfig) {\n this.fetchData();\n }\n }\n\n private fetchData = async () => {\n const { recordCount } = await this.fetchMetaData();\n\n const pageCount = Math.ceil(recordCount / this.pageSize);\n this.emit(\"page-count\", pageCount);\n\n const start = performance.now();\n const allDone = () => {\n const end = performance.now();\n console.log(\n `processing ${this.#dataWindow.data.length} rows took ${end - start}ms`,\n );\n this._clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n range: this._range,\n rows: this.#dataWindow.data,\n size: recordCount,\n type: \"viewport-update\",\n });\n };\n\n console.log(`base ${RestDataSource.api}`);\n\n fetch(this.dataUrl, {\n headers: this.httpHeaders,\n mode: \"cors\",\n }).then(\n NDJsonReader(\n this._range.from,\n (index, json) =>\n this.#dataWindow.add(\n jsonToDataSourceRow(index, json, this.#columnMap),\n ),\n allDone,\n ),\n );\n };\n\n private fetchMetaData = async () =>\n new Promise<RestMetaData>((resolve, reject) => {\n fetch(this.metaDataUrl, {\n headers: this.httpHeaders,\n mode: \"cors\",\n }).then((response) => {\n if (response.ok) {\n resolve(response.json());\n } else {\n reject(response.status);\n }\n });\n });\n\n private sendRowsToClient() {\n console.log(`send rows to client`);\n }\n\n applyEdit: DataSourceEditHandler = async () => {\n return \"Method not implemented\";\n };\n\n openTreeNode = () => {\n throw new Error(\"openTreeNode, Method not implemented.\");\n };\n closeTreeNode = () => {\n throw new Error(\"closeTreeNode, Method not implemented.\");\n };\n\n remoteProcedureCall = async <T>() => \"Method not implemented\" as T;\n menuRpcCall = async () => {\n return \"Method not supported\";\n };\n rpcCall = async <T>() => {\n return \"Method not supported\" as T;\n };\n\n select = () => {\n throw new Error(\"remoteProcedureCall, Method not implemented.\");\n };\n}\n"],"names":["BaseDataSource","buildColumnMap","MovingWindow","NULL_RANGE","NDJsonReader","jsonToDataSourceRow","hasSort","sortToQueryString","hasFilter","filterToQueryString"],"mappings":"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"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
8
|
-
const { SELECTED } = vuuUtils.metadataKeys;
|
|
9
|
-
class MovingWindow {
|
|
10
|
-
constructor({ from, to }) {
|
|
11
|
-
__publicField(this, "data");
|
|
12
|
-
__publicField(this, "rowCount", 0);
|
|
13
|
-
__publicField(this, "range");
|
|
14
|
-
__publicField(this, "setRowCount", (rowCount) => {
|
|
15
|
-
if (rowCount < this.data.length) {
|
|
16
|
-
this.data.length = rowCount;
|
|
17
|
-
}
|
|
18
|
-
this.rowCount = rowCount;
|
|
19
|
-
});
|
|
20
|
-
this.range = new vuuUtils.WindowRange(from, to);
|
|
21
|
-
this.data = new Array(Math.max(0, to - from));
|
|
22
|
-
this.rowCount = 0;
|
|
23
|
-
}
|
|
24
|
-
add(data) {
|
|
25
|
-
const [index] = data;
|
|
26
|
-
if (this.isWithinRange(index)) {
|
|
27
|
-
const internalIndex = index - this.range.from;
|
|
28
|
-
this.data[internalIndex] = data;
|
|
29
|
-
if (data[SELECTED]) {
|
|
30
|
-
const previousRow = this.data[internalIndex - 1];
|
|
31
|
-
if (vuuUtils.isRowSelectedLast(previousRow)) {
|
|
32
|
-
this.data[internalIndex - 1] = previousRow.slice();
|
|
33
|
-
this.data[internalIndex - 1][SELECTED] -= 4;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
getAtIndex(index) {
|
|
39
|
-
return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
|
|
40
|
-
}
|
|
41
|
-
isWithinRange(index) {
|
|
42
|
-
return this.range.isWithin(index);
|
|
43
|
-
}
|
|
44
|
-
setRange({ from, to }) {
|
|
45
|
-
if (from !== this.range.from || to !== this.range.to) {
|
|
46
|
-
const [overlapFrom, overlapTo] = this.range.overlap(from, to);
|
|
47
|
-
const newData = new Array(Math.max(0, to - from));
|
|
48
|
-
for (let i = overlapFrom; i < overlapTo; i++) {
|
|
49
|
-
const data = this.getAtIndex(i);
|
|
50
|
-
if (data) {
|
|
51
|
-
const index = i - from;
|
|
52
|
-
newData[index] = data;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
this.data = newData;
|
|
56
|
-
this.range.from = from;
|
|
57
|
-
this.range.to = to;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
getSelectedRows() {
|
|
61
|
-
return this.data.filter((row) => row[SELECTED] !== 0);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
exports.MovingWindow = MovingWindow;
|
|
66
|
-
//# sourceMappingURL=moving-window.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"moving-window.js","sources":["../../src/rest-data/moving-window.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n isRowSelectedLast,\n metadataKeys,\n WindowRange,\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst { SELECTED } = metadataKeys;\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n private range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(Math.max(0, to - from));\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n this.data[internalIndex] = data;\n\n // Hack until we can deal with this more elegantly. When we have a block\n // select operation, first row is selected (and updated via server), then\n // remaining rows are selected when we select the block-end row. We get an\n // update for all rows except first. Because we're extending the select status\n // on the client, we have to adjust the first row selected (its still selected\n // but is no longer the 'last selected row in block')\n // Maybe answer is to apply ALL the selection status code here, not in Viewport\n if (data[SELECTED]) {\n const previousRow = this.data[internalIndex - 1];\n if (isRowSelectedLast(previousRow)) {\n this.data[internalIndex - 1] = previousRow.slice() as DataSourceRow;\n this.data[internalIndex - 1][SELECTED] -= 4;\n }\n }\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((row) => row[SELECTED] !== 0);\n }\n}\n"],"names":["metadataKeys","WindowRange","isRowSelectedLast"],"mappings":"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"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const NDJsonReader = (startIndex, jsonHandler, onEnd) => (response) => {
|
|
4
|
-
if (response.ok && response.body) {
|
|
5
|
-
const stream = response.body.getReader();
|
|
6
|
-
const decoder = new TextDecoder();
|
|
7
|
-
const matcher = /\r?\n/;
|
|
8
|
-
let buf = "";
|
|
9
|
-
let index = startIndex;
|
|
10
|
-
const loop = () => stream.read().then(({ done, value }) => {
|
|
11
|
-
if (done) {
|
|
12
|
-
if (buf.length > 0) jsonHandler(index, JSON.parse(buf));
|
|
13
|
-
onEnd();
|
|
14
|
-
} else {
|
|
15
|
-
const chunk = decoder.decode(value, {
|
|
16
|
-
stream: true
|
|
17
|
-
});
|
|
18
|
-
buf += chunk;
|
|
19
|
-
const jsonFragments = buf.split(matcher);
|
|
20
|
-
buf = jsonFragments.pop() ?? "";
|
|
21
|
-
for (const jsonFragment of jsonFragments) {
|
|
22
|
-
jsonHandler(index, JSON.parse(jsonFragment));
|
|
23
|
-
index += 1;
|
|
24
|
-
}
|
|
25
|
-
return loop();
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
return loop();
|
|
29
|
-
} else {
|
|
30
|
-
throw Error(`response invalid ${response.status} ${response.statusText}`);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
const jsonToDataSourceRow = (rowIndex, json, columnMap) => {
|
|
34
|
-
const dataSourceRow = [
|
|
35
|
-
rowIndex,
|
|
36
|
-
rowIndex,
|
|
37
|
-
true,
|
|
38
|
-
false,
|
|
39
|
-
0,
|
|
40
|
-
0,
|
|
41
|
-
json.ric,
|
|
42
|
-
0
|
|
43
|
-
];
|
|
44
|
-
for (const [column, colIdx] of Object.entries(columnMap)) {
|
|
45
|
-
dataSourceRow[colIdx] = json[column];
|
|
46
|
-
}
|
|
47
|
-
return dataSourceRow;
|
|
48
|
-
};
|
|
49
|
-
const sortParamsToList = (sortDefs) => sortDefs.reduce(
|
|
50
|
-
(list, { column, sortType }) => list.concat([column, sortType]),
|
|
51
|
-
[]
|
|
52
|
-
);
|
|
53
|
-
const sortToQueryString = (sort) => `&sort=[${sortParamsToList(sort.sortDefs)}]`;
|
|
54
|
-
const filterToQueryString = (vuuFilter) => `&filter=[${vuuFilter.filter}]`;
|
|
55
|
-
|
|
56
|
-
exports.NDJsonReader = NDJsonReader;
|
|
57
|
-
exports.filterToQueryString = filterToQueryString;
|
|
58
|
-
exports.jsonToDataSourceRow = jsonToDataSourceRow;
|
|
59
|
-
exports.sortToQueryString = sortToQueryString;
|
|
60
|
-
//# sourceMappingURL=rest-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rest-utils.js","sources":["../../src/rest-data/rest-utils.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuFilter,\n VuuRowDataItemType,\n VuuSort,\n VuuSortCol,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonArray = Json[];\nexport type JsonObject = { [key: string]: Json };\nexport type Json = JsonPrimitive | JsonArray | JsonObject;\nexport type JsonHandler = (rowIndex: number, json: JsonObject) => void;\n\nexport const NDJsonReader =\n (startIndex: number, jsonHandler: JsonHandler, onEnd: () => void) =>\n (response: Response) => {\n if (response.ok && response.body) {\n const stream = response.body.getReader();\n const decoder = new TextDecoder();\n const matcher = /\\r?\\n/;\n let buf = \"\";\n let index = startIndex;\n\n const loop: () => void = () =>\n stream.read().then(({ done, value }) => {\n if (done) {\n if (buf.length > 0) jsonHandler(index, JSON.parse(buf));\n onEnd();\n } else {\n const chunk = decoder.decode(value, {\n stream: true,\n });\n buf += chunk;\n\n const jsonFragments = buf.split(matcher);\n buf = jsonFragments.pop() ?? \"\";\n for (const jsonFragment of jsonFragments) {\n jsonHandler(index, JSON.parse(jsonFragment));\n index += 1;\n }\n return loop();\n }\n });\n return loop();\n } else {\n throw Error(`response invalid ${response.status} ${response.statusText}`);\n }\n };\n\nexport const jsonToDataSourceRow = (\n rowIndex: number,\n json: JsonObject,\n columnMap: ColumnMap,\n): DataSourceRow => {\n const dataSourceRow: DataSourceRow = [\n rowIndex,\n rowIndex,\n true,\n false,\n 0,\n 0,\n json.ric as string,\n 0,\n ];\n for (const [column, colIdx] of Object.entries(columnMap)) {\n dataSourceRow[colIdx] = json[column] as VuuRowDataItemType;\n }\n return dataSourceRow;\n};\n\nconst sortParamsToList = (sortDefs: VuuSortCol[]) =>\n sortDefs.reduce<string[]>(\n (list, { column, sortType }) => list.concat([column, sortType]),\n [],\n );\n\nexport const sortToQueryString = (sort: VuuSort) =>\n `&sort=[${sortParamsToList(sort.sortDefs)}]`;\n\nexport const filterToQueryString = (vuuFilter: VuuFilter) =>\n `&filter=[${vuuFilter.filter}]`;\n"],"names":[],"mappings":";;AAeO,MAAM,eACX,CAAC,UAAA,EAAoB,WAA0B,EAAA,KAAA,KAC/C,CAAC,QAAuB,KAAA;AACtB,EAAI,IAAA,QAAA,CAAS,EAAM,IAAA,QAAA,CAAS,IAAM,EAAA;AAChC,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,IAAA,CAAK,SAAU,EAAA;AACvC,IAAM,MAAA,OAAA,GAAU,IAAI,WAAY,EAAA;AAChC,IAAA,MAAM,OAAU,GAAA,OAAA;AAChB,IAAA,IAAI,GAAM,GAAA,EAAA;AACV,IAAA,IAAI,KAAQ,GAAA,UAAA;AAEZ,IAAM,MAAA,IAAA,GAAmB,MACvB,MAAA,CAAO,IAAK,EAAA,CAAE,KAAK,CAAC,EAAE,IAAM,EAAA,KAAA,EAAY,KAAA;AACtC,MAAA,IAAI,IAAM,EAAA;AACR,QAAI,IAAA,GAAA,CAAI,SAAS,CAAG,EAAA,WAAA,CAAY,OAAO,IAAK,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA;AACtD,QAAM,KAAA,EAAA;AAAA,OACD,MAAA;AACL,QAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,MAAA,CAAO,KAAO,EAAA;AAAA,UAClC,MAAQ,EAAA;AAAA,SACT,CAAA;AACD,QAAO,GAAA,IAAA,KAAA;AAEP,QAAM,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAM,OAAO,CAAA;AACvC,QAAM,GAAA,GAAA,aAAA,CAAc,KAAS,IAAA,EAAA;AAC7B,QAAA,KAAA,MAAW,gBAAgB,aAAe,EAAA;AACxC,UAAA,WAAA,CAAY,KAAO,EAAA,IAAA,CAAK,KAAM,CAAA,YAAY,CAAC,CAAA;AAC3C,UAAS,KAAA,IAAA,CAAA;AAAA;AAEX,QAAA,OAAO,IAAK,EAAA;AAAA;AACd,KACD,CAAA;AACH,IAAA,OAAO,IAAK,EAAA;AAAA,GACP,MAAA;AACL,IAAA,MAAM,MAAM,CAAoB,iBAAA,EAAA,QAAA,CAAS,MAAM,CAAI,CAAA,EAAA,QAAA,CAAS,UAAU,CAAE,CAAA,CAAA;AAAA;AAE5E;AAEK,MAAM,mBAAsB,GAAA,CACjC,QACA,EAAA,IAAA,EACA,SACkB,KAAA;AAClB,EAAA,MAAM,aAA+B,GAAA;AAAA,IACnC,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAK,CAAA,GAAA;AAAA,IACL;AAAA,GACF;AACA,EAAA,KAAA,MAAW,CAAC,MAAQ,EAAA,MAAM,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACxD,IAAc,aAAA,CAAA,MAAM,CAAI,GAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAErC,EAAO,OAAA,aAAA;AACT;AAEA,MAAM,gBAAA,GAAmB,CAAC,QAAA,KACxB,QAAS,CAAA,MAAA;AAAA,EACP,CAAC,IAAM,EAAA,EAAE,MAAQ,EAAA,QAAA,EAAe,KAAA,IAAA,CAAK,MAAO,CAAA,CAAC,MAAQ,EAAA,QAAQ,CAAC,CAAA;AAAA,EAC9D;AACF,CAAA;AAEK,MAAM,oBAAoB,CAAC,IAAA,KAChC,UAAU,gBAAiB,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA;AAEpC,MAAM,mBAAsB,GAAA,CAAC,SAClC,KAAA,CAAA,SAAA,EAAY,UAAU,MAAM,CAAA,CAAA;;;;;;;"}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { BaseDataSource, buildColumnMap, NULL_RANGE, hasSort, hasFilter } from '@vuu-ui/vuu-utils';
|
|
2
|
-
import { NDJsonReader, sortToQueryString, filterToQueryString, jsonToDataSourceRow } from './rest-utils.js';
|
|
3
|
-
import { MovingWindow } from './moving-window.js';
|
|
4
|
-
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __typeError = (msg) => {
|
|
7
|
-
throw TypeError(msg);
|
|
8
|
-
};
|
|
9
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
11
|
-
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
12
|
-
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
13
|
-
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
14
|
-
var _columnMap, _dataWindow;
|
|
15
|
-
const _RestDataSource = class _RestDataSource extends BaseDataSource {
|
|
16
|
-
constructor(props) {
|
|
17
|
-
super(props);
|
|
18
|
-
__privateAdd(this, _columnMap, buildColumnMap([
|
|
19
|
-
"bbg",
|
|
20
|
-
"currency",
|
|
21
|
-
"description",
|
|
22
|
-
"exchange",
|
|
23
|
-
"ric",
|
|
24
|
-
"lotSize"
|
|
25
|
-
]));
|
|
26
|
-
__privateAdd(this, _dataWindow, new MovingWindow(NULL_RANGE));
|
|
27
|
-
__publicField(this, "groupBy", []);
|
|
28
|
-
__publicField(this, "selectedRowsCount", 0);
|
|
29
|
-
__publicField(this, "status", "initialising");
|
|
30
|
-
__publicField(this, "table");
|
|
31
|
-
__publicField(this, "fetchData", async () => {
|
|
32
|
-
const { recordCount } = await this.fetchMetaData();
|
|
33
|
-
const pageCount = Math.ceil(recordCount / this.pageSize);
|
|
34
|
-
this.emit("page-count", pageCount);
|
|
35
|
-
const start = performance.now();
|
|
36
|
-
const allDone = () => {
|
|
37
|
-
const end = performance.now();
|
|
38
|
-
console.log(
|
|
39
|
-
`processing ${__privateGet(this, _dataWindow).data.length} rows took ${end - start}ms`
|
|
40
|
-
);
|
|
41
|
-
this._clientCallback?.({
|
|
42
|
-
clientViewportId: this.viewport,
|
|
43
|
-
mode: "update",
|
|
44
|
-
range: this._range,
|
|
45
|
-
rows: __privateGet(this, _dataWindow).data,
|
|
46
|
-
size: recordCount,
|
|
47
|
-
type: "viewport-update"
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
console.log(`base ${_RestDataSource.api}`);
|
|
51
|
-
fetch(this.dataUrl, {
|
|
52
|
-
headers: this.httpHeaders,
|
|
53
|
-
mode: "cors"
|
|
54
|
-
}).then(
|
|
55
|
-
NDJsonReader(
|
|
56
|
-
this._range.from,
|
|
57
|
-
(index, json) => __privateGet(this, _dataWindow).add(
|
|
58
|
-
jsonToDataSourceRow(index, json, __privateGet(this, _columnMap))
|
|
59
|
-
),
|
|
60
|
-
allDone
|
|
61
|
-
)
|
|
62
|
-
);
|
|
63
|
-
});
|
|
64
|
-
__publicField(this, "fetchMetaData", async () => new Promise((resolve, reject) => {
|
|
65
|
-
fetch(this.metaDataUrl, {
|
|
66
|
-
headers: this.httpHeaders,
|
|
67
|
-
mode: "cors"
|
|
68
|
-
}).then((response) => {
|
|
69
|
-
if (response.ok) {
|
|
70
|
-
resolve(response.json());
|
|
71
|
-
} else {
|
|
72
|
-
reject(response.status);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}));
|
|
76
|
-
__publicField(this, "applyEdit", async () => {
|
|
77
|
-
return "Method not implemented";
|
|
78
|
-
});
|
|
79
|
-
__publicField(this, "openTreeNode", () => {
|
|
80
|
-
throw new Error("openTreeNode, Method not implemented.");
|
|
81
|
-
});
|
|
82
|
-
__publicField(this, "closeTreeNode", () => {
|
|
83
|
-
throw new Error("closeTreeNode, Method not implemented.");
|
|
84
|
-
});
|
|
85
|
-
__publicField(this, "remoteProcedureCall", async () => "Method not implemented");
|
|
86
|
-
__publicField(this, "menuRpcCall", async () => {
|
|
87
|
-
return "Method not supported";
|
|
88
|
-
});
|
|
89
|
-
__publicField(this, "rpcCall", async () => {
|
|
90
|
-
return "Method not supported";
|
|
91
|
-
});
|
|
92
|
-
__publicField(this, "select", () => {
|
|
93
|
-
throw new Error("remoteProcedureCall, Method not implemented.");
|
|
94
|
-
});
|
|
95
|
-
const { table } = props;
|
|
96
|
-
if (!table) throw Error("RestDataSource constructor called without table");
|
|
97
|
-
this.table = table;
|
|
98
|
-
}
|
|
99
|
-
async subscribe(subscribeProps, callback) {
|
|
100
|
-
super.subscribe(subscribeProps, callback);
|
|
101
|
-
console.log(`subscribe ${JSON.stringify(subscribeProps, null, 2)}`);
|
|
102
|
-
this.rangeRequest(this._range);
|
|
103
|
-
}
|
|
104
|
-
unsubscribe() {
|
|
105
|
-
console.log("unsubscribe");
|
|
106
|
-
}
|
|
107
|
-
get pageSize() {
|
|
108
|
-
return this._range.to - this._range.from;
|
|
109
|
-
}
|
|
110
|
-
static get api() {
|
|
111
|
-
return this._api;
|
|
112
|
-
}
|
|
113
|
-
static set api(url) {
|
|
114
|
-
this._api = url;
|
|
115
|
-
}
|
|
116
|
-
get url() {
|
|
117
|
-
return `${_RestDataSource.api}/${this.table.table}`;
|
|
118
|
-
}
|
|
119
|
-
get dataUrl() {
|
|
120
|
-
const { from, to } = this._range;
|
|
121
|
-
return `${this.url}?origin=${from}&limit=${to - from}${this.queryStringParameters}`;
|
|
122
|
-
}
|
|
123
|
-
get httpHeaders() {
|
|
124
|
-
return void 0;
|
|
125
|
-
}
|
|
126
|
-
get metaDataUrl() {
|
|
127
|
-
return `${this.url}/summary`;
|
|
128
|
-
}
|
|
129
|
-
get queryStringParameters() {
|
|
130
|
-
const params = [];
|
|
131
|
-
if (hasSort(this._config)) {
|
|
132
|
-
params.push(sortToQueryString(this._config.sort));
|
|
133
|
-
}
|
|
134
|
-
if (hasFilter(this._config)) {
|
|
135
|
-
params.push(filterToQueryString(this._config.filterSpec));
|
|
136
|
-
}
|
|
137
|
-
return params.join("");
|
|
138
|
-
}
|
|
139
|
-
get title() {
|
|
140
|
-
return this._title ?? `${this.table.module} ${this.table.table}`;
|
|
141
|
-
}
|
|
142
|
-
set title(title) {
|
|
143
|
-
this._title = title;
|
|
144
|
-
}
|
|
145
|
-
rangeRequest(range) {
|
|
146
|
-
console.log(`set range ${JSON.stringify(range)}`);
|
|
147
|
-
__privateGet(this, _dataWindow).setRange(range);
|
|
148
|
-
this.fetchData();
|
|
149
|
-
}
|
|
150
|
-
get config() {
|
|
151
|
-
return super.config;
|
|
152
|
-
}
|
|
153
|
-
set config(config) {
|
|
154
|
-
const previousConfig = this._config;
|
|
155
|
-
super.config = config;
|
|
156
|
-
if (this._config !== previousConfig) {
|
|
157
|
-
this.fetchData();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
sendRowsToClient() {
|
|
161
|
-
console.log(`send rows to client`);
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
_columnMap = new WeakMap();
|
|
165
|
-
_dataWindow = new WeakMap();
|
|
166
|
-
__publicField(_RestDataSource, "_api", "/api");
|
|
167
|
-
let RestDataSource = _RestDataSource;
|
|
168
|
-
|
|
169
|
-
export { RestDataSource };
|
|
170
|
-
//# sourceMappingURL=RestDataSource.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RestDataSource.js","sources":["../../src/rest-data/RestDataSource.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConstructorProps,\n DataSourceEditHandler,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { VuuTable, VuuGroupBy, VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n BaseDataSource,\n ColumnMap,\n NULL_RANGE,\n buildColumnMap,\n hasFilter,\n hasSort,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n NDJsonReader,\n filterToQueryString,\n jsonToDataSourceRow,\n sortToQueryString,\n} from \"./rest-utils\";\nimport { MovingWindow } from \"./moving-window\";\n\nexport type RestMetaData = {\n recordCount: number;\n};\n\nexport class RestDataSource extends BaseDataSource implements DataSource {\n private static _api = \"/api\";\n\n #columnMap: ColumnMap = buildColumnMap([\n \"bbg\",\n \"currency\",\n \"description\",\n \"exchange\",\n \"ric\",\n \"lotSize\",\n ]);\n #dataWindow = new MovingWindow(NULL_RANGE);\n\n groupBy: VuuGroupBy = [];\n selectedRowsCount = 0;\n status: DataSourceStatus = \"initialising\";\n table: VuuTable;\n\n constructor(props: DataSourceConstructorProps & { url?: string }) {\n super(props);\n\n const { table } = props;\n\n if (!table) throw Error(\"RestDataSource constructor called without table\");\n this.table = table;\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n super.subscribe(subscribeProps, callback);\n\n console.log(`subscribe ${JSON.stringify(subscribeProps, null, 2)}`);\n\n this.rangeRequest(this._range);\n }\n\n unsubscribe() {\n console.log(\"unsubscribe\");\n }\n\n private get pageSize() {\n return this._range.to - this._range.from;\n }\n\n static get api() {\n return this._api;\n }\n\n static set api(url: string) {\n this._api = url;\n }\n\n get url() {\n return `${RestDataSource.api}/${this.table.table}`;\n }\n\n get dataUrl() {\n const { from, to } = this._range;\n return `${this.url}?origin=${from}&limit=${to - from}${this.queryStringParameters}`;\n }\n\n get httpHeaders(): Headers | undefined {\n return undefined;\n }\n\n get metaDataUrl() {\n return `${this.url}/summary`;\n }\n\n private get queryStringParameters() {\n const params: string[] = [];\n if (hasSort(this._config)) {\n params.push(sortToQueryString(this._config.sort));\n }\n\n if (hasFilter(this._config)) {\n params.push(filterToQueryString(this._config.filterSpec));\n }\n\n return params.join(\"\");\n }\n\n get title() {\n return this._title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this._title = title;\n }\n\n rangeRequest(range: VuuRange) {\n console.log(`set range ${JSON.stringify(range)}`);\n this.#dataWindow.setRange(range);\n this.fetchData();\n }\n\n get config() {\n return super.config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const previousConfig = this._config;\n super.config = config;\n\n if (this._config !== previousConfig) {\n this.fetchData();\n }\n }\n\n private fetchData = async () => {\n const { recordCount } = await this.fetchMetaData();\n\n const pageCount = Math.ceil(recordCount / this.pageSize);\n this.emit(\"page-count\", pageCount);\n\n const start = performance.now();\n const allDone = () => {\n const end = performance.now();\n console.log(\n `processing ${this.#dataWindow.data.length} rows took ${end - start}ms`,\n );\n this._clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n range: this._range,\n rows: this.#dataWindow.data,\n size: recordCount,\n type: \"viewport-update\",\n });\n };\n\n console.log(`base ${RestDataSource.api}`);\n\n fetch(this.dataUrl, {\n headers: this.httpHeaders,\n mode: \"cors\",\n }).then(\n NDJsonReader(\n this._range.from,\n (index, json) =>\n this.#dataWindow.add(\n jsonToDataSourceRow(index, json, this.#columnMap),\n ),\n allDone,\n ),\n );\n };\n\n private fetchMetaData = async () =>\n new Promise<RestMetaData>((resolve, reject) => {\n fetch(this.metaDataUrl, {\n headers: this.httpHeaders,\n mode: \"cors\",\n }).then((response) => {\n if (response.ok) {\n resolve(response.json());\n } else {\n reject(response.status);\n }\n });\n });\n\n private sendRowsToClient() {\n console.log(`send rows to client`);\n }\n\n applyEdit: DataSourceEditHandler = async () => {\n return \"Method not implemented\";\n };\n\n openTreeNode = () => {\n throw new Error(\"openTreeNode, Method not implemented.\");\n };\n closeTreeNode = () => {\n throw new Error(\"closeTreeNode, Method not implemented.\");\n };\n\n remoteProcedureCall = async <T>() => \"Method not implemented\" as T;\n menuRpcCall = async () => {\n return \"Method not supported\";\n };\n rpcCall = async <T>() => {\n return \"Method not supported\" as T;\n };\n\n select = () => {\n throw new Error(\"remoteProcedureCall, Method not implemented.\");\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { WindowRange, isRowSelectedLast, metadataKeys } from '@vuu-ui/vuu-utils';
|
|
2
|
-
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
|
-
const { SELECTED } = metadataKeys;
|
|
7
|
-
class MovingWindow {
|
|
8
|
-
constructor({ from, to }) {
|
|
9
|
-
__publicField(this, "data");
|
|
10
|
-
__publicField(this, "rowCount", 0);
|
|
11
|
-
__publicField(this, "range");
|
|
12
|
-
__publicField(this, "setRowCount", (rowCount) => {
|
|
13
|
-
if (rowCount < this.data.length) {
|
|
14
|
-
this.data.length = rowCount;
|
|
15
|
-
}
|
|
16
|
-
this.rowCount = rowCount;
|
|
17
|
-
});
|
|
18
|
-
this.range = new WindowRange(from, to);
|
|
19
|
-
this.data = new Array(Math.max(0, to - from));
|
|
20
|
-
this.rowCount = 0;
|
|
21
|
-
}
|
|
22
|
-
add(data) {
|
|
23
|
-
const [index] = data;
|
|
24
|
-
if (this.isWithinRange(index)) {
|
|
25
|
-
const internalIndex = index - this.range.from;
|
|
26
|
-
this.data[internalIndex] = data;
|
|
27
|
-
if (data[SELECTED]) {
|
|
28
|
-
const previousRow = this.data[internalIndex - 1];
|
|
29
|
-
if (isRowSelectedLast(previousRow)) {
|
|
30
|
-
this.data[internalIndex - 1] = previousRow.slice();
|
|
31
|
-
this.data[internalIndex - 1][SELECTED] -= 4;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
getAtIndex(index) {
|
|
37
|
-
return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
|
|
38
|
-
}
|
|
39
|
-
isWithinRange(index) {
|
|
40
|
-
return this.range.isWithin(index);
|
|
41
|
-
}
|
|
42
|
-
setRange({ from, to }) {
|
|
43
|
-
if (from !== this.range.from || to !== this.range.to) {
|
|
44
|
-
const [overlapFrom, overlapTo] = this.range.overlap(from, to);
|
|
45
|
-
const newData = new Array(Math.max(0, to - from));
|
|
46
|
-
for (let i = overlapFrom; i < overlapTo; i++) {
|
|
47
|
-
const data = this.getAtIndex(i);
|
|
48
|
-
if (data) {
|
|
49
|
-
const index = i - from;
|
|
50
|
-
newData[index] = data;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
this.data = newData;
|
|
54
|
-
this.range.from = from;
|
|
55
|
-
this.range.to = to;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
getSelectedRows() {
|
|
59
|
-
return this.data.filter((row) => row[SELECTED] !== 0);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export { MovingWindow };
|
|
64
|
-
//# sourceMappingURL=moving-window.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"moving-window.js","sources":["../../src/rest-data/moving-window.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n isRowSelectedLast,\n metadataKeys,\n WindowRange,\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst { SELECTED } = metadataKeys;\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n private range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(Math.max(0, to - from));\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n this.data[internalIndex] = data;\n\n // Hack until we can deal with this more elegantly. When we have a block\n // select operation, first row is selected (and updated via server), then\n // remaining rows are selected when we select the block-end row. We get an\n // update for all rows except first. Because we're extending the select status\n // on the client, we have to adjust the first row selected (its still selected\n // but is no longer the 'last selected row in block')\n // Maybe answer is to apply ALL the selection status code here, not in Viewport\n if (data[SELECTED]) {\n const previousRow = this.data[internalIndex - 1];\n if (isRowSelectedLast(previousRow)) {\n this.data[internalIndex - 1] = previousRow.slice() as DataSourceRow;\n this.data[internalIndex - 1][SELECTED] -= 4;\n }\n }\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((row) => row[SELECTED] !== 0);\n }\n}\n"],"names":[],"mappings":";;;;;AAQA,MAAM,EAAE,UAAa,GAAA,YAAA;AAEd,MAAM,YAAa,CAAA;AAAA,EAKxB,WAAY,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAJpC,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAO,UAAW,EAAA,CAAA,CAAA;AAClB,IAAQ,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AASR,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,EAAc,CAAC,QAAqB,KAAA;AAClC,MAAI,IAAA,QAAA,GAAW,IAAK,CAAA,IAAA,CAAK,MAAQ,EAAA;AAC/B,QAAA,IAAA,CAAK,KAAK,MAAS,GAAA,QAAA;AAAA;AAGrB,MAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAAA,KAClB,CAAA;AAZE,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAI,WAAY,CAAA,IAAA,EAAM,EAAE,CAAA;AAErC,IAAK,IAAA,CAAA,IAAA,GAAO,IAAI,KAAM,CAAA,IAAA,CAAK,IAAI,CAAG,EAAA,EAAA,GAAK,IAAI,CAAC,CAAA;AAC5C,IAAA,IAAA,CAAK,QAAW,GAAA,CAAA;AAAA;AAClB,EAUA,IAAI,IAAqB,EAAA;AACvB,IAAM,MAAA,CAAC,KAAK,CAAI,GAAA,IAAA;AAChB,IAAI,IAAA,IAAA,CAAK,aAAc,CAAA,KAAK,CAAG,EAAA;AAC7B,MAAM,MAAA,aAAA,GAAgB,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA;AACzC,MAAK,IAAA,CAAA,IAAA,CAAK,aAAa,CAAI,GAAA,IAAA;AAS3B,MAAI,IAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAClB,QAAA,MAAM,WAAc,GAAA,IAAA,CAAK,IAAK,CAAA,aAAA,GAAgB,CAAC,CAAA;AAC/C,QAAI,IAAA,iBAAA,CAAkB,WAAW,CAAG,EAAA;AAClC,UAAA,IAAA,CAAK,IAAK,CAAA,aAAA,GAAgB,CAAC,CAAA,GAAI,YAAY,KAAM,EAAA;AACjD,UAAA,IAAA,CAAK,IAAK,CAAA,aAAA,GAAgB,CAAC,CAAA,CAAE,QAAQ,CAAK,IAAA,CAAA;AAAA;AAC5C;AACF;AACF;AACF,EAEA,WAAW,KAAe,EAAA;AACxB,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAC9B,IAAA,IAAA,CAAK,KAAK,KAAQ,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA,IAAK,OACpC,IAAK,CAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAM,IAAI,CACjC,GAAA,KAAA,CAAA;AAAA;AACN,EAEA,cAAc,KAAe,EAAA;AAC3B,IAAO,OAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAAA;AAAA;AAClC,EAEA,QAAS,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAC/B,IAAA,IAAI,SAAS,IAAK,CAAA,KAAA,CAAM,QAAQ,EAAO,KAAA,IAAA,CAAK,MAAM,EAAI,EAAA;AACpD,MAAM,MAAA,CAAC,aAAa,SAAS,CAAA,GAAI,KAAK,KAAM,CAAA,OAAA,CAAQ,MAAM,EAAE,CAAA;AAC5D,MAAM,MAAA,OAAA,GAAU,IAAI,KAAM,CAAA,IAAA,CAAK,IAAI,CAAG,EAAA,EAAA,GAAK,IAAI,CAAC,CAAA;AAChD,MAAA,KAAA,IAAS,CAAI,GAAA,WAAA,EAAa,CAAI,GAAA,SAAA,EAAW,CAAK,EAAA,EAAA;AAC5C,QAAM,MAAA,IAAA,GAAO,IAAK,CAAA,UAAA,CAAW,CAAC,CAAA;AAC9B,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,QAAQ,CAAI,GAAA,IAAA;AAClB,UAAA,OAAA,CAAQ,KAAK,CAAI,GAAA,IAAA;AAAA;AACnB;AAEF,MAAA,IAAA,CAAK,IAAO,GAAA,OAAA;AACZ,MAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA;AAClB,MAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA;AAAA;AAClB;AACF,EAEA,eAAkB,GAAA;AAChB,IAAO,OAAA,IAAA,CAAK,KAAK,MAAO,CAAA,CAAC,QAAQ,GAAI,CAAA,QAAQ,MAAM,CAAC,CAAA;AAAA;AAExD;;;;"}
|