@vuu-ui/vuu-data-test 2.3.0 → 3.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import {\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 {\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 { isProxySessionTable, SessionTable } from \"../../SessionTable\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { 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, SessionTable | 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};\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 #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 sessionTables: this.#sessionTableMap,\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 };\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): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): SessionTable | 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(\n key,\n this.#sessionTableMessageColumn,\n \"SOFT_DELETED\",\n );\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 && isProxySessionTable(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(\n key,\n this.#sessionTableMessageColumn,\n \"SOFT_DELETED\",\n );\n } else {\n sessionTable.delete(key);\n }\n deletedKeys.push(key);\n }\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 && isProxySessionTable(sessionTable)) {\n // Get the real source Table instance to avoid Proxy/private-field issues with findByKey\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n const sourceTable = this.tables[dataSource.table?.table as T];\n if (!sourceTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: source table not found for viewport ${viewPortId}`,\n };\n }\n // Detect newly inserted rows — they are not present in the source table\n const sourceRow = sourceTable.findByKey(key);\n if (!sourceRow) {\n // Newly added row: remove it from the session entirely\n sessionTable.delete(key);\n return { type: \"SUCCESS_RESULT\", data: { wasInsertedRow: true } };\n }\n // Existing source row: revert session updates back to source table values\n const updates = sessionTable.getSessionUpdates();\n const rowUpdates = updates.get(key);\n if (rowUpdates) {\n for (const column of Object.keys(rowUpdates.cellUpdates)) {\n const originalValue = sourceRow[sourceTable.map[column]];\n sessionTable.update(key, column, originalValue);\n }\n // Remove so endEditSession won't apply stale changes\n updates.delete(key);\n }\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `undoRowChange: no active proxy 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 let targetTable: SessionTable | Table = this.#sessionTableMap[viewPortId];\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 assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\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 sessionTable = subscription.sessionTableName\n ? this.#sessionTableMap[subscription.sessionTableName]\n : undefined;\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\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n for (const [col, idx] of Object.entries(columnMap)) {\n if (data[col] !== undefined) {\n row[idx] = data[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 sourceTable = this.tables[dataSource.table.table as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n if (isProxySessionTable(sessionTable)) {\n const updates = sessionTable.getSessionUpdates();\n updates.forEach((rowUpdates, key) => {\n const { cellUpdates, lastUpdateTimestamp } = rowUpdates;\n const currentRow = sourceTable.findByKey(key);\n const lastUpdateTimestampOnTable =\n currentRow[sourceTable.map.vuuUpdatedTimestamp];\n if (lastUpdateTimestamp !== lastUpdateTimestampOnTable) {\n // We will reject updates for this row, update sessionn table row with message\n rejectedCount += 1;\n const sessionTableRow = sessionTable.findByKey(key);\n const newRow = sessionTableRow.slice();\n const messages: string[] = [];\n Object.entries(cellUpdates).forEach(([column, value]) => {\n messages.push(`${column}:${value}`);\n });\n newRow[sessionTable.map[this.#sessionTableMessageColumn]] =\n messages.join(\",\");\n sessionTable.updateRow(newRow);\n } else {\n const newRow = currentRow.slice();\n Object.entries(cellUpdates).forEach(([column, value]) => {\n newRow[sourceTable.map[column]] = value;\n });\n sourceTable.updateRow(newRow);\n }\n });\n updates.clear();\n } else {\n // empty-session-table / csv-upload: insert only rows with no errors.\n // vuuMsg is empty string for valid rows and non-empty for error rows.\n const vuuMsgIdx = sessionTable.map[this.#sessionTableMessageColumn];\n const sourceColumns = sourceTable.schema.columns;\n for (let i = 0; i < sessionTable.data.length; i++) {\n const sessionRow = sessionTable.data[i];\n if (sessionRow[vuuMsgIdx]) continue;\n const sourceRow: Array<bigint | VuuRowDataItemType> =\n sourceColumns.map(\n (col) => sessionRow[sessionTable.map[col.name]],\n );\n sourceTable.insert(sourceRow);\n }\n }\n\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\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 = \"inline-all-rows\",\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 sourceTable: Table,\n sessionTableName: string,\n ) {\n return SessionTable(sourceTable, sessionTableName);\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(data[j]);\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","isProxySessionTable","isUndoRowChangeRpcRequest","isEditCellRpcRequest","isRpcSuccess","isCreateSessionTableRpcRequest","uuid","isBeginEditSessionRpcRequest","isAddRowRpcRequest","isEndEditSessionRpcRequest","moduleContainer","SessionTable","sessionTableSchema","Table","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 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\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 (data[col] !== undefined) {\n row[idx] = data[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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"}
package/cjs/index.js CHANGED
@@ -6,7 +6,6 @@ var TableContainer = require('./core/table/TableContainer.js');
6
6
  var LocalDatasourceProvider = require('./local-datasource-provider/LocalDatasourceProvider.js');
7
7
  var makeSuggestions = require('./makeSuggestions.js');
8
8
  var schemas = require('./schemas.js');
9
- var SessionTable = require('./SessionTable.js');
10
9
  var simulSchemas = require('./simul/simul-schemas.js');
11
10
  var SimulModule = require('./simul/SimulModule.js');
12
11
  var basketSchemas = require('./basket/basket-schemas.js');
@@ -26,7 +25,6 @@ exports.makeSuggestions = makeSuggestions.makeSuggestions;
26
25
  exports.getAllSchemas = schemas.getAllSchemas;
27
26
  exports.getSchema = schemas.getSchema;
28
27
  exports.schemas = schemas.schemas;
29
- exports.SessionTable = SessionTable.SessionTable;
30
28
  exports.isSimulTable = simulSchemas.isSimulTable;
31
29
  exports.simulSchemas = simulSchemas.schemas;
32
30
  exports.simulModule = SimulModule.simulModule;
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,10 +3,27 @@
3
3
  require('./Table.js');
4
4
  require('@vuu-ui/vuu-utils');
5
5
 
6
- const sessionTableSchema = (schema) => ({
7
- ...schema,
8
- columns: schema.columns.concat({ name: "vuuMsg", serverDataType: "string" })
9
- });
6
+ const sessionTableRow = (row, schema) => {
7
+ const sessionRow = row.slice();
8
+ if (!schema.columns.some(({ name }) => name === "vuuMsg")) {
9
+ sessionRow.push("");
10
+ }
11
+ if (!schema.columns.some(({ name }) => name === "vuu_action")) {
12
+ sessionRow.push("");
13
+ }
14
+ return sessionRow;
15
+ };
16
+ const sessionTableSchema = (schema) => {
17
+ const columns = schema.columns.slice();
18
+ if (!columns.some(({ name }) => name === "vuuMsg")) {
19
+ columns.push({ name: "vuuMsg", serverDataType: "string" });
20
+ }
21
+ if (!columns.some(({ name }) => name === "vuu_action")) {
22
+ columns.push({ name: "vuu_action", serverDataType: "string" });
23
+ }
24
+ return { ...schema, columns };
25
+ };
10
26
 
27
+ exports.sessionTableRow = sessionTableRow;
11
28
  exports.sessionTableSchema = sessionTableSchema;
12
29
  //# sourceMappingURL=session-table-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-table-utils.js","sources":["../../../packages/vuu-data-test/src/session-table-utils.ts"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { TableSchema } from \"@vuu-ui/vuu-data-types\";\n\nconst { KEY } = metadataKeys;\n\nexport const createSessionTableFromSelectedRows = (\n table: Table,\n selectedRowIds: string[],\n) => {\n const sessionData: Array<bigint | VuuRowDataItemType>[] = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < table.data.length; j++) {\n if (table.data[j][KEY] === selectedRowIds[i]) {\n sessionData.push(table.data[j]);\n }\n }\n }\n\n return new Table(\n table.schema,\n sessionData,\n buildDataColumnMapFromSchema(table.schema),\n );\n};\n\nexport const sessionTableSchema = (schema: TableSchema): TableSchema => ({\n ...schema,\n columns: schema.columns.concat({ name: \"vuuMsg\", serverDataType: \"string\" }),\n});\n"],"names":[],"mappings":";;;;;AA2Ba,MAAA,kBAAA,GAAqB,CAAC,MAAsC,MAAA;AAAA,EACvE,GAAG,MAAA;AAAA,EACH,OAAA,EAAS,OAAO,OAAQ,CAAA,MAAA,CAAO,EAAE,IAAM,EAAA,QAAA,EAAU,cAAgB,EAAA,QAAA,EAAU;AAC7E,CAAA;;;;"}
1
+ {"version":3,"file":"session-table-utils.js","sources":["../../../packages/vuu-data-test/src/session-table-utils.ts"],"sourcesContent":["import type { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport type { TableSchema } from \"@vuu-ui/vuu-data-types\";\n\nconst { KEY } = metadataKeys;\n\nexport const sessionTableRow = (\n row: Array<bigint | VuuRowDataItemType>,\n schema: TableSchema,\n) => {\n const sessionRow = row.slice();\n if (!schema.columns.some(({ name }) => name === \"vuuMsg\")) {\n sessionRow.push(\"\");\n }\n if (!schema.columns.some(({ name }) => name === \"vuu_action\")) {\n sessionRow.push(\"\");\n }\n return sessionRow;\n};\n\nexport const createSessionTableFromSelectedRows = (\n table: Table,\n selectedRowIds: string[],\n) => {\n const sessionData: Array<bigint | VuuRowDataItemType>[] = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < table.data.length; j++) {\n if (table.data[j][KEY] === selectedRowIds[i]) {\n sessionData.push(sessionTableRow(table.data[j], table.schema));\n }\n }\n }\n\n const schema = sessionTableSchema(table.schema);\n return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));\n};\n\nexport const sessionTableSchema = (schema: TableSchema): TableSchema => {\n const columns = schema.columns.slice();\n if (!columns.some(({ name }) => name === \"vuuMsg\")) {\n columns.push({ name: \"vuuMsg\", serverDataType: \"string\" });\n }\n if (!columns.some(({ name }) => name === \"vuu_action\")) {\n columns.push({ name: \"vuu_action\", serverDataType: \"string\" });\n }\n return { ...schema, columns };\n};\n"],"names":[],"mappings":";;;;;AAOa,MAAA,eAAA,GAAkB,CAC7B,GAAA,EACA,MACG,KAAA;AACH,EAAM,MAAA,UAAA,GAAa,IAAI,KAAM,EAAA;AAC7B,EAAI,IAAA,CAAC,MAAO,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,EAAE,IAAK,EAAA,KAAM,IAAS,KAAA,QAAQ,CAAG,EAAA;AACzD,IAAA,UAAA,CAAW,KAAK,EAAE,CAAA;AAAA;AAEpB,EAAI,IAAA,CAAC,MAAO,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,EAAE,IAAK,EAAA,KAAM,IAAS,KAAA,YAAY,CAAG,EAAA;AAC7D,IAAA,UAAA,CAAW,KAAK,EAAE,CAAA;AAAA;AAEpB,EAAO,OAAA,UAAA;AACT;AAmBa,MAAA,kBAAA,GAAqB,CAAC,MAAqC,KAAA;AACtE,EAAM,MAAA,OAAA,GAAU,MAAO,CAAA,OAAA,CAAQ,KAAM,EAAA;AACrC,EAAI,IAAA,CAAC,QAAQ,IAAK,CAAA,CAAC,EAAE,IAAK,EAAA,KAAM,IAAS,KAAA,QAAQ,CAAG,EAAA;AAClD,IAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,UAAU,CAAA;AAAA;AAE3D,EAAI,IAAA,CAAC,QAAQ,IAAK,CAAA,CAAC,EAAE,IAAK,EAAA,KAAM,IAAS,KAAA,YAAY,CAAG,EAAA;AACtD,IAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,UAAU,CAAA;AAAA;AAE/D,EAAO,OAAA,EAAE,GAAG,MAAA,EAAQ,OAAQ,EAAA;AAC9B;;;;;"}
@@ -5,6 +5,7 @@ var Table = require('../Table.js');
5
5
  var vuuRowGenerator = require('../vuu-row-generator.js');
6
6
  var TableContainer = require('../core/table/TableContainer.js');
7
7
  var dataUtils = require('../data-utils.js');
8
+ var vuuUtils = require('@vuu-ui/vuu-utils');
8
9
 
9
10
  var __typeError = (msg) => {
10
11
  throw TypeError(msg);
@@ -22,6 +23,15 @@ const generateRows = (tableSchema, count) => {
22
23
  const columnGenerator = RowGenerator(tableSchema.columns.map((c) => c.name));
23
24
  return new Array(count).fill(1).map((_, i) => columnGenerator(i));
24
25
  };
26
+ const testEditColumns = [
27
+ { name: "id", serverDataType: "string" },
28
+ { name: "description", serverDataType: "string" },
29
+ { name: "quantity", serverDataType: "int" },
30
+ { name: "price", serverDataType: "double" },
31
+ { name: "enabled", serverDataType: "boolean" },
32
+ // { name: "tradeDate", serverDataType: "epochtimestamp" },
33
+ { name: "externalId", serverDataType: "long" }
34
+ ];
25
35
  class TestModule extends VuuModule.VuuModule {
26
36
  constructor() {
27
37
  super("TEST");
@@ -50,7 +60,7 @@ class TestModule extends VuuModule.VuuModule {
50
60
  table: { module: "TEST", table: "TestDates" }
51
61
  },
52
62
  TwoHundredColumns: {
53
- columns: vuuRowGenerator.DefaultColumnGenerator(200).map((col) => ({
63
+ columns: vuuRowGenerator.DefaultColumnGenerator(200).map((col) => vuuUtils.toSchemaColumn({
54
64
  ...col,
55
65
  serverDataType: "string"
56
66
  })),
@@ -91,7 +101,7 @@ class TestModule extends VuuModule.VuuModule {
91
101
  table: { module: "TEST", table: "ChartTable" }
92
102
  },
93
103
  MaxScrollEndTable: {
94
- columns: vuuRowGenerator.DefaultColumnGenerator(6).map((col) => ({
104
+ columns: vuuRowGenerator.DefaultColumnGenerator(6).map((col) => vuuUtils.toSchemaColumn({
95
105
  ...col,
96
106
  serverDataType: "string"
97
107
  })),
@@ -101,6 +111,18 @@ class TestModule extends VuuModule.VuuModule {
101
111
  maxRangeWidth: 1e3
102
112
  },
103
113
  table: { module: "TEST", table: "MaxScrollEndTable" }
114
+ },
115
+ TestEditEmpty: {
116
+ columns: testEditColumns,
117
+ key: "id",
118
+ rangeLimits: DEFAULT_RANGE_LIMITS,
119
+ table: { module: "TEST", table: "TestEditEmpty" }
120
+ },
121
+ TestEdit: {
122
+ columns: testEditColumns,
123
+ key: "id",
124
+ rangeLimits: DEFAULT_RANGE_LIMITS,
125
+ table: { module: "TEST", table: "TestEdit" }
104
126
  }
105
127
  });
106
128
  __privateAdd(this, _tables, {
@@ -108,16 +130,16 @@ class TestModule extends VuuModule.VuuModule {
108
130
  __privateGet(this, _schemas).TestDates,
109
131
  // prettier-ignore
110
132
  [
111
- [1000000000000000001n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 1)],
112
- [1000000000000000002n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 2)],
113
- [1000000000000000003n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 3)],
114
- [1000000000000000004n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 4)],
115
- [1000000000000000005n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 5)],
116
- [1000000000000000006n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 6)],
117
- [1000000000000000007n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 7)],
118
- [1000000000000000008n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 8)],
119
- [1000000000000000009n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 9)],
120
- [1000000000000000010n, Date.now(), Date.now(), dataUtils.withNanoMs(Date.now(), 10)]
133
+ [1000000000000000001n, Date.now(), Date.now()],
134
+ [1000000000000000002n, Date.now(), Date.now()],
135
+ [1000000000000000003n, Date.now(), Date.now()],
136
+ [1000000000000000004n, Date.now(), Date.now()],
137
+ [1000000000000000005n, Date.now(), Date.now()],
138
+ [1000000000000000006n, Date.now(), Date.now()],
139
+ [1000000000000000007n, Date.now(), Date.now()],
140
+ [1000000000000000008n, Date.now(), Date.now()],
141
+ [1000000000000000009n, Date.now(), Date.now()],
142
+ [1000000000000000010n, Date.now(), Date.now()]
121
143
  ],
122
144
  Table.buildDataColumnMap(__privateGet(this, _schemas), "TestDates")
123
145
  ),
@@ -186,6 +208,23 @@ class TestModule extends VuuModule.VuuModule {
186
208
  __privateGet(this, _schemas).MaxScrollEndTable,
187
209
  generateRows(__privateGet(this, _schemas).MaxScrollEndTable, 1e3),
188
210
  Table.buildDataColumnMap(__privateGet(this, _schemas), "MaxScrollEndTable")
211
+ ),
212
+ TestEditEmpty: TableContainer.createTable(
213
+ __privateGet(this, _schemas).TestEditEmpty,
214
+ [],
215
+ Table.buildDataColumnMap(__privateGet(this, _schemas), "TestEditEmpty")
216
+ ),
217
+ TestEdit: TableContainer.createTable(
218
+ __privateGet(this, _schemas).TestEdit,
219
+ // prettier-ignore
220
+ [
221
+ ["TEST-001", "Alpha", 12, 101.25, true, Date.now(), dataUtils.withNanoMs(Date.now(), 1), 1000000000000000001n],
222
+ ["TEST-002", "Bravo", 24, 202.5, false, Date.now(), dataUtils.withNanoMs(Date.now(), 2), 1000000000000000002n],
223
+ ["TEST-003", "Charlie", 36, 303.75, true, Date.now(), dataUtils.withNanoMs(Date.now(), 3), 1000000000000000003n],
224
+ ["TEST-004", "Delta", 48, 405, true, Date.now(), dataUtils.withNanoMs(Date.now(), 4), 1000000000000000004n],
225
+ ["TEST-005", "Echo", 60, 506.25, false, Date.now(), dataUtils.withNanoMs(Date.now(), 5), 1000000000000000005n]
226
+ ],
227
+ Table.buildDataColumnMap(__privateGet(this, _schemas), "TestEdit")
189
228
  )
190
229
  });
