@vuu-ui/vuu-data-test 2.3.0 → 3.0.0-beta.1
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/TickingArrayDataSource.js +37 -114
- package/cjs/TickingArrayDataSource.js.map +1 -1
- package/cjs/core/module/VuuModule.js +112 -81
- package/cjs/core/module/VuuModule.js.map +1 -1
- package/cjs/index.js +0 -2
- package/cjs/index.js.map +1 -1
- package/cjs/session-table-utils.js +21 -4
- package/cjs/session-table-utils.js.map +1 -1
- package/cjs/test/TestModule.js +51 -12
- package/cjs/test/TestModule.js.map +1 -1
- package/esm/TickingArrayDataSource.js +38 -115
- package/esm/TickingArrayDataSource.js.map +1 -1
- package/esm/core/module/VuuModule.js +113 -82
- package/esm/core/module/VuuModule.js.map +1 -1
- package/esm/index.js +0 -1
- package/esm/index.js.map +1 -1
- package/esm/session-table-utils.js +21 -5
- package/esm/session-table-utils.js.map +1 -1
- package/esm/test/TestModule.js +51 -12
- package/esm/test/TestModule.js.map +1 -1
- package/package.json +7 -6
- package/types/TickingArrayDataSource.d.ts +10 -28
- package/types/core/module/VuuModule.d.ts +9 -9
- package/types/index.d.ts +0 -1
- package/types/session-table-utils.d.ts +3 -1
- package/types/test/TestModule.d.ts +4 -4
- package/cjs/SessionTable.js +0 -98
- package/cjs/SessionTable.js.map +0 -1
- package/esm/SessionTable.js +0 -95
- package/esm/SessionTable.js.map +0 -1
- package/types/SessionTable.d.ts +0 -12
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { ArrayDataSource, ArrayDataSourceConstructorProps } from "@vuu-ui/vuu-data-local";
|
|
2
|
-
import type { DataSourceBase,
|
|
3
|
-
import type { LinkDescriptorWithLabel, RpcResultError, RpcResultSuccess,
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { Table } from "./Table";
|
|
1
|
+
import { ArrayDataSource, type ArrayDataSourceConstructorProps } from "@vuu-ui/vuu-data-local";
|
|
2
|
+
import type { DataSourceBase, DataSource, DataSourceRowWithBigint, DataSourceSubscribeCallback, DataSourceSubscribeProps, DataSourceVisualLinkCreatedMessage, DeleteRowMode, CopyOption } from "@vuu-ui/vuu-data-types";
|
|
3
|
+
import type { LinkDescriptorWithLabel, RpcResultError, RpcResultSuccess, VuuCreateVisualLink, VuuMenu, VuuRemoveVisualLink, VuuRowDataItemType, VuuRpcMenuRequest, VuuRpcMenuResponse, VuuRpcServiceRequest } from "@vuu-ui/vuu-protocol-types";
|
|
4
|
+
import type { IVuuModule, RpcMenuService, RpcService } from "./core/module/VuuModule";
|
|
5
|
+
import type { Table } from "./Table";
|
|
7
6
|
export type VisualLinkHandler = (message: VuuCreateVisualLink | VuuRemoveVisualLink) => Promise<DataSourceVisualLinkCreatedMessage | void>;
|
|
8
7
|
export interface TickingArrayDataSourceConstructorProps extends Omit<ArrayDataSourceConstructorProps, "data"> {
|
|
9
8
|
data?: Array<VuuRowDataItemType[]>;
|
|
@@ -11,45 +10,28 @@ export interface TickingArrayDataSourceConstructorProps extends Omit<ArrayDataSo
|
|
|
11
10
|
menu?: VuuMenu;
|
|
12
11
|
rpcMenuServices?: RpcMenuService[];
|
|
13
12
|
rpcServices?: RpcService[];
|
|
14
|
-
sessionTables?: SessionTableMap;
|
|
15
13
|
table?: Table;
|
|
16
14
|
visualLinkService?: VisualLinkHandler;
|
|
17
15
|
vuuModule?: IVuuModule;
|
|
18
16
|
}
|
|
19
17
|
export declare class TickingArrayDataSource extends ArrayDataSource {
|
|
20
18
|
#private;
|
|
21
|
-
constructor({ data, getVisualLinks, rpcServices, rpcMenuServices,
|
|
19
|
+
constructor({ data, getVisualLinks, rpcServices, rpcMenuServices, table, menu, visualLink, visualLinkService, vuuModule, ...arrayDataSourceProps }: TickingArrayDataSourceConstructorProps);
|
|
22
20
|
updateRowWithSessionCheck: (row: Array<bigint | VuuRowDataItemType>, columnName?: string, sessionId?: string) => void;
|
|
23
21
|
subscribe(subscribeProps: DataSourceSubscribeProps, callback: DataSourceSubscribeCallback): Promise<void>;
|
|
24
22
|
unsubscribe(): void;
|
|
25
|
-
set range(range: Range);
|
|
26
|
-
get range(): Range;
|
|
27
23
|
set links(links: LinkDescriptorWithLabel[] | undefined);
|
|
28
24
|
get links(): LinkDescriptorWithLabel[] | undefined;
|
|
29
25
|
getSelectedRowIds(): string[];
|
|
30
|
-
|
|
31
|
-
* Suppress row flushes from the source datasource while a session is active.
|
|
32
|
-
*
|
|
33
|
-
* `updateRowWithSessionCheck` already blocks individual row updates arriving
|
|
34
|
-
* via the table's "update" event. However, `sendRowsToClient` can also be
|
|
35
|
-
* reached through other paths that bypass that handler:
|
|
36
|
-
* - `setRange` (user scrolls the viewport)
|
|
37
|
-
* - config changes (filter / sort / group-by)
|
|
38
|
-
* - row inserts into the backing table
|
|
39
|
-
*
|
|
40
|
-
* Without this guard those paths would push source-table rows to the
|
|
41
|
-
* client and overwrite the edited session view.
|
|
42
|
-
*/
|
|
43
|
-
sendRowsToClient(forceFullRefresh?: boolean, row?: DataSourceRowWithBigint): void;
|
|
44
|
-
select(selectRequest: Omit<SelectRequest, "vpId">): void;
|
|
45
|
-
handleSessionMessage: (msg: DataSourceCallbackMessage) => void;
|
|
26
|
+
isSessionDataSourceOf(dataSource: DataSource): boolean;
|
|
46
27
|
createSessionDataSource(copyOption: CopyOption): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined>;
|
|
47
|
-
|
|
48
|
-
editCell(key: string, column: string, data: VuuRowDataItemType): Promise<RpcResultSuccess | RpcResultError | undefined>;
|
|
28
|
+
editCell(key: string, column: string, data: VuuRowDataItemType): Promise<RpcResultSuccess | RpcResultError>;
|
|
49
29
|
addRow: (rowData?: Record<string, VuuRowDataItemType>) => Promise<true | string>;
|
|
50
30
|
deleteRow: (key: string, mode?: DeleteRowMode) => Promise<true | string>;
|
|
51
31
|
deleteSelectedRows: (mode?: DeleteRowMode) => Promise<RpcResultSuccess | RpcResultError>;
|
|
52
32
|
undoRowChange: (key: string) => Promise<RpcResultSuccess | RpcResultError>;
|
|
33
|
+
set columns(columns: string[]);
|
|
34
|
+
get columns(): string[];
|
|
53
35
|
endEditSession(saveChanges?: boolean): Promise<void>;
|
|
54
36
|
rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, "context">): Promise<RpcResultSuccess | RpcResultError>;
|
|
55
37
|
menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, "vpId">): Promise<VuuRpcMenuResponse>;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { DataSourceBase, DataSourceConfig, DataSourceRowWithBigint, DataSourceSubscribedMessage, DataSourceVisualLinkCreatedMessage, EditSessionMode, CopyOption, TableSchema } from "@vuu-ui/vuu-data-types";
|
|
2
|
-
import { VuuMenu, VuuLink, LinkDescriptorWithLabel, VuuRpcMenuResponse, VuuCreateVisualLink, VuuRemoveVisualLink, VuuRpcServiceRequest, RpcResultSuccess, RpcResultError, VuuRpcMenuRequest } from "@vuu-ui/vuu-protocol-types";
|
|
1
|
+
import type { DataSourceBase, DataSourceConfig, DataSourceRowWithBigint, DataSourceSubscribedMessage, DataSourceVisualLinkCreatedMessage, EditSessionMode, CopyOption, TableSchema } from "@vuu-ui/vuu-data-types";
|
|
2
|
+
import type { VuuMenu, VuuLink, LinkDescriptorWithLabel, VuuRpcMenuResponse, VuuCreateVisualLink, VuuRemoveVisualLink, VuuRpcServiceRequest, RpcResultSuccess, RpcResultError, VuuRpcMenuRequest } from "@vuu-ui/vuu-protocol-types";
|
|
3
3
|
import { Table } from "../../Table";
|
|
4
|
-
import { SessionTable } from "../../SessionTable";
|
|
5
4
|
import { TickingArrayDataSource } from "../../TickingArrayDataSource";
|
|
6
5
|
export interface IVuuModule<T extends string = string> {
|
|
7
6
|
createDataSource: (tableName: T, viewport?: string, config?: DataSourceConfig) => DataSourceBase<DataSourceRowWithBigint>;
|
|
8
7
|
}
|
|
9
|
-
export type SessionTableMap = Record<string,
|
|
8
|
+
export type SessionTableMap = Record<string, Table>;
|
|
10
9
|
export type ServiceHandler = (rpcRequest: VuuRpcServiceRequest) => Promise<RpcResultSuccess | RpcResultError>;
|
|
11
10
|
export type MenuServiceHandler = (rpcRequest: VuuRpcMenuRequest) => Promise<VuuRpcMenuResponse>;
|
|
12
11
|
export type RpcService = {
|
|
@@ -26,6 +25,7 @@ type Subscription = {
|
|
|
26
25
|
viewportId: string;
|
|
27
26
|
dataSource: DataSourceBase<DataSourceRowWithBigint>;
|
|
28
27
|
sessionTableName?: string;
|
|
28
|
+
sourceTableName?: string;
|
|
29
29
|
};
|
|
30
30
|
export declare abstract class VuuModule<T extends string = string> implements IVuuModule<T> {
|
|
31
31
|
#private;
|
|
@@ -50,9 +50,9 @@ export declare abstract class VuuModule<T extends string = string> implements IV
|
|
|
50
50
|
getServices(tableName: T): RpcService[];
|
|
51
51
|
getMenuServices(tableName: T): RpcMenuService[];
|
|
52
52
|
protected get sessionTableMap(): SessionTableMap;
|
|
53
|
-
protected getSessionTable(sessionTableName: string):
|
|
54
|
-
protected getSessionTable(sessionTableName: string, throwIfNotFound: true):
|
|
55
|
-
protected getSessionTable(sessionTableName: string, throwIfNotFound: false):
|
|
53
|
+
protected getSessionTable(sessionTableName: string): Table;
|
|
54
|
+
protected getSessionTable(sessionTableName: string, throwIfNotFound: true): Table;
|
|
55
|
+
protected getSessionTable(sessionTableName: string, throwIfNotFound: false): Table | undefined;
|
|
56
56
|
protected deleteRow: ServiceHandler;
|
|
57
57
|
private deleteSelectedRows;
|
|
58
58
|
private undoRowChange;
|
|
@@ -69,8 +69,8 @@ export declare abstract class VuuModule<T extends string = string> implements IV
|
|
|
69
69
|
private addRow;
|
|
70
70
|
private endEditSession;
|
|
71
71
|
private applyBulkEdits;
|
|
72
|
-
protected createSessionTable(sourceTable: Table, sessionTableName: string, editSessionMode:
|
|
73
|
-
protected createSessionTableWithAllRows(
|
|
72
|
+
protected createSessionTable(sourceTable: Table, sessionTableName: string, editSessionMode: EditSessionMode | CopyOption, dataSource: TickingArrayDataSource): Table;
|
|
73
|
+
protected createSessionTableWithAllRows({ data, schema }: Table, _sessionTableName: string): Table;
|
|
74
74
|
protected createEmptySessionTable({ schema }: Table, sessionTableName: string): Table;
|
|
75
75
|
protected createSessionTableFromSelectedRows({ data, map, schema }: Table, sessionTableName: string, dataSource: TickingArrayDataSource): Table;
|
|
76
76
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ export { default as tableContainer } from "./core/table/TableContainer";
|
|
|
4
4
|
export * from "./local-datasource-provider/LocalDatasourceProvider";
|
|
5
5
|
export * from "./makeSuggestions";
|
|
6
6
|
export * from "./schemas";
|
|
7
|
-
export { SessionTable } from "./SessionTable";
|
|
8
7
|
export * from "./simul";
|
|
9
8
|
export * from "./basket";
|
|
10
9
|
export { buildDataColumnMap, buildDataColumnMapFromSchema, Table, type TableEvents, } from "./Table";
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { VuuRowDataItemType } from "@vuu-ui/vuu-protocol-types";
|
|
1
2
|
import { Table } from "./Table";
|
|
2
|
-
import { TableSchema } from "@vuu-ui/vuu-data-types";
|
|
3
|
+
import type { TableSchema } from "@vuu-ui/vuu-data-types";
|
|
4
|
+
export declare const sessionTableRow: (row: Array<bigint | VuuRowDataItemType>, schema: TableSchema) => (bigint | VuuRowDataItemType)[];
|
|
3
5
|
export declare const createSessionTableFromSelectedRows: (table: Table, selectedRowIds: string[]) => Table;
|
|
4
6
|
export declare const sessionTableSchema: (schema: TableSchema) => TableSchema;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { RpcMenuService, VuuModule } from "../core/module/VuuModule";
|
|
2
|
-
import { Table } from "../Table";
|
|
3
|
-
import { TableSchema } from "@vuu-ui/vuu-data-types";
|
|
4
|
-
export type TestTableName = "TestDates" | "TwoHundredColumns" | "LinkParent" | "LinkChild" | "ChartTable" | "MaxScrollEndTable";
|
|
1
|
+
import { type RpcMenuService, VuuModule } from "../core/module/VuuModule";
|
|
2
|
+
import { type Table } from "../Table";
|
|
3
|
+
import type { TableSchema } from "@vuu-ui/vuu-data-types";
|
|
4
|
+
export type TestTableName = "TestDates" | "TwoHundredColumns" | "LinkParent" | "LinkChild" | "ChartTable" | "MaxScrollEndTable" | "TestEditEmpty" | "TestEdit";
|
|
5
5
|
declare class TestModule extends VuuModule<TestTableName> {
|
|
6
6
|
#private;
|
|
7
7
|
constructor();
|
package/cjs/SessionTable.js
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
|
|
5
|
-
const isProxy = /* @__PURE__ */ Symbol("proxy-session-table");
|
|
6
|
-
const isProxySessionTable = (table) => table[isProxy];
|
|
7
|
-
const SessionTable = (table, sessionId) => {
|
|
8
|
-
const updates = /* @__PURE__ */ new Map();
|
|
9
|
-
const insertedRows = /* @__PURE__ */ new Map();
|
|
10
|
-
const eventEmitter = new vuuUtils.EventEmitter();
|
|
11
|
-
const getSessionUpdates = () => {
|
|
12
|
-
return updates;
|
|
13
|
-
};
|
|
14
|
-
const addEventListener = (event, handler) => {
|
|
15
|
-
eventEmitter.on(event, handler);
|
|
16
|
-
};
|
|
17
|
-
const update = (key, columnName, value) => {
|
|
18
|
-
const sourceRow = table.findByKey(key);
|
|
19
|
-
const insertedRow = sourceRow ? void 0 : insertedRows.get(key);
|
|
20
|
-
const row = sourceRow ?? insertedRow;
|
|
21
|
-
if (row) {
|
|
22
|
-
const tsIndex = table.map.vuuUpdatedTimestamp;
|
|
23
|
-
if (sourceRow) {
|
|
24
|
-
let updatesForRow = updates.get(key);
|
|
25
|
-
if (updatesForRow === void 0) {
|
|
26
|
-
updatesForRow = {
|
|
27
|
-
lastUpdateTimestamp: row[tsIndex],
|
|
28
|
-
cellUpdates: {}
|
|
29
|
-
};
|
|
30
|
-
updates.set(key, updatesForRow);
|
|
31
|
-
}
|
|
32
|
-
updatesForRow.cellUpdates[columnName] = value;
|
|
33
|
-
} else if (insertedRow) {
|
|
34
|
-
const colIdx = table.map[columnName];
|
|
35
|
-
if (colIdx !== void 0) {
|
|
36
|
-
insertedRow[colIdx] = value;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
const newRow = row.slice();
|
|
40
|
-
for (const [columnName2, value2] of Object.entries(
|
|
41
|
-
sourceRow ? updates.get(key)?.cellUpdates ?? {} : {}
|
|
42
|
-
)) {
|
|
43
|
-
const colIndex = table.map[columnName2];
|
|
44
|
-
newRow[colIndex] = value2;
|
|
45
|
-
}
|
|
46
|
-
if (insertedRow) {
|
|
47
|
-
const colIdx = table.map[columnName];
|
|
48
|
-
if (colIdx !== void 0) {
|
|
49
|
-
newRow[colIdx] = value;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
eventEmitter.emit("update", newRow, columnName, sessionId);
|
|
53
|
-
} else {
|
|
54
|
-
console.warn(`SessionTable update row ${key} not found`);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const insert = (row) => {
|
|
58
|
-
const keyIdx = table.map[table.schema.key];
|
|
59
|
-
if (keyIdx !== void 0) {
|
|
60
|
-
insertedRows.set(`${row[keyIdx]}`, [...row]);
|
|
61
|
-
}
|
|
62
|
-
eventEmitter.emit("insert", row);
|
|
63
|
-
};
|
|
64
|
-
const deleteRow = (key) => {
|
|
65
|
-
eventEmitter.emit("delete", key);
|
|
66
|
-
};
|
|
67
|
-
return new Proxy(table, {
|
|
68
|
-
get(_obj, prop) {
|
|
69
|
-
if (typeof prop === "symbol") {
|
|
70
|
-
if (prop === isProxy) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
return void 0;
|
|
74
|
-
}
|
|
75
|
-
if (prop === "getSessionUpdates") {
|
|
76
|
-
return getSessionUpdates;
|
|
77
|
-
} else if (prop === "on" || prop === "addEventListener") {
|
|
78
|
-
return addEventListener;
|
|
79
|
-
} else if (prop === "update") {
|
|
80
|
-
return update;
|
|
81
|
-
} else if (prop === "insert") {
|
|
82
|
-
return insert;
|
|
83
|
-
} else if (prop === "delete") {
|
|
84
|
-
return deleteRow;
|
|
85
|
-
} else if (prop === "isProxy") {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
return table[prop];
|
|
89
|
-
},
|
|
90
|
-
set() {
|
|
91
|
-
throw new TypeError("SessionTable is readonly");
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
exports.SessionTable = SessionTable;
|
|
97
|
-
exports.isProxySessionTable = isProxySessionTable;
|
|
98
|
-
//# sourceMappingURL=SessionTable.js.map
|
package/cjs/SessionTable.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SessionTable.js","sources":["../../../packages/vuu-data-test/src/SessionTable.ts"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { Table, TableEvents } from \"./Table\";\nimport { EventEmitter } from \"@vuu-ui/vuu-utils\";\n\ntype RowUpdates = {\n cellUpdates: Record<string, VuuRowDataItemType>;\n lastUpdateTimestamp?: number;\n};\n\nexport type SessionTable = Table & {\n getSessionUpdates: () => Map<string, RowUpdates>;\n};\n\nconst isProxy = Symbol(\"proxy-session-table\");\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isProxySessionTable = (table: any): table is SessionTable =>\n table[isProxy];\n\n// This doesn't really work because the session table is still connected to the base table data.\n// This means edits applied at the end of an edit session are then posted to other active sessions.\n\n// How can we ignore these ?\nexport const SessionTable = (table: Table, sessionId: string): SessionTable => {\n const updates = new Map<string, RowUpdates>();\n /** Rows added in this session. */\n const insertedRows = new Map<string, VuuRowDataItemType[]>();\n const eventEmitter = new EventEmitter<TableEvents>();\n\n const getSessionUpdates = () => {\n return updates;\n };\n\n // we need to intercept this as addEventListener accesses a private\n // member, so has to be invoked by table itself.\n const addEventListener = (event: string, handler: unknown) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n //table.on(event, handler);\n eventEmitter.on(event, handler);\n };\n\n const update = (\n key: string,\n columnName: string,\n value: VuuRowDataItemType,\n ) => {\n // we don't actually apply the update to the table, but we emit the updated event, so the bound\n // dataSource will update its own cache\n const sourceRow = table.findByKey(key);\n const insertedRow = sourceRow ? undefined : insertedRows.get(key);\n const row = sourceRow ?? insertedRow;\n if (row) {\n const tsIndex = table.map.vuuUpdatedTimestamp;\n\n // Only source rows go into `updates`; inserted rows are edited in-memory.\n if (sourceRow) {\n let updatesForRow = updates.get(key);\n if (updatesForRow === undefined) {\n updatesForRow = {\n lastUpdateTimestamp: row[tsIndex] as number | undefined,\n cellUpdates: {},\n };\n updates.set(key, updatesForRow);\n }\n updatesForRow.cellUpdates[columnName] = value;\n } else if (insertedRow) {\n const colIdx = table.map[columnName];\n if (colIdx !== undefined) {\n insertedRow[colIdx] = value;\n }\n }\n\n const newRow = row.slice();\n\n for (const [columnName, value] of Object.entries(\n sourceRow ? (updates.get(key)?.cellUpdates ?? {}) : {},\n )) {\n const colIndex = table.map[columnName];\n newRow[colIndex] = value;\n }\n if (insertedRow) {\n const colIdx = table.map[columnName];\n if (colIdx !== undefined) {\n newRow[colIdx] = value;\n }\n }\n\n eventEmitter.emit(\"update\", newRow, columnName, sessionId);\n } else {\n console.warn(`SessionTable update row ${key} not found`);\n }\n };\n\n const insert = (row: VuuRowDataItemType[]) => {\n // Keep inserted rows by key for later updates.\n const keyIdx = table.map[table.schema.key];\n if (keyIdx !== undefined) {\n insertedRows.set(`${row[keyIdx]}`, [...row]);\n }\n eventEmitter.emit(\"insert\", row);\n };\n\n const deleteRow = (key: string) => {\n eventEmitter.emit(\"delete\", key);\n };\n\n return new Proxy(table, {\n get(_obj, prop: string | symbol) {\n if (typeof prop === \"symbol\") {\n if (prop === isProxy) {\n return true;\n }\n return undefined;\n }\n\n if (prop === \"getSessionUpdates\") {\n return getSessionUpdates;\n } else if (prop === \"on\" || prop === \"addEventListener\") {\n return addEventListener;\n } else if (prop === \"update\") {\n return update;\n } else if (prop === \"insert\") {\n return insert;\n } else if (prop === \"delete\") {\n return deleteRow;\n } else if (prop === \"isProxy\") {\n return true;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return table[prop];\n },\n\n set() {\n throw new TypeError(\"SessionTable is readonly\");\n },\n }) as SessionTable;\n};\n"],"names":["EventEmitter","columnName","value"],"mappings":"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"}
|
package/esm/SessionTable.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from '@vuu-ui/vuu-utils';
|
|
2
|
-
|
|
3
|
-
const isProxy = /* @__PURE__ */ Symbol("proxy-session-table");
|
|
4
|
-
const isProxySessionTable = (table) => table[isProxy];
|
|
5
|
-
const SessionTable = (table, sessionId) => {
|
|
6
|
-
const updates = /* @__PURE__ */ new Map();
|
|
7
|
-
const insertedRows = /* @__PURE__ */ new Map();
|
|
8
|
-
const eventEmitter = new EventEmitter();
|
|
9
|
-
const getSessionUpdates = () => {
|
|
10
|
-
return updates;
|
|
11
|
-
};
|
|
12
|
-
const addEventListener = (event, handler) => {
|
|
13
|
-
eventEmitter.on(event, handler);
|
|
14
|
-
};
|
|
15
|
-
const update = (key, columnName, value) => {
|
|
16
|
-
const sourceRow = table.findByKey(key);
|
|
17
|
-
const insertedRow = sourceRow ? void 0 : insertedRows.get(key);
|
|
18
|
-
const row = sourceRow ?? insertedRow;
|
|
19
|
-
if (row) {
|
|
20
|
-
const tsIndex = table.map.vuuUpdatedTimestamp;
|
|
21
|
-
if (sourceRow) {
|
|
22
|
-
let updatesForRow = updates.get(key);
|
|
23
|
-
if (updatesForRow === void 0) {
|
|
24
|
-
updatesForRow = {
|
|
25
|
-
lastUpdateTimestamp: row[tsIndex],
|
|
26
|
-
cellUpdates: {}
|
|
27
|
-
};
|
|
28
|
-
updates.set(key, updatesForRow);
|
|
29
|
-
}
|
|
30
|
-
updatesForRow.cellUpdates[columnName] = value;
|
|
31
|
-
} else if (insertedRow) {
|
|
32
|
-
const colIdx = table.map[columnName];
|
|
33
|
-
if (colIdx !== void 0) {
|
|
34
|
-
insertedRow[colIdx] = value;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
const newRow = row.slice();
|
|
38
|
-
for (const [columnName2, value2] of Object.entries(
|
|
39
|
-
sourceRow ? updates.get(key)?.cellUpdates ?? {} : {}
|
|
40
|
-
)) {
|
|
41
|
-
const colIndex = table.map[columnName2];
|
|
42
|
-
newRow[colIndex] = value2;
|
|
43
|
-
}
|
|
44
|
-
if (insertedRow) {
|
|
45
|
-
const colIdx = table.map[columnName];
|
|
46
|
-
if (colIdx !== void 0) {
|
|
47
|
-
newRow[colIdx] = value;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
eventEmitter.emit("update", newRow, columnName, sessionId);
|
|
51
|
-
} else {
|
|
52
|
-
console.warn(`SessionTable update row ${key} not found`);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
const insert = (row) => {
|
|
56
|
-
const keyIdx = table.map[table.schema.key];
|
|
57
|
-
if (keyIdx !== void 0) {
|
|
58
|
-
insertedRows.set(`${row[keyIdx]}`, [...row]);
|
|
59
|
-
}
|
|
60
|
-
eventEmitter.emit("insert", row);
|
|
61
|
-
};
|
|
62
|
-
const deleteRow = (key) => {
|
|
63
|
-
eventEmitter.emit("delete", key);
|
|
64
|
-
};
|
|
65
|
-
return new Proxy(table, {
|
|
66
|
-
get(_obj, prop) {
|
|
67
|
-
if (typeof prop === "symbol") {
|
|
68
|
-
if (prop === isProxy) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
return void 0;
|
|
72
|
-
}
|
|
73
|
-
if (prop === "getSessionUpdates") {
|
|
74
|
-
return getSessionUpdates;
|
|
75
|
-
} else if (prop === "on" || prop === "addEventListener") {
|
|
76
|
-
return addEventListener;
|
|
77
|
-
} else if (prop === "update") {
|
|
78
|
-
return update;
|
|
79
|
-
} else if (prop === "insert") {
|
|
80
|
-
return insert;
|
|
81
|
-
} else if (prop === "delete") {
|
|
82
|
-
return deleteRow;
|
|
83
|
-
} else if (prop === "isProxy") {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
return table[prop];
|
|
87
|
-
},
|
|
88
|
-
set() {
|
|
89
|
-
throw new TypeError("SessionTable is readonly");
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
export { SessionTable, isProxySessionTable };
|
|
95
|
-
//# sourceMappingURL=SessionTable.js.map
|
package/esm/SessionTable.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SessionTable.js","sources":["../../../packages/vuu-data-test/src/SessionTable.ts"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { Table, TableEvents } from \"./Table\";\nimport { EventEmitter } from \"@vuu-ui/vuu-utils\";\n\ntype RowUpdates = {\n cellUpdates: Record<string, VuuRowDataItemType>;\n lastUpdateTimestamp?: number;\n};\n\nexport type SessionTable = Table & {\n getSessionUpdates: () => Map<string, RowUpdates>;\n};\n\nconst isProxy = Symbol(\"proxy-session-table\");\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isProxySessionTable = (table: any): table is SessionTable =>\n table[isProxy];\n\n// This doesn't really work because the session table is still connected to the base table data.\n// This means edits applied at the end of an edit session are then posted to other active sessions.\n\n// How can we ignore these ?\nexport const SessionTable = (table: Table, sessionId: string): SessionTable => {\n const updates = new Map<string, RowUpdates>();\n /** Rows added in this session. */\n const insertedRows = new Map<string, VuuRowDataItemType[]>();\n const eventEmitter = new EventEmitter<TableEvents>();\n\n const getSessionUpdates = () => {\n return updates;\n };\n\n // we need to intercept this as addEventListener accesses a private\n // member, so has to be invoked by table itself.\n const addEventListener = (event: string, handler: unknown) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n //table.on(event, handler);\n eventEmitter.on(event, handler);\n };\n\n const update = (\n key: string,\n columnName: string,\n value: VuuRowDataItemType,\n ) => {\n // we don't actually apply the update to the table, but we emit the updated event, so the bound\n // dataSource will update its own cache\n const sourceRow = table.findByKey(key);\n const insertedRow = sourceRow ? undefined : insertedRows.get(key);\n const row = sourceRow ?? insertedRow;\n if (row) {\n const tsIndex = table.map.vuuUpdatedTimestamp;\n\n // Only source rows go into `updates`; inserted rows are edited in-memory.\n if (sourceRow) {\n let updatesForRow = updates.get(key);\n if (updatesForRow === undefined) {\n updatesForRow = {\n lastUpdateTimestamp: row[tsIndex] as number | undefined,\n cellUpdates: {},\n };\n updates.set(key, updatesForRow);\n }\n updatesForRow.cellUpdates[columnName] = value;\n } else if (insertedRow) {\n const colIdx = table.map[columnName];\n if (colIdx !== undefined) {\n insertedRow[colIdx] = value;\n }\n }\n\n const newRow = row.slice();\n\n for (const [columnName, value] of Object.entries(\n sourceRow ? (updates.get(key)?.cellUpdates ?? {}) : {},\n )) {\n const colIndex = table.map[columnName];\n newRow[colIndex] = value;\n }\n if (insertedRow) {\n const colIdx = table.map[columnName];\n if (colIdx !== undefined) {\n newRow[colIdx] = value;\n }\n }\n\n eventEmitter.emit(\"update\", newRow, columnName, sessionId);\n } else {\n console.warn(`SessionTable update row ${key} not found`);\n }\n };\n\n const insert = (row: VuuRowDataItemType[]) => {\n // Keep inserted rows by key for later updates.\n const keyIdx = table.map[table.schema.key];\n if (keyIdx !== undefined) {\n insertedRows.set(`${row[keyIdx]}`, [...row]);\n }\n eventEmitter.emit(\"insert\", row);\n };\n\n const deleteRow = (key: string) => {\n eventEmitter.emit(\"delete\", key);\n };\n\n return new Proxy(table, {\n get(_obj, prop: string | symbol) {\n if (typeof prop === \"symbol\") {\n if (prop === isProxy) {\n return true;\n }\n return undefined;\n }\n\n if (prop === \"getSessionUpdates\") {\n return getSessionUpdates;\n } else if (prop === \"on\" || prop === \"addEventListener\") {\n return addEventListener;\n } else if (prop === \"update\") {\n return update;\n } else if (prop === \"insert\") {\n return insert;\n } else if (prop === \"delete\") {\n return deleteRow;\n } else if (prop === \"isProxy\") {\n return true;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return table[prop];\n },\n\n set() {\n throw new TypeError(\"SessionTable is readonly\");\n },\n }) as SessionTable;\n};\n"],"names":["columnName","value"],"mappings":"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"}
|
package/types/SessionTable.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { VuuRowDataItemType } from "@vuu-ui/vuu-protocol-types";
|
|
2
|
-
import { Table } from "./Table";
|
|
3
|
-
type RowUpdates = {
|
|
4
|
-
cellUpdates: Record<string, VuuRowDataItemType>;
|
|
5
|
-
lastUpdateTimestamp?: number;
|
|
6
|
-
};
|
|
7
|
-
export type SessionTable = Table & {
|
|
8
|
-
getSessionUpdates: () => Map<string, RowUpdates>;
|
|
9
|
-
};
|
|
10
|
-
export declare const isProxySessionTable: (table: any) => table is SessionTable;
|
|
11
|
-
export declare const SessionTable: (table: Table, sessionId: string) => SessionTable;
|
|
12
|
-
export {};
|