@vuu-ui/vuu-data-local 0.13.28 → 0.13.29
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/array-data-source/array-data-source.js +3 -0
- package/cjs/array-data-source/array-data-source.js.map +1 -1
- package/cjs/json-data-source/JsonDataSource.js +3 -0
- package/cjs/json-data-source/JsonDataSource.js.map +1 -1
- package/cjs/tree-data-source/TreeDataSource.js.map +1 -1
- package/esm/array-data-source/array-data-source.js +3 -0
- package/esm/array-data-source/array-data-source.js.map +1 -1
- package/esm/json-data-source/JsonDataSource.js +3 -0
- package/esm/json-data-source/JsonDataSource.js.map +1 -1
- package/esm/tree-data-source/TreeDataSource.js.map +1 -1
- package/package.json +7 -7
- package/types/array-data-source/array-data-source.d.ts +2 -1
- package/types/json-data-source/JsonDataSource.d.ts +2 -1
- package/types/tree-data-source/TreeDataSource.d.ts +2 -2
|
@@ -706,6 +706,9 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
706
706
|
async remoteProcedureCall() {
|
|
707
707
|
return Promise.reject();
|
|
708
708
|
}
|
|
709
|
+
async editRpcCall(rpcRequest) {
|
|
710
|
+
throw Error("ArrayDataSource does not implement editRpcCall");
|
|
711
|
+
}
|
|
709
712
|
async menuRpcCall(rpcRequest) {
|
|
710
713
|
return new Promise((resolve) => {
|
|
711
714
|
if (vuuUtils.isEditCellRequest(rpcRequest)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-data-source.js","sources":["../../../../packages/vuu-data-local/src/array-data-source/array-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceRow,\n DataSourceStatus,\n DataSourceSubscribedMessage,\n Selection,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { filterPredicate, parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n DataSourceConfigChanges,\n EventEmitter,\n KeySet,\n NULL_RANGE,\n Range,\n buildColumnMap,\n combineFilters,\n getAddedItems,\n getMissingItems,\n hasBaseFilter,\n hasFilter,\n hasGroupBy,\n hasSort,\n isConfigChanged,\n isEditCellRequest,\n isGroupByChanged,\n logger,\n metadataKeys,\n rangeNewItems,\n selectionCount,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n} from \"@vuu-ui/vuu-utils\";\nimport { aggregateData } from \"./aggregate-utils\";\nimport { buildDataToClientMap, toClientRow } from \"./array-data-utils\";\nimport { GroupMap, collapseGroup, expandGroup, groupRows } from \"./group-utils\";\nimport {\n binarySearch,\n ColIndexSortDef,\n sortComparator,\n sortRows,\n} from \"./sort-utils\";\n\nconst { debug, info } = logger(\"ArrayDataSource\");\n\nconst { KEY } = metadataKeys;\n\nexport interface ArrayDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n columnDescriptors: ColumnDescriptor[];\n data: Array<VuuRowDataItemType[]>;\n dataMap?: ColumnMap;\n keyColumn?: string;\n rangeChangeRowset?: \"delta\" | \"full\";\n}\n\nconst toDataSourceRow =\n (key: number) =>\n (data: VuuRowDataItemType[], index: number): DataSourceRow => {\n return [\n index,\n index,\n true,\n false,\n 1,\n 0,\n String(data[key]),\n 0,\n 0, // ts\n false, // isNew\n ...data,\n ];\n };\n\n// const isError = (err: unknown): err is { message: string } =>\n// typeof err === \"object\" && err !== null && err.hasOwnProperty(\"message\");\n\nconst buildTableSchema = (\n columns: ColumnDescriptor[],\n keyColumn?: string,\n): TableSchema => {\n const schema: TableSchema = {\n columns: columns.map(({ name, serverDataType = \"string\" }) => ({\n name,\n serverDataType,\n })),\n key: keyColumn ?? columns[0].name,\n table: { module: \"\", table: \"Array\" },\n };\n\n return schema;\n};\n\nexport class ArrayDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private columnDescriptors: ColumnDescriptor[];\n /** sorted offsets of data within raw data, reflecting sort order\n * of columns specified by client.\n */\n private dataIndices: number[] | undefined;\n /** Map reflecting positions of data items in raw data */\n private dataMap: ColumnMap | undefined;\n private groupMap: undefined | GroupMap;\n /** the index of key field within raw data row */\n private key: number;\n private lastRangeServed: VuuRange = { from: 0, to: 0 };\n private rangeChangeRowset: \"delta\" | \"full\";\n private openTreeNodes: string[] = [];\n // Experimental. There are some config changes - first concrete example is baseFilter applied to\n // 'freeze' data, that should not immediately affect the displayed data, therefore not cause\n // range reset.\n private preserveScrollPositionAcrossConfigChange = false;\n\n /** Map reflecting positions of columns in client data sent to user */\n #columnMap: ColumnMap;\n protected _config: WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n } = vanillaConfig;\n #data: DataSourceRow[];\n #freezeTimestamp: number | undefined = undefined;\n #keys = new KeySet(NULL_RANGE);\n #links: LinkDescriptorWithLabel[] | undefined;\n #range = Range(0, 0);\n #selectedRowsCount = 0;\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n protected _menu: VuuMenu | undefined;\n protected selectedRows: Selection = [];\n\n public tableSchema: TableSchema;\n public viewport: string;\n\n protected processedData: DataSourceRow[] | undefined = undefined;\n\n constructor({\n aggregations,\n baseFilterSpec,\n // different from RemoteDataSource\n columnDescriptors,\n data,\n dataMap,\n filterSpec,\n groupBy,\n keyColumn,\n rangeChangeRowset = \"delta\",\n sort,\n title,\n viewport,\n }: ArrayDataSourceConstructorProps) {\n super();\n if (!data || !columnDescriptors) {\n throw Error(\n \"ArrayDataSource constructor called without data or without columnDescriptors\",\n );\n }\n\n this.columnDescriptors = columnDescriptors;\n this.dataMap = dataMap;\n this.key = keyColumn\n ? this.columnDescriptors.findIndex((col) => col.name === keyColumn)\n : 0;\n this.rangeChangeRowset = rangeChangeRowset;\n this.tableSchema = buildTableSchema(columnDescriptors, keyColumn);\n this.viewport = viewport || uuid();\n this.#title = title;\n\n const columns = columnDescriptors.map((col) => col.name);\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n this.#data = data.map<DataSourceRow>(toDataSourceRow(this.key));\n\n this.config = {\n ...this._config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec,\n columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n\n debug?.(`columnMap: ${JSON.stringify(this.#columnMap)}`);\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? (this.viewport = uuid()),\n columns,\n aggregations,\n baseFilterSpec,\n range,\n selectedIndexValues,\n selectedKeyValues,\n sort,\n groupBy,\n filterSpec,\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n this.viewport = viewport;\n this.#status = \"subscribed\";\n this.selectedRows =\n selectedIndexValues ??\n this.convertKeysToIndexValues(selectedKeyValues) ??\n [];\n this.#selectedRowsCount = selectionCount(this.selectedRows);\n this.lastRangeServed = { from: 0, to: 0 };\n\n let config = this._config;\n\n const hasConfigProps =\n aggregations || columns || filterSpec || groupBy || sort;\n if (hasConfigProps) {\n if (range) {\n this.setRange(range);\n }\n config = {\n ...config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n }\n\n const subscribedMessage: DataSourceSubscribedMessage = {\n ...config,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n range: this.#range,\n tableSchema: this.tableSchema,\n };\n this.clientCallback?.(subscribedMessage);\n this.emit(\"subscribed\", subscribedMessage);\n\n if (hasConfigProps) {\n // invoke setter to action config\n this.config = config;\n } else {\n this.sendSizeUpdateToClient();\n if (range && !this.#range.equals(range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(\n this.size / (this.range.to - this.range.from),\n );\n this.emit(\"page-count\", pageCount);\n }\n }\n }\n\n unsubscribe() {\n this.clientCallback = undefined;\n this.#status = \"unsubscribed\";\n this.emit(\"unsubscribed\", this.viewport);\n }\n\n suspend() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n this.#status = \"suspended\";\n this.emit(\"suspended\", this.viewport);\n }\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this.clientCallback = callback;\n }\n\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n this.emit(\"resumed\", this.viewport);\n\n this.sendRowsToClient(true);\n }\n\n disable() {\n this.emit(\"disabled\", this.viewport);\n }\n\n enable() {\n this.emit(\"enabled\", this.viewport);\n }\n\n select(selected: Selection) {\n this.#selectedRowsCount = selectionCount(selected);\n debug?.(`select ${JSON.stringify(selected)}`);\n this.selectedRows = selected;\n this.setRange(this.#range, true);\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.openTreeNodes.push(key);\n this.processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this._config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n this.processedData as DataSourceRow[],\n );\n this.setRange(this.#range.reset, true);\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.openTreeNodes = this.openTreeNodes.filter((value) => value !== key);\n if (this.processedData) {\n this.processedData = collapseGroup(key, this.processedData);\n this.setRange(this.#range.reset, true);\n }\n }\n\n get pageSize() {\n return this.#range.to - this.#range.from;\n }\n\n get links() {\n return this.#links;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n this.#links = links;\n }\n\n get menu() {\n return this._menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get data() {\n return this.#data;\n }\n\n // Only used by the UpdateGenerator\n get currentData() {\n return this.processedData ?? this.#data;\n }\n\n get table() {\n return this.tableSchema.table;\n }\n\n get config() {\n return this._config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n if (config) {\n const originalConfig = this._config;\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n\n this._config = withConfigDefaults(newConfig);\n\n let processedData: DataSourceRow[] | undefined;\n if (hasFilter(config) || hasBaseFilter(config)) {\n const fn = this.getFilterPredicate();\n processedData = this.#data.filter(fn);\n }\n\n if (hasSort(config)) {\n processedData = sortRows(\n processedData ?? this.#data,\n config.sort,\n this.#columnMap,\n );\n }\n\n if (\n this.openTreeNodes.length > 0 &&\n isGroupByChanged(originalConfig, config)\n ) {\n if (this._config.groupBy.length === 0) {\n this.openTreeNodes.length = 0;\n } else {\n //TODO purge any openTreeNodes for a no-longer-present groupBy col\n }\n }\n\n if (hasGroupBy(config)) {\n const [groupedData, groupMap] = groupRows(\n processedData ?? this.#data,\n config.groupBy,\n this.#columnMap,\n );\n this.groupMap = groupMap;\n processedData = groupedData;\n\n if (this.openTreeNodes.length > 0) {\n processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this._config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n processedData as DataSourceRow[],\n );\n }\n }\n if (processedData) {\n this.processedData = this.indexProcessedData(processedData);\n } else {\n this.processedData = undefined;\n }\n }\n\n if (this.#status === \"subscribed\") {\n this.sendSizeUpdateToClient();\n if (this.preserveScrollPositionAcrossConfigChange) {\n this.preserveScrollPositionAcrossConfigChange = false;\n } else {\n this.setRange(this.#range.reset, true);\n }\n if (\n configChanges.filterChanged ||\n configChanges.baseFilterChanged ||\n configChanges.groupByChanged\n ) {\n this.emit(\"resize\", this.size);\n }\n this.emit(\"config\", this._config, this.range, undefined, configChanges);\n }\n }\n }\n\n private indexProcessedData(data: DataSourceRow[]) {\n for (let i = 0; i < data.length; i++) {\n data[i][0] = i;\n data[i][1] = i;\n }\n return data;\n // return data?.map((row, i) => {\n // const dolly = row.slice() as DataSourceRow;\n // dolly[0] = i;\n // dolly[1] = i;\n // return dolly;\n // });\n }\n\n private getFilterPredicate() {\n const {\n filterSpec: { filterStruct },\n } = combineFilters(this._config);\n if (filterStruct) {\n return filterPredicate(this.#columnMap, filterStruct);\n } else {\n throw Error(\"filter must include filterStruct\");\n }\n }\n\n applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._config,\n config,\n );\n\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n this._config = {\n ...this._config,\n ...config,\n };\n } else {\n this._config = withConfigDefaults(newConfig);\n }\n return otherChanges;\n }\n }\n }\n\n get columnMap() {\n return this.#columnMap;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.processedData?.length ?? this.#data.length;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: Range) {\n this.setRange(range);\n }\n\n getRowAtIndex(rowIndex: number) {\n return this.processedData?.[rowIndex];\n }\n\n protected delete(row: VuuRowDataItemType[]) {\n console.log(`delete row ${row.join(\",\")}`);\n }\n\n protected insert = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const dataSourceRow = toDataSourceRow(this.key)(row, this.size);\n (this.#data as DataSourceRow[]).push(dataSourceRow);\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n const isSorted = hasSort(this.config);\n const isFiltered = hasFilter(this.config) || hasBaseFilter(this.config);\n if (isSorted && isFiltered) {\n const meetsFilterCriteria = this.getFilterPredicate();\n if (meetsFilterCriteria(dataSourceRow)) {\n this.insertIntoSortedData(dataSourceRow);\n }\n } else if (isSorted) {\n this.insertIntoSortedData(dataSourceRow);\n } else if (isFiltered) {\n const fn = this.getFilterPredicate();\n if (fn(dataSourceRow)) {\n this.processedData?.push(dataSourceRow);\n this.sendSizeUpdateToClient();\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n this.emit(\"resize\", this.#data.length);\n }\n } else {\n this.sendSizeUpdateToClient();\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n this.emit(\"resize\", this.size);\n }\n };\n\n private insertIntoSortedData(row: DataSourceRow) {\n const indexedSortDefs = this.config.sort.sortDefs.map<ColIndexSortDef>(\n ({ column, sortType }) => [this.columnMap[column], sortType],\n );\n\n const comparator = sortComparator(indexedSortDefs);\n const insertPos = binarySearch(\n this.processedData as DataSourceRow[],\n row,\n comparator,\n );\n\n this.sendSizeUpdateToClient();\n\n if (insertPos === -1) {\n this.processedData?.unshift(row);\n // this.#keys.reset(this.#range);\n if (this.processedData) {\n // horribly inefficient\n this.processedData = this.indexProcessedData(this.processedData);\n }\n\n if (insertPos <= this.#range.to) {\n this.sendRowsToClient(true);\n }\n if (this.processedData) {\n this.emit(\"resize\", this.processedData.length);\n }\n } else {\n if (this.processedData) {\n this.emit(\"resize\", this.processedData.length);\n }\n }\n }\n\n private validateDataValue(columnName: string, value: VuuRowDataItemType) {\n const columnDescriptor = this.columnDescriptors.find(\n (col) => col.name === columnName,\n );\n if (columnDescriptor) {\n switch (columnDescriptor.serverDataType) {\n case \"int\":\n {\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value) {\n throw Error(`${columnName} is int but value = ${value}`);\n }\n } else if (typeof value === \"string\") {\n const numericValue = parseFloat(value);\n if (Math.floor(numericValue) !== numericValue) {\n throw Error(`${columnName} is ${value} is not a valid integer`);\n }\n }\n }\n break;\n default:\n }\n } else {\n throw Error(`Unknown column ${columnName}`);\n }\n }\n\n protected updateDataItem = (\n keyValue: string,\n columnName: string,\n value: VuuRowDataItemType,\n ) => {\n this.validateDataValue(columnName, value);\n // TODO take sorting, filtering. grouping into account\n const colIndex = this.#columnMap[columnName];\n const dataColIndex = this.dataMap?.[columnName];\n const dataIndex = this.indexOfRowWithKey(keyValue);\n if (dataIndex !== -1 && dataColIndex !== undefined) {\n const dataSourceRow = this.#data[dataIndex];\n dataSourceRow[colIndex] = value;\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\n\n protected update = (row: VuuRowDataItemType[], columnName: string) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key] as string;\n const dataColIndex = this.dataMap?.[columnName] as number;\n return this.updateDataItem(keyValue, columnName, row[dataColIndex]);\n };\n\n protected updateRow = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key];\n const dataIndex = this.#data.findIndex((row) => row[KEY] === keyValue);\n if (dataIndex !== -1) {\n const dataSourceRow = toDataSourceRow(this.key)(row, dataIndex);\n // maybe update this in place\n this.#data[dataIndex] = dataSourceRow;\n const { from, to } = this.#range;\n if (dataIndex >= from && dataIndex < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private setRange(range: Range, forceFullRefresh = false) {\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n const currentPageCount = Math.ceil(\n this.size / (this.#range.to - this.#range.from),\n );\n const newPageCount = Math.ceil(this.size / (range.to - range.from));\n\n this.#range = range;\n const keysResequenced = this.#keys.reset(range);\n this.sendRowsToClient(forceFullRefresh || keysResequenced);\n\n requestAnimationFrame(() => {\n // executed within RAF in case this is used to setState/trigger render in listening clients\n if (newPageCount !== currentPageCount) {\n this.emit(\"page-count\", newPageCount);\n }\n this.emit(\"range\", range);\n });\n } else if (forceFullRefresh) {\n this.sendRowsToClient(forceFullRefresh);\n }\n }\n\n sendSizeUpdateToClient() {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.processedData ? this.processedData.length : this.#data.length,\n });\n }\n\n sendRowsToClient(forceFullRefresh = false, row?: DataSourceRow) {\n if (row) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n rows: [\n toClientRow(row, this.#keys, this.selectedRows, this.dataIndices),\n ],\n type: \"viewport-update\",\n });\n } else {\n const rowRange =\n this.rangeChangeRowset === \"delta\" && !forceFullRefresh\n ? rangeNewItems(this.lastRangeServed, this.#range)\n : this.#range;\n const data = this.processedData ?? this.#data;\n\n const rowsWithinViewport = data\n .slice(rowRange.from, rowRange.to)\n .map((row) =>\n toClientRow(row, this.#keys, this.selectedRows, this.dataIndices),\n );\n\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n range: this.#range,\n rows: rowsWithinViewport,\n size: data.length,\n type: \"viewport-update\",\n });\n this.lastRangeServed = {\n from: this.#range.from,\n to: this.#range.to,\n // to: Math.min(\n // this.#range.to,\n // this.#range.from + rowsWithinViewport.length,\n // ),\n };\n // console.log(\n // `%c[ArrayDataSource] lastRangeServed (${this.lastRangeServed.from}:${this.lastRangeServed.to})`,\n // \"color:green;font-weight:bold;\",\n // );\n }\n }\n\n get columns() {\n return this._config.columns;\n }\n\n set columns(columns: string[]) {\n const addedColumns = getAddedItems(this.config.columns, columns);\n if (addedColumns.length > 0) {\n const columnsWithoutDescriptors = getMissingItems(\n this.columnDescriptors,\n addedColumns,\n (col) => col.name,\n );\n console.warn(`columnsWithoutDescriptors`, {\n columnsWithoutDescriptors,\n });\n }\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n\n this.config = {\n ...this._config,\n columns,\n };\n }\n\n get aggregations() {\n return this._config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this._config = {\n ...this._config,\n aggregations,\n };\n\n const targetData = this.processedData ?? this.#data;\n const leafData = this.#data;\n\n aggregateData(\n aggregations,\n targetData,\n this._config.groupBy,\n leafData,\n this.#columnMap,\n this.groupMap as GroupMap,\n );\n this.setRange(this.#range.reset, true);\n\n this.emit(\"config\", this._config, this.range);\n }\n\n get sort() {\n return this._config.sort;\n }\n\n set sort(sort: VuuSort) {\n debug?.(`sort ${JSON.stringify(sort)}`);\n this.config = {\n ...this._config,\n sort,\n };\n }\n\n get baseFilter() {\n return this._config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n debug?.(`baseFilter ${JSON.stringify(baseFilter)}`);\n // TODO check that baseFilter has changed\n this.config = {\n ...this._config,\n baseFilterSpec: baseFilter,\n };\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n debug?.(`filter ${JSON.stringify(filter)}`);\n // TODO check that filter has changed\n this.config = {\n ...this._config,\n filterSpec: filter,\n };\n }\n\n get groupBy() {\n return this._config.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.config = {\n ...this._config,\n groupBy,\n };\n }\n\n get title() {\n return this.#title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this.#title = title;\n this.emit(\"title-changed\", this.viewport, title);\n }\n\n get _clientCallback() {\n return this.clientCallback;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<VuuRpcResponse> {\n return new Promise((resolve) => {\n if (isEditCellRequest(rpcRequest)) {\n const { rowKey, field, value } = rpcRequest;\n try {\n this.updateDataItem(rowKey, field, value);\n resolve({\n action: {\n type: \"VP_EDIT_SUCCESS\",\n },\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId: this.viewport,\n });\n } catch (error) {\n resolve({\n error: String(error),\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId: this.viewport,\n });\n }\n } else {\n throw Error(\"menuRpcCall invalid rpcRequest\");\n }\n });\n }\n\n private convertKeysToIndexValues(keys?: string[]) {\n if (Array.isArray(keys)) {\n const indexValues: number[] = [];\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n if (rowIdx !== -1) {\n indexValues.push(rowIdx);\n }\n });\n return indexValues;\n }\n }\n\n // All in BaseDataSource\n freeze() {\n if (!this.isFrozen) {\n this.#freezeTimestamp = new Date().getTime();\n this.emit(\"freeze\", true, this.#freezeTimestamp);\n this.preserveScrollPositionAcrossConfigChange = true;\n this.baseFilter = {\n filter: `created < ${this.#freezeTimestamp}`,\n };\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n unfreeze() {\n if (this.isFrozen) {\n const freezeTimestamp = this.#freezeTimestamp as number;\n this.#freezeTimestamp = undefined;\n this.emit(\"freeze\", false, freezeTimestamp);\n this.preserveScrollPositionAcrossConfigChange = true;\n this.baseFilter = {\n filter: \"\",\n };\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n\n get freezeTimestamp() {\n return this.#freezeTimestamp;\n }\n\n get isFrozen() {\n return typeof this.#freezeTimestamp === \"number\";\n }\n}\n"],"names":["logger","metadataKeys","EventEmitter","vanillaConfig","KeySet","NULL_RANGE","Range","hasSort","hasFilter","hasBaseFilter","row","uuid","buildColumnMap","buildDataToClientMap","selectionCount","expandGroup","collapseGroup","parseFilter","withConfigDefaults","sortRows","isGroupByChanged","hasGroupBy","groupRows","combineFilters","filterPredicate","isConfigChanged","sortComparator","binarySearch","toClientRow","rangeNewItems","getAddedItems","getMissingItems","aggregateData","isEditCellRequest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"array-data-source.js","sources":["../../../../packages/vuu-data-local/src/array-data-source/array-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceRow,\n DataSourceStatus,\n DataSourceSubscribedMessage,\n Selection,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { filterPredicate, parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcEditRequest,\n VuuRpcEditResponse,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n DataSourceConfigChanges,\n EventEmitter,\n KeySet,\n NULL_RANGE,\n Range,\n buildColumnMap,\n combineFilters,\n getAddedItems,\n getMissingItems,\n hasBaseFilter,\n hasFilter,\n hasGroupBy,\n hasSort,\n isConfigChanged,\n isEditCellRequest,\n isGroupByChanged,\n logger,\n metadataKeys,\n rangeNewItems,\n selectionCount,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n} from \"@vuu-ui/vuu-utils\";\nimport { aggregateData } from \"./aggregate-utils\";\nimport { buildDataToClientMap, toClientRow } from \"./array-data-utils\";\nimport { GroupMap, collapseGroup, expandGroup, groupRows } from \"./group-utils\";\nimport {\n binarySearch,\n ColIndexSortDef,\n sortComparator,\n sortRows,\n} from \"./sort-utils\";\n\nconst { debug, info } = logger(\"ArrayDataSource\");\n\nconst { KEY } = metadataKeys;\n\nexport interface ArrayDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n columnDescriptors: ColumnDescriptor[];\n data: Array<VuuRowDataItemType[]>;\n dataMap?: ColumnMap;\n keyColumn?: string;\n rangeChangeRowset?: \"delta\" | \"full\";\n}\n\nconst toDataSourceRow =\n (key: number) =>\n (data: VuuRowDataItemType[], index: number): DataSourceRow => {\n return [\n index,\n index,\n true,\n false,\n 1,\n 0,\n String(data[key]),\n 0,\n 0, // ts\n false, // isNew\n ...data,\n ];\n };\n\n// const isError = (err: unknown): err is { message: string } =>\n// typeof err === \"object\" && err !== null && err.hasOwnProperty(\"message\");\n\nconst buildTableSchema = (\n columns: ColumnDescriptor[],\n keyColumn?: string,\n): TableSchema => {\n const schema: TableSchema = {\n columns: columns.map(({ name, serverDataType = \"string\" }) => ({\n name,\n serverDataType,\n })),\n key: keyColumn ?? columns[0].name,\n table: { module: \"\", table: \"Array\" },\n };\n\n return schema;\n};\n\nexport class ArrayDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private columnDescriptors: ColumnDescriptor[];\n /** sorted offsets of data within raw data, reflecting sort order\n * of columns specified by client.\n */\n private dataIndices: number[] | undefined;\n /** Map reflecting positions of data items in raw data */\n private dataMap: ColumnMap | undefined;\n private groupMap: undefined | GroupMap;\n /** the index of key field within raw data row */\n private key: number;\n private lastRangeServed: VuuRange = { from: 0, to: 0 };\n private rangeChangeRowset: \"delta\" | \"full\";\n private openTreeNodes: string[] = [];\n // Experimental. There are some config changes - first concrete example is baseFilter applied to\n // 'freeze' data, that should not immediately affect the displayed data, therefore not cause\n // range reset.\n private preserveScrollPositionAcrossConfigChange = false;\n\n /** Map reflecting positions of columns in client data sent to user */\n #columnMap: ColumnMap;\n protected _config: WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n } = vanillaConfig;\n #data: DataSourceRow[];\n #freezeTimestamp: number | undefined = undefined;\n #keys = new KeySet(NULL_RANGE);\n #links: LinkDescriptorWithLabel[] | undefined;\n #range = Range(0, 0);\n #selectedRowsCount = 0;\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n protected _menu: VuuMenu | undefined;\n protected selectedRows: Selection = [];\n\n public tableSchema: TableSchema;\n public viewport: string;\n\n protected processedData: DataSourceRow[] | undefined = undefined;\n\n constructor({\n aggregations,\n baseFilterSpec,\n // different from RemoteDataSource\n columnDescriptors,\n data,\n dataMap,\n filterSpec,\n groupBy,\n keyColumn,\n rangeChangeRowset = \"delta\",\n sort,\n title,\n viewport,\n }: ArrayDataSourceConstructorProps) {\n super();\n if (!data || !columnDescriptors) {\n throw Error(\n \"ArrayDataSource constructor called without data or without columnDescriptors\",\n );\n }\n\n this.columnDescriptors = columnDescriptors;\n this.dataMap = dataMap;\n this.key = keyColumn\n ? this.columnDescriptors.findIndex((col) => col.name === keyColumn)\n : 0;\n this.rangeChangeRowset = rangeChangeRowset;\n this.tableSchema = buildTableSchema(columnDescriptors, keyColumn);\n this.viewport = viewport || uuid();\n this.#title = title;\n\n const columns = columnDescriptors.map((col) => col.name);\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n this.#data = data.map<DataSourceRow>(toDataSourceRow(this.key));\n\n this.config = {\n ...this._config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec,\n columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n\n debug?.(`columnMap: ${JSON.stringify(this.#columnMap)}`);\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? (this.viewport = uuid()),\n columns,\n aggregations,\n baseFilterSpec,\n range,\n selectedIndexValues,\n selectedKeyValues,\n sort,\n groupBy,\n filterSpec,\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n this.viewport = viewport;\n this.#status = \"subscribed\";\n this.selectedRows =\n selectedIndexValues ??\n this.convertKeysToIndexValues(selectedKeyValues) ??\n [];\n this.#selectedRowsCount = selectionCount(this.selectedRows);\n this.lastRangeServed = { from: 0, to: 0 };\n\n let config = this._config;\n\n const hasConfigProps =\n aggregations || columns || filterSpec || groupBy || sort;\n if (hasConfigProps) {\n if (range) {\n this.setRange(range);\n }\n config = {\n ...config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n }\n\n const subscribedMessage: DataSourceSubscribedMessage = {\n ...config,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n range: this.#range,\n tableSchema: this.tableSchema,\n };\n this.clientCallback?.(subscribedMessage);\n this.emit(\"subscribed\", subscribedMessage);\n\n if (hasConfigProps) {\n // invoke setter to action config\n this.config = config;\n } else {\n this.sendSizeUpdateToClient();\n if (range && !this.#range.equals(range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(\n this.size / (this.range.to - this.range.from),\n );\n this.emit(\"page-count\", pageCount);\n }\n }\n }\n\n unsubscribe() {\n this.clientCallback = undefined;\n this.#status = \"unsubscribed\";\n this.emit(\"unsubscribed\", this.viewport);\n }\n\n suspend() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n this.#status = \"suspended\";\n this.emit(\"suspended\", this.viewport);\n }\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this.clientCallback = callback;\n }\n\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n this.emit(\"resumed\", this.viewport);\n\n this.sendRowsToClient(true);\n }\n\n disable() {\n this.emit(\"disabled\", this.viewport);\n }\n\n enable() {\n this.emit(\"enabled\", this.viewport);\n }\n\n select(selected: Selection) {\n this.#selectedRowsCount = selectionCount(selected);\n debug?.(`select ${JSON.stringify(selected)}`);\n this.selectedRows = selected;\n this.setRange(this.#range, true);\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.openTreeNodes.push(key);\n this.processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this._config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n this.processedData as DataSourceRow[],\n );\n this.setRange(this.#range.reset, true);\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.openTreeNodes = this.openTreeNodes.filter((value) => value !== key);\n if (this.processedData) {\n this.processedData = collapseGroup(key, this.processedData);\n this.setRange(this.#range.reset, true);\n }\n }\n\n get pageSize() {\n return this.#range.to - this.#range.from;\n }\n\n get links() {\n return this.#links;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n this.#links = links;\n }\n\n get menu() {\n return this._menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get data() {\n return this.#data;\n }\n\n // Only used by the UpdateGenerator\n get currentData() {\n return this.processedData ?? this.#data;\n }\n\n get table() {\n return this.tableSchema.table;\n }\n\n get config() {\n return this._config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n if (config) {\n const originalConfig = this._config;\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n\n this._config = withConfigDefaults(newConfig);\n\n let processedData: DataSourceRow[] | undefined;\n if (hasFilter(config) || hasBaseFilter(config)) {\n const fn = this.getFilterPredicate();\n processedData = this.#data.filter(fn);\n }\n\n if (hasSort(config)) {\n processedData = sortRows(\n processedData ?? this.#data,\n config.sort,\n this.#columnMap,\n );\n }\n\n if (\n this.openTreeNodes.length > 0 &&\n isGroupByChanged(originalConfig, config)\n ) {\n if (this._config.groupBy.length === 0) {\n this.openTreeNodes.length = 0;\n } else {\n //TODO purge any openTreeNodes for a no-longer-present groupBy col\n }\n }\n\n if (hasGroupBy(config)) {\n const [groupedData, groupMap] = groupRows(\n processedData ?? this.#data,\n config.groupBy,\n this.#columnMap,\n );\n this.groupMap = groupMap;\n processedData = groupedData;\n\n if (this.openTreeNodes.length > 0) {\n processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this._config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n processedData as DataSourceRow[],\n );\n }\n }\n if (processedData) {\n this.processedData = this.indexProcessedData(processedData);\n } else {\n this.processedData = undefined;\n }\n }\n\n if (this.#status === \"subscribed\") {\n this.sendSizeUpdateToClient();\n if (this.preserveScrollPositionAcrossConfigChange) {\n this.preserveScrollPositionAcrossConfigChange = false;\n } else {\n this.setRange(this.#range.reset, true);\n }\n if (\n configChanges.filterChanged ||\n configChanges.baseFilterChanged ||\n configChanges.groupByChanged\n ) {\n this.emit(\"resize\", this.size);\n }\n this.emit(\"config\", this._config, this.range, undefined, configChanges);\n }\n }\n }\n\n private indexProcessedData(data: DataSourceRow[]) {\n for (let i = 0; i < data.length; i++) {\n data[i][0] = i;\n data[i][1] = i;\n }\n return data;\n // return data?.map((row, i) => {\n // const dolly = row.slice() as DataSourceRow;\n // dolly[0] = i;\n // dolly[1] = i;\n // return dolly;\n // });\n }\n\n private getFilterPredicate() {\n const {\n filterSpec: { filterStruct },\n } = combineFilters(this._config);\n if (filterStruct) {\n return filterPredicate(this.#columnMap, filterStruct);\n } else {\n throw Error(\"filter must include filterStruct\");\n }\n }\n\n applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._config,\n config,\n );\n\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n this._config = {\n ...this._config,\n ...config,\n };\n } else {\n this._config = withConfigDefaults(newConfig);\n }\n return otherChanges;\n }\n }\n }\n\n get columnMap() {\n return this.#columnMap;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.processedData?.length ?? this.#data.length;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: Range) {\n this.setRange(range);\n }\n\n getRowAtIndex(rowIndex: number) {\n return this.processedData?.[rowIndex];\n }\n\n protected delete(row: VuuRowDataItemType[]) {\n console.log(`delete row ${row.join(\",\")}`);\n }\n\n protected insert = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const dataSourceRow = toDataSourceRow(this.key)(row, this.size);\n (this.#data as DataSourceRow[]).push(dataSourceRow);\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n const isSorted = hasSort(this.config);\n const isFiltered = hasFilter(this.config) || hasBaseFilter(this.config);\n if (isSorted && isFiltered) {\n const meetsFilterCriteria = this.getFilterPredicate();\n if (meetsFilterCriteria(dataSourceRow)) {\n this.insertIntoSortedData(dataSourceRow);\n }\n } else if (isSorted) {\n this.insertIntoSortedData(dataSourceRow);\n } else if (isFiltered) {\n const fn = this.getFilterPredicate();\n if (fn(dataSourceRow)) {\n this.processedData?.push(dataSourceRow);\n this.sendSizeUpdateToClient();\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n this.emit(\"resize\", this.#data.length);\n }\n } else {\n this.sendSizeUpdateToClient();\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n this.emit(\"resize\", this.size);\n }\n };\n\n private insertIntoSortedData(row: DataSourceRow) {\n const indexedSortDefs = this.config.sort.sortDefs.map<ColIndexSortDef>(\n ({ column, sortType }) => [this.columnMap[column], sortType],\n );\n\n const comparator = sortComparator(indexedSortDefs);\n const insertPos = binarySearch(\n this.processedData as DataSourceRow[],\n row,\n comparator,\n );\n\n this.sendSizeUpdateToClient();\n\n if (insertPos === -1) {\n this.processedData?.unshift(row);\n // this.#keys.reset(this.#range);\n if (this.processedData) {\n // horribly inefficient\n this.processedData = this.indexProcessedData(this.processedData);\n }\n\n if (insertPos <= this.#range.to) {\n this.sendRowsToClient(true);\n }\n if (this.processedData) {\n this.emit(\"resize\", this.processedData.length);\n }\n } else {\n if (this.processedData) {\n this.emit(\"resize\", this.processedData.length);\n }\n }\n }\n\n private validateDataValue(columnName: string, value: VuuRowDataItemType) {\n const columnDescriptor = this.columnDescriptors.find(\n (col) => col.name === columnName,\n );\n if (columnDescriptor) {\n switch (columnDescriptor.serverDataType) {\n case \"int\":\n {\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value) {\n throw Error(`${columnName} is int but value = ${value}`);\n }\n } else if (typeof value === \"string\") {\n const numericValue = parseFloat(value);\n if (Math.floor(numericValue) !== numericValue) {\n throw Error(`${columnName} is ${value} is not a valid integer`);\n }\n }\n }\n break;\n default:\n }\n } else {\n throw Error(`Unknown column ${columnName}`);\n }\n }\n\n protected updateDataItem = (\n keyValue: string,\n columnName: string,\n value: VuuRowDataItemType,\n ) => {\n this.validateDataValue(columnName, value);\n // TODO take sorting, filtering. grouping into account\n const colIndex = this.#columnMap[columnName];\n const dataColIndex = this.dataMap?.[columnName];\n const dataIndex = this.indexOfRowWithKey(keyValue);\n if (dataIndex !== -1 && dataColIndex !== undefined) {\n const dataSourceRow = this.#data[dataIndex];\n dataSourceRow[colIndex] = value;\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\n\n protected update = (row: VuuRowDataItemType[], columnName: string) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key] as string;\n const dataColIndex = this.dataMap?.[columnName] as number;\n return this.updateDataItem(keyValue, columnName, row[dataColIndex]);\n };\n\n protected updateRow = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key];\n const dataIndex = this.#data.findIndex((row) => row[KEY] === keyValue);\n if (dataIndex !== -1) {\n const dataSourceRow = toDataSourceRow(this.key)(row, dataIndex);\n // maybe update this in place\n this.#data[dataIndex] = dataSourceRow;\n const { from, to } = this.#range;\n if (dataIndex >= from && dataIndex < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private setRange(range: Range, forceFullRefresh = false) {\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n const currentPageCount = Math.ceil(\n this.size / (this.#range.to - this.#range.from),\n );\n const newPageCount = Math.ceil(this.size / (range.to - range.from));\n\n this.#range = range;\n const keysResequenced = this.#keys.reset(range);\n this.sendRowsToClient(forceFullRefresh || keysResequenced);\n\n requestAnimationFrame(() => {\n // executed within RAF in case this is used to setState/trigger render in listening clients\n if (newPageCount !== currentPageCount) {\n this.emit(\"page-count\", newPageCount);\n }\n this.emit(\"range\", range);\n });\n } else if (forceFullRefresh) {\n this.sendRowsToClient(forceFullRefresh);\n }\n }\n\n sendSizeUpdateToClient() {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.processedData ? this.processedData.length : this.#data.length,\n });\n }\n\n sendRowsToClient(forceFullRefresh = false, row?: DataSourceRow) {\n if (row) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n rows: [\n toClientRow(row, this.#keys, this.selectedRows, this.dataIndices),\n ],\n type: \"viewport-update\",\n });\n } else {\n const rowRange =\n this.rangeChangeRowset === \"delta\" && !forceFullRefresh\n ? rangeNewItems(this.lastRangeServed, this.#range)\n : this.#range;\n const data = this.processedData ?? this.#data;\n\n const rowsWithinViewport = data\n .slice(rowRange.from, rowRange.to)\n .map((row) =>\n toClientRow(row, this.#keys, this.selectedRows, this.dataIndices),\n );\n\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n range: this.#range,\n rows: rowsWithinViewport,\n size: data.length,\n type: \"viewport-update\",\n });\n this.lastRangeServed = {\n from: this.#range.from,\n to: this.#range.to,\n // to: Math.min(\n // this.#range.to,\n // this.#range.from + rowsWithinViewport.length,\n // ),\n };\n // console.log(\n // `%c[ArrayDataSource] lastRangeServed (${this.lastRangeServed.from}:${this.lastRangeServed.to})`,\n // \"color:green;font-weight:bold;\",\n // );\n }\n }\n\n get columns() {\n return this._config.columns;\n }\n\n set columns(columns: string[]) {\n const addedColumns = getAddedItems(this.config.columns, columns);\n if (addedColumns.length > 0) {\n const columnsWithoutDescriptors = getMissingItems(\n this.columnDescriptors,\n addedColumns,\n (col) => col.name,\n );\n console.warn(`columnsWithoutDescriptors`, {\n columnsWithoutDescriptors,\n });\n }\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n\n this.config = {\n ...this._config,\n columns,\n };\n }\n\n get aggregations() {\n return this._config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this._config = {\n ...this._config,\n aggregations,\n };\n\n const targetData = this.processedData ?? this.#data;\n const leafData = this.#data;\n\n aggregateData(\n aggregations,\n targetData,\n this._config.groupBy,\n leafData,\n this.#columnMap,\n this.groupMap as GroupMap,\n );\n this.setRange(this.#range.reset, true);\n\n this.emit(\"config\", this._config, this.range);\n }\n\n get sort() {\n return this._config.sort;\n }\n\n set sort(sort: VuuSort) {\n debug?.(`sort ${JSON.stringify(sort)}`);\n this.config = {\n ...this._config,\n sort,\n };\n }\n\n get baseFilter() {\n return this._config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n debug?.(`baseFilter ${JSON.stringify(baseFilter)}`);\n // TODO check that baseFilter has changed\n this.config = {\n ...this._config,\n baseFilterSpec: baseFilter,\n };\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n debug?.(`filter ${JSON.stringify(filter)}`);\n // TODO check that filter has changed\n this.config = {\n ...this._config,\n filterSpec: filter,\n };\n }\n\n get groupBy() {\n return this._config.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.config = {\n ...this._config,\n groupBy,\n };\n }\n\n get title() {\n return this.#title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this.#title = title;\n this.emit(\"title-changed\", this.viewport, title);\n }\n\n get _clientCallback() {\n return this.clientCallback;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async editRpcCall(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rpcRequest: Omit<VuuRpcEditRequest, \"vpId\">,\n ): Promise<VuuRpcEditResponse> {\n throw Error(\"ArrayDataSource does not implement editRpcCall\");\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<VuuRpcResponse> {\n return new Promise((resolve) => {\n if (isEditCellRequest(rpcRequest)) {\n const { rowKey, field, value } = rpcRequest;\n try {\n this.updateDataItem(rowKey, field, value);\n resolve({\n action: {\n type: \"VP_EDIT_SUCCESS\",\n },\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId: this.viewport,\n });\n } catch (error) {\n resolve({\n error: String(error),\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId: this.viewport,\n });\n }\n } else {\n throw Error(\"menuRpcCall invalid rpcRequest\");\n }\n });\n }\n\n private convertKeysToIndexValues(keys?: string[]) {\n if (Array.isArray(keys)) {\n const indexValues: number[] = [];\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n if (rowIdx !== -1) {\n indexValues.push(rowIdx);\n }\n });\n return indexValues;\n }\n }\n\n // All in BaseDataSource\n freeze() {\n if (!this.isFrozen) {\n this.#freezeTimestamp = new Date().getTime();\n this.emit(\"freeze\", true, this.#freezeTimestamp);\n this.preserveScrollPositionAcrossConfigChange = true;\n this.baseFilter = {\n filter: `created < ${this.#freezeTimestamp}`,\n };\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n unfreeze() {\n if (this.isFrozen) {\n const freezeTimestamp = this.#freezeTimestamp as number;\n this.#freezeTimestamp = undefined;\n this.emit(\"freeze\", false, freezeTimestamp);\n this.preserveScrollPositionAcrossConfigChange = true;\n this.baseFilter = {\n filter: \"\",\n };\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n\n get freezeTimestamp() {\n return this.#freezeTimestamp;\n }\n\n get isFrozen() {\n return typeof this.#freezeTimestamp === \"number\";\n }\n}\n"],"names":["logger","metadataKeys","EventEmitter","vanillaConfig","KeySet","NULL_RANGE","Range","hasSort","hasFilter","hasBaseFilter","row","uuid","buildColumnMap","buildDataToClientMap","selectionCount","expandGroup","collapseGroup","parseFilter","withConfigDefaults","sortRows","isGroupByChanged","hasGroupBy","groupRows","combineFilters","filterPredicate","isConfigChanged","sortComparator","binarySearch","toClientRow","rangeNewItems","getAddedItems","getMissingItems","aggregateData","isEditCellRequest"],"mappings":"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"}
|
|
@@ -324,6 +324,9 @@ class JsonDataSource extends vuuUtils.EventEmitter {
|
|
|
324
324
|
});
|
|
325
325
|
return void 0;
|
|
326
326
|
}
|
|
327
|
+
async editRpcCall() {
|
|
328
|
+
throw Error("JSONDataSource does not implement editRpcCall");
|
|
329
|
+
}
|
|
327
330
|
applyEdit(rowKey, columnName, value) {
|
|
328
331
|
console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);
|
|
329
332
|
return Promise.resolve(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonDataSource.js","sources":["../../../../packages/vuu-data-local/src/json-data-source/JsonDataSource.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuGroupBy,\n VuuAggregation,\n VuuSort,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceFilter,\n DataSourceRow,\n DataSource,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n WithFullConfig,\n Selection,\n MenuRpcResponse,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n EventEmitter,\n isSelected,\n JsonData,\n jsonToDataSourceRows,\n KeySet,\n metadataKeys,\n NO_CONFIG_CHANGES,\n NULL_RANGE,\n Range,\n uuid,\n vanillaConfig,\n} from \"@vuu-ui/vuu-utils\";\n\nconst NULL_SCHEMA = { columns: [], key: \"\", table: { module: \"\", table: \"\" } };\n\nexport interface JsonDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n data: JsonData;\n}\n\nconst { DEPTH, IDX, IS_EXPANDED, IS_LEAF, KEY, SELECTED } = metadataKeys;\n\nconst toClientRow = (row: DataSourceRow, keys: KeySet) => {\n const [rowIndex] = row;\n const clientRow = row.slice() as DataSourceRow;\n clientRow[1] = keys.keyFor(rowIndex);\n return clientRow;\n};\n\nexport class JsonDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n public columnDescriptors: ColumnDescriptor[];\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private expandedRows = new Set<string>();\n private visibleRows: DataSourceRow[] = [];\n\n #aggregations: VuuAggregation[] = [];\n #config: WithFullConfig = vanillaConfig;\n #data: DataSourceRow[];\n #filter: DataSourceFilter = { filter: \"\" };\n #groupBy: VuuGroupBy = [];\n #range = Range(0, 0);\n #selectedRowsCount = 0;\n #size = 0;\n #sort: VuuSort = { sortDefs: [] };\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n public rowCount: number | undefined;\n public viewport: string;\n\n private keys = new KeySet(this.#range);\n\n constructor({\n aggregations,\n data,\n filterSpec,\n groupBy,\n sort,\n title,\n viewport,\n }: JsonDataSourceConstructorProps) {\n super();\n if (!data) {\n throw Error(\"JsonDataSource constructor called without data\");\n }\n\n [this.columnDescriptors, this.#data] = jsonToDataSourceRows(data);\n\n this.visibleRows = this.#data\n .filter((row) => row[DEPTH] === 0)\n .map((row, index) =>\n ([index, index] as Partial<DataSourceRow>).concat(row.slice(2)),\n ) as DataSourceRow[];\n this.viewport = viewport || uuid();\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (this.columnDescriptors) {\n this.#config = {\n ...this.#config,\n columns: this.columnDescriptors.map((c) => c.name),\n };\n }\n if (filterSpec) {\n this.#filter = filterSpec;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (sort) {\n this.#sort = sort;\n }\n this.#title = title;\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? uuid(),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (columns) {\n this.#config = {\n ...this.#config,\n columns,\n };\n }\n if (filterSpec) {\n this.#filter = filterSpec;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (sort) {\n this.#sort = sort;\n }\n\n if (this.#status !== \"initialising\") {\n //TODO check if subscription details are still the same\n return;\n }\n\n this.viewport = viewport;\n\n this.#status = \"subscribed\";\n\n this.clientCallback?.({\n aggregations: this.#aggregations,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n columns: this.#config.columns,\n filterSpec: this.#filter,\n groupBy: this.#groupBy,\n range: this.#range,\n sort: this.#sort,\n tableSchema: NULL_SCHEMA,\n });\n\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.visibleRows.length,\n });\n\n if (range && !this.#range.equals(range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n\n unsubscribe() {\n console.log(\"noop\");\n }\n\n suspend() {\n console.log(\"noop\");\n return this;\n }\n\n resume() {\n console.log(\"noop\");\n return this;\n }\n\n disable() {\n console.log(\"noop\");\n return this;\n }\n\n enable() {\n console.log(\"noop\");\n return this;\n }\n set data(data: JsonData) {\n [this.columnDescriptors, this.#data] = jsonToDataSourceRows(data);\n this.visibleRows = this.#data\n .filter((row) => row[DEPTH] === 0)\n .map((row, index) =>\n ([index, index] as Partial<DataSourceRow>).concat(row.slice(2)),\n ) as DataSourceRow[];\n\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n select(selected: Selection) {\n const updatedRows: DataSourceRow[] = [];\n for (const row of this.#data) {\n const { [IDX]: rowIndex, [SELECTED]: sel } = row;\n const wasSelected = sel === 1;\n const nowSelected = isSelected(selected, rowIndex);\n if (nowSelected !== wasSelected) {\n const selectedRow = row.slice() as DataSourceRow;\n selectedRow[SELECTED] = nowSelected ? 1 : 0;\n this.#data[rowIndex] = selectedRow;\n updatedRows.push(selectedRow);\n }\n }\n\n if (updatedRows.length > 0) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n type: \"viewport-update\",\n rows: updatedRows,\n });\n }\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.visibleRows[keyOrIndex];\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n\n this.expandedRows.add(key);\n this.visibleRows = getVisibleRows(this.#data, this.expandedRows);\n const { from, to } = this.#range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n closeTreeNode(keyOrIndex: string | number, cascade = false) {\n const key = this.getRowKey(keyOrIndex);\n\n this.expandedRows.delete(key);\n if (cascade) {\n for (const rowKey of this.expandedRows.keys()) {\n if (rowKey.startsWith(key)) {\n this.expandedRows.delete(rowKey);\n }\n }\n }\n this.visibleRows = getVisibleRows(this.#data, this.expandedRows);\n this.sendRowsToClient();\n }\n\n get status() {\n return this.#status;\n }\n\n get config() {\n return this.#config;\n }\n\n applyConfig() {\n return NO_CONFIG_CHANGES;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: Range) {\n this.#range = range;\n this.keys.reset(range);\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n private sendRowsToClient() {\n const { from, to } = this.#range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n get columns() {\n return this.#config.columns;\n }\n\n set columns(columns: string[]) {\n // TODO use setter\n this.#config = {\n ...this.#config,\n columns,\n };\n }\n\n get aggregations() {\n return this.#aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.#aggregations = aggregations;\n }\n\n get sort() {\n return this.#sort;\n }\n\n set sort(sort: VuuSort) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#sort = sort;\n }\n\n get filter() {\n return this.#filter;\n }\n\n set filter(filter: DataSourceFilter) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#filter = filter;\n }\n\n get groupBy() {\n return this.#groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.#groupBy = groupBy;\n }\n\n get title() {\n return this.#title ?? \"\";\n }\n\n set title(title: string) {\n this.#title = title;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n console.log(\"rmenuRpcCall\", {\n rpcRequest,\n });\n return undefined;\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n getChildRows(rowKey: string) {\n const parentRow = this.#data.find((row) => row[KEY] === rowKey);\n if (parentRow) {\n const { [IDX]: parentIdx, [DEPTH]: parentDepth } = parentRow;\n let rowIdx = parentIdx + 1;\n const childRows = [];\n do {\n const { [DEPTH]: depth } = this.#data[rowIdx];\n if (depth === parentDepth + 1) {\n childRows.push(this.#data[rowIdx]);\n } else if (depth <= parentDepth) {\n break;\n }\n rowIdx += 1;\n } while (rowIdx < this.#data.length);\n return childRows;\n } else {\n console.warn(\n `JsonDataSource getChildRows row not found for key ${rowKey}`,\n );\n }\n\n return [];\n }\n\n getRowsAtDepth(depth: number, visibleOnly = true) {\n const rows = visibleOnly ? this.visibleRows : this.#data;\n return rows.filter((row) => row[DEPTH] === depth);\n }\n}\n\ntype Index = {\n value: number;\n};\n\nfunction getVisibleRows(rows: DataSourceRow[], expandedKeys: Set<string>) {\n const visibleRows: DataSourceRow[] = [];\n const index: Index = { value: 0 };\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const { [DEPTH]: depth, [KEY]: key, [IS_LEAF]: isLeaf } = row;\n const isExpanded = expandedKeys.has(key);\n visibleRows.push(cloneRow(row, index, isExpanded));\n if (!isLeaf && !isExpanded) {\n do {\n i += 1;\n } while (i < rows.length - 1 && rows[i + 1][DEPTH] > depth);\n }\n }\n return visibleRows;\n}\n\nconst cloneRow = (\n row: DataSourceRow,\n index: Index,\n isExpanded: boolean,\n): DataSourceRow => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = index.value;\n dolly[1] = index.value;\n if (isExpanded) {\n dolly[IS_EXPANDED] = true;\n }\n index.value += 1;\n return dolly;\n};\n"],"names":["metadataKeys","EventEmitter","vanillaConfig","Range","KeySet","jsonToDataSourceRows","uuid","NULL_RANGE","isSelected","NO_CONFIG_CHANGES"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JsonDataSource.js","sources":["../../../../packages/vuu-data-local/src/json-data-source/JsonDataSource.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuGroupBy,\n VuuAggregation,\n VuuSort,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcRequest,\n VuuRpcEditResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceFilter,\n DataSourceRow,\n DataSource,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n WithFullConfig,\n Selection,\n MenuRpcResponse,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n EventEmitter,\n isSelected,\n JsonData,\n jsonToDataSourceRows,\n KeySet,\n metadataKeys,\n NO_CONFIG_CHANGES,\n NULL_RANGE,\n Range,\n uuid,\n vanillaConfig,\n} from \"@vuu-ui/vuu-utils\";\n\nconst NULL_SCHEMA = { columns: [], key: \"\", table: { module: \"\", table: \"\" } };\n\nexport interface JsonDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n data: JsonData;\n}\n\nconst { DEPTH, IDX, IS_EXPANDED, IS_LEAF, KEY, SELECTED } = metadataKeys;\n\nconst toClientRow = (row: DataSourceRow, keys: KeySet) => {\n const [rowIndex] = row;\n const clientRow = row.slice() as DataSourceRow;\n clientRow[1] = keys.keyFor(rowIndex);\n return clientRow;\n};\n\nexport class JsonDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n public columnDescriptors: ColumnDescriptor[];\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private expandedRows = new Set<string>();\n private visibleRows: DataSourceRow[] = [];\n\n #aggregations: VuuAggregation[] = [];\n #config: WithFullConfig = vanillaConfig;\n #data: DataSourceRow[];\n #filter: DataSourceFilter = { filter: \"\" };\n #groupBy: VuuGroupBy = [];\n #range = Range(0, 0);\n #selectedRowsCount = 0;\n #size = 0;\n #sort: VuuSort = { sortDefs: [] };\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n public rowCount: number | undefined;\n public viewport: string;\n\n private keys = new KeySet(this.#range);\n\n constructor({\n aggregations,\n data,\n filterSpec,\n groupBy,\n sort,\n title,\n viewport,\n }: JsonDataSourceConstructorProps) {\n super();\n if (!data) {\n throw Error(\"JsonDataSource constructor called without data\");\n }\n\n [this.columnDescriptors, this.#data] = jsonToDataSourceRows(data);\n\n this.visibleRows = this.#data\n .filter((row) => row[DEPTH] === 0)\n .map((row, index) =>\n ([index, index] as Partial<DataSourceRow>).concat(row.slice(2)),\n ) as DataSourceRow[];\n this.viewport = viewport || uuid();\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (this.columnDescriptors) {\n this.#config = {\n ...this.#config,\n columns: this.columnDescriptors.map((c) => c.name),\n };\n }\n if (filterSpec) {\n this.#filter = filterSpec;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (sort) {\n this.#sort = sort;\n }\n this.#title = title;\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? uuid(),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (columns) {\n this.#config = {\n ...this.#config,\n columns,\n };\n }\n if (filterSpec) {\n this.#filter = filterSpec;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (sort) {\n this.#sort = sort;\n }\n\n if (this.#status !== \"initialising\") {\n //TODO check if subscription details are still the same\n return;\n }\n\n this.viewport = viewport;\n\n this.#status = \"subscribed\";\n\n this.clientCallback?.({\n aggregations: this.#aggregations,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n columns: this.#config.columns,\n filterSpec: this.#filter,\n groupBy: this.#groupBy,\n range: this.#range,\n sort: this.#sort,\n tableSchema: NULL_SCHEMA,\n });\n\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.visibleRows.length,\n });\n\n if (range && !this.#range.equals(range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n\n unsubscribe() {\n console.log(\"noop\");\n }\n\n suspend() {\n console.log(\"noop\");\n return this;\n }\n\n resume() {\n console.log(\"noop\");\n return this;\n }\n\n disable() {\n console.log(\"noop\");\n return this;\n }\n\n enable() {\n console.log(\"noop\");\n return this;\n }\n set data(data: JsonData) {\n [this.columnDescriptors, this.#data] = jsonToDataSourceRows(data);\n this.visibleRows = this.#data\n .filter((row) => row[DEPTH] === 0)\n .map((row, index) =>\n ([index, index] as Partial<DataSourceRow>).concat(row.slice(2)),\n ) as DataSourceRow[];\n\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n select(selected: Selection) {\n const updatedRows: DataSourceRow[] = [];\n for (const row of this.#data) {\n const { [IDX]: rowIndex, [SELECTED]: sel } = row;\n const wasSelected = sel === 1;\n const nowSelected = isSelected(selected, rowIndex);\n if (nowSelected !== wasSelected) {\n const selectedRow = row.slice() as DataSourceRow;\n selectedRow[SELECTED] = nowSelected ? 1 : 0;\n this.#data[rowIndex] = selectedRow;\n updatedRows.push(selectedRow);\n }\n }\n\n if (updatedRows.length > 0) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n type: \"viewport-update\",\n rows: updatedRows,\n });\n }\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.visibleRows[keyOrIndex];\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n\n this.expandedRows.add(key);\n this.visibleRows = getVisibleRows(this.#data, this.expandedRows);\n const { from, to } = this.#range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n closeTreeNode(keyOrIndex: string | number, cascade = false) {\n const key = this.getRowKey(keyOrIndex);\n\n this.expandedRows.delete(key);\n if (cascade) {\n for (const rowKey of this.expandedRows.keys()) {\n if (rowKey.startsWith(key)) {\n this.expandedRows.delete(rowKey);\n }\n }\n }\n this.visibleRows = getVisibleRows(this.#data, this.expandedRows);\n this.sendRowsToClient();\n }\n\n get status() {\n return this.#status;\n }\n\n get config() {\n return this.#config;\n }\n\n applyConfig() {\n return NO_CONFIG_CHANGES;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: Range) {\n this.#range = range;\n this.keys.reset(range);\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n private sendRowsToClient() {\n const { from, to } = this.#range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n get columns() {\n return this.#config.columns;\n }\n\n set columns(columns: string[]) {\n // TODO use setter\n this.#config = {\n ...this.#config,\n columns,\n };\n }\n\n get aggregations() {\n return this.#aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.#aggregations = aggregations;\n }\n\n get sort() {\n return this.#sort;\n }\n\n set sort(sort: VuuSort) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#sort = sort;\n }\n\n get filter() {\n return this.#filter;\n }\n\n set filter(filter: DataSourceFilter) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#filter = filter;\n }\n\n get groupBy() {\n return this.#groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.#groupBy = groupBy;\n }\n\n get title() {\n return this.#title ?? \"\";\n }\n\n set title(title: string) {\n this.#title = title;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n console.log(\"rmenuRpcCall\", {\n rpcRequest,\n });\n return undefined;\n }\n\n async editRpcCall(): Promise<VuuRpcEditResponse> {\n throw Error(\"JSONDataSource does not implement editRpcCall\");\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n getChildRows(rowKey: string) {\n const parentRow = this.#data.find((row) => row[KEY] === rowKey);\n if (parentRow) {\n const { [IDX]: parentIdx, [DEPTH]: parentDepth } = parentRow;\n let rowIdx = parentIdx + 1;\n const childRows = [];\n do {\n const { [DEPTH]: depth } = this.#data[rowIdx];\n if (depth === parentDepth + 1) {\n childRows.push(this.#data[rowIdx]);\n } else if (depth <= parentDepth) {\n break;\n }\n rowIdx += 1;\n } while (rowIdx < this.#data.length);\n return childRows;\n } else {\n console.warn(\n `JsonDataSource getChildRows row not found for key ${rowKey}`,\n );\n }\n\n return [];\n }\n\n getRowsAtDepth(depth: number, visibleOnly = true) {\n const rows = visibleOnly ? this.visibleRows : this.#data;\n return rows.filter((row) => row[DEPTH] === depth);\n }\n}\n\ntype Index = {\n value: number;\n};\n\nfunction getVisibleRows(rows: DataSourceRow[], expandedKeys: Set<string>) {\n const visibleRows: DataSourceRow[] = [];\n const index: Index = { value: 0 };\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const { [DEPTH]: depth, [KEY]: key, [IS_LEAF]: isLeaf } = row;\n const isExpanded = expandedKeys.has(key);\n visibleRows.push(cloneRow(row, index, isExpanded));\n if (!isLeaf && !isExpanded) {\n do {\n i += 1;\n } while (i < rows.length - 1 && rows[i + 1][DEPTH] > depth);\n }\n }\n return visibleRows;\n}\n\nconst cloneRow = (\n row: DataSourceRow,\n index: Index,\n isExpanded: boolean,\n): DataSourceRow => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = index.value;\n dolly[1] = index.value;\n if (isExpanded) {\n dolly[IS_EXPANDED] = true;\n }\n index.value += 1;\n return dolly;\n};\n"],"names":["metadataKeys","EventEmitter","vanillaConfig","Range","KeySet","jsonToDataSourceRows","uuid","NULL_RANGE","isSelected","NO_CONFIG_CHANGES"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeDataSource.js","sources":["../../../../packages/vuu-data-local/src/tree-data-source/TreeDataSource.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceRow,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n Selection,\n MenuRpcResponse,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n DataSourceFilter,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n getParentRow,\n isSelected,\n isSingleValueFilter,\n KeySet,\n lastPathSegment,\n metadataKeys,\n missingAncestor,\n NULL_RANGE,\n TreeSourceNode,\n treeToDataSourceRows,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { IconProvider } from \"./IconProvider\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport { FilterClause } from \"@vuu-ui/vuu-filter-types\";\n\nconst NULL_SCHEMA = { columns: [], key: \"\", table: { module: \"\", table: \"\" } };\n\ntype VisibleRowIndex = Record<number, number>;\n\nexport interface TreeDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n data: TreeSourceNode[];\n}\n\nconst { COUNT, DEPTH, IDX, IS_EXPANDED, IS_LEAF, KEY, SELECTED } = metadataKeys;\n\nconst toClientRow = (row: DataSourceRow, keys: KeySet) => {\n const [rowIndex] = row;\n const clientRow = row.slice() as DataSourceRow;\n clientRow[1] = keys.keyFor(rowIndex);\n return clientRow;\n};\n\nexport class TreeDataSource extends BaseDataSource {\n public columnDescriptors: ColumnDescriptor[];\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private expandedRows = new Set<string>();\n private visibleRows: DataSourceRow[] = [];\n private visibleRowIndex: VisibleRowIndex = {};\n\n #aggregations: VuuAggregation[] = [];\n #data: DataSourceRow[];\n #iconProvider: IconProvider;\n #selectedRowsCount = 0;\n #size = 0;\n #status: DataSourceStatus = \"initialising\";\n #filterSet: number[] | undefined;\n\n public rowCount: number | undefined;\n\n private keys = new KeySet(this._range);\n\n constructor({ data, ...props }: TreeDataSourceConstructorProps) {\n super(props);\n\n if (!data) {\n throw Error(\"TreeDataSource constructor called without data\");\n }\n this.#iconProvider = new IconProvider();\n\n [this.columnDescriptors, this.#data] = treeToDataSourceRows(\n data,\n this.#iconProvider,\n );\n\n if (this.columnDescriptors) {\n const columns = this.columnDescriptors.map((c) => c.name);\n this._config = {\n ...this._config,\n columns,\n groupBy: columns.slice(1),\n };\n }\n }\n\n async subscribe(\n {\n aggregations,\n columns,\n range,\n revealSelected,\n selectedKeyValues,\n viewport = this.viewport ?? uuid(),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (columns) {\n this._config = {\n ...this._config,\n columns,\n };\n }\n\n if (this.#status !== \"initialising\") {\n //TODO check if subscription details are still the same\n return;\n }\n\n this.viewport = viewport;\n\n this.#status = \"subscribed\";\n this.#selectedRowsCount = selectedKeyValues?.length ?? 0;\n\n if (selectedKeyValues) {\n this.applySelectedKeyValues(selectedKeyValues, revealSelected);\n }\n\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n\n this.clientCallback?.({\n aggregations: this.#aggregations,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n columns: this.columns,\n filterSpec: this.filter,\n groupBy: this._config.groupBy,\n range: this.range,\n sort: this.sort,\n tableSchema: NULL_SCHEMA,\n });\n\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.visibleRows.length,\n });\n\n if (range && !this._range.equals(range)) {\n this.range = range;\n } else if (this._range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n\n unsubscribe() {\n console.log(\"noop\");\n }\n\n suspend() {\n console.log(\"noop\");\n return this;\n }\n\n resume() {\n console.log(\"noop\");\n return this;\n }\n\n disable() {\n console.log(\"noop\");\n return this;\n }\n\n enable() {\n console.log(\"noop\");\n return this;\n }\n set data(data: TreeSourceNode[]) {\n [this.columnDescriptors, this.#data] = treeToDataSourceRows(data);\n\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n // Note not using the setter\n this._config = {\n ...this._config,\n filterSpec: filter,\n };\n\n if (filter.filter) {\n this.applyFilter(filter);\n } else {\n this.#filterSet = undefined;\n }\n\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n this.#filterSet,\n );\n\n const { from, to } = this.range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n private applyFilter({ filter: filterQuery, filterStruct }: DataSourceFilter) {\n const filter = filterStruct ?? (parseFilter(filterQuery) as FilterClause);\n if (isSingleValueFilter(filter)) {\n const filterSet = [];\n const regex = new RegExp(`${filter.value}`, \"i\");\n for (const row of this.#data) {\n const { [KEY]: key, [IDX]: idx } = row;\n if (regex.test(lastPathSegment(key, \"|\"))) {\n filterSet.push(idx);\n }\n }\n this.#filterSet = filterSet;\n }\n }\n\n /**\n * used to apply an initial selection. These may not necessarily be\n * visible. If revealOnSelect is in force, expand nodes as necessary\n * to ensure selected nodes are visible\n */\n private applySelectedKeyValues(keys: string[], revealSelected = false) {\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n const row = this.#data[rowIdx];\n row[SELECTED] = 1;\n\n if (revealSelected && row[DEPTH] !== 1) {\n const keys = key.slice(6).split(\"|\").slice(0, -1);\n\n let path = \"$root\";\n do {\n path = `${path}|${keys.shift()}`;\n this.expandedRows.add(path);\n } while (keys.length);\n }\n });\n }\n\n private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\n\n // Incoming Selection references visibleRow indices\n select(selected: Selection) {\n // todo get a diff\n const updatedRows: DataSourceRow[] = [];\n for (const row of this.visibleRows) {\n const { [IDX]: rowIndex, [SELECTED]: sel } = row;\n const wasSelected = sel === 1;\n const nowSelected = isSelected(selected, rowIndex);\n if (nowSelected !== wasSelected) {\n const selectedRow = row.slice() as DataSourceRow;\n const selectedValue = nowSelected ? 1 : 0;\n selectedRow[SELECTED] = selectedValue;\n const dataRowIdx = this.visibleRowIndex[rowIndex];\n this.visibleRows[rowIndex] = selectedRow;\n this.#data[dataRowIdx][SELECTED] = selectedValue;\n updatedRows.push(selectedRow);\n }\n }\n\n if (updatedRows.length > 0) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n type: \"viewport-update\",\n rows: updatedRows,\n });\n }\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.expandedRows.add(key);\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n\n const { from, to } = this._range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n closeTreeNode(keyOrIndex: string | number, cascade = false) {\n const key = this.getRowKey(keyOrIndex);\n this.expandedRows.delete(key);\n if (cascade) {\n for (const rowKey of this.expandedRows.keys()) {\n if (rowKey.startsWith(key)) {\n this.expandedRows.delete(rowKey);\n }\n }\n }\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n this.sendRowsToClient();\n }\n\n get status() {\n return this.#status;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n rangeRequest(range: VuuRange) {\n this.keys.reset(range);\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n private sendRowsToClient() {\n const { from, to } = this._range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n console.log(\"rmenuRpcCall\", {\n rpcRequest,\n });\n return undefined;\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n getChildRows(rowKey: string) {\n const parentRow = this.#data.find((row) => row[KEY] === rowKey);\n if (parentRow) {\n const { [IDX]: parentIdx, [DEPTH]: parentDepth } = parentRow;\n let rowIdx = parentIdx + 1;\n const childRows = [];\n do {\n const { [DEPTH]: depth } = this.#data[rowIdx];\n if (depth === parentDepth + 1) {\n childRows.push(this.#data[rowIdx]);\n } else if (depth <= parentDepth) {\n break;\n }\n rowIdx += 1;\n } while (rowIdx < this.#data.length);\n return childRows;\n } else {\n console.warn(\n `JsonDataSource getChildRows row not found for key ${rowKey}`,\n );\n }\n\n return [];\n }\n\n getRowsAtDepth(depth: number, visibleOnly = true) {\n const rows = visibleOnly ? this.visibleRows : this.#data;\n return rows.filter((row) => row[DEPTH] === depth);\n }\n\n getRowAtIndex(rowIdx: number) {\n return this.visibleRows[rowIdx];\n }\n}\n\nfunction getVisibleRows(\n rows: DataSourceRow[],\n expandedKeys: Set<string>,\n filterset?: number[],\n): [visibleRows: DataSourceRow[], index: VisibleRowIndex] {\n const visibleRows: DataSourceRow[] = [];\n const visibleRowIndex: VisibleRowIndex = {};\n\n const data = filterset ?? rows;\n\n for (let i = 0, index = 0; i < data.length; i++) {\n const idx = filterset ? filterset[i] : i;\n const row = rows[idx];\n const {\n [COUNT]: count,\n [DEPTH]: depth,\n [KEY]: key,\n [IS_LEAF]: isLeaf,\n } = row;\n if (filterset) {\n // assume expanded for now\n\n // if we have skipped a higher level group (that didn't directly match\n // our filter criteria, add it.\n const previousRow = visibleRows.at(-1);\n if (missingAncestor(row, previousRow)) {\n let currentRow: DataSourceRow | undefined = row;\n const missingRows = [];\n while (currentRow) {\n currentRow = getParentRow(rows, currentRow);\n if (currentRow) {\n // we will get the missing rows in reverse order\n missingRows.unshift(currentRow);\n }\n }\n missingRows.forEach((row) => {\n visibleRows.push(cloneRow(row, index++, true));\n });\n }\n\n visibleRows.push(cloneRow(row, index++, true));\n visibleRowIndex[index] = i;\n } else {\n const isExpanded = expandedKeys.has(key);\n visibleRows.push(cloneRow(row, index, isExpanded));\n visibleRowIndex[index++] = i;\n const skipNonVisibleRows = !isLeaf && !isExpanded && count > 0;\n if (skipNonVisibleRows) {\n do {\n i += 1;\n } while (i < rows.length - 1 && rows[i + 1][DEPTH] > depth);\n }\n }\n }\n return [visibleRows, visibleRowIndex];\n}\n\nconst cloneRow = (\n row: DataSourceRow,\n index: number,\n isExpanded: boolean,\n): DataSourceRow => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = index;\n dolly[1] = index;\n if (isExpanded) {\n dolly[IS_EXPANDED] = true;\n }\n return dolly;\n};\n"],"names":["metadataKeys","BaseDataSource","KeySet","IconProvider","treeToDataSourceRows","uuid","NULL_RANGE","parseFilter","isSingleValueFilter","lastPathSegment","keys","isSelected","missingAncestor","getParentRow","row"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeDataSource.js","sources":["../../../../packages/vuu-data-local/src/tree-data-source/TreeDataSource.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceRow,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n Selection,\n MenuRpcResponse,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n DataSourceFilter,\n DataSource,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n getParentRow,\n isSelected,\n isSingleValueFilter,\n KeySet,\n lastPathSegment,\n metadataKeys,\n missingAncestor,\n NULL_RANGE,\n TreeSourceNode,\n treeToDataSourceRows,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { IconProvider } from \"./IconProvider\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport { FilterClause } from \"@vuu-ui/vuu-filter-types\";\n\nconst NULL_SCHEMA = { columns: [], key: \"\", table: { module: \"\", table: \"\" } };\n\ntype VisibleRowIndex = Record<number, number>;\n\nexport interface TreeDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n data: TreeSourceNode[];\n}\n\nconst { COUNT, DEPTH, IDX, IS_EXPANDED, IS_LEAF, KEY, SELECTED } = metadataKeys;\n\nconst toClientRow = (row: DataSourceRow, keys: KeySet) => {\n const [rowIndex] = row;\n const clientRow = row.slice() as DataSourceRow;\n clientRow[1] = keys.keyFor(rowIndex);\n return clientRow;\n};\n\nexport class TreeDataSource extends BaseDataSource implements DataSource {\n public columnDescriptors: ColumnDescriptor[];\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private expandedRows = new Set<string>();\n private visibleRows: DataSourceRow[] = [];\n private visibleRowIndex: VisibleRowIndex = {};\n\n #aggregations: VuuAggregation[] = [];\n #data: DataSourceRow[];\n #iconProvider: IconProvider;\n #selectedRowsCount = 0;\n #size = 0;\n #status: DataSourceStatus = \"initialising\";\n #filterSet: number[] | undefined;\n\n public rowCount: number | undefined;\n\n private keys = new KeySet(this._range);\n\n constructor({ data, ...props }: TreeDataSourceConstructorProps) {\n super(props);\n\n if (!data) {\n throw Error(\"TreeDataSource constructor called without data\");\n }\n this.#iconProvider = new IconProvider();\n\n [this.columnDescriptors, this.#data] = treeToDataSourceRows(\n data,\n this.#iconProvider,\n );\n\n if (this.columnDescriptors) {\n const columns = this.columnDescriptors.map((c) => c.name);\n this._config = {\n ...this._config,\n columns,\n groupBy: columns.slice(1),\n };\n }\n }\n\n async subscribe(\n {\n aggregations,\n columns,\n range,\n revealSelected,\n selectedKeyValues,\n viewport = this.viewport ?? uuid(),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (columns) {\n this._config = {\n ...this._config,\n columns,\n };\n }\n\n if (this.#status !== \"initialising\") {\n //TODO check if subscription details are still the same\n return;\n }\n\n this.viewport = viewport;\n\n this.#status = \"subscribed\";\n this.#selectedRowsCount = selectedKeyValues?.length ?? 0;\n\n if (selectedKeyValues) {\n this.applySelectedKeyValues(selectedKeyValues, revealSelected);\n }\n\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n\n this.clientCallback?.({\n aggregations: this.#aggregations,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n columns: this.columns,\n filterSpec: this.filter,\n groupBy: this._config.groupBy,\n range: this.range,\n sort: this.sort,\n tableSchema: NULL_SCHEMA,\n });\n\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.visibleRows.length,\n });\n\n if (range && !this._range.equals(range)) {\n this.range = range;\n } else if (this._range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n\n unsubscribe() {\n console.log(\"noop\");\n }\n\n suspend() {\n console.log(\"noop\");\n return this;\n }\n\n resume() {\n console.log(\"noop\");\n return this;\n }\n\n disable() {\n console.log(\"noop\");\n return this;\n }\n\n enable() {\n console.log(\"noop\");\n return this;\n }\n set data(data: TreeSourceNode[]) {\n [this.columnDescriptors, this.#data] = treeToDataSourceRows(data);\n\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n // Note not using the setter\n this._config = {\n ...this._config,\n filterSpec: filter,\n };\n\n if (filter.filter) {\n this.applyFilter(filter);\n } else {\n this.#filterSet = undefined;\n }\n\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n this.#filterSet,\n );\n\n const { from, to } = this.range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n private applyFilter({ filter: filterQuery, filterStruct }: DataSourceFilter) {\n const filter = filterStruct ?? (parseFilter(filterQuery) as FilterClause);\n if (isSingleValueFilter(filter)) {\n const filterSet = [];\n const regex = new RegExp(`${filter.value}`, \"i\");\n for (const row of this.#data) {\n const { [KEY]: key, [IDX]: idx } = row;\n if (regex.test(lastPathSegment(key, \"|\"))) {\n filterSet.push(idx);\n }\n }\n this.#filterSet = filterSet;\n }\n }\n\n /**\n * used to apply an initial selection. These may not necessarily be\n * visible. If revealOnSelect is in force, expand nodes as necessary\n * to ensure selected nodes are visible\n */\n private applySelectedKeyValues(keys: string[], revealSelected = false) {\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n const row = this.#data[rowIdx];\n row[SELECTED] = 1;\n\n if (revealSelected && row[DEPTH] !== 1) {\n const keys = key.slice(6).split(\"|\").slice(0, -1);\n\n let path = \"$root\";\n do {\n path = `${path}|${keys.shift()}`;\n this.expandedRows.add(path);\n } while (keys.length);\n }\n });\n }\n\n private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\n\n // Incoming Selection references visibleRow indices\n select(selected: Selection) {\n // todo get a diff\n const updatedRows: DataSourceRow[] = [];\n for (const row of this.visibleRows) {\n const { [IDX]: rowIndex, [SELECTED]: sel } = row;\n const wasSelected = sel === 1;\n const nowSelected = isSelected(selected, rowIndex);\n if (nowSelected !== wasSelected) {\n const selectedRow = row.slice() as DataSourceRow;\n const selectedValue = nowSelected ? 1 : 0;\n selectedRow[SELECTED] = selectedValue;\n const dataRowIdx = this.visibleRowIndex[rowIndex];\n this.visibleRows[rowIndex] = selectedRow;\n this.#data[dataRowIdx][SELECTED] = selectedValue;\n updatedRows.push(selectedRow);\n }\n }\n\n if (updatedRows.length > 0) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n type: \"viewport-update\",\n rows: updatedRows,\n });\n }\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.expandedRows.add(key);\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n\n const { from, to } = this._range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n closeTreeNode(keyOrIndex: string | number, cascade = false) {\n const key = this.getRowKey(keyOrIndex);\n this.expandedRows.delete(key);\n if (cascade) {\n for (const rowKey of this.expandedRows.keys()) {\n if (rowKey.startsWith(key)) {\n this.expandedRows.delete(rowKey);\n }\n }\n }\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n this.sendRowsToClient();\n }\n\n get status() {\n return this.#status;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n rangeRequest(range: VuuRange) {\n this.keys.reset(range);\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n private sendRowsToClient() {\n const { from, to } = this._range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n console.log(\"rmenuRpcCall\", {\n rpcRequest,\n });\n return undefined;\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n getChildRows(rowKey: string) {\n const parentRow = this.#data.find((row) => row[KEY] === rowKey);\n if (parentRow) {\n const { [IDX]: parentIdx, [DEPTH]: parentDepth } = parentRow;\n let rowIdx = parentIdx + 1;\n const childRows = [];\n do {\n const { [DEPTH]: depth } = this.#data[rowIdx];\n if (depth === parentDepth + 1) {\n childRows.push(this.#data[rowIdx]);\n } else if (depth <= parentDepth) {\n break;\n }\n rowIdx += 1;\n } while (rowIdx < this.#data.length);\n return childRows;\n } else {\n console.warn(\n `JsonDataSource getChildRows row not found for key ${rowKey}`,\n );\n }\n\n return [];\n }\n\n getRowsAtDepth(depth: number, visibleOnly = true) {\n const rows = visibleOnly ? this.visibleRows : this.#data;\n return rows.filter((row) => row[DEPTH] === depth);\n }\n\n getRowAtIndex(rowIdx: number) {\n return this.visibleRows[rowIdx];\n }\n}\n\nfunction getVisibleRows(\n rows: DataSourceRow[],\n expandedKeys: Set<string>,\n filterset?: number[],\n): [visibleRows: DataSourceRow[], index: VisibleRowIndex] {\n const visibleRows: DataSourceRow[] = [];\n const visibleRowIndex: VisibleRowIndex = {};\n\n const data = filterset ?? rows;\n\n for (let i = 0, index = 0; i < data.length; i++) {\n const idx = filterset ? filterset[i] : i;\n const row = rows[idx];\n const {\n [COUNT]: count,\n [DEPTH]: depth,\n [KEY]: key,\n [IS_LEAF]: isLeaf,\n } = row;\n if (filterset) {\n // assume expanded for now\n\n // if we have skipped a higher level group (that didn't directly match\n // our filter criteria, add it.\n const previousRow = visibleRows.at(-1);\n if (missingAncestor(row, previousRow)) {\n let currentRow: DataSourceRow | undefined = row;\n const missingRows = [];\n while (currentRow) {\n currentRow = getParentRow(rows, currentRow);\n if (currentRow) {\n // we will get the missing rows in reverse order\n missingRows.unshift(currentRow);\n }\n }\n missingRows.forEach((row) => {\n visibleRows.push(cloneRow(row, index++, true));\n });\n }\n\n visibleRows.push(cloneRow(row, index++, true));\n visibleRowIndex[index] = i;\n } else {\n const isExpanded = expandedKeys.has(key);\n visibleRows.push(cloneRow(row, index, isExpanded));\n visibleRowIndex[index++] = i;\n const skipNonVisibleRows = !isLeaf && !isExpanded && count > 0;\n if (skipNonVisibleRows) {\n do {\n i += 1;\n } while (i < rows.length - 1 && rows[i + 1][DEPTH] > depth);\n }\n }\n }\n return [visibleRows, visibleRowIndex];\n}\n\nconst cloneRow = (\n row: DataSourceRow,\n index: number,\n isExpanded: boolean,\n): DataSourceRow => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = index;\n dolly[1] = index;\n if (isExpanded) {\n dolly[IS_EXPANDED] = true;\n }\n return dolly;\n};\n"],"names":["metadataKeys","BaseDataSource","KeySet","IconProvider","treeToDataSourceRows","uuid","NULL_RANGE","parseFilter","isSingleValueFilter","lastPathSegment","keys","isSelected","missingAncestor","getParentRow","row"],"mappings":"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"}
|
|
@@ -704,6 +704,9 @@ class ArrayDataSource extends EventEmitter {
|
|
|
704
704
|
async remoteProcedureCall() {
|
|
705
705
|
return Promise.reject();
|
|
706
706
|
}
|
|
707
|
+
async editRpcCall(rpcRequest) {
|
|
708
|
+
throw Error("ArrayDataSource does not implement editRpcCall");
|
|
709
|
+
}
|
|
707
710
|
async menuRpcCall(rpcRequest) {
|
|
708
711
|
return new Promise((resolve) => {
|
|
709
712
|
if (isEditCellRequest(rpcRequest)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-data-source.js","sources":["../../../../packages/vuu-data-local/src/array-data-source/array-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceRow,\n DataSourceStatus,\n DataSourceSubscribedMessage,\n Selection,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { filterPredicate, parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n DataSourceConfigChanges,\n EventEmitter,\n KeySet,\n NULL_RANGE,\n Range,\n buildColumnMap,\n combineFilters,\n getAddedItems,\n getMissingItems,\n hasBaseFilter,\n hasFilter,\n hasGroupBy,\n hasSort,\n isConfigChanged,\n isEditCellRequest,\n isGroupByChanged,\n logger,\n metadataKeys,\n rangeNewItems,\n selectionCount,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n} from \"@vuu-ui/vuu-utils\";\nimport { aggregateData } from \"./aggregate-utils\";\nimport { buildDataToClientMap, toClientRow } from \"./array-data-utils\";\nimport { GroupMap, collapseGroup, expandGroup, groupRows } from \"./group-utils\";\nimport {\n binarySearch,\n ColIndexSortDef,\n sortComparator,\n sortRows,\n} from \"./sort-utils\";\n\nconst { debug, info } = logger(\"ArrayDataSource\");\n\nconst { KEY } = metadataKeys;\n\nexport interface ArrayDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n columnDescriptors: ColumnDescriptor[];\n data: Array<VuuRowDataItemType[]>;\n dataMap?: ColumnMap;\n keyColumn?: string;\n rangeChangeRowset?: \"delta\" | \"full\";\n}\n\nconst toDataSourceRow =\n (key: number) =>\n (data: VuuRowDataItemType[], index: number): DataSourceRow => {\n return [\n index,\n index,\n true,\n false,\n 1,\n 0,\n String(data[key]),\n 0,\n 0, // ts\n false, // isNew\n ...data,\n ];\n };\n\n// const isError = (err: unknown): err is { message: string } =>\n// typeof err === \"object\" && err !== null && err.hasOwnProperty(\"message\");\n\nconst buildTableSchema = (\n columns: ColumnDescriptor[],\n keyColumn?: string,\n): TableSchema => {\n const schema: TableSchema = {\n columns: columns.map(({ name, serverDataType = \"string\" }) => ({\n name,\n serverDataType,\n })),\n key: keyColumn ?? columns[0].name,\n table: { module: \"\", table: \"Array\" },\n };\n\n return schema;\n};\n\nexport class ArrayDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private columnDescriptors: ColumnDescriptor[];\n /** sorted offsets of data within raw data, reflecting sort order\n * of columns specified by client.\n */\n private dataIndices: number[] | undefined;\n /** Map reflecting positions of data items in raw data */\n private dataMap: ColumnMap | undefined;\n private groupMap: undefined | GroupMap;\n /** the index of key field within raw data row */\n private key: number;\n private lastRangeServed: VuuRange = { from: 0, to: 0 };\n private rangeChangeRowset: \"delta\" | \"full\";\n private openTreeNodes: string[] = [];\n // Experimental. There are some config changes - first concrete example is baseFilter applied to\n // 'freeze' data, that should not immediately affect the displayed data, therefore not cause\n // range reset.\n private preserveScrollPositionAcrossConfigChange = false;\n\n /** Map reflecting positions of columns in client data sent to user */\n #columnMap: ColumnMap;\n protected _config: WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n } = vanillaConfig;\n #data: DataSourceRow[];\n #freezeTimestamp: number | undefined = undefined;\n #keys = new KeySet(NULL_RANGE);\n #links: LinkDescriptorWithLabel[] | undefined;\n #range = Range(0, 0);\n #selectedRowsCount = 0;\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n protected _menu: VuuMenu | undefined;\n protected selectedRows: Selection = [];\n\n public tableSchema: TableSchema;\n public viewport: string;\n\n protected processedData: DataSourceRow[] | undefined = undefined;\n\n constructor({\n aggregations,\n baseFilterSpec,\n // different from RemoteDataSource\n columnDescriptors,\n data,\n dataMap,\n filterSpec,\n groupBy,\n keyColumn,\n rangeChangeRowset = \"delta\",\n sort,\n title,\n viewport,\n }: ArrayDataSourceConstructorProps) {\n super();\n if (!data || !columnDescriptors) {\n throw Error(\n \"ArrayDataSource constructor called without data or without columnDescriptors\",\n );\n }\n\n this.columnDescriptors = columnDescriptors;\n this.dataMap = dataMap;\n this.key = keyColumn\n ? this.columnDescriptors.findIndex((col) => col.name === keyColumn)\n : 0;\n this.rangeChangeRowset = rangeChangeRowset;\n this.tableSchema = buildTableSchema(columnDescriptors, keyColumn);\n this.viewport = viewport || uuid();\n this.#title = title;\n\n const columns = columnDescriptors.map((col) => col.name);\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n this.#data = data.map<DataSourceRow>(toDataSourceRow(this.key));\n\n this.config = {\n ...this._config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec,\n columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n\n debug?.(`columnMap: ${JSON.stringify(this.#columnMap)}`);\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? (this.viewport = uuid()),\n columns,\n aggregations,\n baseFilterSpec,\n range,\n selectedIndexValues,\n selectedKeyValues,\n sort,\n groupBy,\n filterSpec,\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n this.viewport = viewport;\n this.#status = \"subscribed\";\n this.selectedRows =\n selectedIndexValues ??\n this.convertKeysToIndexValues(selectedKeyValues) ??\n [];\n this.#selectedRowsCount = selectionCount(this.selectedRows);\n this.lastRangeServed = { from: 0, to: 0 };\n\n let config = this._config;\n\n const hasConfigProps =\n aggregations || columns || filterSpec || groupBy || sort;\n if (hasConfigProps) {\n if (range) {\n this.setRange(range);\n }\n config = {\n ...config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n }\n\n const subscribedMessage: DataSourceSubscribedMessage = {\n ...config,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n range: this.#range,\n tableSchema: this.tableSchema,\n };\n this.clientCallback?.(subscribedMessage);\n this.emit(\"subscribed\", subscribedMessage);\n\n if (hasConfigProps) {\n // invoke setter to action config\n this.config = config;\n } else {\n this.sendSizeUpdateToClient();\n if (range && !this.#range.equals(range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(\n this.size / (this.range.to - this.range.from),\n );\n this.emit(\"page-count\", pageCount);\n }\n }\n }\n\n unsubscribe() {\n this.clientCallback = undefined;\n this.#status = \"unsubscribed\";\n this.emit(\"unsubscribed\", this.viewport);\n }\n\n suspend() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n this.#status = \"suspended\";\n this.emit(\"suspended\", this.viewport);\n }\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this.clientCallback = callback;\n }\n\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n this.emit(\"resumed\", this.viewport);\n\n this.sendRowsToClient(true);\n }\n\n disable() {\n this.emit(\"disabled\", this.viewport);\n }\n\n enable() {\n this.emit(\"enabled\", this.viewport);\n }\n\n select(selected: Selection) {\n this.#selectedRowsCount = selectionCount(selected);\n debug?.(`select ${JSON.stringify(selected)}`);\n this.selectedRows = selected;\n this.setRange(this.#range, true);\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.openTreeNodes.push(key);\n this.processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this._config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n this.processedData as DataSourceRow[],\n );\n this.setRange(this.#range.reset, true);\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.openTreeNodes = this.openTreeNodes.filter((value) => value !== key);\n if (this.processedData) {\n this.processedData = collapseGroup(key, this.processedData);\n this.setRange(this.#range.reset, true);\n }\n }\n\n get pageSize() {\n return this.#range.to - this.#range.from;\n }\n\n get links() {\n return this.#links;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n this.#links = links;\n }\n\n get menu() {\n return this._menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get data() {\n return this.#data;\n }\n\n // Only used by the UpdateGenerator\n get currentData() {\n return this.processedData ?? this.#data;\n }\n\n get table() {\n return this.tableSchema.table;\n }\n\n get config() {\n return this._config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n if (config) {\n const originalConfig = this._config;\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n\n this._config = withConfigDefaults(newConfig);\n\n let processedData: DataSourceRow[] | undefined;\n if (hasFilter(config) || hasBaseFilter(config)) {\n const fn = this.getFilterPredicate();\n processedData = this.#data.filter(fn);\n }\n\n if (hasSort(config)) {\n processedData = sortRows(\n processedData ?? this.#data,\n config.sort,\n this.#columnMap,\n );\n }\n\n if (\n this.openTreeNodes.length > 0 &&\n isGroupByChanged(originalConfig, config)\n ) {\n if (this._config.groupBy.length === 0) {\n this.openTreeNodes.length = 0;\n } else {\n //TODO purge any openTreeNodes for a no-longer-present groupBy col\n }\n }\n\n if (hasGroupBy(config)) {\n const [groupedData, groupMap] = groupRows(\n processedData ?? this.#data,\n config.groupBy,\n this.#columnMap,\n );\n this.groupMap = groupMap;\n processedData = groupedData;\n\n if (this.openTreeNodes.length > 0) {\n processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this._config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n processedData as DataSourceRow[],\n );\n }\n }\n if (processedData) {\n this.processedData = this.indexProcessedData(processedData);\n } else {\n this.processedData = undefined;\n }\n }\n\n if (this.#status === \"subscribed\") {\n this.sendSizeUpdateToClient();\n if (this.preserveScrollPositionAcrossConfigChange) {\n this.preserveScrollPositionAcrossConfigChange = false;\n } else {\n this.setRange(this.#range.reset, true);\n }\n if (\n configChanges.filterChanged ||\n configChanges.baseFilterChanged ||\n configChanges.groupByChanged\n ) {\n this.emit(\"resize\", this.size);\n }\n this.emit(\"config\", this._config, this.range, undefined, configChanges);\n }\n }\n }\n\n private indexProcessedData(data: DataSourceRow[]) {\n for (let i = 0; i < data.length; i++) {\n data[i][0] = i;\n data[i][1] = i;\n }\n return data;\n // return data?.map((row, i) => {\n // const dolly = row.slice() as DataSourceRow;\n // dolly[0] = i;\n // dolly[1] = i;\n // return dolly;\n // });\n }\n\n private getFilterPredicate() {\n const {\n filterSpec: { filterStruct },\n } = combineFilters(this._config);\n if (filterStruct) {\n return filterPredicate(this.#columnMap, filterStruct);\n } else {\n throw Error(\"filter must include filterStruct\");\n }\n }\n\n applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._config,\n config,\n );\n\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n this._config = {\n ...this._config,\n ...config,\n };\n } else {\n this._config = withConfigDefaults(newConfig);\n }\n return otherChanges;\n }\n }\n }\n\n get columnMap() {\n return this.#columnMap;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.processedData?.length ?? this.#data.length;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: Range) {\n this.setRange(range);\n }\n\n getRowAtIndex(rowIndex: number) {\n return this.processedData?.[rowIndex];\n }\n\n protected delete(row: VuuRowDataItemType[]) {\n console.log(`delete row ${row.join(\",\")}`);\n }\n\n protected insert = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const dataSourceRow = toDataSourceRow(this.key)(row, this.size);\n (this.#data as DataSourceRow[]).push(dataSourceRow);\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n const isSorted = hasSort(this.config);\n const isFiltered = hasFilter(this.config) || hasBaseFilter(this.config);\n if (isSorted && isFiltered) {\n const meetsFilterCriteria = this.getFilterPredicate();\n if (meetsFilterCriteria(dataSourceRow)) {\n this.insertIntoSortedData(dataSourceRow);\n }\n } else if (isSorted) {\n this.insertIntoSortedData(dataSourceRow);\n } else if (isFiltered) {\n const fn = this.getFilterPredicate();\n if (fn(dataSourceRow)) {\n this.processedData?.push(dataSourceRow);\n this.sendSizeUpdateToClient();\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n this.emit(\"resize\", this.#data.length);\n }\n } else {\n this.sendSizeUpdateToClient();\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n this.emit(\"resize\", this.size);\n }\n };\n\n private insertIntoSortedData(row: DataSourceRow) {\n const indexedSortDefs = this.config.sort.sortDefs.map<ColIndexSortDef>(\n ({ column, sortType }) => [this.columnMap[column], sortType],\n );\n\n const comparator = sortComparator(indexedSortDefs);\n const insertPos = binarySearch(\n this.processedData as DataSourceRow[],\n row,\n comparator,\n );\n\n this.sendSizeUpdateToClient();\n\n if (insertPos === -1) {\n this.processedData?.unshift(row);\n // this.#keys.reset(this.#range);\n if (this.processedData) {\n // horribly inefficient\n this.processedData = this.indexProcessedData(this.processedData);\n }\n\n if (insertPos <= this.#range.to) {\n this.sendRowsToClient(true);\n }\n if (this.processedData) {\n this.emit(\"resize\", this.processedData.length);\n }\n } else {\n if (this.processedData) {\n this.emit(\"resize\", this.processedData.length);\n }\n }\n }\n\n private validateDataValue(columnName: string, value: VuuRowDataItemType) {\n const columnDescriptor = this.columnDescriptors.find(\n (col) => col.name === columnName,\n );\n if (columnDescriptor) {\n switch (columnDescriptor.serverDataType) {\n case \"int\":\n {\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value) {\n throw Error(`${columnName} is int but value = ${value}`);\n }\n } else if (typeof value === \"string\") {\n const numericValue = parseFloat(value);\n if (Math.floor(numericValue) !== numericValue) {\n throw Error(`${columnName} is ${value} is not a valid integer`);\n }\n }\n }\n break;\n default:\n }\n } else {\n throw Error(`Unknown column ${columnName}`);\n }\n }\n\n protected updateDataItem = (\n keyValue: string,\n columnName: string,\n value: VuuRowDataItemType,\n ) => {\n this.validateDataValue(columnName, value);\n // TODO take sorting, filtering. grouping into account\n const colIndex = this.#columnMap[columnName];\n const dataColIndex = this.dataMap?.[columnName];\n const dataIndex = this.indexOfRowWithKey(keyValue);\n if (dataIndex !== -1 && dataColIndex !== undefined) {\n const dataSourceRow = this.#data[dataIndex];\n dataSourceRow[colIndex] = value;\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\n\n protected update = (row: VuuRowDataItemType[], columnName: string) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key] as string;\n const dataColIndex = this.dataMap?.[columnName] as number;\n return this.updateDataItem(keyValue, columnName, row[dataColIndex]);\n };\n\n protected updateRow = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key];\n const dataIndex = this.#data.findIndex((row) => row[KEY] === keyValue);\n if (dataIndex !== -1) {\n const dataSourceRow = toDataSourceRow(this.key)(row, dataIndex);\n // maybe update this in place\n this.#data[dataIndex] = dataSourceRow;\n const { from, to } = this.#range;\n if (dataIndex >= from && dataIndex < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private setRange(range: Range, forceFullRefresh = false) {\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n const currentPageCount = Math.ceil(\n this.size / (this.#range.to - this.#range.from),\n );\n const newPageCount = Math.ceil(this.size / (range.to - range.from));\n\n this.#range = range;\n const keysResequenced = this.#keys.reset(range);\n this.sendRowsToClient(forceFullRefresh || keysResequenced);\n\n requestAnimationFrame(() => {\n // executed within RAF in case this is used to setState/trigger render in listening clients\n if (newPageCount !== currentPageCount) {\n this.emit(\"page-count\", newPageCount);\n }\n this.emit(\"range\", range);\n });\n } else if (forceFullRefresh) {\n this.sendRowsToClient(forceFullRefresh);\n }\n }\n\n sendSizeUpdateToClient() {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.processedData ? this.processedData.length : this.#data.length,\n });\n }\n\n sendRowsToClient(forceFullRefresh = false, row?: DataSourceRow) {\n if (row) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n rows: [\n toClientRow(row, this.#keys, this.selectedRows, this.dataIndices),\n ],\n type: \"viewport-update\",\n });\n } else {\n const rowRange =\n this.rangeChangeRowset === \"delta\" && !forceFullRefresh\n ? rangeNewItems(this.lastRangeServed, this.#range)\n : this.#range;\n const data = this.processedData ?? this.#data;\n\n const rowsWithinViewport = data\n .slice(rowRange.from, rowRange.to)\n .map((row) =>\n toClientRow(row, this.#keys, this.selectedRows, this.dataIndices),\n );\n\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n range: this.#range,\n rows: rowsWithinViewport,\n size: data.length,\n type: \"viewport-update\",\n });\n this.lastRangeServed = {\n from: this.#range.from,\n to: this.#range.to,\n // to: Math.min(\n // this.#range.to,\n // this.#range.from + rowsWithinViewport.length,\n // ),\n };\n // console.log(\n // `%c[ArrayDataSource] lastRangeServed (${this.lastRangeServed.from}:${this.lastRangeServed.to})`,\n // \"color:green;font-weight:bold;\",\n // );\n }\n }\n\n get columns() {\n return this._config.columns;\n }\n\n set columns(columns: string[]) {\n const addedColumns = getAddedItems(this.config.columns, columns);\n if (addedColumns.length > 0) {\n const columnsWithoutDescriptors = getMissingItems(\n this.columnDescriptors,\n addedColumns,\n (col) => col.name,\n );\n console.warn(`columnsWithoutDescriptors`, {\n columnsWithoutDescriptors,\n });\n }\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n\n this.config = {\n ...this._config,\n columns,\n };\n }\n\n get aggregations() {\n return this._config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this._config = {\n ...this._config,\n aggregations,\n };\n\n const targetData = this.processedData ?? this.#data;\n const leafData = this.#data;\n\n aggregateData(\n aggregations,\n targetData,\n this._config.groupBy,\n leafData,\n this.#columnMap,\n this.groupMap as GroupMap,\n );\n this.setRange(this.#range.reset, true);\n\n this.emit(\"config\", this._config, this.range);\n }\n\n get sort() {\n return this._config.sort;\n }\n\n set sort(sort: VuuSort) {\n debug?.(`sort ${JSON.stringify(sort)}`);\n this.config = {\n ...this._config,\n sort,\n };\n }\n\n get baseFilter() {\n return this._config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n debug?.(`baseFilter ${JSON.stringify(baseFilter)}`);\n // TODO check that baseFilter has changed\n this.config = {\n ...this._config,\n baseFilterSpec: baseFilter,\n };\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n debug?.(`filter ${JSON.stringify(filter)}`);\n // TODO check that filter has changed\n this.config = {\n ...this._config,\n filterSpec: filter,\n };\n }\n\n get groupBy() {\n return this._config.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.config = {\n ...this._config,\n groupBy,\n };\n }\n\n get title() {\n return this.#title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this.#title = title;\n this.emit(\"title-changed\", this.viewport, title);\n }\n\n get _clientCallback() {\n return this.clientCallback;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<VuuRpcResponse> {\n return new Promise((resolve) => {\n if (isEditCellRequest(rpcRequest)) {\n const { rowKey, field, value } = rpcRequest;\n try {\n this.updateDataItem(rowKey, field, value);\n resolve({\n action: {\n type: \"VP_EDIT_SUCCESS\",\n },\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId: this.viewport,\n });\n } catch (error) {\n resolve({\n error: String(error),\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId: this.viewport,\n });\n }\n } else {\n throw Error(\"menuRpcCall invalid rpcRequest\");\n }\n });\n }\n\n private convertKeysToIndexValues(keys?: string[]) {\n if (Array.isArray(keys)) {\n const indexValues: number[] = [];\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n if (rowIdx !== -1) {\n indexValues.push(rowIdx);\n }\n });\n return indexValues;\n }\n }\n\n // All in BaseDataSource\n freeze() {\n if (!this.isFrozen) {\n this.#freezeTimestamp = new Date().getTime();\n this.emit(\"freeze\", true, this.#freezeTimestamp);\n this.preserveScrollPositionAcrossConfigChange = true;\n this.baseFilter = {\n filter: `created < ${this.#freezeTimestamp}`,\n };\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n unfreeze() {\n if (this.isFrozen) {\n const freezeTimestamp = this.#freezeTimestamp as number;\n this.#freezeTimestamp = undefined;\n this.emit(\"freeze\", false, freezeTimestamp);\n this.preserveScrollPositionAcrossConfigChange = true;\n this.baseFilter = {\n filter: \"\",\n };\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n\n get freezeTimestamp() {\n return this.#freezeTimestamp;\n }\n\n get isFrozen() {\n return typeof this.#freezeTimestamp === \"number\";\n }\n}\n"],"names":["row"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"array-data-source.js","sources":["../../../../packages/vuu-data-local/src/array-data-source/array-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceRow,\n DataSourceStatus,\n DataSourceSubscribedMessage,\n Selection,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { filterPredicate, parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcEditRequest,\n VuuRpcEditResponse,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n DataSourceConfigChanges,\n EventEmitter,\n KeySet,\n NULL_RANGE,\n Range,\n buildColumnMap,\n combineFilters,\n getAddedItems,\n getMissingItems,\n hasBaseFilter,\n hasFilter,\n hasGroupBy,\n hasSort,\n isConfigChanged,\n isEditCellRequest,\n isGroupByChanged,\n logger,\n metadataKeys,\n rangeNewItems,\n selectionCount,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n} from \"@vuu-ui/vuu-utils\";\nimport { aggregateData } from \"./aggregate-utils\";\nimport { buildDataToClientMap, toClientRow } from \"./array-data-utils\";\nimport { GroupMap, collapseGroup, expandGroup, groupRows } from \"./group-utils\";\nimport {\n binarySearch,\n ColIndexSortDef,\n sortComparator,\n sortRows,\n} from \"./sort-utils\";\n\nconst { debug, info } = logger(\"ArrayDataSource\");\n\nconst { KEY } = metadataKeys;\n\nexport interface ArrayDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n columnDescriptors: ColumnDescriptor[];\n data: Array<VuuRowDataItemType[]>;\n dataMap?: ColumnMap;\n keyColumn?: string;\n rangeChangeRowset?: \"delta\" | \"full\";\n}\n\nconst toDataSourceRow =\n (key: number) =>\n (data: VuuRowDataItemType[], index: number): DataSourceRow => {\n return [\n index,\n index,\n true,\n false,\n 1,\n 0,\n String(data[key]),\n 0,\n 0, // ts\n false, // isNew\n ...data,\n ];\n };\n\n// const isError = (err: unknown): err is { message: string } =>\n// typeof err === \"object\" && err !== null && err.hasOwnProperty(\"message\");\n\nconst buildTableSchema = (\n columns: ColumnDescriptor[],\n keyColumn?: string,\n): TableSchema => {\n const schema: TableSchema = {\n columns: columns.map(({ name, serverDataType = \"string\" }) => ({\n name,\n serverDataType,\n })),\n key: keyColumn ?? columns[0].name,\n table: { module: \"\", table: \"Array\" },\n };\n\n return schema;\n};\n\nexport class ArrayDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private columnDescriptors: ColumnDescriptor[];\n /** sorted offsets of data within raw data, reflecting sort order\n * of columns specified by client.\n */\n private dataIndices: number[] | undefined;\n /** Map reflecting positions of data items in raw data */\n private dataMap: ColumnMap | undefined;\n private groupMap: undefined | GroupMap;\n /** the index of key field within raw data row */\n private key: number;\n private lastRangeServed: VuuRange = { from: 0, to: 0 };\n private rangeChangeRowset: \"delta\" | \"full\";\n private openTreeNodes: string[] = [];\n // Experimental. There are some config changes - first concrete example is baseFilter applied to\n // 'freeze' data, that should not immediately affect the displayed data, therefore not cause\n // range reset.\n private preserveScrollPositionAcrossConfigChange = false;\n\n /** Map reflecting positions of columns in client data sent to user */\n #columnMap: ColumnMap;\n protected _config: WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n } = vanillaConfig;\n #data: DataSourceRow[];\n #freezeTimestamp: number | undefined = undefined;\n #keys = new KeySet(NULL_RANGE);\n #links: LinkDescriptorWithLabel[] | undefined;\n #range = Range(0, 0);\n #selectedRowsCount = 0;\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n protected _menu: VuuMenu | undefined;\n protected selectedRows: Selection = [];\n\n public tableSchema: TableSchema;\n public viewport: string;\n\n protected processedData: DataSourceRow[] | undefined = undefined;\n\n constructor({\n aggregations,\n baseFilterSpec,\n // different from RemoteDataSource\n columnDescriptors,\n data,\n dataMap,\n filterSpec,\n groupBy,\n keyColumn,\n rangeChangeRowset = \"delta\",\n sort,\n title,\n viewport,\n }: ArrayDataSourceConstructorProps) {\n super();\n if (!data || !columnDescriptors) {\n throw Error(\n \"ArrayDataSource constructor called without data or without columnDescriptors\",\n );\n }\n\n this.columnDescriptors = columnDescriptors;\n this.dataMap = dataMap;\n this.key = keyColumn\n ? this.columnDescriptors.findIndex((col) => col.name === keyColumn)\n : 0;\n this.rangeChangeRowset = rangeChangeRowset;\n this.tableSchema = buildTableSchema(columnDescriptors, keyColumn);\n this.viewport = viewport || uuid();\n this.#title = title;\n\n const columns = columnDescriptors.map((col) => col.name);\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n this.#data = data.map<DataSourceRow>(toDataSourceRow(this.key));\n\n this.config = {\n ...this._config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec,\n columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n\n debug?.(`columnMap: ${JSON.stringify(this.#columnMap)}`);\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? (this.viewport = uuid()),\n columns,\n aggregations,\n baseFilterSpec,\n range,\n selectedIndexValues,\n selectedKeyValues,\n sort,\n groupBy,\n filterSpec,\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n this.viewport = viewport;\n this.#status = \"subscribed\";\n this.selectedRows =\n selectedIndexValues ??\n this.convertKeysToIndexValues(selectedKeyValues) ??\n [];\n this.#selectedRowsCount = selectionCount(this.selectedRows);\n this.lastRangeServed = { from: 0, to: 0 };\n\n let config = this._config;\n\n const hasConfigProps =\n aggregations || columns || filterSpec || groupBy || sort;\n if (hasConfigProps) {\n if (range) {\n this.setRange(range);\n }\n config = {\n ...config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n }\n\n const subscribedMessage: DataSourceSubscribedMessage = {\n ...config,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n range: this.#range,\n tableSchema: this.tableSchema,\n };\n this.clientCallback?.(subscribedMessage);\n this.emit(\"subscribed\", subscribedMessage);\n\n if (hasConfigProps) {\n // invoke setter to action config\n this.config = config;\n } else {\n this.sendSizeUpdateToClient();\n if (range && !this.#range.equals(range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(\n this.size / (this.range.to - this.range.from),\n );\n this.emit(\"page-count\", pageCount);\n }\n }\n }\n\n unsubscribe() {\n this.clientCallback = undefined;\n this.#status = \"unsubscribed\";\n this.emit(\"unsubscribed\", this.viewport);\n }\n\n suspend() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n this.#status = \"suspended\";\n this.emit(\"suspended\", this.viewport);\n }\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this.clientCallback = callback;\n }\n\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n this.emit(\"resumed\", this.viewport);\n\n this.sendRowsToClient(true);\n }\n\n disable() {\n this.emit(\"disabled\", this.viewport);\n }\n\n enable() {\n this.emit(\"enabled\", this.viewport);\n }\n\n select(selected: Selection) {\n this.#selectedRowsCount = selectionCount(selected);\n debug?.(`select ${JSON.stringify(selected)}`);\n this.selectedRows = selected;\n this.setRange(this.#range, true);\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.openTreeNodes.push(key);\n this.processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this._config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n this.processedData as DataSourceRow[],\n );\n this.setRange(this.#range.reset, true);\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.openTreeNodes = this.openTreeNodes.filter((value) => value !== key);\n if (this.processedData) {\n this.processedData = collapseGroup(key, this.processedData);\n this.setRange(this.#range.reset, true);\n }\n }\n\n get pageSize() {\n return this.#range.to - this.#range.from;\n }\n\n get links() {\n return this.#links;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n this.#links = links;\n }\n\n get menu() {\n return this._menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get data() {\n return this.#data;\n }\n\n // Only used by the UpdateGenerator\n get currentData() {\n return this.processedData ?? this.#data;\n }\n\n get table() {\n return this.tableSchema.table;\n }\n\n get config() {\n return this._config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n if (config) {\n const originalConfig = this._config;\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n\n this._config = withConfigDefaults(newConfig);\n\n let processedData: DataSourceRow[] | undefined;\n if (hasFilter(config) || hasBaseFilter(config)) {\n const fn = this.getFilterPredicate();\n processedData = this.#data.filter(fn);\n }\n\n if (hasSort(config)) {\n processedData = sortRows(\n processedData ?? this.#data,\n config.sort,\n this.#columnMap,\n );\n }\n\n if (\n this.openTreeNodes.length > 0 &&\n isGroupByChanged(originalConfig, config)\n ) {\n if (this._config.groupBy.length === 0) {\n this.openTreeNodes.length = 0;\n } else {\n //TODO purge any openTreeNodes for a no-longer-present groupBy col\n }\n }\n\n if (hasGroupBy(config)) {\n const [groupedData, groupMap] = groupRows(\n processedData ?? this.#data,\n config.groupBy,\n this.#columnMap,\n );\n this.groupMap = groupMap;\n processedData = groupedData;\n\n if (this.openTreeNodes.length > 0) {\n processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this._config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n processedData as DataSourceRow[],\n );\n }\n }\n if (processedData) {\n this.processedData = this.indexProcessedData(processedData);\n } else {\n this.processedData = undefined;\n }\n }\n\n if (this.#status === \"subscribed\") {\n this.sendSizeUpdateToClient();\n if (this.preserveScrollPositionAcrossConfigChange) {\n this.preserveScrollPositionAcrossConfigChange = false;\n } else {\n this.setRange(this.#range.reset, true);\n }\n if (\n configChanges.filterChanged ||\n configChanges.baseFilterChanged ||\n configChanges.groupByChanged\n ) {\n this.emit(\"resize\", this.size);\n }\n this.emit(\"config\", this._config, this.range, undefined, configChanges);\n }\n }\n }\n\n private indexProcessedData(data: DataSourceRow[]) {\n for (let i = 0; i < data.length; i++) {\n data[i][0] = i;\n data[i][1] = i;\n }\n return data;\n // return data?.map((row, i) => {\n // const dolly = row.slice() as DataSourceRow;\n // dolly[0] = i;\n // dolly[1] = i;\n // return dolly;\n // });\n }\n\n private getFilterPredicate() {\n const {\n filterSpec: { filterStruct },\n } = combineFilters(this._config);\n if (filterStruct) {\n return filterPredicate(this.#columnMap, filterStruct);\n } else {\n throw Error(\"filter must include filterStruct\");\n }\n }\n\n applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._config,\n config,\n );\n\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n this._config = {\n ...this._config,\n ...config,\n };\n } else {\n this._config = withConfigDefaults(newConfig);\n }\n return otherChanges;\n }\n }\n }\n\n get columnMap() {\n return this.#columnMap;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.processedData?.length ?? this.#data.length;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: Range) {\n this.setRange(range);\n }\n\n getRowAtIndex(rowIndex: number) {\n return this.processedData?.[rowIndex];\n }\n\n protected delete(row: VuuRowDataItemType[]) {\n console.log(`delete row ${row.join(\",\")}`);\n }\n\n protected insert = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const dataSourceRow = toDataSourceRow(this.key)(row, this.size);\n (this.#data as DataSourceRow[]).push(dataSourceRow);\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n const isSorted = hasSort(this.config);\n const isFiltered = hasFilter(this.config) || hasBaseFilter(this.config);\n if (isSorted && isFiltered) {\n const meetsFilterCriteria = this.getFilterPredicate();\n if (meetsFilterCriteria(dataSourceRow)) {\n this.insertIntoSortedData(dataSourceRow);\n }\n } else if (isSorted) {\n this.insertIntoSortedData(dataSourceRow);\n } else if (isFiltered) {\n const fn = this.getFilterPredicate();\n if (fn(dataSourceRow)) {\n this.processedData?.push(dataSourceRow);\n this.sendSizeUpdateToClient();\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n this.emit(\"resize\", this.#data.length);\n }\n } else {\n this.sendSizeUpdateToClient();\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n this.emit(\"resize\", this.size);\n }\n };\n\n private insertIntoSortedData(row: DataSourceRow) {\n const indexedSortDefs = this.config.sort.sortDefs.map<ColIndexSortDef>(\n ({ column, sortType }) => [this.columnMap[column], sortType],\n );\n\n const comparator = sortComparator(indexedSortDefs);\n const insertPos = binarySearch(\n this.processedData as DataSourceRow[],\n row,\n comparator,\n );\n\n this.sendSizeUpdateToClient();\n\n if (insertPos === -1) {\n this.processedData?.unshift(row);\n // this.#keys.reset(this.#range);\n if (this.processedData) {\n // horribly inefficient\n this.processedData = this.indexProcessedData(this.processedData);\n }\n\n if (insertPos <= this.#range.to) {\n this.sendRowsToClient(true);\n }\n if (this.processedData) {\n this.emit(\"resize\", this.processedData.length);\n }\n } else {\n if (this.processedData) {\n this.emit(\"resize\", this.processedData.length);\n }\n }\n }\n\n private validateDataValue(columnName: string, value: VuuRowDataItemType) {\n const columnDescriptor = this.columnDescriptors.find(\n (col) => col.name === columnName,\n );\n if (columnDescriptor) {\n switch (columnDescriptor.serverDataType) {\n case \"int\":\n {\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value) {\n throw Error(`${columnName} is int but value = ${value}`);\n }\n } else if (typeof value === \"string\") {\n const numericValue = parseFloat(value);\n if (Math.floor(numericValue) !== numericValue) {\n throw Error(`${columnName} is ${value} is not a valid integer`);\n }\n }\n }\n break;\n default:\n }\n } else {\n throw Error(`Unknown column ${columnName}`);\n }\n }\n\n protected updateDataItem = (\n keyValue: string,\n columnName: string,\n value: VuuRowDataItemType,\n ) => {\n this.validateDataValue(columnName, value);\n // TODO take sorting, filtering. grouping into account\n const colIndex = this.#columnMap[columnName];\n const dataColIndex = this.dataMap?.[columnName];\n const dataIndex = this.indexOfRowWithKey(keyValue);\n if (dataIndex !== -1 && dataColIndex !== undefined) {\n const dataSourceRow = this.#data[dataIndex];\n dataSourceRow[colIndex] = value;\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\n\n protected update = (row: VuuRowDataItemType[], columnName: string) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key] as string;\n const dataColIndex = this.dataMap?.[columnName] as number;\n return this.updateDataItem(keyValue, columnName, row[dataColIndex]);\n };\n\n protected updateRow = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key];\n const dataIndex = this.#data.findIndex((row) => row[KEY] === keyValue);\n if (dataIndex !== -1) {\n const dataSourceRow = toDataSourceRow(this.key)(row, dataIndex);\n // maybe update this in place\n this.#data[dataIndex] = dataSourceRow;\n const { from, to } = this.#range;\n if (dataIndex >= from && dataIndex < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private setRange(range: Range, forceFullRefresh = false) {\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n const currentPageCount = Math.ceil(\n this.size / (this.#range.to - this.#range.from),\n );\n const newPageCount = Math.ceil(this.size / (range.to - range.from));\n\n this.#range = range;\n const keysResequenced = this.#keys.reset(range);\n this.sendRowsToClient(forceFullRefresh || keysResequenced);\n\n requestAnimationFrame(() => {\n // executed within RAF in case this is used to setState/trigger render in listening clients\n if (newPageCount !== currentPageCount) {\n this.emit(\"page-count\", newPageCount);\n }\n this.emit(\"range\", range);\n });\n } else if (forceFullRefresh) {\n this.sendRowsToClient(forceFullRefresh);\n }\n }\n\n sendSizeUpdateToClient() {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.processedData ? this.processedData.length : this.#data.length,\n });\n }\n\n sendRowsToClient(forceFullRefresh = false, row?: DataSourceRow) {\n if (row) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n rows: [\n toClientRow(row, this.#keys, this.selectedRows, this.dataIndices),\n ],\n type: \"viewport-update\",\n });\n } else {\n const rowRange =\n this.rangeChangeRowset === \"delta\" && !forceFullRefresh\n ? rangeNewItems(this.lastRangeServed, this.#range)\n : this.#range;\n const data = this.processedData ?? this.#data;\n\n const rowsWithinViewport = data\n .slice(rowRange.from, rowRange.to)\n .map((row) =>\n toClientRow(row, this.#keys, this.selectedRows, this.dataIndices),\n );\n\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n range: this.#range,\n rows: rowsWithinViewport,\n size: data.length,\n type: \"viewport-update\",\n });\n this.lastRangeServed = {\n from: this.#range.from,\n to: this.#range.to,\n // to: Math.min(\n // this.#range.to,\n // this.#range.from + rowsWithinViewport.length,\n // ),\n };\n // console.log(\n // `%c[ArrayDataSource] lastRangeServed (${this.lastRangeServed.from}:${this.lastRangeServed.to})`,\n // \"color:green;font-weight:bold;\",\n // );\n }\n }\n\n get columns() {\n return this._config.columns;\n }\n\n set columns(columns: string[]) {\n const addedColumns = getAddedItems(this.config.columns, columns);\n if (addedColumns.length > 0) {\n const columnsWithoutDescriptors = getMissingItems(\n this.columnDescriptors,\n addedColumns,\n (col) => col.name,\n );\n console.warn(`columnsWithoutDescriptors`, {\n columnsWithoutDescriptors,\n });\n }\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n\n this.config = {\n ...this._config,\n columns,\n };\n }\n\n get aggregations() {\n return this._config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this._config = {\n ...this._config,\n aggregations,\n };\n\n const targetData = this.processedData ?? this.#data;\n const leafData = this.#data;\n\n aggregateData(\n aggregations,\n targetData,\n this._config.groupBy,\n leafData,\n this.#columnMap,\n this.groupMap as GroupMap,\n );\n this.setRange(this.#range.reset, true);\n\n this.emit(\"config\", this._config, this.range);\n }\n\n get sort() {\n return this._config.sort;\n }\n\n set sort(sort: VuuSort) {\n debug?.(`sort ${JSON.stringify(sort)}`);\n this.config = {\n ...this._config,\n sort,\n };\n }\n\n get baseFilter() {\n return this._config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n debug?.(`baseFilter ${JSON.stringify(baseFilter)}`);\n // TODO check that baseFilter has changed\n this.config = {\n ...this._config,\n baseFilterSpec: baseFilter,\n };\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n debug?.(`filter ${JSON.stringify(filter)}`);\n // TODO check that filter has changed\n this.config = {\n ...this._config,\n filterSpec: filter,\n };\n }\n\n get groupBy() {\n return this._config.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.config = {\n ...this._config,\n groupBy,\n };\n }\n\n get title() {\n return this.#title ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this.#title = title;\n this.emit(\"title-changed\", this.viewport, title);\n }\n\n get _clientCallback() {\n return this.clientCallback;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async editRpcCall(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rpcRequest: Omit<VuuRpcEditRequest, \"vpId\">,\n ): Promise<VuuRpcEditResponse> {\n throw Error(\"ArrayDataSource does not implement editRpcCall\");\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<VuuRpcResponse> {\n return new Promise((resolve) => {\n if (isEditCellRequest(rpcRequest)) {\n const { rowKey, field, value } = rpcRequest;\n try {\n this.updateDataItem(rowKey, field, value);\n resolve({\n action: {\n type: \"VP_EDIT_SUCCESS\",\n },\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId: this.viewport,\n });\n } catch (error) {\n resolve({\n error: String(error),\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId: this.viewport,\n });\n }\n } else {\n throw Error(\"menuRpcCall invalid rpcRequest\");\n }\n });\n }\n\n private convertKeysToIndexValues(keys?: string[]) {\n if (Array.isArray(keys)) {\n const indexValues: number[] = [];\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n if (rowIdx !== -1) {\n indexValues.push(rowIdx);\n }\n });\n return indexValues;\n }\n }\n\n // All in BaseDataSource\n freeze() {\n if (!this.isFrozen) {\n this.#freezeTimestamp = new Date().getTime();\n this.emit(\"freeze\", true, this.#freezeTimestamp);\n this.preserveScrollPositionAcrossConfigChange = true;\n this.baseFilter = {\n filter: `created < ${this.#freezeTimestamp}`,\n };\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n unfreeze() {\n if (this.isFrozen) {\n const freezeTimestamp = this.#freezeTimestamp as number;\n this.#freezeTimestamp = undefined;\n this.emit(\"freeze\", false, freezeTimestamp);\n this.preserveScrollPositionAcrossConfigChange = true;\n this.baseFilter = {\n filter: \"\",\n };\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n\n get freezeTimestamp() {\n return this.#freezeTimestamp;\n }\n\n get isFrozen() {\n return typeof this.#freezeTimestamp === \"number\";\n }\n}\n"],"names":["row"],"mappings":"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"}
|
|
@@ -322,6 +322,9 @@ class JsonDataSource extends EventEmitter {
|
|
|
322
322
|
});
|
|
323
323
|
return void 0;
|
|
324
324
|
}
|
|
325
|
+
async editRpcCall() {
|
|
326
|
+
throw Error("JSONDataSource does not implement editRpcCall");
|
|
327
|
+
}
|
|
325
328
|
applyEdit(rowKey, columnName, value) {
|
|
326
329
|
console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);
|
|
327
330
|
return Promise.resolve(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonDataSource.js","sources":["../../../../packages/vuu-data-local/src/json-data-source/JsonDataSource.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuGroupBy,\n VuuAggregation,\n VuuSort,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceFilter,\n DataSourceRow,\n DataSource,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n WithFullConfig,\n Selection,\n MenuRpcResponse,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n EventEmitter,\n isSelected,\n JsonData,\n jsonToDataSourceRows,\n KeySet,\n metadataKeys,\n NO_CONFIG_CHANGES,\n NULL_RANGE,\n Range,\n uuid,\n vanillaConfig,\n} from \"@vuu-ui/vuu-utils\";\n\nconst NULL_SCHEMA = { columns: [], key: \"\", table: { module: \"\", table: \"\" } };\n\nexport interface JsonDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n data: JsonData;\n}\n\nconst { DEPTH, IDX, IS_EXPANDED, IS_LEAF, KEY, SELECTED } = metadataKeys;\n\nconst toClientRow = (row: DataSourceRow, keys: KeySet) => {\n const [rowIndex] = row;\n const clientRow = row.slice() as DataSourceRow;\n clientRow[1] = keys.keyFor(rowIndex);\n return clientRow;\n};\n\nexport class JsonDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n public columnDescriptors: ColumnDescriptor[];\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private expandedRows = new Set<string>();\n private visibleRows: DataSourceRow[] = [];\n\n #aggregations: VuuAggregation[] = [];\n #config: WithFullConfig = vanillaConfig;\n #data: DataSourceRow[];\n #filter: DataSourceFilter = { filter: \"\" };\n #groupBy: VuuGroupBy = [];\n #range = Range(0, 0);\n #selectedRowsCount = 0;\n #size = 0;\n #sort: VuuSort = { sortDefs: [] };\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n public rowCount: number | undefined;\n public viewport: string;\n\n private keys = new KeySet(this.#range);\n\n constructor({\n aggregations,\n data,\n filterSpec,\n groupBy,\n sort,\n title,\n viewport,\n }: JsonDataSourceConstructorProps) {\n super();\n if (!data) {\n throw Error(\"JsonDataSource constructor called without data\");\n }\n\n [this.columnDescriptors, this.#data] = jsonToDataSourceRows(data);\n\n this.visibleRows = this.#data\n .filter((row) => row[DEPTH] === 0)\n .map((row, index) =>\n ([index, index] as Partial<DataSourceRow>).concat(row.slice(2)),\n ) as DataSourceRow[];\n this.viewport = viewport || uuid();\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (this.columnDescriptors) {\n this.#config = {\n ...this.#config,\n columns: this.columnDescriptors.map((c) => c.name),\n };\n }\n if (filterSpec) {\n this.#filter = filterSpec;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (sort) {\n this.#sort = sort;\n }\n this.#title = title;\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? uuid(),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (columns) {\n this.#config = {\n ...this.#config,\n columns,\n };\n }\n if (filterSpec) {\n this.#filter = filterSpec;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (sort) {\n this.#sort = sort;\n }\n\n if (this.#status !== \"initialising\") {\n //TODO check if subscription details are still the same\n return;\n }\n\n this.viewport = viewport;\n\n this.#status = \"subscribed\";\n\n this.clientCallback?.({\n aggregations: this.#aggregations,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n columns: this.#config.columns,\n filterSpec: this.#filter,\n groupBy: this.#groupBy,\n range: this.#range,\n sort: this.#sort,\n tableSchema: NULL_SCHEMA,\n });\n\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.visibleRows.length,\n });\n\n if (range && !this.#range.equals(range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n\n unsubscribe() {\n console.log(\"noop\");\n }\n\n suspend() {\n console.log(\"noop\");\n return this;\n }\n\n resume() {\n console.log(\"noop\");\n return this;\n }\n\n disable() {\n console.log(\"noop\");\n return this;\n }\n\n enable() {\n console.log(\"noop\");\n return this;\n }\n set data(data: JsonData) {\n [this.columnDescriptors, this.#data] = jsonToDataSourceRows(data);\n this.visibleRows = this.#data\n .filter((row) => row[DEPTH] === 0)\n .map((row, index) =>\n ([index, index] as Partial<DataSourceRow>).concat(row.slice(2)),\n ) as DataSourceRow[];\n\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n select(selected: Selection) {\n const updatedRows: DataSourceRow[] = [];\n for (const row of this.#data) {\n const { [IDX]: rowIndex, [SELECTED]: sel } = row;\n const wasSelected = sel === 1;\n const nowSelected = isSelected(selected, rowIndex);\n if (nowSelected !== wasSelected) {\n const selectedRow = row.slice() as DataSourceRow;\n selectedRow[SELECTED] = nowSelected ? 1 : 0;\n this.#data[rowIndex] = selectedRow;\n updatedRows.push(selectedRow);\n }\n }\n\n if (updatedRows.length > 0) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n type: \"viewport-update\",\n rows: updatedRows,\n });\n }\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.visibleRows[keyOrIndex];\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n\n this.expandedRows.add(key);\n this.visibleRows = getVisibleRows(this.#data, this.expandedRows);\n const { from, to } = this.#range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n closeTreeNode(keyOrIndex: string | number, cascade = false) {\n const key = this.getRowKey(keyOrIndex);\n\n this.expandedRows.delete(key);\n if (cascade) {\n for (const rowKey of this.expandedRows.keys()) {\n if (rowKey.startsWith(key)) {\n this.expandedRows.delete(rowKey);\n }\n }\n }\n this.visibleRows = getVisibleRows(this.#data, this.expandedRows);\n this.sendRowsToClient();\n }\n\n get status() {\n return this.#status;\n }\n\n get config() {\n return this.#config;\n }\n\n applyConfig() {\n return NO_CONFIG_CHANGES;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: Range) {\n this.#range = range;\n this.keys.reset(range);\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n private sendRowsToClient() {\n const { from, to } = this.#range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n get columns() {\n return this.#config.columns;\n }\n\n set columns(columns: string[]) {\n // TODO use setter\n this.#config = {\n ...this.#config,\n columns,\n };\n }\n\n get aggregations() {\n return this.#aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.#aggregations = aggregations;\n }\n\n get sort() {\n return this.#sort;\n }\n\n set sort(sort: VuuSort) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#sort = sort;\n }\n\n get filter() {\n return this.#filter;\n }\n\n set filter(filter: DataSourceFilter) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#filter = filter;\n }\n\n get groupBy() {\n return this.#groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.#groupBy = groupBy;\n }\n\n get title() {\n return this.#title ?? \"\";\n }\n\n set title(title: string) {\n this.#title = title;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n console.log(\"rmenuRpcCall\", {\n rpcRequest,\n });\n return undefined;\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n getChildRows(rowKey: string) {\n const parentRow = this.#data.find((row) => row[KEY] === rowKey);\n if (parentRow) {\n const { [IDX]: parentIdx, [DEPTH]: parentDepth } = parentRow;\n let rowIdx = parentIdx + 1;\n const childRows = [];\n do {\n const { [DEPTH]: depth } = this.#data[rowIdx];\n if (depth === parentDepth + 1) {\n childRows.push(this.#data[rowIdx]);\n } else if (depth <= parentDepth) {\n break;\n }\n rowIdx += 1;\n } while (rowIdx < this.#data.length);\n return childRows;\n } else {\n console.warn(\n `JsonDataSource getChildRows row not found for key ${rowKey}`,\n );\n }\n\n return [];\n }\n\n getRowsAtDepth(depth: number, visibleOnly = true) {\n const rows = visibleOnly ? this.visibleRows : this.#data;\n return rows.filter((row) => row[DEPTH] === depth);\n }\n}\n\ntype Index = {\n value: number;\n};\n\nfunction getVisibleRows(rows: DataSourceRow[], expandedKeys: Set<string>) {\n const visibleRows: DataSourceRow[] = [];\n const index: Index = { value: 0 };\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const { [DEPTH]: depth, [KEY]: key, [IS_LEAF]: isLeaf } = row;\n const isExpanded = expandedKeys.has(key);\n visibleRows.push(cloneRow(row, index, isExpanded));\n if (!isLeaf && !isExpanded) {\n do {\n i += 1;\n } while (i < rows.length - 1 && rows[i + 1][DEPTH] > depth);\n }\n }\n return visibleRows;\n}\n\nconst cloneRow = (\n row: DataSourceRow,\n index: Index,\n isExpanded: boolean,\n): DataSourceRow => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = index.value;\n dolly[1] = index.value;\n if (isExpanded) {\n dolly[IS_EXPANDED] = true;\n }\n index.value += 1;\n return dolly;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JsonDataSource.js","sources":["../../../../packages/vuu-data-local/src/json-data-source/JsonDataSource.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuGroupBy,\n VuuAggregation,\n VuuSort,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcRequest,\n VuuRpcEditResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceFilter,\n DataSourceRow,\n DataSource,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n WithFullConfig,\n Selection,\n MenuRpcResponse,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n EventEmitter,\n isSelected,\n JsonData,\n jsonToDataSourceRows,\n KeySet,\n metadataKeys,\n NO_CONFIG_CHANGES,\n NULL_RANGE,\n Range,\n uuid,\n vanillaConfig,\n} from \"@vuu-ui/vuu-utils\";\n\nconst NULL_SCHEMA = { columns: [], key: \"\", table: { module: \"\", table: \"\" } };\n\nexport interface JsonDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n data: JsonData;\n}\n\nconst { DEPTH, IDX, IS_EXPANDED, IS_LEAF, KEY, SELECTED } = metadataKeys;\n\nconst toClientRow = (row: DataSourceRow, keys: KeySet) => {\n const [rowIndex] = row;\n const clientRow = row.slice() as DataSourceRow;\n clientRow[1] = keys.keyFor(rowIndex);\n return clientRow;\n};\n\nexport class JsonDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n public columnDescriptors: ColumnDescriptor[];\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private expandedRows = new Set<string>();\n private visibleRows: DataSourceRow[] = [];\n\n #aggregations: VuuAggregation[] = [];\n #config: WithFullConfig = vanillaConfig;\n #data: DataSourceRow[];\n #filter: DataSourceFilter = { filter: \"\" };\n #groupBy: VuuGroupBy = [];\n #range = Range(0, 0);\n #selectedRowsCount = 0;\n #size = 0;\n #sort: VuuSort = { sortDefs: [] };\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n public rowCount: number | undefined;\n public viewport: string;\n\n private keys = new KeySet(this.#range);\n\n constructor({\n aggregations,\n data,\n filterSpec,\n groupBy,\n sort,\n title,\n viewport,\n }: JsonDataSourceConstructorProps) {\n super();\n if (!data) {\n throw Error(\"JsonDataSource constructor called without data\");\n }\n\n [this.columnDescriptors, this.#data] = jsonToDataSourceRows(data);\n\n this.visibleRows = this.#data\n .filter((row) => row[DEPTH] === 0)\n .map((row, index) =>\n ([index, index] as Partial<DataSourceRow>).concat(row.slice(2)),\n ) as DataSourceRow[];\n this.viewport = viewport || uuid();\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (this.columnDescriptors) {\n this.#config = {\n ...this.#config,\n columns: this.columnDescriptors.map((c) => c.name),\n };\n }\n if (filterSpec) {\n this.#filter = filterSpec;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (sort) {\n this.#sort = sort;\n }\n this.#title = title;\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? uuid(),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (columns) {\n this.#config = {\n ...this.#config,\n columns,\n };\n }\n if (filterSpec) {\n this.#filter = filterSpec;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (sort) {\n this.#sort = sort;\n }\n\n if (this.#status !== \"initialising\") {\n //TODO check if subscription details are still the same\n return;\n }\n\n this.viewport = viewport;\n\n this.#status = \"subscribed\";\n\n this.clientCallback?.({\n aggregations: this.#aggregations,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n columns: this.#config.columns,\n filterSpec: this.#filter,\n groupBy: this.#groupBy,\n range: this.#range,\n sort: this.#sort,\n tableSchema: NULL_SCHEMA,\n });\n\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.visibleRows.length,\n });\n\n if (range && !this.#range.equals(range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n\n unsubscribe() {\n console.log(\"noop\");\n }\n\n suspend() {\n console.log(\"noop\");\n return this;\n }\n\n resume() {\n console.log(\"noop\");\n return this;\n }\n\n disable() {\n console.log(\"noop\");\n return this;\n }\n\n enable() {\n console.log(\"noop\");\n return this;\n }\n set data(data: JsonData) {\n [this.columnDescriptors, this.#data] = jsonToDataSourceRows(data);\n this.visibleRows = this.#data\n .filter((row) => row[DEPTH] === 0)\n .map((row, index) =>\n ([index, index] as Partial<DataSourceRow>).concat(row.slice(2)),\n ) as DataSourceRow[];\n\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n select(selected: Selection) {\n const updatedRows: DataSourceRow[] = [];\n for (const row of this.#data) {\n const { [IDX]: rowIndex, [SELECTED]: sel } = row;\n const wasSelected = sel === 1;\n const nowSelected = isSelected(selected, rowIndex);\n if (nowSelected !== wasSelected) {\n const selectedRow = row.slice() as DataSourceRow;\n selectedRow[SELECTED] = nowSelected ? 1 : 0;\n this.#data[rowIndex] = selectedRow;\n updatedRows.push(selectedRow);\n }\n }\n\n if (updatedRows.length > 0) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n type: \"viewport-update\",\n rows: updatedRows,\n });\n }\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.visibleRows[keyOrIndex];\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n\n this.expandedRows.add(key);\n this.visibleRows = getVisibleRows(this.#data, this.expandedRows);\n const { from, to } = this.#range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n closeTreeNode(keyOrIndex: string | number, cascade = false) {\n const key = this.getRowKey(keyOrIndex);\n\n this.expandedRows.delete(key);\n if (cascade) {\n for (const rowKey of this.expandedRows.keys()) {\n if (rowKey.startsWith(key)) {\n this.expandedRows.delete(rowKey);\n }\n }\n }\n this.visibleRows = getVisibleRows(this.#data, this.expandedRows);\n this.sendRowsToClient();\n }\n\n get status() {\n return this.#status;\n }\n\n get config() {\n return this.#config;\n }\n\n applyConfig() {\n return NO_CONFIG_CHANGES;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: Range) {\n this.#range = range;\n this.keys.reset(range);\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n private sendRowsToClient() {\n const { from, to } = this.#range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n get columns() {\n return this.#config.columns;\n }\n\n set columns(columns: string[]) {\n // TODO use setter\n this.#config = {\n ...this.#config,\n columns,\n };\n }\n\n get aggregations() {\n return this.#aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.#aggregations = aggregations;\n }\n\n get sort() {\n return this.#sort;\n }\n\n set sort(sort: VuuSort) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#sort = sort;\n }\n\n get filter() {\n return this.#filter;\n }\n\n set filter(filter: DataSourceFilter) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#filter = filter;\n }\n\n get groupBy() {\n return this.#groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.#groupBy = groupBy;\n }\n\n get title() {\n return this.#title ?? \"\";\n }\n\n set title(title: string) {\n this.#title = title;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n console.log(\"rmenuRpcCall\", {\n rpcRequest,\n });\n return undefined;\n }\n\n async editRpcCall(): Promise<VuuRpcEditResponse> {\n throw Error(\"JSONDataSource does not implement editRpcCall\");\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n getChildRows(rowKey: string) {\n const parentRow = this.#data.find((row) => row[KEY] === rowKey);\n if (parentRow) {\n const { [IDX]: parentIdx, [DEPTH]: parentDepth } = parentRow;\n let rowIdx = parentIdx + 1;\n const childRows = [];\n do {\n const { [DEPTH]: depth } = this.#data[rowIdx];\n if (depth === parentDepth + 1) {\n childRows.push(this.#data[rowIdx]);\n } else if (depth <= parentDepth) {\n break;\n }\n rowIdx += 1;\n } while (rowIdx < this.#data.length);\n return childRows;\n } else {\n console.warn(\n `JsonDataSource getChildRows row not found for key ${rowKey}`,\n );\n }\n\n return [];\n }\n\n getRowsAtDepth(depth: number, visibleOnly = true) {\n const rows = visibleOnly ? this.visibleRows : this.#data;\n return rows.filter((row) => row[DEPTH] === depth);\n }\n}\n\ntype Index = {\n value: number;\n};\n\nfunction getVisibleRows(rows: DataSourceRow[], expandedKeys: Set<string>) {\n const visibleRows: DataSourceRow[] = [];\n const index: Index = { value: 0 };\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const { [DEPTH]: depth, [KEY]: key, [IS_LEAF]: isLeaf } = row;\n const isExpanded = expandedKeys.has(key);\n visibleRows.push(cloneRow(row, index, isExpanded));\n if (!isLeaf && !isExpanded) {\n do {\n i += 1;\n } while (i < rows.length - 1 && rows[i + 1][DEPTH] > depth);\n }\n }\n return visibleRows;\n}\n\nconst cloneRow = (\n row: DataSourceRow,\n index: Index,\n isExpanded: boolean,\n): DataSourceRow => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = index.value;\n dolly[1] = index.value;\n if (isExpanded) {\n dolly[IS_EXPANDED] = true;\n }\n index.value += 1;\n return dolly;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeDataSource.js","sources":["../../../../packages/vuu-data-local/src/tree-data-source/TreeDataSource.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceRow,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n Selection,\n MenuRpcResponse,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n DataSourceFilter,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n getParentRow,\n isSelected,\n isSingleValueFilter,\n KeySet,\n lastPathSegment,\n metadataKeys,\n missingAncestor,\n NULL_RANGE,\n TreeSourceNode,\n treeToDataSourceRows,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { IconProvider } from \"./IconProvider\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport { FilterClause } from \"@vuu-ui/vuu-filter-types\";\n\nconst NULL_SCHEMA = { columns: [], key: \"\", table: { module: \"\", table: \"\" } };\n\ntype VisibleRowIndex = Record<number, number>;\n\nexport interface TreeDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n data: TreeSourceNode[];\n}\n\nconst { COUNT, DEPTH, IDX, IS_EXPANDED, IS_LEAF, KEY, SELECTED } = metadataKeys;\n\nconst toClientRow = (row: DataSourceRow, keys: KeySet) => {\n const [rowIndex] = row;\n const clientRow = row.slice() as DataSourceRow;\n clientRow[1] = keys.keyFor(rowIndex);\n return clientRow;\n};\n\nexport class TreeDataSource extends BaseDataSource {\n public columnDescriptors: ColumnDescriptor[];\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private expandedRows = new Set<string>();\n private visibleRows: DataSourceRow[] = [];\n private visibleRowIndex: VisibleRowIndex = {};\n\n #aggregations: VuuAggregation[] = [];\n #data: DataSourceRow[];\n #iconProvider: IconProvider;\n #selectedRowsCount = 0;\n #size = 0;\n #status: DataSourceStatus = \"initialising\";\n #filterSet: number[] | undefined;\n\n public rowCount: number | undefined;\n\n private keys = new KeySet(this._range);\n\n constructor({ data, ...props }: TreeDataSourceConstructorProps) {\n super(props);\n\n if (!data) {\n throw Error(\"TreeDataSource constructor called without data\");\n }\n this.#iconProvider = new IconProvider();\n\n [this.columnDescriptors, this.#data] = treeToDataSourceRows(\n data,\n this.#iconProvider,\n );\n\n if (this.columnDescriptors) {\n const columns = this.columnDescriptors.map((c) => c.name);\n this._config = {\n ...this._config,\n columns,\n groupBy: columns.slice(1),\n };\n }\n }\n\n async subscribe(\n {\n aggregations,\n columns,\n range,\n revealSelected,\n selectedKeyValues,\n viewport = this.viewport ?? uuid(),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (columns) {\n this._config = {\n ...this._config,\n columns,\n };\n }\n\n if (this.#status !== \"initialising\") {\n //TODO check if subscription details are still the same\n return;\n }\n\n this.viewport = viewport;\n\n this.#status = \"subscribed\";\n this.#selectedRowsCount = selectedKeyValues?.length ?? 0;\n\n if (selectedKeyValues) {\n this.applySelectedKeyValues(selectedKeyValues, revealSelected);\n }\n\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n\n this.clientCallback?.({\n aggregations: this.#aggregations,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n columns: this.columns,\n filterSpec: this.filter,\n groupBy: this._config.groupBy,\n range: this.range,\n sort: this.sort,\n tableSchema: NULL_SCHEMA,\n });\n\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.visibleRows.length,\n });\n\n if (range && !this._range.equals(range)) {\n this.range = range;\n } else if (this._range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n\n unsubscribe() {\n console.log(\"noop\");\n }\n\n suspend() {\n console.log(\"noop\");\n return this;\n }\n\n resume() {\n console.log(\"noop\");\n return this;\n }\n\n disable() {\n console.log(\"noop\");\n return this;\n }\n\n enable() {\n console.log(\"noop\");\n return this;\n }\n set data(data: TreeSourceNode[]) {\n [this.columnDescriptors, this.#data] = treeToDataSourceRows(data);\n\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n // Note not using the setter\n this._config = {\n ...this._config,\n filterSpec: filter,\n };\n\n if (filter.filter) {\n this.applyFilter(filter);\n } else {\n this.#filterSet = undefined;\n }\n\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n this.#filterSet,\n );\n\n const { from, to } = this.range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n private applyFilter({ filter: filterQuery, filterStruct }: DataSourceFilter) {\n const filter = filterStruct ?? (parseFilter(filterQuery) as FilterClause);\n if (isSingleValueFilter(filter)) {\n const filterSet = [];\n const regex = new RegExp(`${filter.value}`, \"i\");\n for (const row of this.#data) {\n const { [KEY]: key, [IDX]: idx } = row;\n if (regex.test(lastPathSegment(key, \"|\"))) {\n filterSet.push(idx);\n }\n }\n this.#filterSet = filterSet;\n }\n }\n\n /**\n * used to apply an initial selection. These may not necessarily be\n * visible. If revealOnSelect is in force, expand nodes as necessary\n * to ensure selected nodes are visible\n */\n private applySelectedKeyValues(keys: string[], revealSelected = false) {\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n const row = this.#data[rowIdx];\n row[SELECTED] = 1;\n\n if (revealSelected && row[DEPTH] !== 1) {\n const keys = key.slice(6).split(\"|\").slice(0, -1);\n\n let path = \"$root\";\n do {\n path = `${path}|${keys.shift()}`;\n this.expandedRows.add(path);\n } while (keys.length);\n }\n });\n }\n\n private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\n\n // Incoming Selection references visibleRow indices\n select(selected: Selection) {\n // todo get a diff\n const updatedRows: DataSourceRow[] = [];\n for (const row of this.visibleRows) {\n const { [IDX]: rowIndex, [SELECTED]: sel } = row;\n const wasSelected = sel === 1;\n const nowSelected = isSelected(selected, rowIndex);\n if (nowSelected !== wasSelected) {\n const selectedRow = row.slice() as DataSourceRow;\n const selectedValue = nowSelected ? 1 : 0;\n selectedRow[SELECTED] = selectedValue;\n const dataRowIdx = this.visibleRowIndex[rowIndex];\n this.visibleRows[rowIndex] = selectedRow;\n this.#data[dataRowIdx][SELECTED] = selectedValue;\n updatedRows.push(selectedRow);\n }\n }\n\n if (updatedRows.length > 0) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n type: \"viewport-update\",\n rows: updatedRows,\n });\n }\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.expandedRows.add(key);\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n\n const { from, to } = this._range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n closeTreeNode(keyOrIndex: string | number, cascade = false) {\n const key = this.getRowKey(keyOrIndex);\n this.expandedRows.delete(key);\n if (cascade) {\n for (const rowKey of this.expandedRows.keys()) {\n if (rowKey.startsWith(key)) {\n this.expandedRows.delete(rowKey);\n }\n }\n }\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n this.sendRowsToClient();\n }\n\n get status() {\n return this.#status;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n rangeRequest(range: VuuRange) {\n this.keys.reset(range);\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n private sendRowsToClient() {\n const { from, to } = this._range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n console.log(\"rmenuRpcCall\", {\n rpcRequest,\n });\n return undefined;\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n getChildRows(rowKey: string) {\n const parentRow = this.#data.find((row) => row[KEY] === rowKey);\n if (parentRow) {\n const { [IDX]: parentIdx, [DEPTH]: parentDepth } = parentRow;\n let rowIdx = parentIdx + 1;\n const childRows = [];\n do {\n const { [DEPTH]: depth } = this.#data[rowIdx];\n if (depth === parentDepth + 1) {\n childRows.push(this.#data[rowIdx]);\n } else if (depth <= parentDepth) {\n break;\n }\n rowIdx += 1;\n } while (rowIdx < this.#data.length);\n return childRows;\n } else {\n console.warn(\n `JsonDataSource getChildRows row not found for key ${rowKey}`,\n );\n }\n\n return [];\n }\n\n getRowsAtDepth(depth: number, visibleOnly = true) {\n const rows = visibleOnly ? this.visibleRows : this.#data;\n return rows.filter((row) => row[DEPTH] === depth);\n }\n\n getRowAtIndex(rowIdx: number) {\n return this.visibleRows[rowIdx];\n }\n}\n\nfunction getVisibleRows(\n rows: DataSourceRow[],\n expandedKeys: Set<string>,\n filterset?: number[],\n): [visibleRows: DataSourceRow[], index: VisibleRowIndex] {\n const visibleRows: DataSourceRow[] = [];\n const visibleRowIndex: VisibleRowIndex = {};\n\n const data = filterset ?? rows;\n\n for (let i = 0, index = 0; i < data.length; i++) {\n const idx = filterset ? filterset[i] : i;\n const row = rows[idx];\n const {\n [COUNT]: count,\n [DEPTH]: depth,\n [KEY]: key,\n [IS_LEAF]: isLeaf,\n } = row;\n if (filterset) {\n // assume expanded for now\n\n // if we have skipped a higher level group (that didn't directly match\n // our filter criteria, add it.\n const previousRow = visibleRows.at(-1);\n if (missingAncestor(row, previousRow)) {\n let currentRow: DataSourceRow | undefined = row;\n const missingRows = [];\n while (currentRow) {\n currentRow = getParentRow(rows, currentRow);\n if (currentRow) {\n // we will get the missing rows in reverse order\n missingRows.unshift(currentRow);\n }\n }\n missingRows.forEach((row) => {\n visibleRows.push(cloneRow(row, index++, true));\n });\n }\n\n visibleRows.push(cloneRow(row, index++, true));\n visibleRowIndex[index] = i;\n } else {\n const isExpanded = expandedKeys.has(key);\n visibleRows.push(cloneRow(row, index, isExpanded));\n visibleRowIndex[index++] = i;\n const skipNonVisibleRows = !isLeaf && !isExpanded && count > 0;\n if (skipNonVisibleRows) {\n do {\n i += 1;\n } while (i < rows.length - 1 && rows[i + 1][DEPTH] > depth);\n }\n }\n }\n return [visibleRows, visibleRowIndex];\n}\n\nconst cloneRow = (\n row: DataSourceRow,\n index: number,\n isExpanded: boolean,\n): DataSourceRow => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = index;\n dolly[1] = index;\n if (isExpanded) {\n dolly[IS_EXPANDED] = true;\n }\n return dolly;\n};\n"],"names":["keys","row"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeDataSource.js","sources":["../../../../packages/vuu-data-local/src/tree-data-source/TreeDataSource.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceRow,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n Selection,\n MenuRpcResponse,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n DataSourceFilter,\n DataSource,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n getParentRow,\n isSelected,\n isSingleValueFilter,\n KeySet,\n lastPathSegment,\n metadataKeys,\n missingAncestor,\n NULL_RANGE,\n TreeSourceNode,\n treeToDataSourceRows,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { IconProvider } from \"./IconProvider\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport { FilterClause } from \"@vuu-ui/vuu-filter-types\";\n\nconst NULL_SCHEMA = { columns: [], key: \"\", table: { module: \"\", table: \"\" } };\n\ntype VisibleRowIndex = Record<number, number>;\n\nexport interface TreeDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n data: TreeSourceNode[];\n}\n\nconst { COUNT, DEPTH, IDX, IS_EXPANDED, IS_LEAF, KEY, SELECTED } = metadataKeys;\n\nconst toClientRow = (row: DataSourceRow, keys: KeySet) => {\n const [rowIndex] = row;\n const clientRow = row.slice() as DataSourceRow;\n clientRow[1] = keys.keyFor(rowIndex);\n return clientRow;\n};\n\nexport class TreeDataSource extends BaseDataSource implements DataSource {\n public columnDescriptors: ColumnDescriptor[];\n private clientCallback: DataSourceSubscribeCallback | undefined;\n private expandedRows = new Set<string>();\n private visibleRows: DataSourceRow[] = [];\n private visibleRowIndex: VisibleRowIndex = {};\n\n #aggregations: VuuAggregation[] = [];\n #data: DataSourceRow[];\n #iconProvider: IconProvider;\n #selectedRowsCount = 0;\n #size = 0;\n #status: DataSourceStatus = \"initialising\";\n #filterSet: number[] | undefined;\n\n public rowCount: number | undefined;\n\n private keys = new KeySet(this._range);\n\n constructor({ data, ...props }: TreeDataSourceConstructorProps) {\n super(props);\n\n if (!data) {\n throw Error(\"TreeDataSource constructor called without data\");\n }\n this.#iconProvider = new IconProvider();\n\n [this.columnDescriptors, this.#data] = treeToDataSourceRows(\n data,\n this.#iconProvider,\n );\n\n if (this.columnDescriptors) {\n const columns = this.columnDescriptors.map((c) => c.name);\n this._config = {\n ...this._config,\n columns,\n groupBy: columns.slice(1),\n };\n }\n }\n\n async subscribe(\n {\n aggregations,\n columns,\n range,\n revealSelected,\n selectedKeyValues,\n viewport = this.viewport ?? uuid(),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this.clientCallback = callback;\n\n if (aggregations) {\n this.#aggregations = aggregations;\n }\n if (columns) {\n this._config = {\n ...this._config,\n columns,\n };\n }\n\n if (this.#status !== \"initialising\") {\n //TODO check if subscription details are still the same\n return;\n }\n\n this.viewport = viewport;\n\n this.#status = \"subscribed\";\n this.#selectedRowsCount = selectedKeyValues?.length ?? 0;\n\n if (selectedKeyValues) {\n this.applySelectedKeyValues(selectedKeyValues, revealSelected);\n }\n\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n\n this.clientCallback?.({\n aggregations: this.#aggregations,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n columns: this.columns,\n filterSpec: this.filter,\n groupBy: this._config.groupBy,\n range: this.range,\n sort: this.sort,\n tableSchema: NULL_SCHEMA,\n });\n\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.visibleRows.length,\n });\n\n if (range && !this._range.equals(range)) {\n this.range = range;\n } else if (this._range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n\n unsubscribe() {\n console.log(\"noop\");\n }\n\n suspend() {\n console.log(\"noop\");\n return this;\n }\n\n resume() {\n console.log(\"noop\");\n return this;\n }\n\n disable() {\n console.log(\"noop\");\n return this;\n }\n\n enable() {\n console.log(\"noop\");\n return this;\n }\n set data(data: TreeSourceNode[]) {\n [this.columnDescriptors, this.#data] = treeToDataSourceRows(data);\n\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n // Note not using the setter\n this._config = {\n ...this._config,\n filterSpec: filter,\n };\n\n if (filter.filter) {\n this.applyFilter(filter);\n } else {\n this.#filterSet = undefined;\n }\n\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n this.#filterSet,\n );\n\n const { from, to } = this.range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n private applyFilter({ filter: filterQuery, filterStruct }: DataSourceFilter) {\n const filter = filterStruct ?? (parseFilter(filterQuery) as FilterClause);\n if (isSingleValueFilter(filter)) {\n const filterSet = [];\n const regex = new RegExp(`${filter.value}`, \"i\");\n for (const row of this.#data) {\n const { [KEY]: key, [IDX]: idx } = row;\n if (regex.test(lastPathSegment(key, \"|\"))) {\n filterSet.push(idx);\n }\n }\n this.#filterSet = filterSet;\n }\n }\n\n /**\n * used to apply an initial selection. These may not necessarily be\n * visible. If revealOnSelect is in force, expand nodes as necessary\n * to ensure selected nodes are visible\n */\n private applySelectedKeyValues(keys: string[], revealSelected = false) {\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n const row = this.#data[rowIdx];\n row[SELECTED] = 1;\n\n if (revealSelected && row[DEPTH] !== 1) {\n const keys = key.slice(6).split(\"|\").slice(0, -1);\n\n let path = \"$root\";\n do {\n path = `${path}|${keys.shift()}`;\n this.expandedRows.add(path);\n } while (keys.length);\n }\n });\n }\n\n private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\n\n // Incoming Selection references visibleRow indices\n select(selected: Selection) {\n // todo get a diff\n const updatedRows: DataSourceRow[] = [];\n for (const row of this.visibleRows) {\n const { [IDX]: rowIndex, [SELECTED]: sel } = row;\n const wasSelected = sel === 1;\n const nowSelected = isSelected(selected, rowIndex);\n if (nowSelected !== wasSelected) {\n const selectedRow = row.slice() as DataSourceRow;\n const selectedValue = nowSelected ? 1 : 0;\n selectedRow[SELECTED] = selectedValue;\n const dataRowIdx = this.visibleRowIndex[rowIndex];\n this.visibleRows[rowIndex] = selectedRow;\n this.#data[dataRowIdx][SELECTED] = selectedValue;\n updatedRows.push(selectedRow);\n }\n }\n\n if (updatedRows.length > 0) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n type: \"viewport-update\",\n rows: updatedRows,\n });\n }\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\n this.expandedRows.add(key);\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n\n const { from, to } = this._range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n closeTreeNode(keyOrIndex: string | number, cascade = false) {\n const key = this.getRowKey(keyOrIndex);\n this.expandedRows.delete(key);\n if (cascade) {\n for (const rowKey of this.expandedRows.keys()) {\n if (rowKey.startsWith(key)) {\n this.expandedRows.delete(rowKey);\n }\n }\n }\n [this.visibleRows, this.visibleRowIndex] = getVisibleRows(\n this.#data,\n this.expandedRows,\n );\n this.sendRowsToClient();\n }\n\n get status() {\n return this.#status;\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n rangeRequest(range: VuuRange) {\n this.keys.reset(range);\n requestAnimationFrame(() => {\n this.sendRowsToClient();\n });\n }\n\n private sendRowsToClient() {\n const { from, to } = this._range;\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: this.visibleRows\n .slice(from, to)\n .map((row) => toClientRow(row, this.keys)),\n size: this.visibleRows.length,\n type: \"viewport-update\",\n });\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n console.log(\"rmenuRpcCall\", {\n rpcRequest,\n });\n return undefined;\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n getChildRows(rowKey: string) {\n const parentRow = this.#data.find((row) => row[KEY] === rowKey);\n if (parentRow) {\n const { [IDX]: parentIdx, [DEPTH]: parentDepth } = parentRow;\n let rowIdx = parentIdx + 1;\n const childRows = [];\n do {\n const { [DEPTH]: depth } = this.#data[rowIdx];\n if (depth === parentDepth + 1) {\n childRows.push(this.#data[rowIdx]);\n } else if (depth <= parentDepth) {\n break;\n }\n rowIdx += 1;\n } while (rowIdx < this.#data.length);\n return childRows;\n } else {\n console.warn(\n `JsonDataSource getChildRows row not found for key ${rowKey}`,\n );\n }\n\n return [];\n }\n\n getRowsAtDepth(depth: number, visibleOnly = true) {\n const rows = visibleOnly ? this.visibleRows : this.#data;\n return rows.filter((row) => row[DEPTH] === depth);\n }\n\n getRowAtIndex(rowIdx: number) {\n return this.visibleRows[rowIdx];\n }\n}\n\nfunction getVisibleRows(\n rows: DataSourceRow[],\n expandedKeys: Set<string>,\n filterset?: number[],\n): [visibleRows: DataSourceRow[], index: VisibleRowIndex] {\n const visibleRows: DataSourceRow[] = [];\n const visibleRowIndex: VisibleRowIndex = {};\n\n const data = filterset ?? rows;\n\n for (let i = 0, index = 0; i < data.length; i++) {\n const idx = filterset ? filterset[i] : i;\n const row = rows[idx];\n const {\n [COUNT]: count,\n [DEPTH]: depth,\n [KEY]: key,\n [IS_LEAF]: isLeaf,\n } = row;\n if (filterset) {\n // assume expanded for now\n\n // if we have skipped a higher level group (that didn't directly match\n // our filter criteria, add it.\n const previousRow = visibleRows.at(-1);\n if (missingAncestor(row, previousRow)) {\n let currentRow: DataSourceRow | undefined = row;\n const missingRows = [];\n while (currentRow) {\n currentRow = getParentRow(rows, currentRow);\n if (currentRow) {\n // we will get the missing rows in reverse order\n missingRows.unshift(currentRow);\n }\n }\n missingRows.forEach((row) => {\n visibleRows.push(cloneRow(row, index++, true));\n });\n }\n\n visibleRows.push(cloneRow(row, index++, true));\n visibleRowIndex[index] = i;\n } else {\n const isExpanded = expandedKeys.has(key);\n visibleRows.push(cloneRow(row, index, isExpanded));\n visibleRowIndex[index++] = i;\n const skipNonVisibleRows = !isLeaf && !isExpanded && count > 0;\n if (skipNonVisibleRows) {\n do {\n i += 1;\n } while (i < rows.length - 1 && rows[i + 1][DEPTH] > depth);\n }\n }\n }\n return [visibleRows, visibleRowIndex];\n}\n\nconst cloneRow = (\n row: DataSourceRow,\n index: number,\n isExpanded: boolean,\n): DataSourceRow => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = index;\n dolly[1] = index;\n if (isExpanded) {\n dolly[IS_EXPANDED] = true;\n }\n return dolly;\n};\n"],"names":["keys","row"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.13.
|
|
2
|
+
"version": "0.13.29",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"devDependencies": {
|
|
6
|
-
"@vuu-ui/vuu-data-types": "0.13.
|
|
7
|
-
"@vuu-ui/vuu-table-types": "0.13.
|
|
8
|
-
"@vuu-ui/vuu-filter-types": "0.13.
|
|
9
|
-
"@vuu-ui/vuu-protocol-types": "0.13.
|
|
6
|
+
"@vuu-ui/vuu-data-types": "0.13.29",
|
|
7
|
+
"@vuu-ui/vuu-table-types": "0.13.29",
|
|
8
|
+
"@vuu-ui/vuu-filter-types": "0.13.29",
|
|
9
|
+
"@vuu-ui/vuu-protocol-types": "0.13.29"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@vuu-ui/vuu-filter-parser": "0.13.
|
|
13
|
-
"@vuu-ui/vuu-utils": "0.13.
|
|
12
|
+
"@vuu-ui/vuu-filter-parser": "0.13.29",
|
|
13
|
+
"@vuu-ui/vuu-utils": "0.13.29"
|
|
14
14
|
},
|
|
15
15
|
"sideEffects": false,
|
|
16
16
|
"files": [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DataSource, DataSourceConfig, DataSourceConstructorProps, DataSourceEvents, DataSourceFilter, DataSourceRow, DataSourceStatus, Selection, DataSourceSubscribeCallback, DataSourceSubscribeProps, TableSchema, WithBaseFilter, WithFullConfig } from "@vuu-ui/vuu-data-types";
|
|
2
|
-
import type { LinkDescriptorWithLabel, VuuAggregation, VuuGroupBy, VuuMenu, VuuRowDataItemType, VuuRpcRequest, VuuRpcResponse, VuuSort } from "@vuu-ui/vuu-protocol-types";
|
|
2
|
+
import type { LinkDescriptorWithLabel, VuuAggregation, VuuGroupBy, VuuMenu, VuuRowDataItemType, VuuRpcEditRequest, VuuRpcEditResponse, VuuRpcRequest, VuuRpcResponse, VuuSort } from "@vuu-ui/vuu-protocol-types";
|
|
3
3
|
import type { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
4
4
|
import { ColumnMap, DataSourceConfigChanges, EventEmitter, Range } from "@vuu-ui/vuu-utils";
|
|
5
5
|
export interface ArrayDataSourceConstructorProps extends Omit<DataSourceConstructorProps, "bufferSize" | "table"> {
|
|
@@ -94,6 +94,7 @@ export declare class ArrayDataSource extends EventEmitter<DataSourceEvents> impl
|
|
|
94
94
|
removeLink(): void;
|
|
95
95
|
applyEdit(rowKey: string, columnName: string, value: VuuRowDataItemType): Promise<true>;
|
|
96
96
|
remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>(): Promise<T>;
|
|
97
|
+
editRpcCall(rpcRequest: Omit<VuuRpcEditRequest, "vpId">): Promise<VuuRpcEditResponse>;
|
|
97
98
|
menuRpcCall(rpcRequest: Omit<VuuRpcRequest, "vpId">): Promise<VuuRpcResponse>;
|
|
98
99
|
private convertKeysToIndexValues;
|
|
99
100
|
freeze(): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
import type { LinkDescriptorWithLabel, VuuGroupBy, VuuAggregation, VuuSort, VuuRowDataItemType, VuuRpcResponse, VuuRpcRequest } from "@vuu-ui/vuu-protocol-types";
|
|
2
|
+
import type { LinkDescriptorWithLabel, VuuGroupBy, VuuAggregation, VuuSort, VuuRowDataItemType, VuuRpcResponse, VuuRpcRequest, VuuRpcEditResponse } from "@vuu-ui/vuu-protocol-types";
|
|
3
3
|
import type { DataSourceFilter, DataSourceRow, DataSource, DataSourceConstructorProps, DataSourceEvents, DataSourceStatus, DataSourceSubscribeCallback, DataSourceSubscribeProps, WithFullConfig, Selection, MenuRpcResponse, VuuUIMessageInRPCEditReject, VuuUIMessageInRPCEditResponse } from "@vuu-ui/vuu-data-types";
|
|
4
4
|
import { EventEmitter, JsonData, Range } from "@vuu-ui/vuu-utils";
|
|
5
5
|
export interface JsonDataSourceConstructorProps extends Omit<DataSourceConstructorProps, "bufferSize" | "table"> {
|
|
@@ -50,6 +50,7 @@ export declare class JsonDataSource extends EventEmitter<DataSourceEvents> imple
|
|
|
50
50
|
removeLink(): void;
|
|
51
51
|
remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>(): Promise<T>;
|
|
52
52
|
menuRpcCall(rpcRequest: Omit<VuuRpcRequest, "vpId">): Promise<MenuRpcResponse | VuuUIMessageInRPCEditReject | VuuUIMessageInRPCEditResponse | undefined>;
|
|
53
|
+
editRpcCall(): Promise<VuuRpcEditResponse>;
|
|
53
54
|
applyEdit(rowKey: string, columnName: string, value: VuuRowDataItemType): Promise<true>;
|
|
54
55
|
getChildRows(rowKey: string): DataSourceRow[];
|
|
55
56
|
getRowsAtDepth(depth: number, visibleOnly?: boolean): DataSourceRow[];
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
2
2
|
import type { LinkDescriptorWithLabel, VuuRange, VuuRowDataItemType, VuuRpcResponse, VuuRpcRequest } from "@vuu-ui/vuu-protocol-types";
|
|
3
|
-
import type { DataSourceRow, DataSourceConstructorProps, DataSourceStatus, DataSourceSubscribeCallback, DataSourceSubscribeProps, Selection, MenuRpcResponse, VuuUIMessageInRPCEditReject, VuuUIMessageInRPCEditResponse, DataSourceFilter } from "@vuu-ui/vuu-data-types";
|
|
3
|
+
import type { DataSourceRow, DataSourceConstructorProps, DataSourceStatus, DataSourceSubscribeCallback, DataSourceSubscribeProps, Selection, MenuRpcResponse, VuuUIMessageInRPCEditReject, VuuUIMessageInRPCEditResponse, DataSourceFilter, DataSource } from "@vuu-ui/vuu-data-types";
|
|
4
4
|
import { BaseDataSource, TreeSourceNode } from "@vuu-ui/vuu-utils";
|
|
5
5
|
export interface TreeDataSourceConstructorProps extends Omit<DataSourceConstructorProps, "bufferSize" | "table"> {
|
|
6
6
|
data: TreeSourceNode[];
|
|
7
7
|
}
|
|
8
|
-
export declare class TreeDataSource extends BaseDataSource {
|
|
8
|
+
export declare class TreeDataSource extends BaseDataSource implements DataSource {
|
|
9
9
|
#private;
|
|
10
10
|
columnDescriptors: ColumnDescriptor[];
|
|
11
11
|
private clientCallback;
|