@vuu-ui/vuu-data-test 3.0.0-beta.3 → 3.0.0
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 +1 -2
- package/cjs/TickingArrayDataSource.js.map +1 -1
- package/cjs/core/module/VuuModule.js +2 -5
- package/cjs/core/module/VuuModule.js.map +1 -1
- package/esm/TickingArrayDataSource.js +1 -2
- package/esm/TickingArrayDataSource.js.map +1 -1
- package/esm/core/module/VuuModule.js +2 -5
- package/esm/core/module/VuuModule.js.map +1 -1
- package/package.json +6 -6
|
@@ -168,11 +168,10 @@ const _TickingArrayDataSource = class _TickingArrayDataSource extends vuuDataLoc
|
|
|
168
168
|
});
|
|
169
169
|
if (vuuUtils.isRpcSuccess(rpcResponse)) {
|
|
170
170
|
const { table: sessionTable } = rpcResponse.data;
|
|
171
|
-
const columns = this.config.columns.includes("vuu_action") ? this.config.columns : this.config.columns.concat("vuu_action");
|
|
172
171
|
const sessionDataSource = __privateGet(this, _vuuModule)?.createDataSource(
|
|
173
172
|
sessionTable.table,
|
|
174
173
|
sessionTable.table,
|
|
175
|
-
{ ...this.config
|
|
174
|
+
{ ...this.config }
|
|
176
175
|
);
|
|
177
176
|
if (sessionDataSource instanceof _TickingArrayDataSource) {
|
|
178
177
|
__privateSet(sessionDataSource, _sourceTableDataSource, this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n type ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceBase,\n DataSource,\n DataSourceRowWithBigint,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n CopyOption,\n EditSessionMode,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n VuuCreateVisualLink,\n VuuMenu,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcMenuResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isRpcSuccess,\n isTypeaheadRequest,\n StaleUpdateError,\n} from \"@vuu-ui/vuu-utils\";\nimport type {\n IVuuModule,\n RpcMenuService,\n RpcService,\n} from \"./core/module/VuuModule\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport type { Table } from \"./Table\";\n\nexport type VisualLinkHandler = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n) => Promise<DataSourceVisualLinkCreatedMessage | void>;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n getVisualLinks?: (tableName: string) => LinkDescriptorWithLabel[] | undefined;\n menu?: VuuMenu;\n rpcMenuServices?: RpcMenuService[];\n rpcServices?: RpcService[];\n table?: Table;\n visualLinkService?: VisualLinkHandler;\n vuuModule?: IVuuModule;\n}\n\ntype LinkSubscription = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n};\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #rpcMenuServices: RpcMenuService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n #sourceTableDataSource: TickingArrayDataSource | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n #vuuModule?: IVuuModule;\n\n constructor({\n data,\n getVisualLinks,\n rpcServices,\n rpcMenuServices,\n table,\n menu,\n visualLink,\n visualLinkService,\n vuuModule,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n dataMap: table?.map,\n });\n this._menu = menu;\n\n this.#rpcMenuServices = rpcMenuServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n this.#vuuModule = vuuModule;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRowWithSessionCheck);\n // Use the base-class low-level handler so the overridden deleteRow\n // (which routes through rpcRequest)\n table.on(\"delete\", this.handleDeleteFromTable);\n }\n }\n\n updateRowWithSessionCheck = (\n row: Array<bigint | VuuRowDataItemType>,\n columnName?: string,\n sessionId?: string,\n ) => {\n if (sessionId && sessionId === this.viewport) {\n this.updateRow(row, columnName);\n } else if (sessionId) {\n // will never happen\n console.warn(\"THIS IS NEVER EXPECTED TO HAPPEN\");\n } else {\n this.updateRow(row, columnName);\n }\n };\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n\n return subscription;\n }\n\n unsubscribe() {\n super.unsubscribe();\n this.#table = undefined;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n super.links = links;\n }\n\n get links() {\n return this.#getVisualLinks?.(this.table.table);\n }\n\n getSelectedRowIds(): string[] {\n return Array.from(this.selectedRows);\n }\n\n isSessionDataSourceOf(dataSource: DataSource): boolean {\n return this.#sourceTableDataSource === dataSource;\n }\n\n async createSessionDataSource(\n copyOption: CopyOption,\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"createSessionTable\",\n params: { copyOption },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const columns = this.config.columns.includes(\"vuu_action\")\n ? this.config.columns\n : this.config.columns.concat(\"vuu_action\");\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config, columns },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] createSessionDataSource ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async beginEditSession(\n editSessionMode: EditSessionMode = \"all-rows\",\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: { editSessionMode },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const columns = this.config.columns.includes(\"vuu_action\")\n ? this.config.columns\n : this.config.columns.concat(\"vuu_action\");\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config, columns },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] beginEditSession ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n return this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n addRow = async (\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<true | string> => {\n const response = await this.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"addRow\",\n params: { key: rowData[this.tableSchema.key] as string, data: rowData },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"addRow failed\";\n };\n\n deleteRow = async (\n key: string,\n mode: DeleteRowMode = \"hard\",\n ): Promise<true | string> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteRow\",\n params: { key, mode },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"deleteRow failed\";\n };\n\n deleteSelectedRows = async (\n mode: DeleteRowMode = \"soft\",\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteSelectedRows\",\n params: { mode },\n });\n return (\n response ?? {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows failed\",\n }\n );\n };\n\n undoRowChange = async (\n key: string,\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"undoRowChange\",\n params: { key },\n });\n return (\n response ?? { type: \"ERROR_RESULT\", errorMessage: \"undoRowChange failed\" }\n );\n };\n\n set columns(columns: string[]) {\n super.columns = columns;\n }\n\n get columns() {\n return super.columns;\n }\n\n async endEditSession(saveChanges = false) {\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const rpcResponse = await this.rpcRequest(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n const sourceTableDataSource = this.#sourceTableDataSource;\n if (sourceTableDataSource) {\n this.#sourceTableDataSource = undefined;\n this.unsubscribe();\n } else {\n this.sendRowsToClient(true);\n }\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n throw new StaleUpdateError(rpcResponse.errorMessage);\n } else {\n throw Error(rpcResponse?.errorMessage ?? \"endEditSession failed\");\n }\n }\n }\n\n async rpcRequest(\n rpcRequest: Omit<VuuRpcServiceRequest, \"context\">,\n ): Promise<RpcResultSuccess | RpcResultError> {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n const data = await this.getTypeaheadSuggestions(column, starts);\n return {\n type: \"SUCCESS_RESULT\",\n data,\n } as RpcResultSuccess;\n } else {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n } else {\n throw Error(\n `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`,\n );\n }\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">,\n ): Promise<VuuRpcMenuResponse> {\n const rpcService = this.#rpcMenuServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`,\n );\n }\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n const columnIndex = this.columnMap[column];\n if (columnIndex === undefined) {\n console.warn(\n `[TickingArrayDataSource] getTypeaheadSuggestions. No column ${column}`,\n );\n return Promise.resolve([]);\n } else {\n return makeSuggestions(this.currentData, columnIndex, pattern);\n }\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided\",\n );\n }\n }\n\n get visualLink() {\n return this._config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._config = {\n ...this._config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n childColumnName: fromColumn,\n type: \"CREATE_VISUAL_LINK\",\n parentVpId: parentClientVpId,\n parentColumnName: toColumn,\n }).then((response) => {\n this.emit(\n \"visual-link-created\",\n response as DataSourceVisualLinkCreatedMessage,\n );\n });\n }\n } else {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n type: \"REMOVE_VISUAL_LINK\",\n }).then((/* response */) => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":["ArrayDataSource","isRpcSuccess","StaleUpdateError","isTypeaheadRequest","makeSuggestions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n type ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceBase,\n DataSource,\n DataSourceRowWithBigint,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n CopyOption,\n EditSessionMode,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n VuuCreateVisualLink,\n VuuMenu,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcMenuResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isRpcSuccess,\n isTypeaheadRequest,\n StaleUpdateError,\n} from \"@vuu-ui/vuu-utils\";\nimport type {\n IVuuModule,\n RpcMenuService,\n RpcService,\n} from \"./core/module/VuuModule\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport type { Table } from \"./Table\";\n\nexport type VisualLinkHandler = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n) => Promise<DataSourceVisualLinkCreatedMessage | void>;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n getVisualLinks?: (tableName: string) => LinkDescriptorWithLabel[] | undefined;\n menu?: VuuMenu;\n rpcMenuServices?: RpcMenuService[];\n rpcServices?: RpcService[];\n table?: Table;\n visualLinkService?: VisualLinkHandler;\n vuuModule?: IVuuModule;\n}\n\ntype LinkSubscription = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n};\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #rpcMenuServices: RpcMenuService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n #sourceTableDataSource: TickingArrayDataSource | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n #vuuModule?: IVuuModule;\n\n constructor({\n data,\n getVisualLinks,\n rpcServices,\n rpcMenuServices,\n table,\n menu,\n visualLink,\n visualLinkService,\n vuuModule,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n dataMap: table?.map,\n });\n this._menu = menu;\n\n this.#rpcMenuServices = rpcMenuServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n this.#vuuModule = vuuModule;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRowWithSessionCheck);\n // Use the base-class low-level handler so the overridden deleteRow\n // (which routes through rpcRequest)\n table.on(\"delete\", this.handleDeleteFromTable);\n }\n }\n\n updateRowWithSessionCheck = (\n row: Array<bigint | VuuRowDataItemType>,\n columnName?: string,\n sessionId?: string,\n ) => {\n if (sessionId && sessionId === this.viewport) {\n this.updateRow(row, columnName);\n } else if (sessionId) {\n // will never happen\n console.warn(\"THIS IS NEVER EXPECTED TO HAPPEN\");\n } else {\n this.updateRow(row, columnName);\n }\n };\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n\n return subscription;\n }\n\n unsubscribe() {\n super.unsubscribe();\n this.#table = undefined;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n super.links = links;\n }\n\n get links() {\n return this.#getVisualLinks?.(this.table.table);\n }\n\n getSelectedRowIds(): string[] {\n return Array.from(this.selectedRows);\n }\n\n isSessionDataSourceOf(dataSource: DataSource): boolean {\n return this.#sourceTableDataSource === dataSource;\n }\n\n async createSessionDataSource(\n copyOption: CopyOption,\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"createSessionTable\",\n params: { copyOption },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const columns = this.config.columns.includes(\"vuu_action\")\n ? this.config.columns\n : this.config.columns.concat(\"vuu_action\");\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config, columns },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] createSessionDataSource ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async beginEditSession(\n editSessionMode: EditSessionMode = \"all-rows\",\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: { editSessionMode },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] beginEditSession ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n return this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n addRow = async (\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<true | string> => {\n const response = await this.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"addRow\",\n params: { key: rowData[this.tableSchema.key] as string, data: rowData },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"addRow failed\";\n };\n\n deleteRow = async (\n key: string,\n mode: DeleteRowMode = \"hard\",\n ): Promise<true | string> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteRow\",\n params: { key, mode },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"deleteRow failed\";\n };\n\n deleteSelectedRows = async (\n mode: DeleteRowMode = \"soft\",\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteSelectedRows\",\n params: { mode },\n });\n return (\n response ?? {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows failed\",\n }\n );\n };\n\n undoRowChange = async (\n key: string,\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"undoRowChange\",\n params: { key },\n });\n return (\n response ?? { type: \"ERROR_RESULT\", errorMessage: \"undoRowChange failed\" }\n );\n };\n\n set columns(columns: string[]) {\n super.columns = columns;\n }\n\n get columns() {\n return super.columns;\n }\n\n async endEditSession(saveChanges = false) {\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const rpcResponse = await this.rpcRequest(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n const sourceTableDataSource = this.#sourceTableDataSource;\n if (sourceTableDataSource) {\n this.#sourceTableDataSource = undefined;\n this.unsubscribe();\n } else {\n this.sendRowsToClient(true);\n }\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n throw new StaleUpdateError(rpcResponse.errorMessage);\n } else {\n throw Error(rpcResponse?.errorMessage ?? \"endEditSession failed\");\n }\n }\n }\n\n async rpcRequest(\n rpcRequest: Omit<VuuRpcServiceRequest, \"context\">,\n ): Promise<RpcResultSuccess | RpcResultError> {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n const data = await this.getTypeaheadSuggestions(column, starts);\n return {\n type: \"SUCCESS_RESULT\",\n data,\n } as RpcResultSuccess;\n } else {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n } else {\n throw Error(\n `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`,\n );\n }\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">,\n ): Promise<VuuRpcMenuResponse> {\n const rpcService = this.#rpcMenuServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`,\n );\n }\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n const columnIndex = this.columnMap[column];\n if (columnIndex === undefined) {\n console.warn(\n `[TickingArrayDataSource] getTypeaheadSuggestions. No column ${column}`,\n );\n return Promise.resolve([]);\n } else {\n return makeSuggestions(this.currentData, columnIndex, pattern);\n }\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided\",\n );\n }\n }\n\n get visualLink() {\n return this._config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._config = {\n ...this._config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n childColumnName: fromColumn,\n type: \"CREATE_VISUAL_LINK\",\n parentVpId: parentClientVpId,\n parentColumnName: toColumn,\n }).then((response) => {\n this.emit(\n \"visual-link-created\",\n response as DataSourceVisualLinkCreatedMessage,\n );\n });\n }\n } else {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n type: \"REMOVE_VISUAL_LINK\",\n }).then((/* response */) => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":["ArrayDataSource","isRpcSuccess","StaleUpdateError","isTypeaheadRequest","makeSuggestions"],"mappings":"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"}
|
|
@@ -18,11 +18,9 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
|
|
|
18
18
|
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);
|
|
19
19
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
20
20
|
var _name, _sessionTableMessageColumn, _runtimeVisualLinks, _sessionSourceTableMap, _sessionTableMap, _tableServices, _subscriptionMap, _moduleServices, _moduleMenuServices;
|
|
21
|
-
const assertUpdateIsValid = (schema, column,
|
|
21
|
+
const assertUpdateIsValid = (schema, column, _data) => {
|
|
22
22
|
const col = schema.columns.find((col2) => col2.name === column);
|
|
23
|
-
if (col) {
|
|
24
|
-
console.log(`data type ${col.serverDataType} data ${data}`);
|
|
25
|
-
} else {
|
|
23
|
+
if (col) ; else {
|
|
26
24
|
throw Error(
|
|
27
25
|
`schema for table ${schema.table.table} does not include column ${column}`
|
|
28
26
|
);
|
|
@@ -379,7 +377,6 @@ class VuuModule {
|
|
|
379
377
|
vpId
|
|
380
378
|
}) => {
|
|
381
379
|
if (type === "VIEW_PORT_MENUS_SELECT_RPC") {
|
|
382
|
-
console.log(`rpcName ${rpcName}`);
|
|
383
380
|
const result = await this.beginEditSession({
|
|
384
381
|
context: {
|
|
385
382
|
type: "VIEWPORT_CONTEXT",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import type {\n DataSourceBase,\n DataSourceConfig,\n DataSourceRowWithBigint,\n DataSourceSubscribedMessage,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n EditSessionMode,\n CopyOption,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuMenu,\n VuuRowDataItemType,\n VuuLink,\n LinkDescriptorWithLabel,\n VuuRpcMenuResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcServiceRequest,\n RpcResultSuccess,\n RpcResultError,\n VuuRpcMenuRequest,\n VuuTable,\n VuuDataRow,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isAddRowRpcRequest,\n isBeginEditSessionRpcRequest,\n isCreateSessionTableRpcRequest,\n isDeleteSelectedRowsRpcRequest,\n isEditCellRpcRequest,\n isEndEditSessionRpcRequest,\n isRpcSuccess,\n isUndoRowChangeRpcRequest,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"../../Table\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { sessionTableRow, sessionTableSchema } from \"../../session-table-utils\";\n\nconst assertUpdateIsValid = (\n schema: TableSchema,\n column: string,\n data: VuuRowDataItemType,\n) => {\n const col = schema.columns.find((col) => col.name === column);\n if (col) {\n console.log(`data type ${col.serverDataType} data ${data}`);\n // switch (col.serverDataType){\n // }\n } else {\n throw Error(\n `schema for table ${schema.table.table} does not include column ${column}`,\n );\n }\n};\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => DataSourceBase<DataSourceRowWithBigint>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcServiceRequest,\n) => Promise<RpcResultSuccess | RpcResultError>;\n\nexport type MenuServiceHandler = (\n rpcRequest: VuuRpcMenuRequest,\n) => Promise<VuuRpcMenuResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\nexport type RpcMenuService = {\n rpcName: string;\n service: MenuServiceHandler;\n};\n\nexport type VuuModuleOptions = {\n /** Column written by session services (deleteRow, endEditSession) to report row-level status.\n * Defaults to `\"vuuMsg\"` which matches the column added by `sessionTableSchema`. */\n sessionTableMessageColumn?: string;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSourceBase<DataSourceRowWithBigint>;\n sessionTableName?: string;\n sourceTableName?: string;\n};\nexport abstract class VuuModule<T extends string = string>\n implements IVuuModule<T>\n{\n #name: string;\n #sessionTableMessageColumn: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #sessionSourceTableMap: Record<string, T> = {};\n #sessionTableMap: SessionTableMap = {};\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor(\n name: string,\n { sessionTableMessageColumn = \"vuuMsg\" }: VuuModuleOptions = {},\n ) {\n this.#name = name;\n this.#sessionTableMessageColumn = sessionTableMessageColumn;\n moduleContainer.register(this);\n }\n\n protected abstract menus?: Record<T, VuuMenu | undefined> | undefined;\n protected abstract schemas: Record<T, Readonly<TableSchema>>;\n protected abstract tables: Record<T, Table>;\n protected abstract menuServices?:\n | Record<T, RpcMenuService[] | undefined>\n | undefined;\n protected abstract services?: Record<T, RpcService[] | undefined> | undefined;\n protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;\n\n getTableSchema(tableName: string) {\n return (\n this.schemas[tableName as T] ?? this.#sessionTableMap[tableName]?.schema\n );\n }\n\n getTableList() {\n return Object.keys(this.tables);\n }\n\n protected handlePostSubscribeActivities = ({\n clientViewportId,\n tableSchema,\n }: DataSourceSubscribedMessage) => {\n const visualLinks = this.getVisualLinks(tableSchema.table.table);\n const { dataSource } = this.getSubscriptionByViewport(clientViewportId);\n requestAnimationFrame(() => {\n dataSource.links = visualLinks;\n });\n\n // check whether newly subscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n protected unregisterViewport = (viewportId: string) => {\n const { dataSource } = this.getSubscriptionByViewport(viewportId);\n const tableName = dataSource.tableSchema?.table.table;\n if (tableName) {\n const subscriptionsForTable = this.#subscriptionMap.get(tableName);\n if (subscriptionsForTable) {\n for (const { viewportId: vp } of subscriptionsForTable) {\n if (vp === viewportId) {\n if (subscriptionsForTable.length === 1) {\n this.#subscriptionMap.delete(tableName);\n } else {\n this.#subscriptionMap.set(\n tableName,\n subscriptionsForTable.filter(\n (s) => s.viewportId !== viewportId,\n ),\n );\n }\n }\n }\n }\n }\n\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n }\n }\n\n // check whether newly unsubscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n get name() {\n return this.#name;\n }\n\n getSubscriptionByViewport(viewportId: string) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const subscription of subscriptions) {\n if (subscription.viewportId === viewportId) {\n return subscription;\n }\n }\n }\n throw Error(\n `[VuuModule] getSubscriptionByViewport, no subscription found for ${viewportId}`,\n );\n }\n\n getSubscribedDataSource(\n vpId: string,\n ): DataSourceBase<DataSourceRowWithBigint> {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n getVisualLinks = (tableName: string) => {\n const linksForTable = this.visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const vuuModule = this as IVuuModule<any>;\n\n const dataSource: DataSourceBase<DataSourceRowWithBigint> =\n new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks: this.getVisualLinks,\n keyColumn:\n this.schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.schemas[tableName].key,\n table: table || sessionTable,\n menu: this.menus?.[tableName],\n rpcServices: this.getServices(tableName),\n rpcMenuServices: this.getMenuServices(tableName),\n viewport,\n visualLinkService: this.visualLinkService,\n vuuModule,\n });\n\n dataSource.on(\"subscribed\", this.handlePostSubscribeActivities);\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n sessionTableName: sessionTable ? tableName : undefined,\n sourceTableName: this.#sessionSourceTableMap[tableName],\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.services?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n getMenuServices(tableName: T) {\n const tableServices = this.menuServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleMenuServices.concat(tableServices);\n } else {\n return this.#moduleMenuServices;\n }\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected getSessionTable(sessionTableName: string): Table;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): Table;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): Table | undefined;\n protected getSessionTable(sessionTableName: string, throwIfNotFound = true) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else if (throwIfNotFound) {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n protected deleteRow: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { key, mode = \"hard\" } = rpcRequest.params as {\n key: string;\n mode?: \"soft\" | \"hard\";\n };\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n if (mode === \"soft\") {\n sessionTable.update(key, \"vuu_action\", \"deleteRow\");\n } else {\n sessionTable.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n } else {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n const table = this.tables[dataSource.table.table as T];\n if (table) {\n if (mode === \"soft\") {\n table.update(\n key,\n this.#sessionTableMessageColumn,\n \"SOFT_DELETED\",\n );\n } else {\n table.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n }\n }\n }\n return { type: \"ERROR_RESULT\", errorMessage: \"something went wrong\" };\n };\n\n private deleteSelectedRows: ServiceHandler = async (rpcRequest) => {\n if (isDeleteSelectedRowsRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { mode = \"soft\" } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n const selectedRowIds = (\n dataSource as TickingArrayDataSource\n ).getSelectedRowIds();\n const deletedKeys: string[] = [];\n if (selectedRowIds.length > 0) {\n for (const key of selectedRowIds) {\n if ((mode as DeleteRowMode) === \"soft\") {\n sessionTable.update(key, \"vuu_action\", \"deleteRow\");\n } else {\n sessionTable.delete(key);\n }\n deletedKeys.push(key);\n }\n dataSource.select?.({ type: \"DESELECT_ALL\" });\n }\n return { type: \"SUCCESS_RESULT\", data: { deletedKeys } };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `deleteSelectedRows: no active session table for viewport ${viewPortId}`,\n };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows: invalid rpc request\",\n };\n };\n\n private undoRowChange: ServiceHandler = async (rpcRequest) => {\n if (isUndoRowChangeRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { key } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const sourceTableName =\n subscription.sourceTableName ?? dataSource.table?.table;\n const sourceTable = this.tables[sourceTableName as T];\n if (!sourceTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source table not found for viewport ${viewPortId}`,\n };\n }\n const sessionRow = sessionTable.findByKey(key);\n if (!sessionRow) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: session row not found for key ${key}`,\n };\n }\n const action = sessionRow[sessionTable.map.vuu_action];\n if (action === \"addRow\") {\n sessionTable.delete(key);\n return { type: \"SUCCESS_RESULT\", data: { wasInsertedRow: true } };\n }\n if (action === \"deleteRow\" || action === \"editCell\") {\n const sourceRow = sourceTable.findByKey(key);\n if (!sourceRow) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source row not found for key ${key}`,\n };\n }\n const restoredRow = sessionRow.slice();\n for (const column of sourceTable.schema.columns) {\n restoredRow[sessionTable.map[column.name]] =\n sourceRow[sourceTable.map[column.name]];\n }\n sessionTable.updateRow(restoredRow);\n sessionTable.update(key, \"vuu_action\", \"\");\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: no active session table for viewport ${viewPortId}`,\n };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"undoRowChange: invalid rpc request\",\n };\n };\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private editCell: ServiceHandler = async (rpcRequest) => {\n if (isEditCellRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { column, data, key } = rpcRequest.params;\n const sessionTable = this.#sessionTableMap[viewPortId];\n let targetTable: Table | undefined = sessionTable;\n if (!targetTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n targetTable = this.tables[dataSource.table.table as T];\n }\n }\n if (targetTable) {\n try {\n const sessionRow = sessionTable?.findByKey(key as string);\n if (\n sessionRow?.[sessionTable.map.vuu_action] === \"deleteRow\"\n ) {\n throw Error(\"editCell: cannot edit a deleted row\");\n }\n assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\n if (\n sessionTable &&\n sessionTable.findByKey(key as string)?.[\n sessionTable.map.vuu_action\n ] !== \"addRow\"\n ) {\n sessionTable.update(key as string, \"vuu_action\", \"editCell\");\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } catch (e) {\n const { message } = e as Error;\n return {\n type: \"ERROR_RESULT\",\n errorMessage: message,\n };\n }\n } else {\n throw Error(\"[VuuModule] editCell unable to find table for dataSource\");\n }\n } else {\n throw Error(\"[VuuModule] editCell invalid rpc type\");\n }\n };\n\n private beginEditSessionMenuHandler: MenuServiceHandler = async ({\n rpcName,\n type,\n vpId,\n }) => {\n if (type === \"VIEW_PORT_MENUS_SELECT_RPC\") {\n console.log(`rpcName ${rpcName}`);\n\n const result = await this.beginEditSession({\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: vpId,\n },\n params: {\n editSessionMode: \"selected-rows\",\n },\n rpcName,\n type: \"RPC_REQUEST\",\n });\n if (isRpcSuccess(result)) {\n const { table } = result.data as { table: VuuTable };\n return {\n type: \"VIEW_PORT_MENU_RESP\",\n rpcName,\n action: {\n renderComponent: \"grid\",\n type: \"OPEN_DIALOG_ACTION\",\n table,\n },\n vpId,\n };\n } else {\n return {\n error: result.errorMessage,\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n } else {\n return {\n error: \"no can do\",\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n };\n\n /**\n * Creates a standalone session table.\n * The `copyOption` determines which rows are copied into the session table.\n * Returns the session table reference so the caller can subscribe to it.\n */\n private createSessionTableService: ServiceHandler = async (rpcRequest) => {\n if (isCreateSessionTableRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { copyOption } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n copyOption,\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n this.#sessionSourceTableMap[sessionTableName] = vuuTable.table as T;\n subscription.sessionTableName = sessionTableName;\n return {\n data: {\n table: { module: vuuTable.module, table: sessionTableName },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"createSessionTable: invalid rpc request\",\n };\n };\n\n private beginEditSession: ServiceHandler = async (rpcRequest) => {\n if (isBeginEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"inline-all-rows\" } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n editSessionMode as EditSessionMode,\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n this.#sessionSourceTableMap[sessionTableName] = vuuTable.table as T;\n subscription.sessionTableName = sessionTableName;\n\n return {\n data: {\n renderComponent: \"inline-form\",\n table: {\n module: vuuTable.module,\n table: sessionTableName,\n },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n } else {\n throw Error(\"[VuuModule] endEditSession invalid rpc type\");\n }\n\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"not implemented yet\",\n };\n };\n\n private addRow: ServiceHandler = async (rpcRequest) => {\n if (isAddRowRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (!sessionTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `addRow: no active session table for viewport ${viewPortId}`,\n };\n }\n const { data } = rpcRequest.params;\n const keyColumn = sessionTable.schema.key;\n const rowKey = data[keyColumn] ?? uuid();\n const rowData = { ...data, [keyColumn]: rowKey };\n\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n row[columnMap.vuu_action] = \"addRow\";\n for (const [col, idx] of Object.entries(columnMap)) {\n if (rowData[col] !== undefined) {\n row[idx] = rowData[col];\n }\n }\n sessionTable.insert(row);\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"addRow: invalid rpc context\",\n };\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isEndEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n // the viewport Id is the session table name\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n const { dataSource } = subscription;\n\n if (dataSource.table) {\n const sourceTableName =\n subscription.sourceTableName ?? dataSource.table.table;\n const sourceTable = this.tables[sourceTableName as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n const vuuMsgIdx = sessionTable.map[this.#sessionTableMessageColumn];\n const actionIdx = sessionTable.map.vuu_action;\n const sessionTimestampIdx = sessionTable.map.vuuUpdatedTimestamp;\n const sourceTimestampIdx = sourceTable.map.vuuUpdatedTimestamp;\n const sourceColumns = sourceTable.schema.columns;\n for (let i = 0; i < sessionTable.data.length; i++) {\n const sessionRow = sessionTable.data[i];\n const key = String(\n sessionRow[sessionTable.map[sourceTable.schema.key]],\n );\n const currentRow = sourceTable.findByKey(key);\n const action = sessionRow[actionIdx];\n if (action === \"deleteRow\") {\n if (currentRow) {\n const sessionTimestamp = sessionRow[sessionTimestampIdx];\n const sourceTimestamp = currentRow[sourceTimestampIdx];\n if (\n typeof sessionTimestamp === \"number\" &&\n typeof sourceTimestamp === \"number\" &&\n sourceTimestamp > sessionTimestamp\n ) {\n rejectedCount += 1;\n sessionTable.update(\n key,\n this.#sessionTableMessageColumn,\n \"stale delete\",\n );\n } else {\n sourceTable.delete(key);\n }\n }\n continue;\n }\n if (sessionRow[vuuMsgIdx]) continue;\n if (action === \"editCell\" && currentRow) {\n for (const column of sourceColumns) {\n const value = sessionRow[sessionTable.map[column.name]];\n if (currentRow[sourceTable.map[column.name]] !== value) {\n sourceTable.update(key, column.name, value);\n }\n }\n } else if (action === \"addRow\" && !currentRow) {\n sourceTable.insert(\n sourceColumns.map(\n (column) => sessionRow[sessionTable.map[column.name]],\n ),\n );\n }\n }\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n throw Error(\"[VuuModule], exitEditMode\");\n }\n } else {\n throw Error(\"[VuuModule] endEditSession invalid rpc type\");\n }\n\n // return {\n // type: \"ERROR_RESULT\",\n // errorMessage: \"not implemented yet\",\n // };\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const sessionTable = this.getSessionTable(viewPortId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.params as {\n column: NamedCurve;\n value: VuuRowDataItemType;\n };\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(\"[VuuModule] applyBulkEdits invalid rpc type\");\n }\n };\n\n protected createSessionTable(\n sourceTable: Table,\n sessionTableName: string,\n editSessionMode: EditSessionMode | CopyOption,\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode === \"All\" || editSessionMode.endsWith(\"all-rows\")) {\n return this.createSessionTableWithAllRows(sourceTable, sessionTableName);\n } else if (\n editSessionMode === \"Selected\" ||\n editSessionMode === \"selected-rows\"\n ) {\n return this.createSessionTableFromSelectedRows(\n sourceTable,\n sessionTableName,\n dataSource,\n );\n } else if (\n editSessionMode === \"Empty\" ||\n editSessionMode === \"empty-session-table\"\n ) {\n return this.createEmptySessionTable(sourceTable, sessionTableName);\n } else {\n throw Error(\n `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`,\n );\n }\n }\n\n protected createSessionTableWithAllRows(\n { data, schema }: Table,\n _sessionTableName: string,\n ) {\n const sessionSchema = sessionTableSchema(schema);\n return new Table(\n sessionSchema,\n data.map((row) => sessionTableRow(row, schema)),\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n protected createEmptySessionTable(\n { schema }: Table,\n sessionTableName: string,\n ) {\n // Override schema.table.table so isSessionTable() returns true for this session.\n // sessionTableSchema adds the vuuMsg column, consistent with all other session tables.\n const sessionSchema = sessionTableSchema({\n ...schema,\n table: { ...schema.table, table: sessionTableName },\n });\n return new Table(\n sessionSchema,\n [],\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n sessionTableName: string,\n dataSource: TickingArrayDataSource,\n ) {\n const selectedRowIds = dataSource.getSelectedRowIds();\n const keyIndex = map[schema.key];\n const sessionData: Array<Array<bigint | VuuRowDataItemType>> = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < data.length; j++) {\n if (data[j][keyIndex] === selectedRowIds[i]) {\n sessionData.push(sessionTableRow(data[j], schema));\n }\n }\n }\n // Note we preserve the original table name on the schema for the session table,\n // this will later be used to retrieve source table\n const sessionSchema = sessionTableSchema(schema);\n\n return new Table(\n sessionSchema,\n sessionData,\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleServices: RpcService[] = [\n {\n rpcName: \"addRow\",\n service: this.addRow,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"createSessionTable\",\n service: this.createSessionTableService,\n },\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSession,\n },\n {\n rpcName: \"deleteRow\",\n service: this.deleteRow,\n },\n {\n rpcName: \"deleteSelectedRows\",\n service: this.deleteSelectedRows,\n },\n {\n rpcName: \"endEditSession\",\n service: this.endEditSession,\n },\n {\n rpcName: \"editCell\",\n service: this.editCell,\n },\n {\n rpcName: \"undoRowChange\",\n service: this.undoRowChange,\n },\n ];\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleMenuServices: RpcMenuService[] = [\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSessionMenuHandler,\n },\n ];\n}\n"],"names":["col","dataSource","tableName","RuntimeVisualLink","TickingArrayDataSource","isDeleteSelectedRowsRpcRequest","isUndoRowChangeRpcRequest","isEditCellRpcRequest","isRpcSuccess","isCreateSessionTableRpcRequest","uuid","isBeginEditSessionRpcRequest","isAddRowRpcRequest","isEndEditSessionRpcRequest","moduleContainer","sessionTableSchema","Table","sessionTableRow","buildDataColumnMapFromSchema"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import type {\n DataSourceBase,\n DataSourceConfig,\n DataSourceRowWithBigint,\n DataSourceSubscribedMessage,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n EditSessionMode,\n CopyOption,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuMenu,\n VuuRowDataItemType,\n VuuLink,\n LinkDescriptorWithLabel,\n VuuRpcMenuResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcServiceRequest,\n RpcResultSuccess,\n RpcResultError,\n VuuRpcMenuRequest,\n VuuTable,\n VuuDataRow,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isAddRowRpcRequest,\n isBeginEditSessionRpcRequest,\n isCreateSessionTableRpcRequest,\n isDeleteSelectedRowsRpcRequest,\n isEditCellRpcRequest,\n isEndEditSessionRpcRequest,\n isRpcSuccess,\n isUndoRowChangeRpcRequest,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"../../Table\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { sessionTableRow, sessionTableSchema } from \"../../session-table-utils\";\n\nconst assertUpdateIsValid = (\n schema: TableSchema,\n column: string,\n _data: VuuRowDataItemType,\n) => {\n const col = schema.columns.find((col) => col.name === column);\n if (col) {\n // switch (col.serverDataType){\n // }\n } else {\n throw Error(\n `schema for table ${schema.table.table} does not include column ${column}`,\n );\n }\n};\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => DataSourceBase<DataSourceRowWithBigint>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcServiceRequest,\n) => Promise<RpcResultSuccess | RpcResultError>;\n\nexport type MenuServiceHandler = (\n rpcRequest: VuuRpcMenuRequest,\n) => Promise<VuuRpcMenuResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\nexport type RpcMenuService = {\n rpcName: string;\n service: MenuServiceHandler;\n};\n\nexport type VuuModuleOptions = {\n /** Column written by session services (deleteRow, endEditSession) to report row-level status.\n * Defaults to `\"vuuMsg\"` which matches the column added by `sessionTableSchema`. */\n sessionTableMessageColumn?: string;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSourceBase<DataSourceRowWithBigint>;\n sessionTableName?: string;\n sourceTableName?: string;\n};\nexport abstract class VuuModule<T extends string = string>\n implements IVuuModule<T> {\n #name: string;\n #sessionTableMessageColumn: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #sessionSourceTableMap: Record<string, T> = {};\n #sessionTableMap: SessionTableMap = {};\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor(\n name: string,\n { sessionTableMessageColumn = \"vuuMsg\" }: VuuModuleOptions = {},\n ) {\n this.#name = name;\n this.#sessionTableMessageColumn = sessionTableMessageColumn;\n moduleContainer.register(this);\n }\n\n protected abstract menus?: Record<T, VuuMenu | undefined> | undefined;\n protected abstract schemas: Record<T, Readonly<TableSchema>>;\n protected abstract tables: Record<T, Table>;\n protected abstract menuServices?:\n | Record<T, RpcMenuService[] | undefined>\n | undefined;\n protected abstract services?: Record<T, RpcService[] | undefined> | undefined;\n protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;\n\n getTableSchema(tableName: string) {\n return (\n this.schemas[tableName as T] ?? this.#sessionTableMap[tableName]?.schema\n );\n }\n\n getTableList() {\n return Object.keys(this.tables);\n }\n\n protected handlePostSubscribeActivities = ({\n clientViewportId,\n tableSchema,\n }: DataSourceSubscribedMessage) => {\n const visualLinks = this.getVisualLinks(tableSchema.table.table);\n const { dataSource } = this.getSubscriptionByViewport(clientViewportId);\n requestAnimationFrame(() => {\n dataSource.links = visualLinks;\n });\n\n // check whether newly subscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n protected unregisterViewport = (viewportId: string) => {\n const { dataSource } = this.getSubscriptionByViewport(viewportId);\n const tableName = dataSource.tableSchema?.table.table;\n if (tableName) {\n const subscriptionsForTable = this.#subscriptionMap.get(tableName);\n if (subscriptionsForTable) {\n for (const { viewportId: vp } of subscriptionsForTable) {\n if (vp === viewportId) {\n if (subscriptionsForTable.length === 1) {\n this.#subscriptionMap.delete(tableName);\n } else {\n this.#subscriptionMap.set(\n tableName,\n subscriptionsForTable.filter(\n (s) => s.viewportId !== viewportId,\n ),\n );\n }\n }\n }\n }\n }\n\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n }\n }\n\n // check whether newly unsubscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n get name() {\n return this.#name;\n }\n\n getSubscriptionByViewport(viewportId: string) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const subscription of subscriptions) {\n if (subscription.viewportId === viewportId) {\n return subscription;\n }\n }\n }\n throw Error(\n `[VuuModule] getSubscriptionByViewport, no subscription found for ${viewportId}`,\n );\n }\n\n getSubscribedDataSource(\n vpId: string,\n ): DataSourceBase<DataSourceRowWithBigint> {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n getVisualLinks = (tableName: string) => {\n const linksForTable = this.visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const vuuModule = this as IVuuModule<any>;\n\n const dataSource: DataSourceBase<DataSourceRowWithBigint> =\n new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks: this.getVisualLinks,\n keyColumn:\n this.schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.schemas[tableName].key,\n table: table || sessionTable,\n menu: this.menus?.[tableName],\n rpcServices: this.getServices(tableName),\n rpcMenuServices: this.getMenuServices(tableName),\n viewport,\n visualLinkService: this.visualLinkService,\n vuuModule,\n });\n\n dataSource.on(\"subscribed\", this.handlePostSubscribeActivities);\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n sessionTableName: sessionTable ? tableName : undefined,\n sourceTableName: this.#sessionSourceTableMap[tableName],\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.services?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n getMenuServices(tableName: T) {\n const tableServices = this.menuServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleMenuServices.concat(tableServices);\n } else {\n return this.#moduleMenuServices;\n }\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected getSessionTable(sessionTableName: string): Table;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): Table;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): Table | undefined;\n protected getSessionTable(sessionTableName: string, throwIfNotFound = true) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else if (throwIfNotFound) {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n protected deleteRow: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { key, mode = \"hard\" } = rpcRequest.params as {\n key: string;\n mode?: \"soft\" | \"hard\";\n };\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n if (mode === \"soft\") {\n sessionTable.update(key, \"vuu_action\", \"deleteRow\");\n } else {\n sessionTable.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n } else {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n const table = this.tables[dataSource.table.table as T];\n if (table) {\n if (mode === \"soft\") {\n table.update(\n key,\n this.#sessionTableMessageColumn,\n \"SOFT_DELETED\",\n );\n } else {\n table.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n }\n }\n }\n return { type: \"ERROR_RESULT\", errorMessage: \"something went wrong\" };\n };\n\n private deleteSelectedRows: ServiceHandler = async (rpcRequest) => {\n if (isDeleteSelectedRowsRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { mode = \"soft\" } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n const selectedRowIds = (\n dataSource as TickingArrayDataSource\n ).getSelectedRowIds();\n const deletedKeys: string[] = [];\n if (selectedRowIds.length > 0) {\n for (const key of selectedRowIds) {\n if ((mode as DeleteRowMode) === \"soft\") {\n sessionTable.update(key, \"vuu_action\", \"deleteRow\");\n } else {\n sessionTable.delete(key);\n }\n deletedKeys.push(key);\n }\n dataSource.select?.({ type: \"DESELECT_ALL\" });\n }\n return { type: \"SUCCESS_RESULT\", data: { deletedKeys } };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `deleteSelectedRows: no active session table for viewport ${viewPortId}`,\n };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows: invalid rpc request\",\n };\n };\n\n private undoRowChange: ServiceHandler = async (rpcRequest) => {\n if (isUndoRowChangeRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { key } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const sourceTableName =\n subscription.sourceTableName ?? dataSource.table?.table;\n const sourceTable = this.tables[sourceTableName as T];\n if (!sourceTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source table not found for viewport ${viewPortId}`,\n };\n }\n const sessionRow = sessionTable.findByKey(key);\n if (!sessionRow) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: session row not found for key ${key}`,\n };\n }\n const action = sessionRow[sessionTable.map.vuu_action];\n if (action === \"addRow\") {\n sessionTable.delete(key);\n return { type: \"SUCCESS_RESULT\", data: { wasInsertedRow: true } };\n }\n if (action === \"deleteRow\" || action === \"editCell\") {\n const sourceRow = sourceTable.findByKey(key);\n if (!sourceRow) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source row not found for key ${key}`,\n };\n }\n const restoredRow = sessionRow.slice();\n for (const column of sourceTable.schema.columns) {\n restoredRow[sessionTable.map[column.name]] =\n sourceRow[sourceTable.map[column.name]];\n }\n sessionTable.updateRow(restoredRow);\n sessionTable.update(key, \"vuu_action\", \"\");\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: no active session table for viewport ${viewPortId}`,\n };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"undoRowChange: invalid rpc request\",\n };\n };\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private editCell: ServiceHandler = async (rpcRequest) => {\n if (isEditCellRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { column, data, key } = rpcRequest.params;\n const sessionTable = this.#sessionTableMap[viewPortId];\n let targetTable: Table | undefined = sessionTable;\n if (!targetTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n targetTable = this.tables[dataSource.table.table as T];\n }\n }\n if (targetTable) {\n try {\n const sessionRow = sessionTable?.findByKey(key as string);\n if (\n sessionRow?.[sessionTable.map.vuu_action] === \"deleteRow\"\n ) {\n throw Error(\"editCell: cannot edit a deleted row\");\n }\n assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\n if (\n sessionTable &&\n sessionTable.findByKey(key as string)?.[\n sessionTable.map.vuu_action\n ] !== \"addRow\"\n ) {\n sessionTable.update(key as string, \"vuu_action\", \"editCell\");\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } catch (e) {\n const { message } = e as Error;\n return {\n type: \"ERROR_RESULT\",\n errorMessage: message,\n };\n }\n } else {\n throw Error(\"[VuuModule] editCell unable to find table for dataSource\");\n }\n } else {\n throw Error(\"[VuuModule] editCell invalid rpc type\");\n }\n };\n\n private beginEditSessionMenuHandler: MenuServiceHandler = async ({\n rpcName,\n type,\n vpId,\n }) => {\n if (type === \"VIEW_PORT_MENUS_SELECT_RPC\") {\n\n const result = await this.beginEditSession({\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: vpId,\n },\n params: {\n editSessionMode: \"selected-rows\",\n },\n rpcName,\n type: \"RPC_REQUEST\",\n });\n if (isRpcSuccess(result)) {\n const { table } = result.data as { table: VuuTable };\n return {\n type: \"VIEW_PORT_MENU_RESP\",\n rpcName,\n action: {\n renderComponent: \"grid\",\n type: \"OPEN_DIALOG_ACTION\",\n table,\n },\n vpId,\n };\n } else {\n return {\n error: result.errorMessage,\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n } else {\n return {\n error: \"no can do\",\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n };\n\n /**\n * Creates a standalone session table.\n * The `copyOption` determines which rows are copied into the session table.\n * Returns the session table reference so the caller can subscribe to it.\n */\n private createSessionTableService: ServiceHandler = async (rpcRequest) => {\n if (isCreateSessionTableRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { copyOption } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n copyOption,\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n this.#sessionSourceTableMap[sessionTableName] = vuuTable.table as T;\n subscription.sessionTableName = sessionTableName;\n return {\n data: {\n table: { module: vuuTable.module, table: sessionTableName },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"createSessionTable: invalid rpc request\",\n };\n };\n\n private beginEditSession: ServiceHandler = async (rpcRequest) => {\n if (isBeginEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"inline-all-rows\" } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n editSessionMode as EditSessionMode,\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n this.#sessionSourceTableMap[sessionTableName] = vuuTable.table as T;\n subscription.sessionTableName = sessionTableName;\n\n return {\n data: {\n renderComponent: \"inline-form\",\n table: {\n module: vuuTable.module,\n table: sessionTableName,\n },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n } else {\n throw Error(\"[VuuModule] endEditSession invalid rpc type\");\n }\n\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"not implemented yet\",\n };\n };\n\n private addRow: ServiceHandler = async (rpcRequest) => {\n if (isAddRowRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (!sessionTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `addRow: no active session table for viewport ${viewPortId}`,\n };\n }\n const { data } = rpcRequest.params;\n const keyColumn = sessionTable.schema.key;\n const rowKey = data[keyColumn] ?? uuid();\n const rowData = { ...data, [keyColumn]: rowKey };\n\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n row[columnMap.vuu_action] = \"addRow\";\n for (const [col, idx] of Object.entries(columnMap)) {\n if (rowData[col] !== undefined) {\n row[idx] = rowData[col];\n }\n }\n sessionTable.insert(row);\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"addRow: invalid rpc context\",\n };\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isEndEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n // the viewport Id is the session table name\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n const { dataSource } = subscription;\n\n if (dataSource.table) {\n const sourceTableName =\n subscription.sourceTableName ?? dataSource.table.table;\n const sourceTable = this.tables[sourceTableName as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n const vuuMsgIdx = sessionTable.map[this.#sessionTableMessageColumn];\n const actionIdx = sessionTable.map.vuu_action;\n const sessionTimestampIdx = sessionTable.map.vuuUpdatedTimestamp;\n const sourceTimestampIdx = sourceTable.map.vuuUpdatedTimestamp;\n const sourceColumns = sourceTable.schema.columns;\n for (let i = 0; i < sessionTable.data.length; i++) {\n const sessionRow = sessionTable.data[i];\n const key = String(\n sessionRow[sessionTable.map[sourceTable.schema.key]],\n );\n const currentRow = sourceTable.findByKey(key);\n const action = sessionRow[actionIdx];\n if (action === \"deleteRow\") {\n if (currentRow) {\n const sessionTimestamp = sessionRow[sessionTimestampIdx];\n const sourceTimestamp = currentRow[sourceTimestampIdx];\n if (\n typeof sessionTimestamp === \"number\" &&\n typeof sourceTimestamp === \"number\" &&\n sourceTimestamp > sessionTimestamp\n ) {\n rejectedCount += 1;\n sessionTable.update(\n key,\n this.#sessionTableMessageColumn,\n \"stale delete\",\n );\n } else {\n sourceTable.delete(key);\n }\n }\n continue;\n }\n if (sessionRow[vuuMsgIdx]) continue;\n if (action === \"editCell\" && currentRow) {\n for (const column of sourceColumns) {\n const value = sessionRow[sessionTable.map[column.name]];\n if (currentRow[sourceTable.map[column.name]] !== value) {\n sourceTable.update(key, column.name, value);\n }\n }\n } else if (action === \"addRow\" && !currentRow) {\n sourceTable.insert(\n sourceColumns.map(\n (column) => sessionRow[sessionTable.map[column.name]],\n ),\n );\n }\n }\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n throw Error(\"[VuuModule], exitEditMode\");\n }\n } else {\n throw Error(\"[VuuModule] endEditSession invalid rpc type\");\n }\n\n // return {\n // type: \"ERROR_RESULT\",\n // errorMessage: \"not implemented yet\",\n // };\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const sessionTable = this.getSessionTable(viewPortId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.params as {\n column: NamedCurve;\n value: VuuRowDataItemType;\n };\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(\"[VuuModule] applyBulkEdits invalid rpc type\");\n }\n };\n\n protected createSessionTable(\n sourceTable: Table,\n sessionTableName: string,\n editSessionMode: EditSessionMode | CopyOption,\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode === \"All\" || editSessionMode.endsWith(\"all-rows\")) {\n return this.createSessionTableWithAllRows(sourceTable, sessionTableName);\n } else if (\n editSessionMode === \"Selected\" ||\n editSessionMode === \"selected-rows\"\n ) {\n return this.createSessionTableFromSelectedRows(\n sourceTable,\n sessionTableName,\n dataSource,\n );\n } else if (\n editSessionMode === \"Empty\" ||\n editSessionMode === \"empty-session-table\"\n ) {\n return this.createEmptySessionTable(sourceTable, sessionTableName);\n } else {\n throw Error(\n `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`,\n );\n }\n }\n\n protected createSessionTableWithAllRows(\n { data, schema }: Table,\n _sessionTableName: string,\n ) {\n const sessionSchema = sessionTableSchema(schema);\n return new Table(\n sessionSchema,\n data.map((row) => sessionTableRow(row, schema)),\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n protected createEmptySessionTable(\n { schema }: Table,\n sessionTableName: string,\n ) {\n // Override schema.table.table so isSessionTable() returns true for this session.\n // sessionTableSchema adds the vuuMsg column, consistent with all other session tables.\n const sessionSchema = sessionTableSchema({\n ...schema,\n table: { ...schema.table, table: sessionTableName },\n });\n return new Table(\n sessionSchema,\n [],\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n sessionTableName: string,\n dataSource: TickingArrayDataSource,\n ) {\n const selectedRowIds = dataSource.getSelectedRowIds();\n const keyIndex = map[schema.key];\n const sessionData: Array<Array<bigint | VuuRowDataItemType>> = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < data.length; j++) {\n if (data[j][keyIndex] === selectedRowIds[i]) {\n sessionData.push(sessionTableRow(data[j], schema));\n }\n }\n }\n // Note we preserve the original table name on the schema for the session table,\n // this will later be used to retrieve source table\n const sessionSchema = sessionTableSchema(schema);\n\n return new Table(\n sessionSchema,\n sessionData,\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleServices: RpcService[] = [\n {\n rpcName: \"addRow\",\n service: this.addRow,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"createSessionTable\",\n service: this.createSessionTableService,\n },\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSession,\n },\n {\n rpcName: \"deleteRow\",\n service: this.deleteRow,\n },\n {\n rpcName: \"deleteSelectedRows\",\n service: this.deleteSelectedRows,\n },\n {\n rpcName: \"endEditSession\",\n service: this.endEditSession,\n },\n {\n rpcName: \"editCell\",\n service: this.editCell,\n },\n {\n rpcName: \"undoRowChange\",\n service: this.undoRowChange,\n },\n ];\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleMenuServices: RpcMenuService[] = [\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSessionMenuHandler,\n },\n ];\n}\n"],"names":["col","dataSource","tableName","RuntimeVisualLink","TickingArrayDataSource","isDeleteSelectedRowsRpcRequest","isUndoRowChangeRpcRequest","isEditCellRpcRequest","isRpcSuccess","isCreateSessionTableRpcRequest","uuid","isBeginEditSessionRpcRequest","isAddRowRpcRequest","isEndEditSessionRpcRequest","moduleContainer","sessionTableSchema","Table","sessionTableRow","buildDataColumnMapFromSchema"],"mappings":"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"}
|
|
@@ -166,11 +166,10 @@ const _TickingArrayDataSource = class _TickingArrayDataSource extends ArrayDataS
|
|
|
166
166
|
});
|
|
167
167
|
if (isRpcSuccess(rpcResponse)) {
|
|
168
168
|
const { table: sessionTable } = rpcResponse.data;
|
|
169
|
-
const columns = this.config.columns.includes("vuu_action") ? this.config.columns : this.config.columns.concat("vuu_action");
|
|
170
169
|
const sessionDataSource = __privateGet(this, _vuuModule)?.createDataSource(
|
|
171
170
|
sessionTable.table,
|
|
172
171
|
sessionTable.table,
|
|
173
|
-
{ ...this.config
|
|
172
|
+
{ ...this.config }
|
|
174
173
|
);
|
|
175
174
|
if (sessionDataSource instanceof _TickingArrayDataSource) {
|
|
176
175
|
__privateSet(sessionDataSource, _sourceTableDataSource, this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n type ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceBase,\n DataSource,\n DataSourceRowWithBigint,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n CopyOption,\n EditSessionMode,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n VuuCreateVisualLink,\n VuuMenu,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcMenuResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isRpcSuccess,\n isTypeaheadRequest,\n StaleUpdateError,\n} from \"@vuu-ui/vuu-utils\";\nimport type {\n IVuuModule,\n RpcMenuService,\n RpcService,\n} from \"./core/module/VuuModule\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport type { Table } from \"./Table\";\n\nexport type VisualLinkHandler = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n) => Promise<DataSourceVisualLinkCreatedMessage | void>;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n getVisualLinks?: (tableName: string) => LinkDescriptorWithLabel[] | undefined;\n menu?: VuuMenu;\n rpcMenuServices?: RpcMenuService[];\n rpcServices?: RpcService[];\n table?: Table;\n visualLinkService?: VisualLinkHandler;\n vuuModule?: IVuuModule;\n}\n\ntype LinkSubscription = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n};\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #rpcMenuServices: RpcMenuService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n #sourceTableDataSource: TickingArrayDataSource | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n #vuuModule?: IVuuModule;\n\n constructor({\n data,\n getVisualLinks,\n rpcServices,\n rpcMenuServices,\n table,\n menu,\n visualLink,\n visualLinkService,\n vuuModule,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n dataMap: table?.map,\n });\n this._menu = menu;\n\n this.#rpcMenuServices = rpcMenuServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n this.#vuuModule = vuuModule;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRowWithSessionCheck);\n // Use the base-class low-level handler so the overridden deleteRow\n // (which routes through rpcRequest)\n table.on(\"delete\", this.handleDeleteFromTable);\n }\n }\n\n updateRowWithSessionCheck = (\n row: Array<bigint | VuuRowDataItemType>,\n columnName?: string,\n sessionId?: string,\n ) => {\n if (sessionId && sessionId === this.viewport) {\n this.updateRow(row, columnName);\n } else if (sessionId) {\n // will never happen\n console.warn(\"THIS IS NEVER EXPECTED TO HAPPEN\");\n } else {\n this.updateRow(row, columnName);\n }\n };\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n\n return subscription;\n }\n\n unsubscribe() {\n super.unsubscribe();\n this.#table = undefined;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n super.links = links;\n }\n\n get links() {\n return this.#getVisualLinks?.(this.table.table);\n }\n\n getSelectedRowIds(): string[] {\n return Array.from(this.selectedRows);\n }\n\n isSessionDataSourceOf(dataSource: DataSource): boolean {\n return this.#sourceTableDataSource === dataSource;\n }\n\n async createSessionDataSource(\n copyOption: CopyOption,\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"createSessionTable\",\n params: { copyOption },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const columns = this.config.columns.includes(\"vuu_action\")\n ? this.config.columns\n : this.config.columns.concat(\"vuu_action\");\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config, columns },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] createSessionDataSource ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async beginEditSession(\n editSessionMode: EditSessionMode = \"all-rows\",\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: { editSessionMode },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const columns = this.config.columns.includes(\"vuu_action\")\n ? this.config.columns\n : this.config.columns.concat(\"vuu_action\");\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config, columns },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] beginEditSession ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n return this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n addRow = async (\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<true | string> => {\n const response = await this.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"addRow\",\n params: { key: rowData[this.tableSchema.key] as string, data: rowData },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"addRow failed\";\n };\n\n deleteRow = async (\n key: string,\n mode: DeleteRowMode = \"hard\",\n ): Promise<true | string> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteRow\",\n params: { key, mode },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"deleteRow failed\";\n };\n\n deleteSelectedRows = async (\n mode: DeleteRowMode = \"soft\",\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteSelectedRows\",\n params: { mode },\n });\n return (\n response ?? {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows failed\",\n }\n );\n };\n\n undoRowChange = async (\n key: string,\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"undoRowChange\",\n params: { key },\n });\n return (\n response ?? { type: \"ERROR_RESULT\", errorMessage: \"undoRowChange failed\" }\n );\n };\n\n set columns(columns: string[]) {\n super.columns = columns;\n }\n\n get columns() {\n return super.columns;\n }\n\n async endEditSession(saveChanges = false) {\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const rpcResponse = await this.rpcRequest(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n const sourceTableDataSource = this.#sourceTableDataSource;\n if (sourceTableDataSource) {\n this.#sourceTableDataSource = undefined;\n this.unsubscribe();\n } else {\n this.sendRowsToClient(true);\n }\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n throw new StaleUpdateError(rpcResponse.errorMessage);\n } else {\n throw Error(rpcResponse?.errorMessage ?? \"endEditSession failed\");\n }\n }\n }\n\n async rpcRequest(\n rpcRequest: Omit<VuuRpcServiceRequest, \"context\">,\n ): Promise<RpcResultSuccess | RpcResultError> {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n const data = await this.getTypeaheadSuggestions(column, starts);\n return {\n type: \"SUCCESS_RESULT\",\n data,\n } as RpcResultSuccess;\n } else {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n } else {\n throw Error(\n `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`,\n );\n }\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">,\n ): Promise<VuuRpcMenuResponse> {\n const rpcService = this.#rpcMenuServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`,\n );\n }\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n const columnIndex = this.columnMap[column];\n if (columnIndex === undefined) {\n console.warn(\n `[TickingArrayDataSource] getTypeaheadSuggestions. No column ${column}`,\n );\n return Promise.resolve([]);\n } else {\n return makeSuggestions(this.currentData, columnIndex, pattern);\n }\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided\",\n );\n }\n }\n\n get visualLink() {\n return this._config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._config = {\n ...this._config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n childColumnName: fromColumn,\n type: \"CREATE_VISUAL_LINK\",\n parentVpId: parentClientVpId,\n parentColumnName: toColumn,\n }).then((response) => {\n this.emit(\n \"visual-link-created\",\n response as DataSourceVisualLinkCreatedMessage,\n );\n });\n }\n } else {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n type: \"REMOVE_VISUAL_LINK\",\n }).then((/* response */) => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n type ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceBase,\n DataSource,\n DataSourceRowWithBigint,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n CopyOption,\n EditSessionMode,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n VuuCreateVisualLink,\n VuuMenu,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcMenuResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isRpcSuccess,\n isTypeaheadRequest,\n StaleUpdateError,\n} from \"@vuu-ui/vuu-utils\";\nimport type {\n IVuuModule,\n RpcMenuService,\n RpcService,\n} from \"./core/module/VuuModule\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport type { Table } from \"./Table\";\n\nexport type VisualLinkHandler = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n) => Promise<DataSourceVisualLinkCreatedMessage | void>;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n getVisualLinks?: (tableName: string) => LinkDescriptorWithLabel[] | undefined;\n menu?: VuuMenu;\n rpcMenuServices?: RpcMenuService[];\n rpcServices?: RpcService[];\n table?: Table;\n visualLinkService?: VisualLinkHandler;\n vuuModule?: IVuuModule;\n}\n\ntype LinkSubscription = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n};\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #rpcMenuServices: RpcMenuService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n #sourceTableDataSource: TickingArrayDataSource | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n #vuuModule?: IVuuModule;\n\n constructor({\n data,\n getVisualLinks,\n rpcServices,\n rpcMenuServices,\n table,\n menu,\n visualLink,\n visualLinkService,\n vuuModule,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n dataMap: table?.map,\n });\n this._menu = menu;\n\n this.#rpcMenuServices = rpcMenuServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n this.#vuuModule = vuuModule;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRowWithSessionCheck);\n // Use the base-class low-level handler so the overridden deleteRow\n // (which routes through rpcRequest)\n table.on(\"delete\", this.handleDeleteFromTable);\n }\n }\n\n updateRowWithSessionCheck = (\n row: Array<bigint | VuuRowDataItemType>,\n columnName?: string,\n sessionId?: string,\n ) => {\n if (sessionId && sessionId === this.viewport) {\n this.updateRow(row, columnName);\n } else if (sessionId) {\n // will never happen\n console.warn(\"THIS IS NEVER EXPECTED TO HAPPEN\");\n } else {\n this.updateRow(row, columnName);\n }\n };\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n\n return subscription;\n }\n\n unsubscribe() {\n super.unsubscribe();\n this.#table = undefined;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n super.links = links;\n }\n\n get links() {\n return this.#getVisualLinks?.(this.table.table);\n }\n\n getSelectedRowIds(): string[] {\n return Array.from(this.selectedRows);\n }\n\n isSessionDataSourceOf(dataSource: DataSource): boolean {\n return this.#sourceTableDataSource === dataSource;\n }\n\n async createSessionDataSource(\n copyOption: CopyOption,\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"createSessionTable\",\n params: { copyOption },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const columns = this.config.columns.includes(\"vuu_action\")\n ? this.config.columns\n : this.config.columns.concat(\"vuu_action\");\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config, columns },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] createSessionDataSource ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async beginEditSession(\n editSessionMode: EditSessionMode = \"all-rows\",\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: { editSessionMode },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] beginEditSession ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n return this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n addRow = async (\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<true | string> => {\n const response = await this.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"addRow\",\n params: { key: rowData[this.tableSchema.key] as string, data: rowData },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"addRow failed\";\n };\n\n deleteRow = async (\n key: string,\n mode: DeleteRowMode = \"hard\",\n ): Promise<true | string> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteRow\",\n params: { key, mode },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"deleteRow failed\";\n };\n\n deleteSelectedRows = async (\n mode: DeleteRowMode = \"soft\",\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteSelectedRows\",\n params: { mode },\n });\n return (\n response ?? {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows failed\",\n }\n );\n };\n\n undoRowChange = async (\n key: string,\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"undoRowChange\",\n params: { key },\n });\n return (\n response ?? { type: \"ERROR_RESULT\", errorMessage: \"undoRowChange failed\" }\n );\n };\n\n set columns(columns: string[]) {\n super.columns = columns;\n }\n\n get columns() {\n return super.columns;\n }\n\n async endEditSession(saveChanges = false) {\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const rpcResponse = await this.rpcRequest(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n const sourceTableDataSource = this.#sourceTableDataSource;\n if (sourceTableDataSource) {\n this.#sourceTableDataSource = undefined;\n this.unsubscribe();\n } else {\n this.sendRowsToClient(true);\n }\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n throw new StaleUpdateError(rpcResponse.errorMessage);\n } else {\n throw Error(rpcResponse?.errorMessage ?? \"endEditSession failed\");\n }\n }\n }\n\n async rpcRequest(\n rpcRequest: Omit<VuuRpcServiceRequest, \"context\">,\n ): Promise<RpcResultSuccess | RpcResultError> {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n const data = await this.getTypeaheadSuggestions(column, starts);\n return {\n type: \"SUCCESS_RESULT\",\n data,\n } as RpcResultSuccess;\n } else {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n } else {\n throw Error(\n `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`,\n );\n }\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">,\n ): Promise<VuuRpcMenuResponse> {\n const rpcService = this.#rpcMenuServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`,\n );\n }\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n const columnIndex = this.columnMap[column];\n if (columnIndex === undefined) {\n console.warn(\n `[TickingArrayDataSource] getTypeaheadSuggestions. No column ${column}`,\n );\n return Promise.resolve([]);\n } else {\n return makeSuggestions(this.currentData, columnIndex, pattern);\n }\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided\",\n );\n }\n }\n\n get visualLink() {\n return this._config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._config = {\n ...this._config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n childColumnName: fromColumn,\n type: \"CREATE_VISUAL_LINK\",\n parentVpId: parentClientVpId,\n parentColumnName: toColumn,\n }).then((response) => {\n this.emit(\n \"visual-link-created\",\n response as DataSourceVisualLinkCreatedMessage,\n );\n });\n }\n } else {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n type: \"REMOVE_VISUAL_LINK\",\n }).then((/* response */) => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -16,11 +16,9 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
|
|
|
16
16
|
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);
|
|
17
17
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
18
18
|
var _name, _sessionTableMessageColumn, _runtimeVisualLinks, _sessionSourceTableMap, _sessionTableMap, _tableServices, _subscriptionMap, _moduleServices, _moduleMenuServices;
|
|
19
|
-
const assertUpdateIsValid = (schema, column,
|
|
19
|
+
const assertUpdateIsValid = (schema, column, _data) => {
|
|
20
20
|
const col = schema.columns.find((col2) => col2.name === column);
|
|
21
|
-
if (col) {
|
|
22
|
-
console.log(`data type ${col.serverDataType} data ${data}`);
|
|
23
|
-
} else {
|
|
21
|
+
if (col) ; else {
|
|
24
22
|
throw Error(
|
|
25
23
|
`schema for table ${schema.table.table} does not include column ${column}`
|
|
26
24
|
);
|
|
@@ -377,7 +375,6 @@ class VuuModule {
|
|
|
377
375
|
vpId
|
|
378
376
|
}) => {
|
|
379
377
|
if (type === "VIEW_PORT_MENUS_SELECT_RPC") {
|
|
380
|
-
console.log(`rpcName ${rpcName}`);
|
|
381
378
|
const result = await this.beginEditSession({
|
|
382
379
|
context: {
|
|
383
380
|
type: "VIEWPORT_CONTEXT",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import type {\n DataSourceBase,\n DataSourceConfig,\n DataSourceRowWithBigint,\n DataSourceSubscribedMessage,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n EditSessionMode,\n CopyOption,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuMenu,\n VuuRowDataItemType,\n VuuLink,\n LinkDescriptorWithLabel,\n VuuRpcMenuResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcServiceRequest,\n RpcResultSuccess,\n RpcResultError,\n VuuRpcMenuRequest,\n VuuTable,\n VuuDataRow,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isAddRowRpcRequest,\n isBeginEditSessionRpcRequest,\n isCreateSessionTableRpcRequest,\n isDeleteSelectedRowsRpcRequest,\n isEditCellRpcRequest,\n isEndEditSessionRpcRequest,\n isRpcSuccess,\n isUndoRowChangeRpcRequest,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"../../Table\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { sessionTableRow, sessionTableSchema } from \"../../session-table-utils\";\n\nconst assertUpdateIsValid = (\n schema: TableSchema,\n column: string,\n data: VuuRowDataItemType,\n) => {\n const col = schema.columns.find((col) => col.name === column);\n if (col) {\n console.log(`data type ${col.serverDataType} data ${data}`);\n // switch (col.serverDataType){\n // }\n } else {\n throw Error(\n `schema for table ${schema.table.table} does not include column ${column}`,\n );\n }\n};\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => DataSourceBase<DataSourceRowWithBigint>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcServiceRequest,\n) => Promise<RpcResultSuccess | RpcResultError>;\n\nexport type MenuServiceHandler = (\n rpcRequest: VuuRpcMenuRequest,\n) => Promise<VuuRpcMenuResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\nexport type RpcMenuService = {\n rpcName: string;\n service: MenuServiceHandler;\n};\n\nexport type VuuModuleOptions = {\n /** Column written by session services (deleteRow, endEditSession) to report row-level status.\n * Defaults to `\"vuuMsg\"` which matches the column added by `sessionTableSchema`. */\n sessionTableMessageColumn?: string;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSourceBase<DataSourceRowWithBigint>;\n sessionTableName?: string;\n sourceTableName?: string;\n};\nexport abstract class VuuModule<T extends string = string>\n implements IVuuModule<T>\n{\n #name: string;\n #sessionTableMessageColumn: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #sessionSourceTableMap: Record<string, T> = {};\n #sessionTableMap: SessionTableMap = {};\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor(\n name: string,\n { sessionTableMessageColumn = \"vuuMsg\" }: VuuModuleOptions = {},\n ) {\n this.#name = name;\n this.#sessionTableMessageColumn = sessionTableMessageColumn;\n moduleContainer.register(this);\n }\n\n protected abstract menus?: Record<T, VuuMenu | undefined> | undefined;\n protected abstract schemas: Record<T, Readonly<TableSchema>>;\n protected abstract tables: Record<T, Table>;\n protected abstract menuServices?:\n | Record<T, RpcMenuService[] | undefined>\n | undefined;\n protected abstract services?: Record<T, RpcService[] | undefined> | undefined;\n protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;\n\n getTableSchema(tableName: string) {\n return (\n this.schemas[tableName as T] ?? this.#sessionTableMap[tableName]?.schema\n );\n }\n\n getTableList() {\n return Object.keys(this.tables);\n }\n\n protected handlePostSubscribeActivities = ({\n clientViewportId,\n tableSchema,\n }: DataSourceSubscribedMessage) => {\n const visualLinks = this.getVisualLinks(tableSchema.table.table);\n const { dataSource } = this.getSubscriptionByViewport(clientViewportId);\n requestAnimationFrame(() => {\n dataSource.links = visualLinks;\n });\n\n // check whether newly subscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n protected unregisterViewport = (viewportId: string) => {\n const { dataSource } = this.getSubscriptionByViewport(viewportId);\n const tableName = dataSource.tableSchema?.table.table;\n if (tableName) {\n const subscriptionsForTable = this.#subscriptionMap.get(tableName);\n if (subscriptionsForTable) {\n for (const { viewportId: vp } of subscriptionsForTable) {\n if (vp === viewportId) {\n if (subscriptionsForTable.length === 1) {\n this.#subscriptionMap.delete(tableName);\n } else {\n this.#subscriptionMap.set(\n tableName,\n subscriptionsForTable.filter(\n (s) => s.viewportId !== viewportId,\n ),\n );\n }\n }\n }\n }\n }\n\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n }\n }\n\n // check whether newly unsubscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n get name() {\n return this.#name;\n }\n\n getSubscriptionByViewport(viewportId: string) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const subscription of subscriptions) {\n if (subscription.viewportId === viewportId) {\n return subscription;\n }\n }\n }\n throw Error(\n `[VuuModule] getSubscriptionByViewport, no subscription found for ${viewportId}`,\n );\n }\n\n getSubscribedDataSource(\n vpId: string,\n ): DataSourceBase<DataSourceRowWithBigint> {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n getVisualLinks = (tableName: string) => {\n const linksForTable = this.visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const vuuModule = this as IVuuModule<any>;\n\n const dataSource: DataSourceBase<DataSourceRowWithBigint> =\n new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks: this.getVisualLinks,\n keyColumn:\n this.schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.schemas[tableName].key,\n table: table || sessionTable,\n menu: this.menus?.[tableName],\n rpcServices: this.getServices(tableName),\n rpcMenuServices: this.getMenuServices(tableName),\n viewport,\n visualLinkService: this.visualLinkService,\n vuuModule,\n });\n\n dataSource.on(\"subscribed\", this.handlePostSubscribeActivities);\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n sessionTableName: sessionTable ? tableName : undefined,\n sourceTableName: this.#sessionSourceTableMap[tableName],\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.services?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n getMenuServices(tableName: T) {\n const tableServices = this.menuServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleMenuServices.concat(tableServices);\n } else {\n return this.#moduleMenuServices;\n }\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected getSessionTable(sessionTableName: string): Table;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): Table;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): Table | undefined;\n protected getSessionTable(sessionTableName: string, throwIfNotFound = true) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else if (throwIfNotFound) {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n protected deleteRow: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { key, mode = \"hard\" } = rpcRequest.params as {\n key: string;\n mode?: \"soft\" | \"hard\";\n };\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n if (mode === \"soft\") {\n sessionTable.update(key, \"vuu_action\", \"deleteRow\");\n } else {\n sessionTable.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n } else {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n const table = this.tables[dataSource.table.table as T];\n if (table) {\n if (mode === \"soft\") {\n table.update(\n key,\n this.#sessionTableMessageColumn,\n \"SOFT_DELETED\",\n );\n } else {\n table.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n }\n }\n }\n return { type: \"ERROR_RESULT\", errorMessage: \"something went wrong\" };\n };\n\n private deleteSelectedRows: ServiceHandler = async (rpcRequest) => {\n if (isDeleteSelectedRowsRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { mode = \"soft\" } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n const selectedRowIds = (\n dataSource as TickingArrayDataSource\n ).getSelectedRowIds();\n const deletedKeys: string[] = [];\n if (selectedRowIds.length > 0) {\n for (const key of selectedRowIds) {\n if ((mode as DeleteRowMode) === \"soft\") {\n sessionTable.update(key, \"vuu_action\", \"deleteRow\");\n } else {\n sessionTable.delete(key);\n }\n deletedKeys.push(key);\n }\n dataSource.select?.({ type: \"DESELECT_ALL\" });\n }\n return { type: \"SUCCESS_RESULT\", data: { deletedKeys } };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `deleteSelectedRows: no active session table for viewport ${viewPortId}`,\n };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows: invalid rpc request\",\n };\n };\n\n private undoRowChange: ServiceHandler = async (rpcRequest) => {\n if (isUndoRowChangeRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { key } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const sourceTableName =\n subscription.sourceTableName ?? dataSource.table?.table;\n const sourceTable = this.tables[sourceTableName as T];\n if (!sourceTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source table not found for viewport ${viewPortId}`,\n };\n }\n const sessionRow = sessionTable.findByKey(key);\n if (!sessionRow) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: session row not found for key ${key}`,\n };\n }\n const action = sessionRow[sessionTable.map.vuu_action];\n if (action === \"addRow\") {\n sessionTable.delete(key);\n return { type: \"SUCCESS_RESULT\", data: { wasInsertedRow: true } };\n }\n if (action === \"deleteRow\" || action === \"editCell\") {\n const sourceRow = sourceTable.findByKey(key);\n if (!sourceRow) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source row not found for key ${key}`,\n };\n }\n const restoredRow = sessionRow.slice();\n for (const column of sourceTable.schema.columns) {\n restoredRow[sessionTable.map[column.name]] =\n sourceRow[sourceTable.map[column.name]];\n }\n sessionTable.updateRow(restoredRow);\n sessionTable.update(key, \"vuu_action\", \"\");\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: no active session table for viewport ${viewPortId}`,\n };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"undoRowChange: invalid rpc request\",\n };\n };\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private editCell: ServiceHandler = async (rpcRequest) => {\n if (isEditCellRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { column, data, key } = rpcRequest.params;\n const sessionTable = this.#sessionTableMap[viewPortId];\n let targetTable: Table | undefined = sessionTable;\n if (!targetTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n targetTable = this.tables[dataSource.table.table as T];\n }\n }\n if (targetTable) {\n try {\n const sessionRow = sessionTable?.findByKey(key as string);\n if (\n sessionRow?.[sessionTable.map.vuu_action] === \"deleteRow\"\n ) {\n throw Error(\"editCell: cannot edit a deleted row\");\n }\n assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\n if (\n sessionTable &&\n sessionTable.findByKey(key as string)?.[\n sessionTable.map.vuu_action\n ] !== \"addRow\"\n ) {\n sessionTable.update(key as string, \"vuu_action\", \"editCell\");\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } catch (e) {\n const { message } = e as Error;\n return {\n type: \"ERROR_RESULT\",\n errorMessage: message,\n };\n }\n } else {\n throw Error(\"[VuuModule] editCell unable to find table for dataSource\");\n }\n } else {\n throw Error(\"[VuuModule] editCell invalid rpc type\");\n }\n };\n\n private beginEditSessionMenuHandler: MenuServiceHandler = async ({\n rpcName,\n type,\n vpId,\n }) => {\n if (type === \"VIEW_PORT_MENUS_SELECT_RPC\") {\n console.log(`rpcName ${rpcName}`);\n\n const result = await this.beginEditSession({\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: vpId,\n },\n params: {\n editSessionMode: \"selected-rows\",\n },\n rpcName,\n type: \"RPC_REQUEST\",\n });\n if (isRpcSuccess(result)) {\n const { table } = result.data as { table: VuuTable };\n return {\n type: \"VIEW_PORT_MENU_RESP\",\n rpcName,\n action: {\n renderComponent: \"grid\",\n type: \"OPEN_DIALOG_ACTION\",\n table,\n },\n vpId,\n };\n } else {\n return {\n error: result.errorMessage,\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n } else {\n return {\n error: \"no can do\",\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n };\n\n /**\n * Creates a standalone session table.\n * The `copyOption` determines which rows are copied into the session table.\n * Returns the session table reference so the caller can subscribe to it.\n */\n private createSessionTableService: ServiceHandler = async (rpcRequest) => {\n if (isCreateSessionTableRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { copyOption } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n copyOption,\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n this.#sessionSourceTableMap[sessionTableName] = vuuTable.table as T;\n subscription.sessionTableName = sessionTableName;\n return {\n data: {\n table: { module: vuuTable.module, table: sessionTableName },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"createSessionTable: invalid rpc request\",\n };\n };\n\n private beginEditSession: ServiceHandler = async (rpcRequest) => {\n if (isBeginEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"inline-all-rows\" } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n editSessionMode as EditSessionMode,\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n this.#sessionSourceTableMap[sessionTableName] = vuuTable.table as T;\n subscription.sessionTableName = sessionTableName;\n\n return {\n data: {\n renderComponent: \"inline-form\",\n table: {\n module: vuuTable.module,\n table: sessionTableName,\n },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n } else {\n throw Error(\"[VuuModule] endEditSession invalid rpc type\");\n }\n\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"not implemented yet\",\n };\n };\n\n private addRow: ServiceHandler = async (rpcRequest) => {\n if (isAddRowRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (!sessionTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `addRow: no active session table for viewport ${viewPortId}`,\n };\n }\n const { data } = rpcRequest.params;\n const keyColumn = sessionTable.schema.key;\n const rowKey = data[keyColumn] ?? uuid();\n const rowData = { ...data, [keyColumn]: rowKey };\n\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n row[columnMap.vuu_action] = \"addRow\";\n for (const [col, idx] of Object.entries(columnMap)) {\n if (rowData[col] !== undefined) {\n row[idx] = rowData[col];\n }\n }\n sessionTable.insert(row);\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"addRow: invalid rpc context\",\n };\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isEndEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n // the viewport Id is the session table name\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n const { dataSource } = subscription;\n\n if (dataSource.table) {\n const sourceTableName =\n subscription.sourceTableName ?? dataSource.table.table;\n const sourceTable = this.tables[sourceTableName as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n const vuuMsgIdx = sessionTable.map[this.#sessionTableMessageColumn];\n const actionIdx = sessionTable.map.vuu_action;\n const sessionTimestampIdx = sessionTable.map.vuuUpdatedTimestamp;\n const sourceTimestampIdx = sourceTable.map.vuuUpdatedTimestamp;\n const sourceColumns = sourceTable.schema.columns;\n for (let i = 0; i < sessionTable.data.length; i++) {\n const sessionRow = sessionTable.data[i];\n const key = String(\n sessionRow[sessionTable.map[sourceTable.schema.key]],\n );\n const currentRow = sourceTable.findByKey(key);\n const action = sessionRow[actionIdx];\n if (action === \"deleteRow\") {\n if (currentRow) {\n const sessionTimestamp = sessionRow[sessionTimestampIdx];\n const sourceTimestamp = currentRow[sourceTimestampIdx];\n if (\n typeof sessionTimestamp === \"number\" &&\n typeof sourceTimestamp === \"number\" &&\n sourceTimestamp > sessionTimestamp\n ) {\n rejectedCount += 1;\n sessionTable.update(\n key,\n this.#sessionTableMessageColumn,\n \"stale delete\",\n );\n } else {\n sourceTable.delete(key);\n }\n }\n continue;\n }\n if (sessionRow[vuuMsgIdx]) continue;\n if (action === \"editCell\" && currentRow) {\n for (const column of sourceColumns) {\n const value = sessionRow[sessionTable.map[column.name]];\n if (currentRow[sourceTable.map[column.name]] !== value) {\n sourceTable.update(key, column.name, value);\n }\n }\n } else if (action === \"addRow\" && !currentRow) {\n sourceTable.insert(\n sourceColumns.map(\n (column) => sessionRow[sessionTable.map[column.name]],\n ),\n );\n }\n }\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n throw Error(\"[VuuModule], exitEditMode\");\n }\n } else {\n throw Error(\"[VuuModule] endEditSession invalid rpc type\");\n }\n\n // return {\n // type: \"ERROR_RESULT\",\n // errorMessage: \"not implemented yet\",\n // };\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const sessionTable = this.getSessionTable(viewPortId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.params as {\n column: NamedCurve;\n value: VuuRowDataItemType;\n };\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(\"[VuuModule] applyBulkEdits invalid rpc type\");\n }\n };\n\n protected createSessionTable(\n sourceTable: Table,\n sessionTableName: string,\n editSessionMode: EditSessionMode | CopyOption,\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode === \"All\" || editSessionMode.endsWith(\"all-rows\")) {\n return this.createSessionTableWithAllRows(sourceTable, sessionTableName);\n } else if (\n editSessionMode === \"Selected\" ||\n editSessionMode === \"selected-rows\"\n ) {\n return this.createSessionTableFromSelectedRows(\n sourceTable,\n sessionTableName,\n dataSource,\n );\n } else if (\n editSessionMode === \"Empty\" ||\n editSessionMode === \"empty-session-table\"\n ) {\n return this.createEmptySessionTable(sourceTable, sessionTableName);\n } else {\n throw Error(\n `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`,\n );\n }\n }\n\n protected createSessionTableWithAllRows(\n { data, schema }: Table,\n _sessionTableName: string,\n ) {\n const sessionSchema = sessionTableSchema(schema);\n return new Table(\n sessionSchema,\n data.map((row) => sessionTableRow(row, schema)),\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n protected createEmptySessionTable(\n { schema }: Table,\n sessionTableName: string,\n ) {\n // Override schema.table.table so isSessionTable() returns true for this session.\n // sessionTableSchema adds the vuuMsg column, consistent with all other session tables.\n const sessionSchema = sessionTableSchema({\n ...schema,\n table: { ...schema.table, table: sessionTableName },\n });\n return new Table(\n sessionSchema,\n [],\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n sessionTableName: string,\n dataSource: TickingArrayDataSource,\n ) {\n const selectedRowIds = dataSource.getSelectedRowIds();\n const keyIndex = map[schema.key];\n const sessionData: Array<Array<bigint | VuuRowDataItemType>> = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < data.length; j++) {\n if (data[j][keyIndex] === selectedRowIds[i]) {\n sessionData.push(sessionTableRow(data[j], schema));\n }\n }\n }\n // Note we preserve the original table name on the schema for the session table,\n // this will later be used to retrieve source table\n const sessionSchema = sessionTableSchema(schema);\n\n return new Table(\n sessionSchema,\n sessionData,\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleServices: RpcService[] = [\n {\n rpcName: \"addRow\",\n service: this.addRow,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"createSessionTable\",\n service: this.createSessionTableService,\n },\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSession,\n },\n {\n rpcName: \"deleteRow\",\n service: this.deleteRow,\n },\n {\n rpcName: \"deleteSelectedRows\",\n service: this.deleteSelectedRows,\n },\n {\n rpcName: \"endEditSession\",\n service: this.endEditSession,\n },\n {\n rpcName: \"editCell\",\n service: this.editCell,\n },\n {\n rpcName: \"undoRowChange\",\n service: this.undoRowChange,\n },\n ];\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleMenuServices: RpcMenuService[] = [\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSessionMenuHandler,\n },\n ];\n}\n"],"names":["col","dataSource","tableName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import type {\n DataSourceBase,\n DataSourceConfig,\n DataSourceRowWithBigint,\n DataSourceSubscribedMessage,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n EditSessionMode,\n CopyOption,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuMenu,\n VuuRowDataItemType,\n VuuLink,\n LinkDescriptorWithLabel,\n VuuRpcMenuResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcServiceRequest,\n RpcResultSuccess,\n RpcResultError,\n VuuRpcMenuRequest,\n VuuTable,\n VuuDataRow,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isAddRowRpcRequest,\n isBeginEditSessionRpcRequest,\n isCreateSessionTableRpcRequest,\n isDeleteSelectedRowsRpcRequest,\n isEditCellRpcRequest,\n isEndEditSessionRpcRequest,\n isRpcSuccess,\n isUndoRowChangeRpcRequest,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"../../Table\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { sessionTableRow, sessionTableSchema } from \"../../session-table-utils\";\n\nconst assertUpdateIsValid = (\n schema: TableSchema,\n column: string,\n _data: VuuRowDataItemType,\n) => {\n const col = schema.columns.find((col) => col.name === column);\n if (col) {\n // switch (col.serverDataType){\n // }\n } else {\n throw Error(\n `schema for table ${schema.table.table} does not include column ${column}`,\n );\n }\n};\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => DataSourceBase<DataSourceRowWithBigint>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcServiceRequest,\n) => Promise<RpcResultSuccess | RpcResultError>;\n\nexport type MenuServiceHandler = (\n rpcRequest: VuuRpcMenuRequest,\n) => Promise<VuuRpcMenuResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\nexport type RpcMenuService = {\n rpcName: string;\n service: MenuServiceHandler;\n};\n\nexport type VuuModuleOptions = {\n /** Column written by session services (deleteRow, endEditSession) to report row-level status.\n * Defaults to `\"vuuMsg\"` which matches the column added by `sessionTableSchema`. */\n sessionTableMessageColumn?: string;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSourceBase<DataSourceRowWithBigint>;\n sessionTableName?: string;\n sourceTableName?: string;\n};\nexport abstract class VuuModule<T extends string = string>\n implements IVuuModule<T> {\n #name: string;\n #sessionTableMessageColumn: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #sessionSourceTableMap: Record<string, T> = {};\n #sessionTableMap: SessionTableMap = {};\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor(\n name: string,\n { sessionTableMessageColumn = \"vuuMsg\" }: VuuModuleOptions = {},\n ) {\n this.#name = name;\n this.#sessionTableMessageColumn = sessionTableMessageColumn;\n moduleContainer.register(this);\n }\n\n protected abstract menus?: Record<T, VuuMenu | undefined> | undefined;\n protected abstract schemas: Record<T, Readonly<TableSchema>>;\n protected abstract tables: Record<T, Table>;\n protected abstract menuServices?:\n | Record<T, RpcMenuService[] | undefined>\n | undefined;\n protected abstract services?: Record<T, RpcService[] | undefined> | undefined;\n protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;\n\n getTableSchema(tableName: string) {\n return (\n this.schemas[tableName as T] ?? this.#sessionTableMap[tableName]?.schema\n );\n }\n\n getTableList() {\n return Object.keys(this.tables);\n }\n\n protected handlePostSubscribeActivities = ({\n clientViewportId,\n tableSchema,\n }: DataSourceSubscribedMessage) => {\n const visualLinks = this.getVisualLinks(tableSchema.table.table);\n const { dataSource } = this.getSubscriptionByViewport(clientViewportId);\n requestAnimationFrame(() => {\n dataSource.links = visualLinks;\n });\n\n // check whether newly subscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n protected unregisterViewport = (viewportId: string) => {\n const { dataSource } = this.getSubscriptionByViewport(viewportId);\n const tableName = dataSource.tableSchema?.table.table;\n if (tableName) {\n const subscriptionsForTable = this.#subscriptionMap.get(tableName);\n if (subscriptionsForTable) {\n for (const { viewportId: vp } of subscriptionsForTable) {\n if (vp === viewportId) {\n if (subscriptionsForTable.length === 1) {\n this.#subscriptionMap.delete(tableName);\n } else {\n this.#subscriptionMap.set(\n tableName,\n subscriptionsForTable.filter(\n (s) => s.viewportId !== viewportId,\n ),\n );\n }\n }\n }\n }\n }\n\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n }\n }\n\n // check whether newly unsubscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n get name() {\n return this.#name;\n }\n\n getSubscriptionByViewport(viewportId: string) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const subscription of subscriptions) {\n if (subscription.viewportId === viewportId) {\n return subscription;\n }\n }\n }\n throw Error(\n `[VuuModule] getSubscriptionByViewport, no subscription found for ${viewportId}`,\n );\n }\n\n getSubscribedDataSource(\n vpId: string,\n ): DataSourceBase<DataSourceRowWithBigint> {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n getVisualLinks = (tableName: string) => {\n const linksForTable = this.visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const vuuModule = this as IVuuModule<any>;\n\n const dataSource: DataSourceBase<DataSourceRowWithBigint> =\n new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks: this.getVisualLinks,\n keyColumn:\n this.schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.schemas[tableName].key,\n table: table || sessionTable,\n menu: this.menus?.[tableName],\n rpcServices: this.getServices(tableName),\n rpcMenuServices: this.getMenuServices(tableName),\n viewport,\n visualLinkService: this.visualLinkService,\n vuuModule,\n });\n\n dataSource.on(\"subscribed\", this.handlePostSubscribeActivities);\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n sessionTableName: sessionTable ? tableName : undefined,\n sourceTableName: this.#sessionSourceTableMap[tableName],\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.services?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n getMenuServices(tableName: T) {\n const tableServices = this.menuServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleMenuServices.concat(tableServices);\n } else {\n return this.#moduleMenuServices;\n }\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected getSessionTable(sessionTableName: string): Table;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): Table;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): Table | undefined;\n protected getSessionTable(sessionTableName: string, throwIfNotFound = true) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else if (throwIfNotFound) {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n protected deleteRow: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { key, mode = \"hard\" } = rpcRequest.params as {\n key: string;\n mode?: \"soft\" | \"hard\";\n };\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n if (mode === \"soft\") {\n sessionTable.update(key, \"vuu_action\", \"deleteRow\");\n } else {\n sessionTable.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n } else {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n const table = this.tables[dataSource.table.table as T];\n if (table) {\n if (mode === \"soft\") {\n table.update(\n key,\n this.#sessionTableMessageColumn,\n \"SOFT_DELETED\",\n );\n } else {\n table.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n }\n }\n }\n return { type: \"ERROR_RESULT\", errorMessage: \"something went wrong\" };\n };\n\n private deleteSelectedRows: ServiceHandler = async (rpcRequest) => {\n if (isDeleteSelectedRowsRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { mode = \"soft\" } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n const selectedRowIds = (\n dataSource as TickingArrayDataSource\n ).getSelectedRowIds();\n const deletedKeys: string[] = [];\n if (selectedRowIds.length > 0) {\n for (const key of selectedRowIds) {\n if ((mode as DeleteRowMode) === \"soft\") {\n sessionTable.update(key, \"vuu_action\", \"deleteRow\");\n } else {\n sessionTable.delete(key);\n }\n deletedKeys.push(key);\n }\n dataSource.select?.({ type: \"DESELECT_ALL\" });\n }\n return { type: \"SUCCESS_RESULT\", data: { deletedKeys } };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `deleteSelectedRows: no active session table for viewport ${viewPortId}`,\n };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows: invalid rpc request\",\n };\n };\n\n private undoRowChange: ServiceHandler = async (rpcRequest) => {\n if (isUndoRowChangeRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { key } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const sourceTableName =\n subscription.sourceTableName ?? dataSource.table?.table;\n const sourceTable = this.tables[sourceTableName as T];\n if (!sourceTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source table not found for viewport ${viewPortId}`,\n };\n }\n const sessionRow = sessionTable.findByKey(key);\n if (!sessionRow) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: session row not found for key ${key}`,\n };\n }\n const action = sessionRow[sessionTable.map.vuu_action];\n if (action === \"addRow\") {\n sessionTable.delete(key);\n return { type: \"SUCCESS_RESULT\", data: { wasInsertedRow: true } };\n }\n if (action === \"deleteRow\" || action === \"editCell\") {\n const sourceRow = sourceTable.findByKey(key);\n if (!sourceRow) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source row not found for key ${key}`,\n };\n }\n const restoredRow = sessionRow.slice();\n for (const column of sourceTable.schema.columns) {\n restoredRow[sessionTable.map[column.name]] =\n sourceRow[sourceTable.map[column.name]];\n }\n sessionTable.updateRow(restoredRow);\n sessionTable.update(key, \"vuu_action\", \"\");\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: no active session table for viewport ${viewPortId}`,\n };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"undoRowChange: invalid rpc request\",\n };\n };\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private editCell: ServiceHandler = async (rpcRequest) => {\n if (isEditCellRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { column, data, key } = rpcRequest.params;\n const sessionTable = this.#sessionTableMap[viewPortId];\n let targetTable: Table | undefined = sessionTable;\n if (!targetTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n targetTable = this.tables[dataSource.table.table as T];\n }\n }\n if (targetTable) {\n try {\n const sessionRow = sessionTable?.findByKey(key as string);\n if (\n sessionRow?.[sessionTable.map.vuu_action] === \"deleteRow\"\n ) {\n throw Error(\"editCell: cannot edit a deleted row\");\n }\n assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\n if (\n sessionTable &&\n sessionTable.findByKey(key as string)?.[\n sessionTable.map.vuu_action\n ] !== \"addRow\"\n ) {\n sessionTable.update(key as string, \"vuu_action\", \"editCell\");\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } catch (e) {\n const { message } = e as Error;\n return {\n type: \"ERROR_RESULT\",\n errorMessage: message,\n };\n }\n } else {\n throw Error(\"[VuuModule] editCell unable to find table for dataSource\");\n }\n } else {\n throw Error(\"[VuuModule] editCell invalid rpc type\");\n }\n };\n\n private beginEditSessionMenuHandler: MenuServiceHandler = async ({\n rpcName,\n type,\n vpId,\n }) => {\n if (type === \"VIEW_PORT_MENUS_SELECT_RPC\") {\n\n const result = await this.beginEditSession({\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: vpId,\n },\n params: {\n editSessionMode: \"selected-rows\",\n },\n rpcName,\n type: \"RPC_REQUEST\",\n });\n if (isRpcSuccess(result)) {\n const { table } = result.data as { table: VuuTable };\n return {\n type: \"VIEW_PORT_MENU_RESP\",\n rpcName,\n action: {\n renderComponent: \"grid\",\n type: \"OPEN_DIALOG_ACTION\",\n table,\n },\n vpId,\n };\n } else {\n return {\n error: result.errorMessage,\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n } else {\n return {\n error: \"no can do\",\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n };\n\n /**\n * Creates a standalone session table.\n * The `copyOption` determines which rows are copied into the session table.\n * Returns the session table reference so the caller can subscribe to it.\n */\n private createSessionTableService: ServiceHandler = async (rpcRequest) => {\n if (isCreateSessionTableRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { copyOption } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n copyOption,\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n this.#sessionSourceTableMap[sessionTableName] = vuuTable.table as T;\n subscription.sessionTableName = sessionTableName;\n return {\n data: {\n table: { module: vuuTable.module, table: sessionTableName },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"createSessionTable: invalid rpc request\",\n };\n };\n\n private beginEditSession: ServiceHandler = async (rpcRequest) => {\n if (isBeginEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"inline-all-rows\" } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n editSessionMode as EditSessionMode,\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n this.#sessionSourceTableMap[sessionTableName] = vuuTable.table as T;\n subscription.sessionTableName = sessionTableName;\n\n return {\n data: {\n renderComponent: \"inline-form\",\n table: {\n module: vuuTable.module,\n table: sessionTableName,\n },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n } else {\n throw Error(\"[VuuModule] endEditSession invalid rpc type\");\n }\n\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"not implemented yet\",\n };\n };\n\n private addRow: ServiceHandler = async (rpcRequest) => {\n if (isAddRowRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (!sessionTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `addRow: no active session table for viewport ${viewPortId}`,\n };\n }\n const { data } = rpcRequest.params;\n const keyColumn = sessionTable.schema.key;\n const rowKey = data[keyColumn] ?? uuid();\n const rowData = { ...data, [keyColumn]: rowKey };\n\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n row[columnMap.vuu_action] = \"addRow\";\n for (const [col, idx] of Object.entries(columnMap)) {\n if (rowData[col] !== undefined) {\n row[idx] = rowData[col];\n }\n }\n sessionTable.insert(row);\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"addRow: invalid rpc context\",\n };\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isEndEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n // the viewport Id is the session table name\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n const { dataSource } = subscription;\n\n if (dataSource.table) {\n const sourceTableName =\n subscription.sourceTableName ?? dataSource.table.table;\n const sourceTable = this.tables[sourceTableName as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n const vuuMsgIdx = sessionTable.map[this.#sessionTableMessageColumn];\n const actionIdx = sessionTable.map.vuu_action;\n const sessionTimestampIdx = sessionTable.map.vuuUpdatedTimestamp;\n const sourceTimestampIdx = sourceTable.map.vuuUpdatedTimestamp;\n const sourceColumns = sourceTable.schema.columns;\n for (let i = 0; i < sessionTable.data.length; i++) {\n const sessionRow = sessionTable.data[i];\n const key = String(\n sessionRow[sessionTable.map[sourceTable.schema.key]],\n );\n const currentRow = sourceTable.findByKey(key);\n const action = sessionRow[actionIdx];\n if (action === \"deleteRow\") {\n if (currentRow) {\n const sessionTimestamp = sessionRow[sessionTimestampIdx];\n const sourceTimestamp = currentRow[sourceTimestampIdx];\n if (\n typeof sessionTimestamp === \"number\" &&\n typeof sourceTimestamp === \"number\" &&\n sourceTimestamp > sessionTimestamp\n ) {\n rejectedCount += 1;\n sessionTable.update(\n key,\n this.#sessionTableMessageColumn,\n \"stale delete\",\n );\n } else {\n sourceTable.delete(key);\n }\n }\n continue;\n }\n if (sessionRow[vuuMsgIdx]) continue;\n if (action === \"editCell\" && currentRow) {\n for (const column of sourceColumns) {\n const value = sessionRow[sessionTable.map[column.name]];\n if (currentRow[sourceTable.map[column.name]] !== value) {\n sourceTable.update(key, column.name, value);\n }\n }\n } else if (action === \"addRow\" && !currentRow) {\n sourceTable.insert(\n sourceColumns.map(\n (column) => sessionRow[sessionTable.map[column.name]],\n ),\n );\n }\n }\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n throw Error(\"[VuuModule], exitEditMode\");\n }\n } else {\n throw Error(\"[VuuModule] endEditSession invalid rpc type\");\n }\n\n // return {\n // type: \"ERROR_RESULT\",\n // errorMessage: \"not implemented yet\",\n // };\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const sessionTable = this.getSessionTable(viewPortId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.params as {\n column: NamedCurve;\n value: VuuRowDataItemType;\n };\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(\"[VuuModule] applyBulkEdits invalid rpc type\");\n }\n };\n\n protected createSessionTable(\n sourceTable: Table,\n sessionTableName: string,\n editSessionMode: EditSessionMode | CopyOption,\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode === \"All\" || editSessionMode.endsWith(\"all-rows\")) {\n return this.createSessionTableWithAllRows(sourceTable, sessionTableName);\n } else if (\n editSessionMode === \"Selected\" ||\n editSessionMode === \"selected-rows\"\n ) {\n return this.createSessionTableFromSelectedRows(\n sourceTable,\n sessionTableName,\n dataSource,\n );\n } else if (\n editSessionMode === \"Empty\" ||\n editSessionMode === \"empty-session-table\"\n ) {\n return this.createEmptySessionTable(sourceTable, sessionTableName);\n } else {\n throw Error(\n `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`,\n );\n }\n }\n\n protected createSessionTableWithAllRows(\n { data, schema }: Table,\n _sessionTableName: string,\n ) {\n const sessionSchema = sessionTableSchema(schema);\n return new Table(\n sessionSchema,\n data.map((row) => sessionTableRow(row, schema)),\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n protected createEmptySessionTable(\n { schema }: Table,\n sessionTableName: string,\n ) {\n // Override schema.table.table so isSessionTable() returns true for this session.\n // sessionTableSchema adds the vuuMsg column, consistent with all other session tables.\n const sessionSchema = sessionTableSchema({\n ...schema,\n table: { ...schema.table, table: sessionTableName },\n });\n return new Table(\n sessionSchema,\n [],\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n sessionTableName: string,\n dataSource: TickingArrayDataSource,\n ) {\n const selectedRowIds = dataSource.getSelectedRowIds();\n const keyIndex = map[schema.key];\n const sessionData: Array<Array<bigint | VuuRowDataItemType>> = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < data.length; j++) {\n if (data[j][keyIndex] === selectedRowIds[i]) {\n sessionData.push(sessionTableRow(data[j], schema));\n }\n }\n }\n // Note we preserve the original table name on the schema for the session table,\n // this will later be used to retrieve source table\n const sessionSchema = sessionTableSchema(schema);\n\n return new Table(\n sessionSchema,\n sessionData,\n buildDataColumnMapFromSchema(sessionSchema),\n );\n }\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleServices: RpcService[] = [\n {\n rpcName: \"addRow\",\n service: this.addRow,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"createSessionTable\",\n service: this.createSessionTableService,\n },\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSession,\n },\n {\n rpcName: \"deleteRow\",\n service: this.deleteRow,\n },\n {\n rpcName: \"deleteSelectedRows\",\n service: this.deleteSelectedRows,\n },\n {\n rpcName: \"endEditSession\",\n service: this.endEditSession,\n },\n {\n rpcName: \"editCell\",\n service: this.editCell,\n },\n {\n rpcName: \"undoRowChange\",\n service: this.undoRowChange,\n },\n ];\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleMenuServices: RpcMenuService[] = [\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSessionMenuHandler,\n },\n ];\n}\n"],"names":["col","dataSource","tableName"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "3.0.0
|
|
2
|
+
"version": "3.0.0",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@vuu-ui/vuu-data-local": "3.0.0
|
|
7
|
-
"@vuu-ui/vuu-utils": "3.0.0
|
|
6
|
+
"@vuu-ui/vuu-data-local": "3.0.0",
|
|
7
|
+
"@vuu-ui/vuu-utils": "3.0.0"
|
|
8
8
|
},
|
|
9
9
|
"devDependencies": {
|
|
10
|
-
"@vuu-ui/vuu-protocol-types": "3.0.0
|
|
11
|
-
"@vuu-ui/vuu-data-types": "3.0.0
|
|
12
|
-
"@vuu-ui/vuu-table-types": "3.0.0
|
|
10
|
+
"@vuu-ui/vuu-protocol-types": "3.0.0",
|
|
11
|
+
"@vuu-ui/vuu-data-types": "3.0.0",
|
|
12
|
+
"@vuu-ui/vuu-table-types": "3.0.0"
|
|
13
13
|
},
|
|
14
14
|
"sideEffects": false,
|
|
15
15
|
"files": [
|