@vuu-ui/vuu-data-remote 0.8.96 → 0.8.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- import { EventEmitter, buildColumnMap, NULL_RANGE, NO_CONFIG_CHANGES, uuid, vanillaConfig } from '@vuu-ui/vuu-utils';
2
- import { NDJsonReader, jsonToDataSourceRow } from './rest-utils.js';
1
+ import { BaseDataSource, buildColumnMap, NULL_RANGE, hasSort, hasFilter } from '@vuu-ui/vuu-utils';
2
+ import { NDJsonReader, sortToQueryString, filterToQueryString, jsonToDataSourceRow } from './rest-utils.js';
3
3
  import { MovingWindow } from './moving-window.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -11,16 +11,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
11
11
  var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
12
12
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
13
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 __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
15
- var _columnMap, _config, _data, _dataWindow, _range, _title;
16
- const _RestDataSource = class _RestDataSource extends EventEmitter {
17
- constructor({
18
- table,
19
- title,
20
- viewport = uuid()
21
- }) {
22
- super();
23
- __publicField(this, "clientCallback");
14
+ var _columnMap, _dataWindow;
15
+ const _RestDataSource = class _RestDataSource extends BaseDataSource {
16
+ constructor(props) {
17
+ super(props);
24
18
  __privateAdd(this, _columnMap, buildColumnMap([
25
19
  "bbg",
26
20
  "currency",
@@ -29,20 +23,11 @@ const _RestDataSource = class _RestDataSource extends EventEmitter {
29
23
  "ric",
30
24
  "lotSize"
31
25
  ]));
32
- __privateAdd(this, _config, vanillaConfig);
33
- __privateAdd(this, _data, []);
34
26
  __privateAdd(this, _dataWindow, new MovingWindow(NULL_RANGE));
35
- __privateAdd(this, _range, NULL_RANGE);
36
- __privateAdd(this, _title);
37
- __publicField(this, "aggregations", []);
38
- __publicField(this, "filter", { filter: "" });
39
27
  __publicField(this, "groupBy", []);
40
28
  __publicField(this, "selectedRowsCount", 0);
41
- __publicField(this, "size", 0);
42
- __publicField(this, "sort", { sortDefs: [] });
43
29
  __publicField(this, "status", "initialising");
44
30
  __publicField(this, "table");
45
- __publicField(this, "viewport");
46
31
  __publicField(this, "fetchData", async () => {
47
32
  const { recordCount } = await this.fetchMetaData();
48
33
  const pageCount = Math.ceil(recordCount / this.pageSize);
@@ -53,10 +38,10 @@ const _RestDataSource = class _RestDataSource extends EventEmitter {
53
38
  console.log(
54
39
  `processing ${__privateGet(this, _dataWindow).data.length} rows took ${end - start}ms`
55
40
  );
56
- this.clientCallback?.({
41
+ this._clientCallback?.({
57
42
  clientViewportId: this.viewport,
58
43
  mode: "update",
59
- range: __privateGet(this, _range),
44
+ range: this._range,
60
45
  rows: __privateGet(this, _dataWindow).data,
61
46
  size: recordCount,
62
47
  type: "viewport-update"
@@ -67,7 +52,7 @@ const _RestDataSource = class _RestDataSource extends EventEmitter {
67
52
  mode: "cors"
68
53
  }).then(
69
54
  NDJsonReader(
70
- __privateGet(this, _range).from,
55
+ this._range.from,
71
56
  (index, json) => __privateGet(this, _dataWindow).add(
72
57
  jsonToDataSourceRow(index, json, __privateGet(this, _columnMap))
73
58
  ),
@@ -89,7 +74,6 @@ const _RestDataSource = class _RestDataSource extends EventEmitter {
89
74
  __publicField(this, "applyEdit", async () => {
90
75
  return "Method not implemented";
91
76
  });
92
- __publicField(this, "applyConfig", () => NO_CONFIG_CHANGES);
93
77
  __publicField(this, "openTreeNode", () => {
94
78
  throw new Error("openTreeNode, Method not implemented.");
95
79
  });
@@ -106,25 +90,20 @@ const _RestDataSource = class _RestDataSource extends EventEmitter {
106
90
  __publicField(this, "select", () => {
107
91
  throw new Error("remoteProcedureCall, Method not implemented.");
108
92
  });
93
+ const { table } = props;
109
94
  if (!table) throw Error("RestDataSource constructor called without table");
110
95
  this.table = table;
111
- this.viewport = viewport;
112
- __privateSet(this, _config, {
113
- ...__privateGet(this, _config),
114
- columns: [
115
- "bbg",
116
- "currency",
117
- "description",
118
- "exchange",
119
- "ric",
120
- "isin",
121
- "lotSize"
122
- ]
123
- });
124
- __privateSet(this, _title, title);
96
+ }
97
+ async subscribe(subscribeProps, callback) {
98
+ super.subscribe(subscribeProps, callback);
99
+ console.log(`subscribe ${JSON.stringify(subscribeProps, null, 2)}`);
100
+ this.rangeRequest(this._range);
101
+ }
102
+ unsubscribe() {
103
+ console.log("unsubscribe");
125
104
  }
126
105
  get pageSize() {
127
- return __privateGet(this, _range).to - __privateGet(this, _range).from;
106
+ return this._range.to - this._range.from;
128
107
  }
129
108
  static get api() {
130
109
  return this._api;
@@ -136,43 +115,40 @@ const _RestDataSource = class _RestDataSource extends EventEmitter {
136
115
  return `${_RestDataSource.api}/${this.table.table}`;
137
116
  }
138
117
  get dataUrl() {
139
- const { from, to } = __privateGet(this, _range);
140
- return `${this.url}?origin=${from}&limit=${to - from}`;
118
+ const { from, to } = this._range;
119
+ return `${this.url}?origin=${from}&limit=${to - from}${this.queryStringParameters}`;
141
120
  }
142
121
  get metaDataUrl() {
143
122
  return `${this.url}/summary`;
144
123
  }
124
+ get queryStringParameters() {
125
+ const params = [];
126
+ if (hasSort(this._config)) {
127
+ params.push(sortToQueryString(this._config.sort));
128
+ }
129
+ if (hasFilter(this._config)) {
130
+ params.push(filterToQueryString(this._config.filterSpec));
131
+ }
132
+ return params.join("");
133
+ }
145
134
  get title() {
146
- return __privateGet(this, _title) ?? `${this.table.module} ${this.table.table}`;
135
+ return this._title ?? `${this.table.module} ${this.table.table}`;
147
136
  }
148
137
  set title(title) {
149
- __privateSet(this, _title, title);
138
+ this._title = title;
150
139
  }
151
- async subscribe({ range, ...props }, callback) {
152
- if (range) {
153
- this.range = range;
154
- }
155
- console.log(`subscribe ${JSON.stringify(props, null, 2)}`);
156
- this.clientCallback = callback;
140
+ rangeRequest(range) {
141
+ console.log(`set range ${JSON.stringify(range)}`);
142
+ __privateGet(this, _dataWindow).setRange(range);
157
143
  this.fetchData();
158
144
  }
159
- unsubscribe() {
160
- console.log("unsubscribe");
161
- }
162
- get columns() {
163
- return __privateGet(this, _config).columns;
164
- }
165
145
  get config() {
166
- return __privateGet(this, _config);
146
+ return super.config;
167
147
  }
168
- get range() {
169
- return __privateGet(this, _range);
170
- }
171
- set range(range) {
172
- console.log(`set range ${JSON.stringify(range)}`);
173
- if (range.from !== __privateGet(this, _range).from || range.to !== __privateGet(this, _range).to) {
174
- __privateSet(this, _range, range);
175
- __privateGet(this, _dataWindow).setRange(range);
148
+ set config(config) {
149
+ const previousConfig = this._config;
150
+ super.config = config;
151
+ if (this._config !== previousConfig) {
176
152
  this.fetchData();
177
153
  }
178
154
  }
@@ -181,13 +157,9 @@ const _RestDataSource = class _RestDataSource extends EventEmitter {
181
157
  }
182
158
  };
183
159
  _columnMap = new WeakMap();
184
- _config = new WeakMap();
185
- _data = new WeakMap();
186
160
  _dataWindow = new WeakMap();
187
- _range = new WeakMap();
188
- _title = new WeakMap();
189
161
  __publicField(_RestDataSource, "_api", "/api");
190
162
  let RestDataSource = _RestDataSource;
191
163
 
192
164
  export { RestDataSource };
193
- //# sourceMappingURL=rest-data-source.js.map
165
+ //# sourceMappingURL=RestDataSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestDataSource.js","sources":["../../src/rest-data/RestDataSource.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEditHandler,\n DataSourceStatus,\n SubscribeCallback,\n SubscribeProps,\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(subscribeProps: SubscribeProps, callback: SubscribeCallback) {\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 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: DataSourceConfig) {\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 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 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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"}
@@ -44,6 +44,12 @@ const jsonToDataSourceRow = (rowIndex, json, columnMap) => {
44
44
  }
45
45
  return dataSourceRow;
46
46
  };
47
+ const sortParamsToList = (sortDefs) => sortDefs.reduce(
48
+ (list, { column, sortType }) => list.concat([column, sortType]),
49
+ []
50
+ );
51
+ const sortToQueryString = (sort) => `&sort=[${sortParamsToList(sort.sortDefs)}]`;
52
+ const filterToQueryString = (vuuFilter) => `&filter=[${vuuFilter.filter}]`;
47
53
 
48
- export { NDJsonReader, jsonToDataSourceRow };
54
+ export { NDJsonReader, filterToQueryString, jsonToDataSourceRow, sortToQueryString };
49
55
  //# sourceMappingURL=rest-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest-utils.js","sources":["../../src/rest-data/rest-utils.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType } 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"],"names":[],"mappings":"AAUO,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,CAAA;AACvC,IAAM,MAAA,OAAA,GAAU,IAAI,WAAY,EAAA,CAAA;AAChC,IAAA,MAAM,OAAU,GAAA,OAAA,CAAA;AAChB,IAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,IAAA,IAAI,KAAQ,GAAA,UAAA,CAAA;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,CAAA;AACtD,QAAM,KAAA,EAAA,CAAA;AAAA,OACD,MAAA;AACL,QAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,MAAA,CAAO,KAAO,EAAA;AAAA,UAClC,MAAQ,EAAA,IAAA;AAAA,SACT,CAAA,CAAA;AACD,QAAO,GAAA,IAAA,KAAA,CAAA;AAEP,QAAM,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACvC,QAAM,GAAA,GAAA,aAAA,CAAc,KAAS,IAAA,EAAA,CAAA;AAC7B,QAAA,KAAA,MAAW,gBAAgB,aAAe,EAAA;AACxC,UAAA,WAAA,CAAY,KAAO,EAAA,IAAA,CAAK,KAAM,CAAA,YAAY,CAAC,CAAA,CAAA;AAC3C,UAAS,KAAA,IAAA,CAAA,CAAA;AAAA,SACX;AACA,QAAA,OAAO,IAAK,EAAA,CAAA;AAAA,OACd;AAAA,KACD,CAAA,CAAA;AACH,IAAA,OAAO,IAAK,EAAA,CAAA;AAAA,GACP,MAAA;AACL,IAAA,MAAM,MAAM,CAAoB,iBAAA,EAAA,QAAA,CAAS,MAAM,CAAI,CAAA,EAAA,QAAA,CAAS,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,GAC1E;AACF,EAAA;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,CAAA;AAAA,GACF,CAAA;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,CAAA;AAAA,GACrC;AACA,EAAO,OAAA,aAAA,CAAA;AACT;;;;"}
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,CAAA;AACvC,IAAM,MAAA,OAAA,GAAU,IAAI,WAAY,EAAA,CAAA;AAChC,IAAA,MAAM,OAAU,GAAA,OAAA,CAAA;AAChB,IAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,IAAA,IAAI,KAAQ,GAAA,UAAA,CAAA;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,CAAA;AACtD,QAAM,KAAA,EAAA,CAAA;AAAA,OACD,MAAA;AACL,QAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,MAAA,CAAO,KAAO,EAAA;AAAA,UAClC,MAAQ,EAAA,IAAA;AAAA,SACT,CAAA,CAAA;AACD,QAAO,GAAA,IAAA,KAAA,CAAA;AAEP,QAAM,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACvC,QAAM,GAAA,GAAA,aAAA,CAAc,KAAS,IAAA,EAAA,CAAA;AAC7B,QAAA,KAAA,MAAW,gBAAgB,aAAe,EAAA;AACxC,UAAA,WAAA,CAAY,KAAO,EAAA,IAAA,CAAK,KAAM,CAAA,YAAY,CAAC,CAAA,CAAA;AAC3C,UAAS,KAAA,IAAA,CAAA,CAAA;AAAA,SACX;AACA,QAAA,OAAO,IAAK,EAAA,CAAA;AAAA,OACd;AAAA,KACD,CAAA,CAAA;AACH,IAAA,OAAO,IAAK,EAAA,CAAA;AAAA,GACP,MAAA;AACL,IAAA,MAAM,MAAM,CAAoB,iBAAA,EAAA,QAAA,CAAS,MAAM,CAAI,CAAA,EAAA,QAAA,CAAS,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,GAC1E;AACF,EAAA;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,CAAA;AAAA,GACF,CAAA;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,CAAA;AAAA,GACrC;AACA,EAAO,OAAA,aAAA,CAAA;AACT,EAAA;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,EAAC;AACH,CAAA,CAAA;AAEK,MAAM,oBAAoB,CAAC,IAAA,KAChC,UAAU,gBAAiB,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA,EAAA;AAEpC,MAAM,mBAAsB,GAAA,CAAC,SAClC,KAAA,CAAA,SAAA,EAAY,UAAU,MAAM,CAAA,CAAA;;;;"}
@@ -1,5 +1,4 @@
1
- import { parseFilter } from '@vuu-ui/vuu-filter-parser';
2
- import { logger, EventEmitter, debounce, throttle, uuid, selectionCount, combineFilters, isConfigChanged, withConfigDefaults, itemsOrOrderChanged, vuuEditCellRequest, vuuAddRowRequest, vuuDeleteRowRequest, vanillaConfig, isViewportMenusAction, isVisualLinksAction } from '@vuu-ui/vuu-utils';
1
+ import { logger, BaseDataSource, debounce, throttle, uuid, combineFilters, selectionCount, itemsOrOrderChanged, vuuEditCellRequest, vuuAddRowRequest, vuuDeleteRowRequest, isViewportMenusAction, isVisualLinksAction } from '@vuu-ui/vuu-utils';
3
2
  import ConnectionManager from './ConnectionManager.js';
4
3
  import { isDataSourceConfigMessage } from './data-source.js';
5
4
 
@@ -13,28 +12,15 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
13
12
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
14
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);
15
14
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
16
- var _config, _groupBy, _pendingVisualLink, _links, _menu, _optimize, _range, _selectedRowsCount, _size, _status, _tableSchema, _title;
15
+ var _groupBy, _pendingVisualLink, _links, _menu, _optimize, _range, _selectedRowsCount, _status, _tableSchema;
17
16
  const { info } = logger("VuuDataSource");
18
- class VuuDataSource extends EventEmitter {
19
- constructor({
20
- bufferSize = 100,
21
- aggregations,
22
- columns,
23
- filterSpec,
24
- groupBy,
25
- sort,
26
- table,
27
- title,
28
- viewport,
29
- visualLink
30
- }) {
31
- super();
17
+ class VuuDataSource extends BaseDataSource {
18
+ constructor(props) {
19
+ super(props);
32
20
  __publicField(this, "bufferSize");
33
21
  __publicField(this, "server", null);
34
- __publicField(this, "clientCallback");
35
22
  __publicField(this, "configChangePending");
36
23
  __publicField(this, "rangeRequest");
37
- __privateAdd(this, _config, vanillaConfig);
38
24
  __privateAdd(this, _groupBy, []);
39
25
  __privateAdd(this, _pendingVisualLink);
40
26
  __privateAdd(this, _links);
@@ -42,17 +28,14 @@ class VuuDataSource extends EventEmitter {
42
28
  __privateAdd(this, _optimize, "throttle");
43
29
  __privateAdd(this, _range, { from: 0, to: 0 });
44
30
  __privateAdd(this, _selectedRowsCount, 0);
45
- __privateAdd(this, _size, 0);
46
31
  __privateAdd(this, _status, "initialising");
47
32
  __privateAdd(this, _tableSchema);
48
- __privateAdd(this, _title);
49
33
  __publicField(this, "table");
50
- __publicField(this, "viewport");
51
34
  __publicField(this, "handleMessageFromServer", (message) => {
52
35
  if (message.type === "subscribed") {
53
36
  __privateSet(this, _status, "subscribed");
54
37
  this.tableSchema = message.tableSchema;
55
- this.clientCallback?.(message);
38
+ this._clientCallback?.(message);
56
39
  if (__privateGet(this, _pendingVisualLink)) {
57
40
  this.visualLink = __privateGet(this, _pendingVisualLink);
58
41
  __privateSet(this, _pendingVisualLink, void 0);
@@ -67,11 +50,11 @@ class VuuDataSource extends EventEmitter {
67
50
  } else if (message.type === "debounce-begin") {
68
51
  this.optimize = "debounce";
69
52
  } else {
70
- if (message.type === "viewport-update" && message.size !== void 0 && message.size !== __privateGet(this, _size)) {
71
- __privateSet(this, _size, message.size);
53
+ if (message.type === "viewport-update" && message.size !== void 0 && message.size !== this._size) {
54
+ this._size = message.size;
72
55
  this.emit("resize", message.size);
73
56
  } else if (message.type === "viewport-clear") {
74
- __privateSet(this, _size, 0);
57
+ this._size = 0;
75
58
  this.emit("resize", 0);
76
59
  }
77
60
  if (this.configChangePending) {
@@ -82,7 +65,7 @@ class VuuDataSource extends EventEmitter {
82
65
  } else if (isVisualLinksAction(message)) {
83
66
  __privateSet(this, _links, message.links);
84
67
  } else {
85
- this.clientCallback?.(message);
68
+ this._clientCallback?.(message);
86
69
  }
87
70
  if (this.optimize === "debounce") {
88
71
  this.revertDebounce();
@@ -119,65 +102,36 @@ class VuuDataSource extends EventEmitter {
119
102
  });
120
103
  }
121
104
  }, 80));
105
+ const { bufferSize = 100, table, visualLink } = props;
122
106
  if (!table)
123
107
  throw Error("RemoteDataSource constructor called without table");
124
108
  this.bufferSize = bufferSize;
125
109
  this.table = table;
126
- this.viewport = viewport ?? "";
127
- __privateSet(this, _config, {
128
- ...__privateGet(this, _config),
129
- aggregations: aggregations || __privateGet(this, _config).aggregations,
130
- columns: columns || __privateGet(this, _config).columns,
131
- filterSpec: filterSpec || __privateGet(this, _config).filterSpec,
132
- groupBy: groupBy || __privateGet(this, _config).groupBy,
133
- sort: sort || __privateGet(this, _config).sort
134
- });
135
110
  __privateSet(this, _pendingVisualLink, visualLink);
136
- __privateSet(this, _title, title);
137
111
  this.rangeRequest = this.rawRangeRequest;
138
112
  }
139
- async subscribe({
140
- viewport = this.viewport || (this.viewport = uuid()),
141
- columns,
142
- aggregations,
143
- range,
144
- sort,
145
- groupBy,
146
- filterSpec
147
- }, callback) {
113
+ async subscribe(subscribeProps, callback) {
114
+ super.subscribe(subscribeProps, callback);
115
+ const { viewport = this.viewport || (this.viewport = uuid()) } = subscribeProps;
148
116
  if (__privateGet(this, _status) === "disabled" || __privateGet(this, _status) === "disabling") {
149
117
  this.enable(callback);
150
118
  return;
151
119
  }
152
- this.clientCallback = callback;
153
- if (aggregations || columns || filterSpec || groupBy || sort) {
154
- __privateSet(this, _config, {
155
- ...__privateGet(this, _config),
156
- aggregations: aggregations || __privateGet(this, _config).aggregations,
157
- columns: columns || __privateGet(this, _config).columns,
158
- filterSpec: filterSpec || __privateGet(this, _config).filterSpec,
159
- groupBy: groupBy || __privateGet(this, _config).groupBy,
160
- sort: sort || __privateGet(this, _config).sort
161
- });
162
- }
163
- if (range) {
164
- __privateSet(this, _range, range);
165
- }
166
120
  if (__privateGet(this, _status) !== "initialising" && __privateGet(this, _status) !== "unsubscribed") {
167
121
  return;
168
122
  }
169
123
  __privateSet(this, _status, "subscribing");
170
- this.viewport = viewport;
171
124
  this.server = await ConnectionManager.serverAPI;
172
125
  const { bufferSize } = this;
126
+ const dataSourceConfig = combineFilters(this._config);
173
127
  this.server?.subscribe(
174
128
  {
175
- ...__privateGet(this, _config),
129
+ ...dataSourceConfig,
176
130
  bufferSize,
177
131
  viewport,
178
132
  table: this.table,
179
- range: __privateGet(this, _range),
180
- title: __privateGet(this, _title)
133
+ range: this._range,
134
+ title: this._title
181
135
  },
182
136
  this.handleMessageFromServer
183
137
  );
@@ -193,7 +147,7 @@ class VuuDataSource extends EventEmitter {
193
147
  this.server = null;
194
148
  this.removeAllListeners();
195
149
  __privateSet(this, _status, "unsubscribed");
196
- this.viewport = void 0;
150
+ this.viewport = "";
197
151
  this.range = { from: 0, to: 0 };
198
152
  }
199
153
  }
@@ -215,7 +169,7 @@ class VuuDataSource extends EventEmitter {
215
169
  const isSuspended = __privateGet(this, _status) === "suspended";
216
170
  info?.(`resume #${this.viewport}, current status ${__privateGet(this, _status)}`);
217
171
  if (callback) {
218
- this.clientCallback = callback;
172
+ this._clientCallback = callback;
219
173
  }
220
174
  if (this.viewport) {
221
175
  if (isDisabled) {
@@ -246,7 +200,7 @@ class VuuDataSource extends EventEmitter {
246
200
  if (this.viewport && (__privateGet(this, _status) === "disabled" || __privateGet(this, _status) === "disabling")) {
247
201
  __privateSet(this, _status, "enabling");
248
202
  if (callback) {
249
- this.clientCallback = callback;
203
+ this._clientCallback = callback;
250
204
  }
251
205
  this.server?.send({
252
206
  viewport: this.viewport,
@@ -322,149 +276,32 @@ class VuuDataSource extends EventEmitter {
322
276
  get selectedRowsCount() {
323
277
  return __privateGet(this, _selectedRowsCount);
324
278
  }
325
- get size() {
326
- return __privateGet(this, _size);
327
- }
328
- get range() {
329
- return __privateGet(this, _range);
330
- }
331
- set range(range) {
332
- if (range.from !== __privateGet(this, _range).from || range.to !== __privateGet(this, _range).to) {
333
- __privateSet(this, _range, range);
334
- this.rangeRequest(range);
335
- }
336
- }
337
279
  get config() {
338
- return __privateGet(this, _config);
280
+ return super.config;
339
281
  }
340
282
  set config(config) {
341
- const configChanges = this.applyConfig(config);
342
- if (configChanges) {
343
- if (__privateGet(this, _config) && this.viewport) {
344
- if (config) {
345
- const newConfig = combineFilters(__privateGet(this, _config));
346
- this.server?.send({
347
- viewport: this.viewport,
348
- type: "config",
349
- config: newConfig
350
- });
351
- }
352
- }
353
- this.emit("config", __privateGet(this, _config), void 0, configChanges);
354
- }
355
- }
356
- applyConfig(config, preserveExistingConfigAttributes = false) {
357
- const { noChanges, ...otherChanges } = isConfigChanged(
358
- __privateGet(this, _config),
359
- config
360
- );
361
- if (noChanges !== true) {
362
- if (config) {
363
- const newConfig = config?.filterSpec?.filter && config?.filterSpec.filterStruct === void 0 ? {
364
- ...config,
365
- filterSpec: {
366
- filter: config.filterSpec.filter,
367
- filterStruct: parseFilter(config.filterSpec.filter)
368
- }
369
- } : config;
370
- if (preserveExistingConfigAttributes) {
371
- __privateSet(this, _config, {
372
- ...__privateGet(this, _config),
373
- ...config
374
- });
375
- } else {
376
- __privateSet(this, _config, withConfigDefaults(newConfig));
377
- }
378
- return otherChanges;
379
- }
380
- }
381
- }
382
- //TODO replace all these individual server calls with calls to setConfig
383
- get columns() {
384
- return __privateGet(this, _config).columns;
385
- }
386
- set columns(columns) {
387
- __privateSet(this, _config, {
388
- ...__privateGet(this, _config),
389
- columns
390
- });
391
- if (this.viewport) {
392
- const message = {
393
- viewport: this.viewport,
394
- type: "setColumns",
395
- columns
396
- };
397
- if (this.server) {
398
- this.server.send(message);
399
- }
400
- }
401
- this.emit("config", __privateGet(this, _config));
402
- }
403
- get aggregations() {
404
- return __privateGet(this, _config).aggregations;
405
- }
406
- set aggregations(aggregations) {
407
- __privateSet(this, _config, {
408
- ...__privateGet(this, _config),
409
- aggregations
410
- });
411
- if (this.viewport) {
283
+ const previousConfig = this._config;
284
+ super.config = config;
285
+ if (this._config !== previousConfig) {
412
286
  this.server?.send({
413
287
  viewport: this.viewport,
414
- type: "aggregate",
415
- aggregations
288
+ type: "config",
289
+ config: combineFilters(this._config)
416
290
  });
417
291
  }
418
- this.emit("config", __privateGet(this, _config));
419
- }
420
- get sort() {
421
- return __privateGet(this, _config).sort;
422
- }
423
- set sort(sort) {
424
- __privateSet(this, _config, {
425
- ...__privateGet(this, _config),
426
- sort
427
- });
428
- if (this.viewport) {
429
- const message = {
430
- viewport: this.viewport,
431
- type: "sort",
432
- sort
433
- };
434
- this.server?.send(message);
435
- }
436
- this.emit("config", __privateGet(this, _config));
437
- }
438
- get baseFilter() {
439
- return __privateGet(this, _config).baseFilterSpec;
440
- }
441
- set baseFilter(baseFilter) {
442
- this.config = {
443
- ...__privateGet(this, _config),
444
- baseFilterSpec: baseFilter
445
- };
446
- }
447
- get filter() {
448
- return __privateGet(this, _config).filterSpec;
449
- }
450
- set filter(filter) {
451
- this.config = {
452
- ...__privateGet(this, _config),
453
- filterSpec: filter
454
- };
455
292
  }
456
293
  get groupBy() {
457
- return __privateGet(this, _config).groupBy;
294
+ return this._config.groupBy;
458
295
  }
459
296
  set groupBy(groupBy) {
460
297
  if (itemsOrOrderChanged(this.groupBy, groupBy)) {
461
298
  const wasGrouped = this.groupBy.length > 0;
462
299
  this.config = {
463
- ...__privateGet(this, _config),
300
+ ...this._config,
464
301
  groupBy
465
302
  };
466
303
  if (!wasGrouped && groupBy.length > 0 && this.viewport) {
467
- this.clientCallback?.({
304
+ this._clientCallback?.({
468
305
  clientViewportId: this.viewport,
469
306
  mode: "batch",
470
307
  type: "viewport-update",
@@ -476,10 +313,10 @@ class VuuDataSource extends EventEmitter {
476
313
  }
477
314
  }
478
315
  get title() {
479
- return __privateGet(this, _title) ?? `${this.table.module} ${this.table.table}`;
316
+ return this._title ?? `${this.table.module} ${this.table.table}`;
480
317
  }
481
318
  set title(title) {
482
- __privateSet(this, _title, title);
319
+ this._title = title;
483
320
  if (this.viewport && title) {
484
321
  this.server?.send({
485
322
  type: "setTitle",
@@ -490,13 +327,13 @@ class VuuDataSource extends EventEmitter {
490
327
  this.emit("title-changed", this.viewport ?? "'", title);
491
328
  }
492
329
  get visualLink() {
493
- return __privateGet(this, _config).visualLink;
330
+ return this._config.visualLink;
494
331
  }
495
332
  set visualLink(visualLink) {
496
- __privateSet(this, _config, {
497
- ...__privateGet(this, _config),
333
+ this._config = {
334
+ ...this._config,
498
335
  visualLink
499
- });
336
+ };
500
337
  if (visualLink) {
501
338
  const {
502
339
  parentClientVpId,
@@ -523,7 +360,7 @@ class VuuDataSource extends EventEmitter {
523
360
  });
524
361
  }
525
362
  }
526
- this.emit("config", __privateGet(this, _config));
363
+ this.emit("config", this._config);
527
364
  }
528
365
  setConfigPending(config) {
529
366
  const pendingConfig = this.configChangePending;
@@ -587,7 +424,6 @@ class VuuDataSource extends EventEmitter {
587
424
  });
588
425
  }
589
426
  }
590
- _config = new WeakMap();
591
427
  _groupBy = new WeakMap();
592
428
  _pendingVisualLink = new WeakMap();
593
429
  _links = new WeakMap();
@@ -595,10 +431,8 @@ _menu = new WeakMap();
595
431
  _optimize = new WeakMap();
596
432
  _range = new WeakMap();
597
433
  _selectedRowsCount = new WeakMap();
598
- _size = new WeakMap();
599
434
  _status = new WeakMap();
600
435
  _tableSchema = new WeakMap();
601
- _title = new WeakMap();
602
436
 
603
437
  export { VuuDataSource };
604
438
  //# sourceMappingURL=vuu-data-source.js.map