191
230
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TestModule.js","sources":["../../../../packages/vuu-data-test/src/test/TestModule.ts"],"sourcesContent":["import { RpcMenuService, VuuModule } from \"../core/module/VuuModule\";\nimport { buildDataColumnMap, Table } from \"../Table\";\nimport {\n DefaultColumnGenerator,\n defaultGenerators,\n} from \"../vuu-row-generator\";\nimport tableContainer from \"../core/table/TableContainer\";\nimport { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { withNanoMs } from \"../data-utils\";\n\nconst DEFAULT_RANGE_LIMITS = {\n maxRangeEnd: 1_000_000,\n maxRangeWidth: 1_000,\n};\n\nexport type TestTableName =\n | \"TestDates\"\n | \"TwoHundredColumns\"\n | \"LinkParent\"\n | \"LinkChild\"\n | \"ChartTable\"\n | \"MaxScrollEndTable\";\n\nconst { RowGenerator } = defaultGenerators;\n\nconst generateRows = (tableSchema: TableSchema, count: number) => {\n const columnGenerator = RowGenerator(tableSchema.columns.map((c) => c.name));\n return new Array(count).fill(1).map((_, i) => columnGenerator(i));\n};\n\nclass TestModule extends VuuModule<TestTableName> {\n #schemas: Record<TestTableName, TableSchema> = {\n TestDates: {\n columns: [\n {\n name: \"id\",\n serverDataType: \"long\",\n },\n {\n name: \"tradeDate\",\n serverDataType: \"epochtimestamp\",\n },\n {\n name: \"settlementDate\",\n serverDataType: \"epochtimestamp\",\n },\n {\n name: \"nanoTimestamp\",\n serverDataType: \"epochtimestampnano\",\n },\n ],\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"TestDates\" },\n },\n TwoHundredColumns: {\n columns: DefaultColumnGenerator(200).map((col) => ({\n ...col,\n serverDataType: \"string\",\n })),\n key: \"column_1\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"TwoHundredColumns\" },\n },\n LinkParent: {\n columns: [\n { name: \"id\", serverDataType: \"string\" },\n { name: \"data\", serverDataType: \"string\" },\n ],\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"LinkParent\" },\n },\n\n LinkChild: {\n columns: [\n { name: \"id\", serverDataType: \"string\" },\n { name: \"parentId\", serverDataType: \"string\" },\n { name: \"data\", serverDataType: \"string\" },\n ],\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"LinkChild\" },\n },\n ChartTable: {\n columns: [\n { name: \"id\", serverDataType: \"string\" },\n { name: \"date\", serverDataType: \"string\" },\n { name: \"price\", serverDataType: \"double\" },\n { name: \"price_excluded\", serverDataType: \"boolean\" },\n { name: \"volume\", serverDataType: \"double\" },\n { name: \"volume_excluded\", serverDataType: \"boolean\" },\n ],\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"ChartTable\" },\n },\n MaxScrollEndTable: {\n columns: DefaultColumnGenerator(6).map((col) => ({\n ...col,\n serverDataType: \"string\",\n })),\n key: \"column_1\",\n rangeLimits: {\n maxRangeEnd: 500,\n maxRangeWidth: 1_000,\n },\n table: { module: \"TEST\", table: \"MaxScrollEndTable\" },\n },\n };\n\n #tables: Record<TestTableName, Table> = {\n TestDates: tableContainer.createTable(\n this.#schemas.TestDates,\n // prettier-ignore\n [\n [1000000000000000001n, Date.now(), Date.now(), withNanoMs(Date.now(), 1)],\n [1000000000000000002n, Date.now(), Date.now(), withNanoMs(Date.now(), 2)],\n [1000000000000000003n, Date.now(), Date.now(), withNanoMs(Date.now(), 3)],\n [1000000000000000004n, Date.now(), Date.now(), withNanoMs(Date.now(), 4)],\n [1000000000000000005n, Date.now(), Date.now(), withNanoMs(Date.now(), 5)],\n [1000000000000000006n, Date.now(), Date.now(), withNanoMs(Date.now(), 6)],\n [1000000000000000007n, Date.now(), Date.now(), withNanoMs(Date.now(), 7)],\n [1000000000000000008n, Date.now(), Date.now(), withNanoMs(Date.now(), 8)],\n [1000000000000000009n, Date.now(), Date.now(), withNanoMs(Date.now(), 9)],\n [1000000000000000010n, Date.now(), Date.now(), withNanoMs(Date.now(), 10)],\n ],\n buildDataColumnMap(this.#schemas, \"TestDates\"),\n ),\n TwoHundredColumns: tableContainer.createTable(\n this.#schemas.TwoHundredColumns,\n generateRows(this.#schemas.TwoHundredColumns, 100),\n buildDataColumnMap(this.#schemas, \"TwoHundredColumns\"),\n ),\n LinkParent: tableContainer.createTable(\n this.#schemas.LinkParent,\n [\n [\"1000000001\", \"data 1\"],\n [\"1000000002\", \"data 2\"],\n [\"1000000003\", \"data 2\"],\n ],\n buildDataColumnMap(this.#schemas, \"LinkParent\"),\n ),\n LinkChild: tableContainer.createTable(\n this.#schemas.LinkChild,\n [\n [\"200001\", \"1000000001\", \"child 1 (linked to 001)\"],\n [\"200002\", \"1000000001\", \"child 2 (linked to 001)\"],\n [\"200003\", \"1000000001\", \"child 3 (linked to 001)\"],\n [\"200004\", \"1000000001\", \"child 4 (linked to 001)\"],\n [\"200005\", \"1000000001\", \"child 5 (linked to 001)\"],\n [\"200006\", \"1000000001\", \"child 6 (linked to 001)\"],\n [\"200007\", \"1000000001\", \"child 7 (linked to 001)\"],\n [\"200008\", \"1000000001\", \"child 8 (linked to 001)\"],\n [\"200009\", \"1000000002\", \"child 9 (linked to 002)\"],\n [\"200010\", \"1000000003\", \"child 10 (linked to 003)\"],\n ],\n buildDataColumnMap(this.#schemas, \"LinkChild\"),\n ),\n ChartTable: tableContainer.createTable(\n this.#schemas.ChartTable,\n [\n [\"001\", \"2026-04-02\", 100, false, 1000, false],\n [\"002\", \"2026-04-03\", 101, false, 999, false],\n [\"003\", \"2026-04-04\", 102, false, 1500, false],\n [\"004\", \"2026-04-05\", 103, false, 1300, false],\n [\"005\", \"2026-04-06\", 104, false, 1002, false],\n [\"006\", \"2026-04-07\", 105, false, 1000, true],\n [\"007\", \"2026-04-08\", 106, false, 1004, false],\n [\"008\", \"2026-04-09\", 107, false, 1040, false],\n [\"009\", \"2026-04-10\", 108, false, 1080, false],\n [\"010\", \"2026-04-11\", 109, false, 1100, false],\n [\"011\", \"2026-04-12\", 109, false, 1102, false],\n [\"012\", \"2026-04-13\", 114, false, 1105, false],\n [\"013\", \"2026-04-14\", 118, false, 1106, false],\n [\"014\", \"2026-04-15\", 125, false, 1107, false],\n [\"015\", \"2026-04-16\", 136, false, 1104, false],\n [\"016\", \"2026-04-17\", 170, false, 1103, false],\n [\"017\", \"2026-04-18\", 145, false, 1100, false],\n [\"018\", \"2026-04-19\", 147, false, 1100, false],\n [\"019\", \"2026-04-20\", 140, false, 1100, false],\n [\"020\", \"2026-04-21\", 138, false, 1100, false],\n [\"021\", \"2026-04-22\", 138, false, 1100, false],\n [\"022\", \"2026-04-23\", 138, false, 1100, false],\n [\"023\", \"2026-04-24\", 120, false, 1200, false],\n [\"024\", \"2026-04-25\", 120, false, 1200, false],\n [\"025\", \"2026-04-26\", 120, false, 1350, false],\n ],\n buildDataColumnMap(this.#schemas, \"ChartTable\"),\n ),\n MaxScrollEndTable: tableContainer.createTable(\n this.#schemas.MaxScrollEndTable,\n generateRows(this.#schemas.MaxScrollEndTable, 1_000),\n buildDataColumnMap(this.#schemas, \"MaxScrollEndTable\"),\n ),\n };\n constructor() {\n super(\"TEST\");\n }\n\n get menus() {\n return undefined;\n }\n get services() {\n return undefined;\n }\n\n get menuServices():\n | Record<TestTableName, RpcMenuService[] | undefined>\n | undefined {\n return undefined;\n }\n\n get schemas() {\n return this.#schemas;\n }\n\n get tables() {\n return this.#tables;\n }\n get visualLinks() {\n return undefined;\n }\n}\n\nexport const testModule = new TestModule();\n"],"names":["defaultGenerators","VuuModule","DefaultColumnGenerator","tableContainer","withNanoMs","buildDataColumnMap"],"mappings":"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"}
1
+ {"version":3,"file":"TestModule.js","sources":["../../../../packages/vuu-data-test/src/test/TestModule.ts"],"sourcesContent":["import { type RpcMenuService, VuuModule } from \"../core/module/VuuModule\";\nimport { buildDataColumnMap, type Table } from \"../Table\";\nimport {\n DefaultColumnGenerator,\n defaultGenerators,\n} from \"../vuu-row-generator\";\nimport tableContainer from \"../core/table/TableContainer\";\nimport type { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { withNanoMs } from \"../data-utils\";\nimport { toSchemaColumn } from \"@vuu-ui/vuu-utils\";\n\nconst DEFAULT_RANGE_LIMITS = {\n maxRangeEnd: 1_000_000,\n maxRangeWidth: 1_000,\n};\n\nexport type TestTableName =\n | \"TestDates\"\n | \"TwoHundredColumns\"\n | \"LinkParent\"\n | \"LinkChild\"\n | \"ChartTable\"\n | \"MaxScrollEndTable\"\n | \"TestEditEmpty\"\n | \"TestEdit\";\n\nconst { RowGenerator } = defaultGenerators;\n\nconst generateRows = (tableSchema: TableSchema, count: number) => {\n const columnGenerator = RowGenerator(tableSchema.columns.map((c) => c.name));\n return new Array(count).fill(1).map((_, i) => columnGenerator(i));\n};\n\nconst testEditColumns: TableSchema[\"columns\"] = [\n { name: \"id\", serverDataType: \"string\" },\n { name: \"description\", serverDataType: \"string\" },\n { name: \"quantity\", serverDataType: \"int\" },\n { name: \"price\", serverDataType: \"double\" },\n { name: \"enabled\", serverDataType: \"boolean\" },\n // { name: \"tradeDate\", serverDataType: \"epochtimestamp\" },\n { name: \"externalId\", serverDataType: \"long\" },\n];\n\nclass TestModule extends VuuModule<TestTableName> {\n #schemas: Record<TestTableName, TableSchema> = {\n TestDates: {\n columns: [\n {\n name: \"id\",\n serverDataType: \"long\",\n },\n {\n name: \"tradeDate\",\n serverDataType: \"epochtimestamp\",\n },\n {\n name: \"settlementDate\",\n serverDataType: \"epochtimestamp\",\n },\n {\n name: \"nanoTimestamp\",\n serverDataType: \"epochtimestampnano\",\n },\n ],\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"TestDates\" },\n },\n TwoHundredColumns: {\n columns: DefaultColumnGenerator(200).map((col) => toSchemaColumn({\n ...col,\n serverDataType: \"string\",\n })),\n key: \"column_1\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"TwoHundredColumns\" },\n },\n LinkParent: {\n columns: [\n { name: \"id\", serverDataType: \"string\" },\n { name: \"data\", serverDataType: \"string\" },\n ],\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"LinkParent\" },\n },\n\n LinkChild: {\n columns: [\n { name: \"id\", serverDataType: \"string\" },\n { name: \"parentId\", serverDataType: \"string\" },\n { name: \"data\", serverDataType: \"string\" },\n ],\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"LinkChild\" },\n },\n ChartTable: {\n columns: [\n { name: \"id\", serverDataType: \"string\" },\n { name: \"date\", serverDataType: \"string\" },\n { name: \"price\", serverDataType: \"double\" },\n { name: \"price_excluded\", serverDataType: \"boolean\" },\n { name: \"volume\", serverDataType: \"double\" },\n { name: \"volume_excluded\", serverDataType: \"boolean\" },\n ],\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"ChartTable\" },\n },\n MaxScrollEndTable: {\n columns: DefaultColumnGenerator(6).map((col) => toSchemaColumn({\n ...col,\n serverDataType: \"string\",\n })),\n key: \"column_1\",\n rangeLimits: {\n maxRangeEnd: 500,\n maxRangeWidth: 1_000,\n },\n table: { module: \"TEST\", table: \"MaxScrollEndTable\" },\n },\n TestEditEmpty: {\n columns: testEditColumns,\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"TestEditEmpty\" },\n },\n TestEdit: {\n columns: testEditColumns,\n key: \"id\",\n rangeLimits: DEFAULT_RANGE_LIMITS,\n table: { module: \"TEST\", table: \"TestEdit\" },\n },\n };\n\n #tables: Record<TestTableName, Table> = {\n TestDates: tableContainer.createTable(\n this.#schemas.TestDates,\n // prettier-ignore\n [\n [1000000000000000001n, Date.now(), Date.now(),],\n [1000000000000000002n, Date.now(), Date.now(),],\n [1000000000000000003n, Date.now(), Date.now(),],\n [1000000000000000004n, Date.now(), Date.now(),],\n [1000000000000000005n, Date.now(), Date.now(),],\n [1000000000000000006n, Date.now(), Date.now(),],\n [1000000000000000007n, Date.now(), Date.now(),],\n [1000000000000000008n, Date.now(), Date.now(),],\n [1000000000000000009n, Date.now(), Date.now(),],\n [1000000000000000010n, Date.now(), Date.now(),],\n ],\n buildDataColumnMap(this.#schemas, \"TestDates\"),\n ),\n TwoHundredColumns: tableContainer.createTable(\n this.#schemas.TwoHundredColumns,\n generateRows(this.#schemas.TwoHundredColumns, 100),\n buildDataColumnMap(this.#schemas, \"TwoHundredColumns\"),\n ),\n LinkParent: tableContainer.createTable(\n this.#schemas.LinkParent,\n [\n [\"1000000001\", \"data 1\"],\n [\"1000000002\", \"data 2\"],\n [\"1000000003\", \"data 2\"],\n ],\n buildDataColumnMap(this.#schemas, \"LinkParent\"),\n ),\n LinkChild: tableContainer.createTable(\n this.#schemas.LinkChild,\n [\n [\"200001\", \"1000000001\", \"child 1 (linked to 001)\"],\n [\"200002\", \"1000000001\", \"child 2 (linked to 001)\"],\n [\"200003\", \"1000000001\", \"child 3 (linked to 001)\"],\n [\"200004\", \"1000000001\", \"child 4 (linked to 001)\"],\n [\"200005\", \"1000000001\", \"child 5 (linked to 001)\"],\n [\"200006\", \"1000000001\", \"child 6 (linked to 001)\"],\n [\"200007\", \"1000000001\", \"child 7 (linked to 001)\"],\n [\"200008\", \"1000000001\", \"child 8 (linked to 001)\"],\n [\"200009\", \"1000000002\", \"child 9 (linked to 002)\"],\n [\"200010\", \"1000000003\", \"child 10 (linked to 003)\"],\n ],\n buildDataColumnMap(this.#schemas, \"LinkChild\"),\n ),\n ChartTable: tableContainer.createTable(\n this.#schemas.ChartTable,\n [\n [\"001\", \"2026-04-02\", 100, false, 1000, false],\n [\"002\", \"2026-04-03\", 101, false, 999, false],\n [\"003\", \"2026-04-04\", 102, false, 1500, false],\n [\"004\", \"2026-04-05\", 103, false, 1300, false],\n [\"005\", \"2026-04-06\", 104, false, 1002, false],\n [\"006\", \"2026-04-07\", 105, false, 1000, true],\n [\"007\", \"2026-04-08\", 106, false, 1004, false],\n [\"008\", \"2026-04-09\", 107, false, 1040, false],\n [\"009\", \"2026-04-10\", 108, false, 1080, false],\n [\"010\", \"2026-04-11\", 109, false, 1100, false],\n [\"011\", \"2026-04-12\", 109, false, 1102, false],\n [\"012\", \"2026-04-13\", 114, false, 1105, false],\n [\"013\", \"2026-04-14\", 118, false, 1106, false],\n [\"014\", \"2026-04-15\", 125, false, 1107, false],\n [\"015\", \"2026-04-16\", 136, false, 1104, false],\n [\"016\", \"2026-04-17\", 170, false, 1103, false],\n [\"017\", \"2026-04-18\", 145, false, 1100, false],\n [\"018\", \"2026-04-19\", 147, false, 1100, false],\n [\"019\", \"2026-04-20\", 140, false, 1100, false],\n [\"020\", \"2026-04-21\", 138, false, 1100, false],\n [\"021\", \"2026-04-22\", 138, false, 1100, false],\n [\"022\", \"2026-04-23\", 138, false, 1100, false],\n [\"023\", \"2026-04-24\", 120, false, 1200, false],\n [\"024\", \"2026-04-25\", 120, false, 1200, false],\n [\"025\", \"2026-04-26\", 120, false, 1350, false],\n ],\n buildDataColumnMap(this.#schemas, \"ChartTable\"),\n ),\n MaxScrollEndTable: tableContainer.createTable(\n this.#schemas.MaxScrollEndTable,\n generateRows(this.#schemas.MaxScrollEndTable, 1_000),\n buildDataColumnMap(this.#schemas, \"MaxScrollEndTable\"),\n ),\n TestEditEmpty: tableContainer.createTable(\n this.#schemas.TestEditEmpty,\n [],\n buildDataColumnMap(this.#schemas, \"TestEditEmpty\"),\n ),\n TestEdit: tableContainer.createTable(\n this.#schemas.TestEdit,\n // prettier-ignore\n [\n [\"TEST-001\", \"Alpha\", 12, 101.25, true, Date.now(), withNanoMs(Date.now(), 1), 1000000000000000001n],\n [\"TEST-002\", \"Bravo\", 24, 202.5, false, Date.now(), withNanoMs(Date.now(), 2), 1000000000000000002n],\n [\"TEST-003\", \"Charlie\", 36, 303.75, true, Date.now(), withNanoMs(Date.now(), 3), 1000000000000000003n],\n [\"TEST-004\", \"Delta\", 48, 405, true, Date.now(), withNanoMs(Date.now(), 4), 1000000000000000004n],\n [\"TEST-005\", \"Echo\", 60, 506.25, false, Date.now(), withNanoMs(Date.now(), 5), 1000000000000000005n],\n ],\n buildDataColumnMap(this.#schemas, \"TestEdit\"),\n ),\n };\n constructor() {\n super(\"TEST\");\n }\n\n get menus() {\n return undefined;\n }\n get services() {\n return undefined;\n }\n\n get menuServices():\n | Record<TestTableName, RpcMenuService[] | undefined>\n | undefined {\n return undefined;\n }\n\n get schemas() {\n return this.#schemas;\n }\n\n get tables() {\n return this.#tables;\n }\n get visualLinks() {\n return undefined;\n }\n}\n\nexport const testModule = new TestModule();\n"],"names":["defaultGenerators","VuuModule","DefaultColumnGenerator","toSchemaColumn","tableContainer","buildDataColumnMap","withNanoMs"],"mappings":"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"}