@vuu-ui/vuu-data-test 0.11.2 → 0.11.3
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.map +1 -1
- package/cjs/VuuModule.js +1 -0
- package/cjs/VuuModule.js.map +1 -1
- package/cjs/basket/basket-module.js +1 -0
- package/cjs/basket/basket-module.js.map +1 -1
- package/esm/TickingArrayDataSource.js.map +1 -1
- package/esm/VuuModule.js +1 -0
- package/esm/VuuModule.js.map +1 -1
- package/esm/basket/basket-module.js +1 -0
- package/esm/basket/basket-module.js.map +1 -1
- package/package.json +6 -6
- package/types/TickingArrayDataSource.d.ts +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TickingArrayDataSource.js","sources":["../src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceVisualLinkCreatedMessage,\n SelectionItem,\n SubscribeCallback,\n SubscribeProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuRpcMenuRequest,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcRequest,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isViewportRpcRequest,\n isVuuMenuRpcRequest,\n metadataKeys,\n} from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { RpcService, SessionTableMap } from \"./VuuModule\";\n\nconst { KEY } = metadataKeys;\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 menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinkService?: VisualLinkHandler;\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 #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n\n constructor({\n data,\n getVisualLinks,\n menuRpcServices,\n rpcServices,\n sessionTables,\n table,\n menu,\n visualLink,\n visualLinkService,\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 });\n this._menu = menu;\n\n this.#menuRpcServices = menuRpcServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#sessionTables = sessionTables;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRow);\n }\n }\n\n async subscribe(subscribeProps: SubscribeProps, callback: SubscribeCallback) {\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 range(range: VuuRange) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\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 private getSelectedRowIds() {\n return this.selectedRows.reduce<string[]>(\n (rowIds: string[], selection: SelectionItem) => {\n if (Array.isArray(selection)) {\n for (let i = selection[0]; i <= selection[1]; i++) {\n const row = this.data[i];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n } else {\n const row = this.data[selection];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n return rowIds;\n },\n [],\n );\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n this.#table?.update(rowKey, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends VuuRpcResponse = VuuRpcResponse>(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<T> {\n if (isViewportRpcRequest(rpcRequest)) {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService && isViewportRpcRequest(rpcRequest)) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n return rpcService.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n throw Error(`no implementation for PRC service ${rpcRequest.type}`);\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\"> & {\n namedParams?: RpcNamedParams;\n },\n ): Promise<VuuRpcResponse> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as VuuRpcMenuRequest).rpcName,\n );\n\n if (isVuuMenuRpcRequest(rpcRequest)) {\n return rpcService?.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<VuuRpcMenuResponse>;\n }\n\n return super.menuRpcCall(rpcRequest);\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n return makeSuggestions(this.#table, column, pattern);\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"],"names":["metadataKeys","ArrayDataSource","isViewportRpcRequest","isVuuMenuRpcRequest","makeSuggestions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TickingArrayDataSource.js","sources":["../src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceVisualLinkCreatedMessage,\n SelectionItem,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuRpcMenuRequest,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcRequest,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isViewportRpcRequest,\n isVuuMenuRpcRequest,\n metadataKeys,\n Range,\n} from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { RpcService, SessionTableMap } from \"./VuuModule\";\n\nconst { KEY } = metadataKeys;\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 menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinkService?: VisualLinkHandler;\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 #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n\n constructor({\n data,\n getVisualLinks,\n menuRpcServices,\n rpcServices,\n sessionTables,\n table,\n menu,\n visualLink,\n visualLinkService,\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 });\n this._menu = menu;\n\n this.#menuRpcServices = menuRpcServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#sessionTables = sessionTables;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRow);\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 range(range: Range) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\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 private getSelectedRowIds() {\n return this.selectedRows.reduce<string[]>(\n (rowIds: string[], selection: SelectionItem) => {\n if (Array.isArray(selection)) {\n for (let i = selection[0]; i <= selection[1]; i++) {\n const row = this.data[i];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n } else {\n const row = this.data[selection];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n return rowIds;\n },\n [],\n );\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n this.#table?.update(rowKey, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends VuuRpcResponse = VuuRpcResponse>(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<T> {\n if (isViewportRpcRequest(rpcRequest)) {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService && isViewportRpcRequest(rpcRequest)) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n return rpcService.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n throw Error(`no implementation for PRC service ${rpcRequest.type}`);\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\"> & {\n namedParams?: RpcNamedParams;\n },\n ): Promise<VuuRpcResponse> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as VuuRpcMenuRequest).rpcName,\n );\n\n if (isVuuMenuRpcRequest(rpcRequest)) {\n return rpcService?.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<VuuRpcMenuResponse>;\n }\n\n return super.menuRpcCall(rpcRequest);\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n return makeSuggestions(this.#table, column, pattern);\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"],"names":["metadataKeys","ArrayDataSource","isViewportRpcRequest","isVuuMenuRpcRequest","makeSuggestions"],"mappings":"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"}
|
package/cjs/VuuModule.js
CHANGED
package/cjs/VuuModule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VuuModule.js","sources":["../src/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceVisualLinkCreatedMessage,\n OpenDialogActionWithSchema,\n SuggestionFetcher,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n VuuRpcViewportRequest,\n TypeaheadParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuTable,\n VuuLink,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcViewportResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isViewportRpcRequest, uuid } from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { RuntimeVisualLink } from \"./RuntimeVisualLink\";\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (tableName: T) => DataSource;\n typeaheadHook: () => SuggestionFetcher;\n}\n\nexport interface VuuModuleConstructorProps<T extends string = string> {\n menus?: Record<T, VuuMenu | undefined>;\n name: string;\n schemas: Record<T, Readonly<TableSchema>>;\n services?: Record<T, RpcService[] | undefined>;\n tables: Record<T, Table>;\n vuuLinks?: Record<T, VuuLink[] | undefined>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type RpcServiceRequestWithParams = VuuRpcViewportRequest & {\n namedParams: RpcNamedParams;\n};\nexport type RpcServiceRequest =\n | RpcServiceRequestWithParams\n | VuuRpcViewportRequest\n | VuuRpcMenuRequest;\n\nexport const withParams = (\n rpcRequest: VuuRpcRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport const withNamedParams = (\n rpcRequest: RpcServiceRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcRequest & {\n namedParams?: RpcNamedParams;\n },\n) => Promise<VuuRpcResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n};\nexport class VuuModule<T extends string = string> implements IVuuModule<T> {\n #menus: Record<T, VuuMenu | undefined> | undefined;\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #schemas: Record<T, Readonly<TableSchema>>;\n #sessionTableMap: SessionTableMap = {};\n #tables: Record<T, Table>;\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #visualLinks: Record<T, VuuLink[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor({\n menus,\n name,\n schemas,\n services,\n tables,\n vuuLinks: visualLinks,\n }: VuuModuleConstructorProps<T>) {\n this.#menus = menus;\n this.#name = name;\n this.#schemas = schemas;\n this.#tableServices = services;\n this.#tables = tables;\n this.#visualLinks = visualLinks;\n }\n\n private unregisterViewport = (viewportId: string) => {\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n } else {\n const links = subscriptions[0].dataSource.links;\n if (links) {\n for (let i = 0; i < links?.length; i++) {\n if (links[i].parentClientVpId === viewportId) {\n links.splice(i);\n }\n }\n }\n subscriptions[0].dataSource.links = links;\n }\n }\n };\n\n getSubscribedDataSource(vpId: string): DataSource {\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 createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const 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 const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.#tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n 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 sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n });\n\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.#tableServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n get typeaheadHook() {\n return () => this.suggestionFetcher;\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected get tables() {\n return this.#tables;\n }\n\n private getSessionTable(sessionTableName: string) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\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 suggestionFetcher: SuggestionFetcher = ([\n vuuTable,\n column,\n pattern,\n ]: TypeaheadParams) => {\n const table = this.#tables[vuuTable.table as T];\n if (table) {\n return makeSuggestions(table, column, pattern);\n } else {\n throw Error(\n `${this.#name} suggestionFetcher, unknown table ${vuuTable.module} ${\n vuuTable.table\n }`,\n );\n }\n };\n\n private openBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { namedParams, vpId } = rpcRequest;\n const selectedRowIds = namedParams.selectedRowIds as string[];\n const table = namedParams.table as VuuTable;\n\n if (selectedRowIds && table) {\n const dataTable = this.#tables[table.table as T];\n if (dataTable) {\n const sessionTable = this.createSessionTableFromSelectedRows(\n dataTable,\n selectedRowIds,\n );\n const sessionTableName = `session-${uuid()}`;\n this.#sessionTableMap[sessionTableName] = sessionTable;\n\n return {\n action: {\n renderComponent: \"grid\",\n table: {\n module: table.module,\n table: sessionTableName,\n },\n tableSchema: dataTable.schema,\n type: \"OPEN_DIALOG_ACTION\",\n } as OpenDialogActionWithSchema,\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n } else {\n return {\n action: { type: \"NO_ACTION\" },\n clientViewportId: \"na\",\n error: \"No Table found\",\n rpcName: \"VP_BULK_EDIT_REJECT\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n }\n }\n throw Error(\"openBulkEdits expects Table and selectedRowIds\");\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n delete this.#sessionTableMap[vpId];\n return {\n action: { type: \"VP_RPC_SUCCESS\" },\n namedParams: {},\n params: [],\n type: \"VIEW_PORT_RPC_REPONSE\",\n vpId,\n } as VuuRpcViewportResponse;\n } else {\n throw Error(\"endEditSession invalid request\");\n }\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.namedParams;\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 action: {\n type: \"NO_ACTION\",\n },\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n throw Error(\"applyBulkEdits expects column and value as namedParams\");\n };\n\n // Save session table data to main table\n private saveBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n const { table } = sessionTable.schema.table;\n const baseTable = this.#tables[table as T];\n if (baseTable) {\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n baseTable.updateRow(newRow);\n }\n\n return {\n action: {\n type: \"VP_RPC_SUCCESS\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as unknown as VuuRpcViewportResponse;\n }\n }\n throw Error(\"saveBulkEdits base table not found\");\n };\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n selectedRowIds: string[],\n ) {\n const keyIndex = map[schema.key];\n const sessionData: 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 return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));\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: \"VP_BULK_EDIT_BEGIN_RPC\",\n service: this.openBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n service: this.saveBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_END_RPC\",\n service: this.endEditSession,\n },\n ];\n}\n"],"names":["RuntimeVisualLink","tableName","TickingArrayDataSource","makeSuggestions","uuid","isViewportRpcRequest","Table","buildDataColumnMapFromSchema"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VuuModule.js","sources":["../src/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceVisualLinkCreatedMessage,\n OpenDialogActionWithSchema,\n SuggestionFetcher,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n VuuRpcViewportRequest,\n TypeaheadParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuTable,\n VuuLink,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcViewportResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isViewportRpcRequest, uuid } from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { RuntimeVisualLink } from \"./RuntimeVisualLink\";\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (tableName: T) => DataSource;\n typeaheadHook: () => SuggestionFetcher;\n}\n\nexport interface VuuModuleConstructorProps<T extends string = string> {\n menus?: Record<T, VuuMenu | undefined>;\n name: string;\n schemas: Record<T, Readonly<TableSchema>>;\n services?: Record<T, RpcService[] | undefined>;\n tables: Record<T, Table>;\n vuuLinks?: Record<T, VuuLink[] | undefined>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type RpcServiceRequestWithParams = VuuRpcViewportRequest & {\n namedParams: RpcNamedParams;\n};\nexport type RpcServiceRequest =\n | RpcServiceRequestWithParams\n | VuuRpcViewportRequest\n | VuuRpcMenuRequest;\n\nexport const withParams = (\n rpcRequest: VuuRpcRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport const withNamedParams = (\n rpcRequest: RpcServiceRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcRequest & {\n namedParams?: RpcNamedParams;\n },\n) => Promise<VuuRpcResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n};\nexport class VuuModule<T extends string = string> implements IVuuModule<T> {\n #menus: Record<T, VuuMenu | undefined> | undefined;\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #schemas: Record<T, Readonly<TableSchema>>;\n #sessionTableMap: SessionTableMap = {};\n #tables: Record<T, Table>;\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #visualLinks: Record<T, VuuLink[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor({\n menus,\n name,\n schemas,\n services,\n tables,\n vuuLinks: visualLinks,\n }: VuuModuleConstructorProps<T>) {\n this.#menus = menus;\n this.#name = name;\n this.#schemas = schemas;\n this.#tableServices = services;\n this.#tables = tables;\n this.#visualLinks = visualLinks;\n }\n\n private unregisterViewport = (viewportId: string) => {\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n } else {\n const links = subscriptions[0].dataSource.links;\n if (links) {\n for (let i = 0; i < links?.length; i++) {\n if (links[i].parentClientVpId === viewportId) {\n links.splice(i);\n }\n }\n }\n subscriptions[0].dataSource.links = links;\n }\n }\n };\n\n getSubscribedDataSource(vpId: string): DataSource {\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 createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const 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 const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.#tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n 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 sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n });\n\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.#tableServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n get typeaheadHook() {\n return () => this.suggestionFetcher;\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected get tables() {\n return this.#tables;\n }\n\n private getSessionTable(sessionTableName: string) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\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 suggestionFetcher: SuggestionFetcher = ([\n vuuTable,\n column,\n pattern,\n ]: TypeaheadParams) => {\n const table = this.#tables[vuuTable.table as T];\n if (table) {\n return makeSuggestions(table, column, pattern);\n } else {\n throw Error(\n `${this.#name} suggestionFetcher, unknown table ${vuuTable.module} ${\n vuuTable.table\n }`,\n );\n }\n };\n\n private openBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { namedParams, vpId } = rpcRequest;\n const selectedRowIds = namedParams.selectedRowIds as string[];\n const table = namedParams.table as VuuTable;\n\n if (selectedRowIds && table) {\n const dataTable = this.#tables[table.table as T];\n if (dataTable) {\n const sessionTable = this.createSessionTableFromSelectedRows(\n dataTable,\n selectedRowIds,\n );\n const sessionTableName = `session-${uuid()}`;\n this.#sessionTableMap[sessionTableName] = sessionTable;\n\n return {\n action: {\n renderComponent: \"grid\",\n table: {\n module: table.module,\n table: sessionTableName,\n },\n tableSchema: dataTable.schema,\n type: \"OPEN_DIALOG_ACTION\",\n } as OpenDialogActionWithSchema,\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n } else {\n return {\n action: { type: \"NO_ACTION\" },\n clientViewportId: \"na\",\n error: \"No Table found\",\n rpcName: \"VP_BULK_EDIT_REJECT\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n }\n }\n throw Error(\"openBulkEdits expects Table and selectedRowIds\");\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n delete this.#sessionTableMap[vpId];\n return {\n action: { type: \"VP_RPC_SUCCESS\" },\n method: \"???\",\n namedParams: {},\n params: [],\n type: \"VIEW_PORT_RPC_REPONSE\",\n vpId,\n } as VuuRpcViewportResponse;\n } else {\n throw Error(\"endEditSession invalid request\");\n }\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.namedParams;\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 action: {\n type: \"NO_ACTION\",\n },\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n throw Error(\"applyBulkEdits expects column and value as namedParams\");\n };\n\n // Save session table data to main table\n private saveBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n const { table } = sessionTable.schema.table;\n const baseTable = this.#tables[table as T];\n if (baseTable) {\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n baseTable.updateRow(newRow);\n }\n\n return {\n action: {\n type: \"VP_RPC_SUCCESS\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as unknown as VuuRpcViewportResponse;\n }\n }\n throw Error(\"saveBulkEdits base table not found\");\n };\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n selectedRowIds: string[],\n ) {\n const keyIndex = map[schema.key];\n const sessionData: 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 return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));\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: \"VP_BULK_EDIT_BEGIN_RPC\",\n service: this.openBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n service: this.saveBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_END_RPC\",\n service: this.endEditSession,\n },\n ];\n}\n"],"names":["RuntimeVisualLink","tableName","TickingArrayDataSource","makeSuggestions","uuid","isViewportRpcRequest","Table","buildDataColumnMapFromSchema"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAA,MAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,eAAA;AAuDa,MAAA,UAAA,GAAa,CACxB,UAAA,KAC8C,aAAiB,IAAA;AAEpD,MAAA,eAAA,GAAkB,CAC7B,UAAA,KAC8C,aAAiB,IAAA;AAiB1D,MAAM,SAA8D,CAAA;AAAA,EAWzE,WAAY,CAAA;AAAA,IACV,KAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAU,EAAA;AAAA,GACqB,EAAA;AAjBjC,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,mBAAA,sBAA0B,GAA+B,EAAA,CAAA;AACzD,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAoC,EAAC,CAAA;AACrC,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,sBAAoD,GAAI,EAAA,CAAA;AAkBxD,IAAQ,aAAA,CAAA,IAAA,EAAA,oBAAA,EAAqB,CAAC,UAAuB,KAAA;AACnD,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,aAAa,CAAA,IAAK,mBAAK,gBAAkB,CAAA,EAAA;AAC9D,QAAA,IAAI,cAAc,CAAC,CAAA,CAAE,UAAW,CAAA,QAAA,OAAe,UAAY,EAAA;AACzD,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,OAAO,SAAS,CAAA;AAAA,SACjC,MAAA;AACL,UAAA,MAAM,KAAQ,GAAA,aAAA,CAAc,CAAC,CAAA,CAAE,UAAW,CAAA,KAAA;AAC1C,UAAA,IAAI,KAAO,EAAA;AACT,YAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,EAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,cAAA,IAAI,KAAM,CAAA,CAAC,CAAE,CAAA,gBAAA,KAAqB,UAAY,EAAA;AAC5C,gBAAA,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA;AAChB;AACF;AAEF,UAAc,aAAA,CAAA,CAAC,CAAE,CAAA,UAAA,CAAW,KAAQ,GAAA,KAAA;AAAA;AACtC;AACF,KACF,CAAA;AAaA,IAAW,aAAA,CAAA,IAAA,EAAA,UAAA,EAAA,CACT,iBACA,QACG,KAAA;AACH,MAAA,MAAM,cAAyC,EAAC;AAChD,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,QAAA,MAAM,gBAAgB,eAAgB,CAAA,GAAA,CAAI,QAAS,CAAA,CAAC,EAAE,OAAO,CAAA;AAC7D,QAAA,IAAI,aAAe,EAAA;AACjB,UAAc,aAAA,CAAA,OAAA,CAAQ,CAAC,EAAE,UAAA,EAAY,YAAY,EAAE,MAAA,IAAe,KAAA;AAChE,YAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,cAAA,MAAM,OAAmC,GAAA;AAAA,gBACvC,gBAAkB,EAAA,UAAA;AAAA,gBAClB,UAAY,EAAA,UAAA;AAAA,gBACZ,IAAA,EAAM,SAAS,CAAC;AAAA,eAClB;AACA,cAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA;AAC1B,WACD,CAAA;AAAA;AACH;AAEF,MAAO,OAAA,WAAA;AAAA,KACT,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,mBAAA,EAAoB,CAClB,OAAA,KAEA,IAAI,OAAA,CAAQ,CAAC,OAAY,KAAA;AACvB,MAAI,IAAA,OAAA,CAAQ,SAAS,oBAAsB,EAAA;AACzC,QAAA,MAAM,EAAE,eAAA,EAAiB,SAAW,EAAA,gBAAA,EAAkB,YACpD,GAAA,OAAA;AACF,QAAM,MAAA,eAAA,GAAkB,IAAK,CAAA,uBAAA,CAAwB,SAAS,CAAA;AAC9D,QAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,uBAAA,CAAwB,UAAU,CAAA;AAChE,QAAA,MAAM,oBAAoB,IAAIA,mCAAA;AAAA,UAC5B,eAAA;AAAA,UACA,gBAAA;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,CAAoB,GAAI,CAAA,SAAA,EAAW,iBAAiB,CAAA;AAEzD,QAAQ,OAAA,CAAA;AAAA,UACN,gBAAkB,EAAA,SAAA;AAAA,UAClB,OAAS,EAAA,eAAA;AAAA,UACT,aAAe,EAAA,gBAAA;AAAA,UACf,gBAAkB,EAAA,UAAA;AAAA,UAClB,IAAM,EAAA;AAAA,SAC+B,CAAA;AAAA,OAClC,MAAA;AACL,QAAM,MAAA,iBAAA,GAAoB,mBAAK,mBAAoB,CAAA,CAAA,GAAA;AAAA,UACjD,OAAQ,CAAA;AAAA,SACV;AACA,QAAA,IAAI,iBAAmB,EAAA;AACrB,UAAA,iBAAA,CAAkB,MAAO,EAAA;AACzB,UAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,CAAoB,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,SAC5C,MAAA;AACL,UAAM,MAAA,KAAA;AAAA,YACJ,CAAA,qDAAA,EAAwD,QAAQ,SAAS,CAAA;AAAA,WAC3E;AAAA;AAEF,QAAQ,OAAA,EAAA;AAAA;AACV,KACD,CAAA,CAAA;AAEH,IAAmB,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,CACjB,SACA,EAAA,QAAA,EACA,MACG,KAAA;AACH,MAAM,MAAA,cAAA,GAAiB,CAACC,UAAsB,KAAA;AAC5C,QAAM,MAAA,aAAA,GAAgB,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA,GAAeA,UAAc,CAAA;AACxD,QAAA,OAAO,kBAAkB,KACrB,CAAA,GAAA,KAAA,CAAA,GACA,KAAK,QAAS,CAAA,YAAA,CAAA,IAAA,EAAK,mBAAkB,aAAa,CAAA;AAAA,OACxD;AAEA,MAAM,MAAA,iBAAA,GAAoB,IAAK,CAAA,oBAAA,CAAqB,SAAS,CAAA;AAC7D,MAAM,MAAA,KAAA,GAAQ,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,SAAS,CAAA;AACpC,MAAM,MAAA,YAAA,GAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,SAAS,CAAA;AAEpD,MAAM,MAAA,UAAA,GAAyB,IAAIC,6CAAuB,CAAA;AAAA,QACxD,GAAG,MAAA;AAAA,QACH,iBAAA;AAAA,QACA,cAAA;AAAA,QACA,SACE,EAAA,YAAA,CAAA,IAAA,EAAK,QAAS,CAAA,CAAA,SAAS,MAAM,KACzB,CAAA,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,SAAS,EAAE,MAAO,CAAA,GAAA,GACxC,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,SAAS,CAAE,CAAA,GAAA;AAAA,QAC/B,OAAO,KAAS,IAAA,YAAA;AAAA,QAChB,IAAA,EAAM,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA,GAAS,SAAS,CAAA;AAAA,QAC7B,WAAA,EAAa,IAAK,CAAA,WAAA,CAAY,SAAS,CAAA;AAAA,QACvC,eAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA,QACpB,QAAA;AAAA,QACA,mBAAmB,IAAK,CAAA;AAAA,OACzB,CAAA;AAED,MAAW,UAAA,CAAA,EAAA,CAAG,cAAgB,EAAA,IAAA,CAAK,kBAAkB,CAAA;AAErD,MAAA,MAAM,qBAAwB,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAS,CAAA;AACjE,MAAA,MAAM,YAAe,GAAA;AAAA,QACnB,YAAY,UAAW,CAAA,QAAA;AAAA,QACvB;AAAA,OACF;AACA,MAAA,IAAI,qBAAuB,EAAA;AACzB,QAAA,qBAAA,CAAsB,KAAK,YAAY,CAAA;AAAA,OAClC,MAAA;AACL,QAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAW,EAAA,CAAC,YAAY,CAAC,CAAA;AAAA;AAGrD,MAAO,OAAA,UAAA;AAAA,KACT,CAAA;AA8CA,IAAA,aAAA,CAAA,IAAA,EAAQ,qBAAuC,CAAC;AAAA,MAC9C,QAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACqB,KAAA;AACrB,MAAA,MAAM,KAAQ,GAAA,YAAA,CAAA,IAAA,EAAK,OAAQ,CAAA,CAAA,QAAA,CAAS,KAAU,CAAA;AAC9C,MAAA,IAAI,KAAO,EAAA;AACT,QAAO,OAAAC,+BAAA,CAAgB,KAAO,EAAA,MAAA,EAAQ,OAAO,CAAA;AAAA,OACxC,MAAA;AACL,QAAM,MAAA,KAAA;AAAA,UACJ,CAAA,EAAG,mBAAK,KAAK,CAAA,CAAA,kCAAA,EAAqC,SAAS,MAAM,CAAA,CAAA,EAC/D,SAAS,KACX,CAAA;AAAA,SACF;AAAA;AACF,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,eAAA,EAAgC,OAAO,UAAe,KAAA;AAC5D,MAAI,IAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC1B,QAAM,MAAA,EAAE,WAAa,EAAA,IAAA,EAAS,GAAA,UAAA;AAC9B,QAAA,MAAM,iBAAiB,WAAY,CAAA,cAAA;AACnC,QAAA,MAAM,QAAQ,WAAY,CAAA,KAAA;AAE1B,QAAA,IAAI,kBAAkB,KAAO,EAAA;AAC3B,UAAA,MAAM,SAAY,GAAA,YAAA,CAAA,IAAA,EAAK,OAAQ,CAAA,CAAA,KAAA,CAAM,KAAU,CAAA;AAC/C,UAAA,IAAI,SAAW,EAAA;AACb,YAAA,MAAM,eAAe,IAAK,CAAA,kCAAA;AAAA,cACxB,SAAA;AAAA,cACA;AAAA,aACF;AACA,YAAM,MAAA,gBAAA,GAAmB,CAAW,QAAA,EAAAC,aAAA,EAAM,CAAA,CAAA;AAC1C,YAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAI,GAAA,YAAA;AAE1C,YAAO,OAAA;AAAA,cACL,MAAQ,EAAA;AAAA,gBACN,eAAiB,EAAA,MAAA;AAAA,gBACjB,KAAO,EAAA;AAAA,kBACL,QAAQ,KAAM,CAAA,MAAA;AAAA,kBACd,KAAO,EAAA;AAAA,iBACT;AAAA,gBACA,aAAa,SAAU,CAAA,MAAA;AAAA,gBACvB,IAAM,EAAA;AAAA,eACR;AAAA,cACA,OAAS,EAAA,wBAAA;AAAA,cACT,IAAM,EAAA,qBAAA;AAAA,cACN;AAAA,aACF;AAAA,WACK,MAAA;AACL,YAAO,OAAA;AAAA,cACL,MAAA,EAAQ,EAAE,IAAA,EAAM,WAAY,EAAA;AAAA,cAC5B,gBAAkB,EAAA,IAAA;AAAA,cAClB,KAAO,EAAA,gBAAA;AAAA,cACP,OAAS,EAAA,qBAAA;AAAA,cACT,IAAM,EAAA,oBAAA;AAAA,cACN;AAAA,aACF;AAAA;AACF;AACF;AAEF,MAAA,MAAM,MAAM,gDAAgD,CAAA;AAAA,KAC9D,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiC,OAAO,UAAe,KAAA;AAC7D,MAAI,IAAAC,6BAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,QAAM,MAAA,EAAE,MAAS,GAAA,UAAA;AACjB,QAAO,OAAA,YAAA,CAAA,IAAA,EAAK,kBAAiB,IAAI,CAAA;AACjC,QAAO,OAAA;AAAA,UACL,MAAA,EAAQ,EAAE,IAAA,EAAM,gBAAiB,EAAA;AAAA,UACjC,MAAQ,EAAA,KAAA;AAAA,UACR,aAAa,EAAC;AAAA,UACd,QAAQ,EAAC;AAAA,UACT,IAAM,EAAA,uBAAA;AAAA,UACN;AAAA,SACF;AAAA,OACK,MAAA;AACL,QAAA,MAAM,MAAM,gCAAgC,CAAA;AAAA;AAC9C,KACF,CAAA;AAGA;AAAA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiC,OAAO,UAAe,KAAA;AAC7D,MAAI,IAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC1B,QAAM,MAAA,EAAE,MAAS,GAAA,UAAA;AACjB,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,eAAA,CAAgB,IAAI,CAAA;AAC9C,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAa,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACjD,UAAM,MAAA,MAAA,GAAS,YAAa,CAAA,IAAA,CAAK,CAAC,CAAA;AAClC,UAAA,MAAM,EAAE,MAAA,EAAQ,KAAM,EAAA,GAAI,UAAW,CAAA,WAAA;AACrC,UAAA,MAAM,QAAW,GAAA,YAAA,CAAa,GAAI,CAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACzD,UAAa,YAAA,CAAA,MAAA;AAAA,YACX,MAAA,CAAO,MAAO,CAAA,QAAQ,CAAC,CAAA;AAAA,YACvB,MAAA;AAAA,YACA;AAAA,WACF;AAAA;AAEF,QAAO,OAAA;AAAA,UACL,MAAQ,EAAA;AAAA,YACN,IAAM,EAAA;AAAA,WACR;AAAA,UACA,OAAS,EAAA,+BAAA;AAAA,UACT,IAAM,EAAA,qBAAA;AAAA,UACN;AAAA,SACF;AAAA;AAEF,MAAA,MAAM,MAAM,wDAAwD,CAAA;AAAA,KACtE,CAAA;AAGA;AAAA,IAAQ,aAAA,CAAA,IAAA,EAAA,eAAA,EAAgC,OAAO,UAAe,KAAA;AAC5D,MAAI,IAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC1B,QAAM,MAAA,EAAE,MAAS,GAAA,UAAA;AACjB,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,eAAA,CAAgB,IAAI,CAAA;AAC9C,QAAA,MAAM,EAAE,KAAA,EAAU,GAAA,YAAA,CAAa,MAAO,CAAA,KAAA;AACtC,QAAM,MAAA,SAAA,GAAY,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,KAAU,CAAA;AACzC,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAa,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACjD,YAAM,MAAA,MAAA,GAAS,YAAa,CAAA,IAAA,CAAK,CAAC,CAAA;AAClC,YAAA,SAAA,CAAU,UAAU,MAAM,CAAA;AAAA;AAG5B,UAAO,OAAA;AAAA,YACL,MAAQ,EAAA;AAAA,cACN,IAAM,EAAA;AAAA,aACR;AAAA,YACA,SAAW,EAAA,YAAA;AAAA,YACX,OAAS,EAAA,yBAAA;AAAA,YACT,IAAM,EAAA,qBAAA;AAAA,YACN;AAAA,WACF;AAAA;AACF;AAEF,MAAA,MAAM,MAAM,oCAAoC,CAAA;AAAA,KAClD,CAAA;AAuBA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAgC,YAAA,CAAA,IAAA,EAAA,eAAA,EAAA;AAAA,MAC9B;AAAA,QACE,OAAS,EAAA,wBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,+BAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,yBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,sBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA;AAChB,KACF,CAAA;AA5WE,IAAA,YAAA,CAAA,IAAA,EAAK,MAAS,EAAA,KAAA,CAAA;AACd,IAAA,YAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA;AACb,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,cAAiB,EAAA,QAAA,CAAA;AACtB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,IAAA,YAAA,CAAA,IAAA,EAAK,YAAe,EAAA,WAAA,CAAA;AAAA;AACtB,EAoBA,wBAAwB,IAA0B,EAAA;AAChD,IAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,MAAA,KAAA,MAAW,EAAE,UAAA,EAAY,UAAW,EAAA,IAAK,aAAe,EAAA;AACtD,QAAA,IAAI,eAAe,IAAM,EAAA;AACvB,UAAO,OAAA,UAAA;AAAA;AACT;AACF;AAEF,IAAM,MAAA,KAAA,CAAM,CAA4B,yBAAA,EAAA,IAAI,CAAyB,uBAAA,CAAA,CAAA;AAAA;AACvE,EAkHA,YAAY,SAAc,EAAA;AACxB,IAAM,MAAA,aAAA,GAAgB,YAAK,CAAA,IAAA,EAAA,cAAA,CAAA,GAAiB,SAAS,CAAA;AACrD,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,aAAa,CAAG,EAAA;AAChC,MAAO,OAAA,YAAA,CAAA,IAAA,EAAK,eAAgB,CAAA,CAAA,MAAA,CAAO,aAAa,CAAA;AAAA,KAC3C,MAAA;AACL,MAAA,OAAO,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA;AAAA;AACd;AACF,EAEA,IAAI,aAAgB,GAAA;AAClB,IAAA,OAAO,MAAM,IAAK,CAAA,iBAAA;AAAA;AACpB,EAEA,IAAc,eAAkB,GAAA;AAC9B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA;AACd,EAEA,IAAc,MAAS,GAAA;AACrB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA;AACd,EAEQ,gBAAgB,gBAA0B,EAAA;AAChD,IAAM,MAAA,YAAA,GAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAA;AAC3D,IAAA,IAAI,YAAc,EAAA;AAChB,MAAO,OAAA,YAAA;AAAA,KACF,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,+CAA+C,gBAAgB,CAAA;AAAA,OACjE;AAAA;AACF;AACF,EAEQ,qBAAqB,SAAc,EAAA;AACzC,IAAM,MAAA,MAAA,GACJ,mBAAK,QAAS,CAAA,CAAA,SAAS,KAAK,IAAK,CAAA,eAAA,CAAgB,SAAS,CAAG,EAAA,MAAA;AAC/D,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAO,MAAO,CAAA,OAAA;AAAA,KACT,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,CAA+B,4BAAA,EAAA,YAAA,CAAA,IAAA,EAAK,KAAK,CAAA,CAAA,OAAA,EAAU,SAAS,CAAA;AAAA,OAC9D;AAAA;AACF;AACF,EAuIU,mCACR,EAAE,IAAA,EAAM,GAAK,EAAA,MAAA,IACb,cACA,EAAA;AACA,IAAM,MAAA,QAAA,GAAW,GAAI,CAAA,MAAA,CAAO,GAAG,CAAA;AAC/B,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAAK,EAAA,EAAA;AAC9C,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,CAAA,CAAE,QAAQ,CAAM,KAAA,cAAA,CAAe,CAAC,CAAG,EAAA;AAC3C,UAAY,WAAA,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,CAAC,CAAA;AAAA;AAC1B;AACF;AAEF,IAAA,OAAO,IAAIC,WAAM,CAAA,MAAA,EAAQ,WAAa,EAAAC,kCAAA,CAA6B,MAAM,CAAC,CAAA;AAAA;AA0B9E;AA/XE,MAAA,GAAA,IAAA,OAAA,EAAA;AACA,KAAA,GAAA,IAAA,OAAA,EAAA;AACA,mBAAA,GAAA,IAAA,OAAA,EAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;AACA,cAAA,GAAA,IAAA,OAAA,EAAA;AACA,YAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AAqWA,eAAA,GAAA,IAAA,OAAA,EAAA;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basket-module.js","sources":["../../src/basket/basket-module.ts"],"sourcesContent":["import {\n VuuLink,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcViewportAction,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, isViewportRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport pricesTable from \"./reference-data/prices\";\nimport { joinTables, Table } from \"../Table\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport { RpcService, ServiceHandler, VuuModule } from \"../VuuModule\";\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\n/**\n * BasketConstituent\n */\n\nconst basketConstituent = new Table(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n);\n\n/**\n * BasketTrading\n */\nconst basketTrading = new Table(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n);\n\nlet basketIncrement = 1;\n/**\n * BasketTradingConstituent\n */\nconst basketTradingConstituent = new Table(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nfunction createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n });\n\n // return the key\n return basketTradingRow[instanceId] as string;\n}\n\nconst addConstituent: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n throw Error(`addConstituent not implemented`);\n } else {\n throw Error(`addConstituent invalid rpcRequest`);\n }\n};\n\nconst viewportRpcResponse = (\n params: string[],\n vpId: string,\n action?: Partial<VuuRpcViewportAction>,\n): VuuRpcViewportResponse => ({\n type: \"VIEW_PORT_RPC_REPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n ...action,\n },\n namedParams: {},\n params,\n vpId,\n});\n\nconst sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`sendToMarket invalid rpcRequest`);\n }\n};\nconst takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"OFF-MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`takeOffMarket invalid rpcRequest`);\n }\n};\n\nconst createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketId, basketName] = params;\n const key = createTradingBasket(basketId, basketName);\n return viewportRpcResponse(params, vpId, { key });\n } else {\n throw Error(`createNewBasket invalid rpcRequest`);\n }\n};\n\nexport const tables: Record<BasketsTableName, Table> = {\n algoType: new Table(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: new Table(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent,\n basketTrading,\n basketTradingConstituent,\n basketTradingConstituentJoin: joinTables(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n basketTradingConstituent,\n pricesTable,\n \"ric\",\n ),\n priceStrategyType: new Table(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n};\n\nconst vuuLinks: Record<BasketsTableName, VuuLink[] | undefined> = {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n};\n\nconst menus: Record<BasketsTableName, VuuMenu | undefined> = {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n};\n\nconst services: Record<BasketsTableName, RpcService[] | undefined> = {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: addConstituent,\n },\n ],\n};\n\nexport const basketModule = new VuuModule<BasketsTableName>({\n menus,\n name: \"BASKET\",\n schemas,\n services,\n tables,\n vuuLinks,\n});\n"],"names":["schemas","Table","basketConstituentData","isViewportRpcRequest","joinTables","pricesTable","VuuModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"basket-module.js","sources":["../../src/basket/basket-module.ts"],"sourcesContent":["import {\n VuuLink,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcViewportAction,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, isViewportRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport pricesTable from \"./reference-data/prices\";\nimport { joinTables, Table } from \"../Table\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport { RpcService, ServiceHandler, VuuModule } from \"../VuuModule\";\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\n/**\n * BasketConstituent\n */\n\nconst basketConstituent = new Table(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n);\n\n/**\n * BasketTrading\n */\nconst basketTrading = new Table(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n);\n\nlet basketIncrement = 1;\n/**\n * BasketTradingConstituent\n */\nconst basketTradingConstituent = new Table(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nfunction createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n });\n\n // return the key\n return basketTradingRow[instanceId] as string;\n}\n\nconst addConstituent: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n throw Error(`addConstituent not implemented`);\n } else {\n throw Error(`addConstituent invalid rpcRequest`);\n }\n};\n\nconst viewportRpcResponse = (\n params: string[],\n vpId: string,\n action?: Partial<VuuRpcViewportAction>,\n): VuuRpcViewportResponse => ({\n type: \"VIEW_PORT_RPC_REPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n ...action,\n },\n method: \"???\",\n namedParams: {},\n params,\n vpId,\n});\n\nconst sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`sendToMarket invalid rpcRequest`);\n }\n};\nconst takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"OFF-MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`takeOffMarket invalid rpcRequest`);\n }\n};\n\nconst createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketId, basketName] = params;\n const key = createTradingBasket(basketId, basketName);\n return viewportRpcResponse(params, vpId, { key });\n } else {\n throw Error(`createNewBasket invalid rpcRequest`);\n }\n};\n\nexport const tables: Record<BasketsTableName, Table> = {\n algoType: new Table(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: new Table(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent,\n basketTrading,\n basketTradingConstituent,\n basketTradingConstituentJoin: joinTables(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n basketTradingConstituent,\n pricesTable,\n \"ric\",\n ),\n priceStrategyType: new Table(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n};\n\nconst vuuLinks: Record<BasketsTableName, VuuLink[] | undefined> = {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n};\n\nconst menus: Record<BasketsTableName, VuuMenu | undefined> = {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n};\n\nconst services: Record<BasketsTableName, RpcService[] | undefined> = {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: addConstituent,\n },\n ],\n};\n\nexport const basketModule = new VuuModule<BasketsTableName>({\n menus,\n name: \"BASKET\",\n schemas,\n services,\n tables,\n vuuLinks,\n});\n"],"names":["schemas","Table","basketConstituentData","isViewportRpcRequest","joinTables","pricesTable","VuuModule"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TickingArrayDataSource.js","sources":["../src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceVisualLinkCreatedMessage,\n SelectionItem,\n SubscribeCallback,\n SubscribeProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuRpcMenuRequest,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcRequest,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isViewportRpcRequest,\n isVuuMenuRpcRequest,\n metadataKeys,\n} from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { RpcService, SessionTableMap } from \"./VuuModule\";\n\nconst { KEY } = metadataKeys;\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 menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinkService?: VisualLinkHandler;\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 #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n\n constructor({\n data,\n getVisualLinks,\n menuRpcServices,\n rpcServices,\n sessionTables,\n table,\n menu,\n visualLink,\n visualLinkService,\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 });\n this._menu = menu;\n\n this.#menuRpcServices = menuRpcServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#sessionTables = sessionTables;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRow);\n }\n }\n\n async subscribe(subscribeProps: SubscribeProps, callback: SubscribeCallback) {\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 range(range: VuuRange) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\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 private getSelectedRowIds() {\n return this.selectedRows.reduce<string[]>(\n (rowIds: string[], selection: SelectionItem) => {\n if (Array.isArray(selection)) {\n for (let i = selection[0]; i <= selection[1]; i++) {\n const row = this.data[i];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n } else {\n const row = this.data[selection];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n return rowIds;\n },\n [],\n );\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n this.#table?.update(rowKey, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends VuuRpcResponse = VuuRpcResponse>(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<T> {\n if (isViewportRpcRequest(rpcRequest)) {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService && isViewportRpcRequest(rpcRequest)) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n return rpcService.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n throw Error(`no implementation for PRC service ${rpcRequest.type}`);\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\"> & {\n namedParams?: RpcNamedParams;\n },\n ): Promise<VuuRpcResponse> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as VuuRpcMenuRequest).rpcName,\n );\n\n if (isVuuMenuRpcRequest(rpcRequest)) {\n return rpcService?.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<VuuRpcMenuResponse>;\n }\n\n return super.menuRpcCall(rpcRequest);\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n return makeSuggestions(this.#table, column, pattern);\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"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TickingArrayDataSource.js","sources":["../src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceVisualLinkCreatedMessage,\n SelectionItem,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuRpcMenuRequest,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcRequest,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isViewportRpcRequest,\n isVuuMenuRpcRequest,\n metadataKeys,\n Range,\n} from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { RpcService, SessionTableMap } from \"./VuuModule\";\n\nconst { KEY } = metadataKeys;\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 menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinkService?: VisualLinkHandler;\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 #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n\n constructor({\n data,\n getVisualLinks,\n menuRpcServices,\n rpcServices,\n sessionTables,\n table,\n menu,\n visualLink,\n visualLinkService,\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 });\n this._menu = menu;\n\n this.#menuRpcServices = menuRpcServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#sessionTables = sessionTables;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRow);\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 range(range: Range) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\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 private getSelectedRowIds() {\n return this.selectedRows.reduce<string[]>(\n (rowIds: string[], selection: SelectionItem) => {\n if (Array.isArray(selection)) {\n for (let i = selection[0]; i <= selection[1]; i++) {\n const row = this.data[i];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n } else {\n const row = this.data[selection];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n return rowIds;\n },\n [],\n );\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n this.#table?.update(rowKey, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends VuuRpcResponse = VuuRpcResponse>(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<T> {\n if (isViewportRpcRequest(rpcRequest)) {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService && isViewportRpcRequest(rpcRequest)) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n return rpcService.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n throw Error(`no implementation for PRC service ${rpcRequest.type}`);\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\"> & {\n namedParams?: RpcNamedParams;\n },\n ): Promise<VuuRpcResponse> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as VuuRpcMenuRequest).rpcName,\n );\n\n if (isVuuMenuRpcRequest(rpcRequest)) {\n return rpcService?.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<VuuRpcMenuResponse>;\n }\n\n return super.menuRpcCall(rpcRequest);\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n return makeSuggestions(this.#table, column, pattern);\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"],"names":[],"mappings":"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"}
|
package/esm/VuuModule.js
CHANGED
package/esm/VuuModule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VuuModule.js","sources":["../src/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceVisualLinkCreatedMessage,\n OpenDialogActionWithSchema,\n SuggestionFetcher,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n VuuRpcViewportRequest,\n TypeaheadParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuTable,\n VuuLink,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcViewportResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isViewportRpcRequest, uuid } from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { RuntimeVisualLink } from \"./RuntimeVisualLink\";\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (tableName: T) => DataSource;\n typeaheadHook: () => SuggestionFetcher;\n}\n\nexport interface VuuModuleConstructorProps<T extends string = string> {\n menus?: Record<T, VuuMenu | undefined>;\n name: string;\n schemas: Record<T, Readonly<TableSchema>>;\n services?: Record<T, RpcService[] | undefined>;\n tables: Record<T, Table>;\n vuuLinks?: Record<T, VuuLink[] | undefined>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type RpcServiceRequestWithParams = VuuRpcViewportRequest & {\n namedParams: RpcNamedParams;\n};\nexport type RpcServiceRequest =\n | RpcServiceRequestWithParams\n | VuuRpcViewportRequest\n | VuuRpcMenuRequest;\n\nexport const withParams = (\n rpcRequest: VuuRpcRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport const withNamedParams = (\n rpcRequest: RpcServiceRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcRequest & {\n namedParams?: RpcNamedParams;\n },\n) => Promise<VuuRpcResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n};\nexport class VuuModule<T extends string = string> implements IVuuModule<T> {\n #menus: Record<T, VuuMenu | undefined> | undefined;\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #schemas: Record<T, Readonly<TableSchema>>;\n #sessionTableMap: SessionTableMap = {};\n #tables: Record<T, Table>;\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #visualLinks: Record<T, VuuLink[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor({\n menus,\n name,\n schemas,\n services,\n tables,\n vuuLinks: visualLinks,\n }: VuuModuleConstructorProps<T>) {\n this.#menus = menus;\n this.#name = name;\n this.#schemas = schemas;\n this.#tableServices = services;\n this.#tables = tables;\n this.#visualLinks = visualLinks;\n }\n\n private unregisterViewport = (viewportId: string) => {\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n } else {\n const links = subscriptions[0].dataSource.links;\n if (links) {\n for (let i = 0; i < links?.length; i++) {\n if (links[i].parentClientVpId === viewportId) {\n links.splice(i);\n }\n }\n }\n subscriptions[0].dataSource.links = links;\n }\n }\n };\n\n getSubscribedDataSource(vpId: string): DataSource {\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 createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const 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 const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.#tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n 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 sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n });\n\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.#tableServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n get typeaheadHook() {\n return () => this.suggestionFetcher;\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected get tables() {\n return this.#tables;\n }\n\n private getSessionTable(sessionTableName: string) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\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 suggestionFetcher: SuggestionFetcher = ([\n vuuTable,\n column,\n pattern,\n ]: TypeaheadParams) => {\n const table = this.#tables[vuuTable.table as T];\n if (table) {\n return makeSuggestions(table, column, pattern);\n } else {\n throw Error(\n `${this.#name} suggestionFetcher, unknown table ${vuuTable.module} ${\n vuuTable.table\n }`,\n );\n }\n };\n\n private openBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { namedParams, vpId } = rpcRequest;\n const selectedRowIds = namedParams.selectedRowIds as string[];\n const table = namedParams.table as VuuTable;\n\n if (selectedRowIds && table) {\n const dataTable = this.#tables[table.table as T];\n if (dataTable) {\n const sessionTable = this.createSessionTableFromSelectedRows(\n dataTable,\n selectedRowIds,\n );\n const sessionTableName = `session-${uuid()}`;\n this.#sessionTableMap[sessionTableName] = sessionTable;\n\n return {\n action: {\n renderComponent: \"grid\",\n table: {\n module: table.module,\n table: sessionTableName,\n },\n tableSchema: dataTable.schema,\n type: \"OPEN_DIALOG_ACTION\",\n } as OpenDialogActionWithSchema,\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n } else {\n return {\n action: { type: \"NO_ACTION\" },\n clientViewportId: \"na\",\n error: \"No Table found\",\n rpcName: \"VP_BULK_EDIT_REJECT\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n }\n }\n throw Error(\"openBulkEdits expects Table and selectedRowIds\");\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n delete this.#sessionTableMap[vpId];\n return {\n action: { type: \"VP_RPC_SUCCESS\" },\n namedParams: {},\n params: [],\n type: \"VIEW_PORT_RPC_REPONSE\",\n vpId,\n } as VuuRpcViewportResponse;\n } else {\n throw Error(\"endEditSession invalid request\");\n }\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.namedParams;\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 action: {\n type: \"NO_ACTION\",\n },\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n throw Error(\"applyBulkEdits expects column and value as namedParams\");\n };\n\n // Save session table data to main table\n private saveBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n const { table } = sessionTable.schema.table;\n const baseTable = this.#tables[table as T];\n if (baseTable) {\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n baseTable.updateRow(newRow);\n }\n\n return {\n action: {\n type: \"VP_RPC_SUCCESS\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as unknown as VuuRpcViewportResponse;\n }\n }\n throw Error(\"saveBulkEdits base table not found\");\n };\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n selectedRowIds: string[],\n ) {\n const keyIndex = map[schema.key];\n const sessionData: 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 return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));\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: \"VP_BULK_EDIT_BEGIN_RPC\",\n service: this.openBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n service: this.saveBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_END_RPC\",\n service: this.endEditSession,\n },\n ];\n}\n"],"names":["tableName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VuuModule.js","sources":["../src/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceVisualLinkCreatedMessage,\n OpenDialogActionWithSchema,\n SuggestionFetcher,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n VuuRpcViewportRequest,\n TypeaheadParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuTable,\n VuuLink,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcViewportResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isViewportRpcRequest, uuid } from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { RuntimeVisualLink } from \"./RuntimeVisualLink\";\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (tableName: T) => DataSource;\n typeaheadHook: () => SuggestionFetcher;\n}\n\nexport interface VuuModuleConstructorProps<T extends string = string> {\n menus?: Record<T, VuuMenu | undefined>;\n name: string;\n schemas: Record<T, Readonly<TableSchema>>;\n services?: Record<T, RpcService[] | undefined>;\n tables: Record<T, Table>;\n vuuLinks?: Record<T, VuuLink[] | undefined>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type RpcServiceRequestWithParams = VuuRpcViewportRequest & {\n namedParams: RpcNamedParams;\n};\nexport type RpcServiceRequest =\n | RpcServiceRequestWithParams\n | VuuRpcViewportRequest\n | VuuRpcMenuRequest;\n\nexport const withParams = (\n rpcRequest: VuuRpcRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport const withNamedParams = (\n rpcRequest: RpcServiceRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcRequest & {\n namedParams?: RpcNamedParams;\n },\n) => Promise<VuuRpcResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n};\nexport class VuuModule<T extends string = string> implements IVuuModule<T> {\n #menus: Record<T, VuuMenu | undefined> | undefined;\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #schemas: Record<T, Readonly<TableSchema>>;\n #sessionTableMap: SessionTableMap = {};\n #tables: Record<T, Table>;\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #visualLinks: Record<T, VuuLink[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor({\n menus,\n name,\n schemas,\n services,\n tables,\n vuuLinks: visualLinks,\n }: VuuModuleConstructorProps<T>) {\n this.#menus = menus;\n this.#name = name;\n this.#schemas = schemas;\n this.#tableServices = services;\n this.#tables = tables;\n this.#visualLinks = visualLinks;\n }\n\n private unregisterViewport = (viewportId: string) => {\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n } else {\n const links = subscriptions[0].dataSource.links;\n if (links) {\n for (let i = 0; i < links?.length; i++) {\n if (links[i].parentClientVpId === viewportId) {\n links.splice(i);\n }\n }\n }\n subscriptions[0].dataSource.links = links;\n }\n }\n };\n\n getSubscribedDataSource(vpId: string): DataSource {\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 createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const 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 const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.#tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n 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 sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n });\n\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.#tableServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n get typeaheadHook() {\n return () => this.suggestionFetcher;\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected get tables() {\n return this.#tables;\n }\n\n private getSessionTable(sessionTableName: string) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\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 suggestionFetcher: SuggestionFetcher = ([\n vuuTable,\n column,\n pattern,\n ]: TypeaheadParams) => {\n const table = this.#tables[vuuTable.table as T];\n if (table) {\n return makeSuggestions(table, column, pattern);\n } else {\n throw Error(\n `${this.#name} suggestionFetcher, unknown table ${vuuTable.module} ${\n vuuTable.table\n }`,\n );\n }\n };\n\n private openBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { namedParams, vpId } = rpcRequest;\n const selectedRowIds = namedParams.selectedRowIds as string[];\n const table = namedParams.table as VuuTable;\n\n if (selectedRowIds && table) {\n const dataTable = this.#tables[table.table as T];\n if (dataTable) {\n const sessionTable = this.createSessionTableFromSelectedRows(\n dataTable,\n selectedRowIds,\n );\n const sessionTableName = `session-${uuid()}`;\n this.#sessionTableMap[sessionTableName] = sessionTable;\n\n return {\n action: {\n renderComponent: \"grid\",\n table: {\n module: table.module,\n table: sessionTableName,\n },\n tableSchema: dataTable.schema,\n type: \"OPEN_DIALOG_ACTION\",\n } as OpenDialogActionWithSchema,\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n } else {\n return {\n action: { type: \"NO_ACTION\" },\n clientViewportId: \"na\",\n error: \"No Table found\",\n rpcName: \"VP_BULK_EDIT_REJECT\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n }\n }\n throw Error(\"openBulkEdits expects Table and selectedRowIds\");\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n delete this.#sessionTableMap[vpId];\n return {\n action: { type: \"VP_RPC_SUCCESS\" },\n method: \"???\",\n namedParams: {},\n params: [],\n type: \"VIEW_PORT_RPC_REPONSE\",\n vpId,\n } as VuuRpcViewportResponse;\n } else {\n throw Error(\"endEditSession invalid request\");\n }\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.namedParams;\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 action: {\n type: \"NO_ACTION\",\n },\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n throw Error(\"applyBulkEdits expects column and value as namedParams\");\n };\n\n // Save session table data to main table\n private saveBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n const { table } = sessionTable.schema.table;\n const baseTable = this.#tables[table as T];\n if (baseTable) {\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n baseTable.updateRow(newRow);\n }\n\n return {\n action: {\n type: \"VP_RPC_SUCCESS\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as unknown as VuuRpcViewportResponse;\n }\n }\n throw Error(\"saveBulkEdits base table not found\");\n };\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n selectedRowIds: string[],\n ) {\n const keyIndex = map[schema.key];\n const sessionData: 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 return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));\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: \"VP_BULK_EDIT_BEGIN_RPC\",\n service: this.openBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n service: this.saveBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_END_RPC\",\n service: this.endEditSession,\n },\n ];\n}\n"],"names":["tableName"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basket-module.js","sources":["../../src/basket/basket-module.ts"],"sourcesContent":["import {\n VuuLink,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcViewportAction,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, isViewportRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport pricesTable from \"./reference-data/prices\";\nimport { joinTables, Table } from \"../Table\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport { RpcService, ServiceHandler, VuuModule } from \"../VuuModule\";\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\n/**\n * BasketConstituent\n */\n\nconst basketConstituent = new Table(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n);\n\n/**\n * BasketTrading\n */\nconst basketTrading = new Table(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n);\n\nlet basketIncrement = 1;\n/**\n * BasketTradingConstituent\n */\nconst basketTradingConstituent = new Table(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nfunction createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n });\n\n // return the key\n return basketTradingRow[instanceId] as string;\n}\n\nconst addConstituent: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n throw Error(`addConstituent not implemented`);\n } else {\n throw Error(`addConstituent invalid rpcRequest`);\n }\n};\n\nconst viewportRpcResponse = (\n params: string[],\n vpId: string,\n action?: Partial<VuuRpcViewportAction>,\n): VuuRpcViewportResponse => ({\n type: \"VIEW_PORT_RPC_REPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n ...action,\n },\n namedParams: {},\n params,\n vpId,\n});\n\nconst sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`sendToMarket invalid rpcRequest`);\n }\n};\nconst takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"OFF-MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`takeOffMarket invalid rpcRequest`);\n }\n};\n\nconst createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketId, basketName] = params;\n const key = createTradingBasket(basketId, basketName);\n return viewportRpcResponse(params, vpId, { key });\n } else {\n throw Error(`createNewBasket invalid rpcRequest`);\n }\n};\n\nexport const tables: Record<BasketsTableName, Table> = {\n algoType: new Table(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: new Table(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent,\n basketTrading,\n basketTradingConstituent,\n basketTradingConstituentJoin: joinTables(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n basketTradingConstituent,\n pricesTable,\n \"ric\",\n ),\n priceStrategyType: new Table(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n};\n\nconst vuuLinks: Record<BasketsTableName, VuuLink[] | undefined> = {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n};\n\nconst menus: Record<BasketsTableName, VuuMenu | undefined> = {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n};\n\nconst services: Record<BasketsTableName, RpcService[] | undefined> = {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: addConstituent,\n },\n ],\n};\n\nexport const basketModule = new VuuModule<BasketsTableName>({\n menus,\n name: \"BASKET\",\n schemas,\n services,\n tables,\n vuuLinks,\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"basket-module.js","sources":["../../src/basket/basket-module.ts"],"sourcesContent":["import {\n VuuLink,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcViewportAction,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, isViewportRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport pricesTable from \"./reference-data/prices\";\nimport { joinTables, Table } from \"../Table\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport { RpcService, ServiceHandler, VuuModule } from \"../VuuModule\";\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\n/**\n * BasketConstituent\n */\n\nconst basketConstituent = new Table(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n);\n\n/**\n * BasketTrading\n */\nconst basketTrading = new Table(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n);\n\nlet basketIncrement = 1;\n/**\n * BasketTradingConstituent\n */\nconst basketTradingConstituent = new Table(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nfunction createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n });\n\n // return the key\n return basketTradingRow[instanceId] as string;\n}\n\nconst addConstituent: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n throw Error(`addConstituent not implemented`);\n } else {\n throw Error(`addConstituent invalid rpcRequest`);\n }\n};\n\nconst viewportRpcResponse = (\n params: string[],\n vpId: string,\n action?: Partial<VuuRpcViewportAction>,\n): VuuRpcViewportResponse => ({\n type: \"VIEW_PORT_RPC_REPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n ...action,\n },\n method: \"???\",\n namedParams: {},\n params,\n vpId,\n});\n\nconst sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`sendToMarket invalid rpcRequest`);\n }\n};\nconst takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"OFF-MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`takeOffMarket invalid rpcRequest`);\n }\n};\n\nconst createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketId, basketName] = params;\n const key = createTradingBasket(basketId, basketName);\n return viewportRpcResponse(params, vpId, { key });\n } else {\n throw Error(`createNewBasket invalid rpcRequest`);\n }\n};\n\nexport const tables: Record<BasketsTableName, Table> = {\n algoType: new Table(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: new Table(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent,\n basketTrading,\n basketTradingConstituent,\n basketTradingConstituentJoin: joinTables(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n basketTradingConstituent,\n pricesTable,\n \"ric\",\n ),\n priceStrategyType: new Table(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n};\n\nconst vuuLinks: Record<BasketsTableName, VuuLink[] | undefined> = {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n};\n\nconst menus: Record<BasketsTableName, VuuMenu | undefined> = {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n};\n\nconst services: Record<BasketsTableName, RpcService[] | undefined> = {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: addConstituent,\n },\n ],\n};\n\nexport const basketModule = new VuuModule<BasketsTableName>({\n menus,\n name: \"BASKET\",\n schemas,\n services,\n tables,\n vuuLinks,\n});\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.11.
|
|
2
|
+
"version": "0.11.3",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@vuu-ui/vuu-data-local": "0.11.
|
|
7
|
-
"@vuu-ui/vuu-utils": "0.11.
|
|
6
|
+
"@vuu-ui/vuu-data-local": "0.11.3",
|
|
7
|
+
"@vuu-ui/vuu-utils": "0.11.3"
|
|
8
8
|
},
|
|
9
9
|
"devDependencies": {
|
|
10
|
-
"@vuu-ui/vuu-protocol-types": "0.11.
|
|
11
|
-
"@vuu-ui/vuu-data-types": "0.11.
|
|
12
|
-
"@vuu-ui/vuu-table-types": "0.11.
|
|
10
|
+
"@vuu-ui/vuu-protocol-types": "0.11.3",
|
|
11
|
+
"@vuu-ui/vuu-data-types": "0.11.3",
|
|
12
|
+
"@vuu-ui/vuu-table-types": "0.11.3"
|
|
13
13
|
},
|
|
14
14
|
"sideEffects": false,
|
|
15
15
|
"files": [
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ArrayDataSource, ArrayDataSourceConstructorProps } from "@vuu-ui/vuu-data-local";
|
|
2
|
-
import type { DataSourceVisualLinkCreatedMessage,
|
|
3
|
-
import type { LinkDescriptorWithLabel, RpcNamedParams, VuuMenu,
|
|
2
|
+
import type { DataSourceVisualLinkCreatedMessage, DataSourceSubscribeCallback, DataSourceSubscribeProps } from "@vuu-ui/vuu-data-types";
|
|
3
|
+
import type { LinkDescriptorWithLabel, RpcNamedParams, VuuMenu, VuuRowDataItemType, VuuRpcResponse, VuuRpcRequest, VuuCreateVisualLink, VuuRemoveVisualLink } from "@vuu-ui/vuu-protocol-types";
|
|
4
|
+
import { Range } from "@vuu-ui/vuu-utils";
|
|
4
5
|
import { Table } from "./Table";
|
|
5
6
|
import { RpcService, SessionTableMap } from "./VuuModule";
|
|
6
7
|
export type VisualLinkHandler = (message: VuuCreateVisualLink | VuuRemoveVisualLink) => Promise<DataSourceVisualLinkCreatedMessage | void>;
|
|
@@ -17,10 +18,10 @@ export interface TickingArrayDataSourceConstructorProps extends Omit<ArrayDataSo
|
|
|
17
18
|
export declare class TickingArrayDataSource extends ArrayDataSource {
|
|
18
19
|
#private;
|
|
19
20
|
constructor({ data, getVisualLinks, menuRpcServices, rpcServices, sessionTables, table, menu, visualLink, visualLinkService, ...arrayDataSourceProps }: TickingArrayDataSourceConstructorProps);
|
|
20
|
-
subscribe(subscribeProps:
|
|
21
|
+
subscribe(subscribeProps: DataSourceSubscribeProps, callback: DataSourceSubscribeCallback): Promise<void>;
|
|
21
22
|
unsubscribe(): void;
|
|
22
|
-
set range(range:
|
|
23
|
-
get range():
|
|
23
|
+
set range(range: Range);
|
|
24
|
+
get range(): Range;
|
|
24
25
|
set links(links: LinkDescriptorWithLabel[] | undefined);
|
|
25
26
|
get links(): LinkDescriptorWithLabel[] | undefined;
|
|
26
27
|
private getSelectedRowIds;
|