@vuu-ui/vuu-data-local 0.0.26
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/LICENSE +201 -0
- package/README.md +0 -0
- package/cjs/array-data-source/aggregate-utils.js +243 -0
- package/cjs/array-data-source/aggregate-utils.js.map +1 -0
- package/cjs/array-data-source/array-data-source.js +539 -0
- package/cjs/array-data-source/array-data-source.js.map +1 -0
- package/cjs/array-data-source/array-data-utils.js +52 -0
- package/cjs/array-data-source/array-data-utils.js.map +1 -0
- package/cjs/array-data-source/group-utils.js +169 -0
- package/cjs/array-data-source/group-utils.js.map +1 -0
- package/cjs/array-data-source/sort-utils.js +54 -0
- package/cjs/array-data-source/sort-utils.js.map +1 -0
- package/cjs/index.js +10 -0
- package/cjs/index.js.map +1 -0
- package/cjs/json-data-source/json-data-source.js +388 -0
- package/cjs/json-data-source/json-data-source.js.map +1 -0
- package/esm/array-data-source/aggregate-utils.js +241 -0
- package/esm/array-data-source/aggregate-utils.js.map +1 -0
- package/esm/array-data-source/array-data-source.js +537 -0
- package/esm/array-data-source/array-data-source.js.map +1 -0
- package/esm/array-data-source/array-data-utils.js +49 -0
- package/esm/array-data-source/array-data-utils.js.map +1 -0
- package/esm/array-data-source/group-utils.js +165 -0
- package/esm/array-data-source/group-utils.js.map +1 -0
- package/esm/array-data-source/sort-utils.js +52 -0
- package/esm/array-data-source/sort-utils.js.map +1 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/json-data-source/json-data-source.js +386 -0
- package/esm/json-data-source/json-data-source.js.map +1 -0
- package/package.json +34 -0
- package/types/array-data-source/aggregate-utils.d.ts +8 -0
- package/types/array-data-source/array-data-source.d.ts +81 -0
- package/types/array-data-source/array-data-utils.d.ts +4 -0
- package/types/array-data-source/group-utils.d.ts +10 -0
- package/types/array-data-source/sort-utils.d.ts +4 -0
- package/types/index.d.ts +2 -0
- package/types/json-data-source/json-data-source.d.ts +54 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-data-source.js","sources":["../../src/json-data-source/json-data-source.ts"],"sourcesContent":["import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type {\n LinkDescriptorWithLabel,\n VuuGroupBy,\n VuuAggregation,\n VuuRange,\n VuuSort,\n ClientToServerMenuRPC,\n ClientToServerEditRpc,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n DataSourceFilter,\n DataSourceRow,\n DataSource,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceStatus,\n SubscribeCallback,\n SubscribeProps,\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 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: SubscribeCallback | 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: VuuRange = { from: 0, to: 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 filter,\n groupBy,\n sort,\n title,\n viewport,\n }: JsonDataSourceConstructorProps) {\n super();\n\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 (filter) {\n this.#filter = filter;\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 filter,\n }: SubscribeProps,\n callback: SubscribeCallback\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 (filter) {\n this.#filter = filter;\n }\n if (groupBy) {\n this.#groupBy = groupBy;\n }\n if (range) {\n this.#range = range;\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 filter: 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\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 console.log(`set JsonDataSource data`);\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 openTreeNode(key: string) {\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(key: string, cascade = false) {\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: VuuRange) {\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 | undefined) {\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 menuRpcCall(\n rpcRequest: Omit<ClientToServerMenuRPC, \"vpId\"> | ClientToServerEditRpc\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 row: DataSourceRow,\n columnName: string,\n value: VuuRowDataItemType\n ): Promise<true> {\n console.log(\n `ArrayDataSource applyEdit ${row.join(\",\")} ${columnName} ${value}`\n );\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","KeySet","jsonToDataSourceRows","uuid","isSelected","NO_CONFIG_CHANGES"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,aAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAsCA,MAAM,WAAc,GAAA,EAAE,OAAS,EAAA,EAAI,EAAA,GAAA,EAAK,EAAI,EAAA,KAAA,EAAO,EAAE,MAAA,EAAQ,EAAI,EAAA,KAAA,EAAO,IAAK,EAAA,CAAA;AAO7E,MAAM,EAAE,KAAO,EAAA,GAAA,EAAK,aAAa,OAAS,EAAA,GAAA,EAAK,UAAa,GAAAA,qBAAA,CAAA;AAE5D,MAAM,WAAA,GAAc,CAAC,GAAA,EAAoB,IAAiB,KAAA;AACxD,EAAM,MAAA,CAAC,QAAQ,CAAI,GAAA,GAAA,CAAA;AACnB,EAAM,MAAA,SAAA,GAAY,IAAI,KAAM,EAAA,CAAA;AAC5B,EAAA,SAAA,CAAU,CAAC,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAA,CAAA;AACnC,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAEO,MAAM,uBACHC,qBAEV,CAAA;AAAA,EAuBE,WAAY,CAAA;AAAA,IACV,YAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,GACiC,EAAA;AACjC,IAAM,KAAA,EAAA,CAAA;AA7BR,IAAQ,IAAA,CAAA,YAAA,uBAAmB,GAAY,EAAA,CAAA;AACvC,IAAA,IAAA,CAAQ,cAA+B,EAAC,CAAA;AAExC,IAAA,YAAA,CAAA,IAAA,EAAA,aAAA,EAAkC,EAAC,CAAA,CAAA;AACnC,IAA0B,YAAA,CAAA,IAAA,EAAA,OAAA,EAAAC,sBAAA,CAAA,CAAA;AAC1B,IAAA,YAAA,CAAA,IAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACA,IAA4B,YAAA,CAAA,IAAA,EAAA,OAAA,EAAA,EAAE,QAAQ,EAAG,EAAA,CAAA,CAAA;AACzC,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,EAAuB,EAAC,CAAA,CAAA;AACxB,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,EAAmB,EAAE,IAAA,EAAM,CAAG,EAAA,EAAA,EAAI,CAAE,EAAA,CAAA,CAAA;AACpC,IAAqB,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,CAAA,CAAA,CAAA;AACrB,IAAQ,YAAA,CAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA,CAAA;AACR,IAAiB,YAAA,CAAA,IAAA,EAAA,KAAA,EAAA,EAAE,QAAU,EAAA,EAAG,EAAA,CAAA,CAAA;AAChC,IAA4B,YAAA,CAAA,IAAA,EAAA,OAAA,EAAA,cAAA,CAAA,CAAA;AAC5B,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAKA,IAAA,IAAA,CAAQ,IAAO,GAAA,IAAIC,eAAO,CAAA,YAAA,CAAA,IAAA,EAAK,MAAM,CAAA,CAAA,CAAA;AAanC,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAA,MAAM,MAAM,gDAAgD,CAAA,CAAA;AAAA,KAC9D;AAEA,IAAA,CAAC,IAAK,CAAA,iBAAA,EAAmB,gBAAU,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,GAAIC,8BAAqB,IAAI,CAAA,CAAA;AAEhE,IAAK,IAAA,CAAA,WAAA,GAAc,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CACrB,MAAO,CAAA,CAAC,QAAQ,GAAI,CAAA,KAAK,CAAM,KAAA,CAAC,CAChC,CAAA,GAAA;AAAA,MAAI,CAAC,GAAK,EAAA,KAAA,KACR,CAAC,KAAA,EAAO,KAAK,CAAA,CAA6B,MAAO,CAAA,GAAA,CAAI,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA,KAChE,CAAA;AACF,IAAK,IAAA,CAAA,QAAA,GAAW,YAAYC,aAAK,EAAA,CAAA;AACjC,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,YAAA,CAAA,IAAA,EAAK,aAAgB,EAAA,YAAA,CAAA,CAAA;AAAA,KACvB;AACA,IAAA,IAAI,KAAK,iBAAmB,EAAA;AAC1B,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA;AAAA,QACb,GAAG,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,QACR,SAAS,IAAK,CAAA,iBAAA,CAAkB,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,OACnD,CAAA,CAAA;AAAA,KACF;AACA,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA,CAAA;AAAA,KACjB;AACA,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA,CAAA;AAAA,KAClB;AACA,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,YAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA,CAAA;AAAA,KACf;AACA,IAAA,YAAA,CAAA,IAAA,EAAK,MAAS,EAAA,KAAA,CAAA,CAAA;AAAA,GAChB;AAAA,EAEA,MAAM,SACJ,CAAA;AAAA,IACE,QAAA,GAAW,IAAK,CAAA,QAAA,IAAYA,aAAK,EAAA;AAAA,IACjC,OAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,KAEF,QACA,EAAA;AACA,IAAA,IAAA,CAAK,cAAiB,GAAA,QAAA,CAAA;AAEtB,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,YAAA,CAAA,IAAA,EAAK,aAAgB,EAAA,YAAA,CAAA,CAAA;AAAA,KACvB;AACA,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA;AAAA,QACb,GAAG,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,QACR,OAAA;AAAA,OACF,CAAA,CAAA;AAAA,KACF;AACA,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA,CAAA;AAAA,KACjB;AACA,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA,CAAA;AAAA,KAClB;AACA,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,YAAA,CAAA,IAAA,EAAK,MAAS,EAAA,KAAA,CAAA,CAAA;AAAA,KAChB;AACA,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,YAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA,CAAA;AAAA,KACf;AAEA,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,aAAY,cAAgB,EAAA;AAEnC,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAEhB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,YAAA,CAAA,CAAA;AAEf,IAAA,IAAA,CAAK,cAAiB,GAAA;AAAA,MACpB,cAAc,YAAK,CAAA,IAAA,EAAA,aAAA,CAAA;AAAA,MACnB,IAAM,EAAA,YAAA;AAAA,MACN,kBAAkB,IAAK,CAAA,QAAA;AAAA,MACvB,OAAA,EAAS,mBAAK,OAAQ,CAAA,CAAA,OAAA;AAAA,MACtB,QAAQ,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,MACb,SAAS,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA,MACd,OAAO,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA;AAAA,MACZ,MAAM,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA,MACX,WAAa,EAAA,WAAA;AAAA,KACd,CAAA,CAAA;AAED,IAAA,IAAA,CAAK,cAAe,CAAA;AAAA,MAClB,kBAAkB,IAAK,CAAA,QAAA;AAAA,MACvB,IAAM,EAAA,WAAA;AAAA,MACN,IAAM,EAAA,iBAAA;AAAA,MACN,IAAA,EAAM,KAAK,WAAY,CAAA,MAAA;AAAA,KACxB,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,WAAc,GAAA;AACZ,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA,CAAA;AAAA,GACpB;AAAA,EAEA,OAAU,GAAA;AACR,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA,CAAA;AAClB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAS,GAAA;AACP,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA,CAAA;AAClB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,OAAU,GAAA;AACR,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA,CAAA;AAClB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAS,GAAA;AACP,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA,CAAA;AAClB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EACA,IAAI,KAAK,IAAgB,EAAA;AACvB,IAAA,OAAA,CAAQ,IAAI,CAAyB,uBAAA,CAAA,CAAA,CAAA;AACrC,IAAA,CAAC,IAAK,CAAA,iBAAA,EAAmB,gBAAU,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,GAAID,8BAAqB,IAAI,CAAA,CAAA;AAChE,IAAK,IAAA,CAAA,WAAA,GAAc,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CACrB,MAAO,CAAA,CAAC,QAAQ,GAAI,CAAA,KAAK,CAAM,KAAA,CAAC,CAChC,CAAA,GAAA;AAAA,MAAI,CAAC,GAAK,EAAA,KAAA,KACR,CAAC,KAAA,EAAO,KAAK,CAAA,CAA6B,MAAO,CAAA,GAAA,CAAI,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA,KAChE,CAAA;AAEF,IAAA,qBAAA,CAAsB,MAAM;AAC1B,MAAA,IAAA,CAAK,gBAAiB,EAAA,CAAA;AAAA,KACvB,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,OAAO,QAAqB,EAAA;AAC1B,IAAA,MAAM,cAA+B,EAAC,CAAA;AACtC,IAAW,KAAA,MAAA,GAAA,IAAO,mBAAK,KAAO,CAAA,EAAA;AAC5B,MAAM,MAAA,EAAE,CAAC,GAAG,GAAG,UAAU,CAAC,QAAQ,GAAG,GAAA,EAAQ,GAAA,GAAA,CAAA;AAC7C,MAAA,MAAM,cAAc,GAAQ,KAAA,CAAA,CAAA;AAC5B,MAAM,MAAA,WAAA,GAAcE,mBAAW,CAAA,QAAA,EAAU,QAAQ,CAAA,CAAA;AACjD,MAAA,IAAI,gBAAgB,WAAa,EAAA;AAC/B,QAAM,MAAA,WAAA,GAAc,IAAI,KAAM,EAAA,CAAA;AAC9B,QAAY,WAAA,CAAA,QAAQ,CAAI,GAAA,WAAA,GAAc,CAAI,GAAA,CAAA,CAAA;AAC1C,QAAK,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAI,GAAA,WAAA,CAAA;AACvB,QAAA,WAAA,CAAY,KAAK,WAAW,CAAA,CAAA;AAAA,OAC9B;AAAA,KACF;AAEA,IAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,MAAA,IAAA,CAAK,cAAiB,GAAA;AAAA,QACpB,kBAAkB,IAAK,CAAA,QAAA;AAAA,QACvB,IAAM,EAAA,QAAA;AAAA,QACN,IAAM,EAAA,iBAAA;AAAA,QACN,IAAM,EAAA,WAAA;AAAA,OACP,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAAA,EAEA,aAAa,GAAa,EAAA;AACxB,IAAK,IAAA,CAAA,YAAA,CAAa,IAAI,GAAG,CAAA,CAAA;AACzB,IAAA,IAAA,CAAK,WAAc,GAAA,cAAA,CAAe,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,EAAO,KAAK,YAAY,CAAA,CAAA;AAC/D,IAAA,MAAM,EAAE,IAAA,EAAM,EAAG,EAAA,GAAI,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,cAAiB,GAAA;AAAA,MACpB,kBAAkB,IAAK,CAAA,QAAA;AAAA,MAEvB,IAAM,EAAA,OAAA;AAAA,MACN,IAAM,EAAA,IAAA,CAAK,WACR,CAAA,KAAA,CAAM,MAAM,EAAE,CAAA,CACd,GAAI,CAAA,CAAC,GAAQ,KAAA,WAAA,CAAY,GAAK,EAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC3C,IAAA,EAAM,KAAK,WAAY,CAAA,MAAA;AAAA,MACvB,IAAM,EAAA,iBAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,aAAA,CAAc,GAAa,EAAA,OAAA,GAAU,KAAO,EAAA;AAC1C,IAAK,IAAA,CAAA,YAAA,CAAa,OAAO,GAAG,CAAA,CAAA;AAC5B,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,KAAA,MAAW,MAAU,IAAA,IAAA,CAAK,YAAa,CAAA,IAAA,EAAQ,EAAA;AAC7C,QAAI,IAAA,MAAA,CAAO,UAAW,CAAA,GAAG,CAAG,EAAA;AAC1B,UAAK,IAAA,CAAA,YAAA,CAAa,OAAO,MAAM,CAAA,CAAA;AAAA,SACjC;AAAA,OACF;AAAA,KACF;AACA,IAAA,IAAA,CAAK,WAAc,GAAA,cAAA,CAAe,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,EAAO,KAAK,YAAY,CAAA,CAAA;AAC/D,IAAA,IAAA,CAAK,gBAAiB,EAAA,CAAA;AAAA,GACxB;AAAA,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,WAAc,GAAA;AACZ,IAAO,OAAAC,0BAAA,CAAA;AAAA,GACT;AAAA,EAEA,IAAI,iBAAoB,GAAA;AACtB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,IAAO,GAAA;AACT,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,KAAQ,GAAA;AACV,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,MAAM,KAAiB,EAAA;AACzB,IAAA,YAAA,CAAA,IAAA,EAAK,MAAS,EAAA,KAAA,CAAA,CAAA;AACd,IAAK,IAAA,CAAA,IAAA,CAAK,MAAM,KAAK,CAAA,CAAA;AACrB,IAAA,qBAAA,CAAsB,MAAM;AAC1B,MAAA,IAAA,CAAK,gBAAiB,EAAA,CAAA;AAAA,KACvB,CAAA,CAAA;AAAA,GACH;AAAA,EAEQ,gBAAmB,GAAA;AACzB,IAAA,MAAM,EAAE,IAAA,EAAM,EAAG,EAAA,GAAI,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,cAAiB,GAAA;AAAA,MACpB,kBAAkB,IAAK,CAAA,QAAA;AAAA,MACvB,IAAM,EAAA,OAAA;AAAA,MACN,IAAM,EAAA,IAAA,CAAK,WACR,CAAA,KAAA,CAAM,MAAM,EAAE,CAAA,CACd,GAAI,CAAA,CAAC,GAAQ,KAAA,WAAA,CAAY,GAAK,EAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC3C,IAAA,EAAM,KAAK,WAAY,CAAA,MAAA;AAAA,MACvB,IAAM,EAAA,iBAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,mBAAK,OAAQ,CAAA,CAAA,OAAA,CAAA;AAAA,GACtB;AAAA,EAEA,IAAI,QAAQ,OAAmB,EAAA;AAE7B,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA;AAAA,MACb,GAAG,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,MACR,OAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACF;AAAA,EAEA,IAAI,YAAe,GAAA;AACjB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,aAAa,YAAgC,EAAA;AAC/C,IAAA,YAAA,CAAA,IAAA,EAAK,aAAgB,EAAA,YAAA,CAAA,CAAA;AAAA,GACvB;AAAA,EAEA,IAAI,IAAO,GAAA;AACT,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,KAAK,IAAe,EAAA;AAEtB,IAAA,YAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA,CAAA;AAAA,GACf;AAAA,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,OAAO,MAA0B,EAAA;AAEnC,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA,CAAA;AAAA,GACjB;AAAA,EAEA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,QAAQ,OAAqB,EAAA;AAC/B,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA,CAAA;AAAA,GAClB;AAAA,EAEA,IAAI,KAAQ,GAAA;AACV,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,MAAM,KAA2B,EAAA;AACnC,IAAA,YAAA,CAAA,IAAA,EAAK,MAAS,EAAA,KAAA,CAAA,CAAA;AAAA,GAChB;AAAA,EAEA,UAAW,CAAA;AAAA,IACT,UAAA;AAAA,IACA,IAAA,EAAM,EAAE,UAAA,EAAY,QAAS,EAAA;AAAA,GACH,EAAA;AAC1B,IAAA,OAAA,CAAQ,IAAI,aAAe,EAAA;AAAA,MACzB,UAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,UAAa,GAAA;AACX,IAAA,OAAA,CAAQ,IAAI,aAAa,CAAA,CAAA;AAAA,GAC3B;AAAA,EAEA,MAAM,YACJ,UAMA,EAAA;AACA,IAAA,OAAA,CAAQ,IAAI,cAAgB,EAAA;AAAA,MAC1B,UAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AAAA,EAEA,SAAA,CACE,GACA,EAAA,UAAA,EACA,KACe,EAAA;AACf,IAAQ,OAAA,CAAA,GAAA;AAAA,MACN,CAAA,0BAAA,EAA6B,IAAI,IAAK,CAAA,GAAG,CAAC,CAAI,CAAA,EAAA,UAAU,IAAI,KAAK,CAAA,CAAA;AAAA,KACnE,CAAA;AACA,IAAO,OAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA,CAAA;AAAA,GAC7B;AAAA,EAEA,aAAa,MAAgB,EAAA;AAC3B,IAAM,MAAA,SAAA,GAAY,mBAAK,KAAM,CAAA,CAAA,IAAA,CAAK,CAAC,GAAQ,KAAA,GAAA,CAAI,GAAG,CAAA,KAAM,MAAM,CAAA,CAAA;AAC9D,IAAA,IAAI,SAAW,EAAA;AACb,MAAM,MAAA,EAAE,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,GAAG,WAAA,EAAgB,GAAA,SAAA,CAAA;AACnD,MAAA,IAAI,SAAS,SAAY,GAAA,CAAA,CAAA;AACzB,MAAA,MAAM,YAAY,EAAC,CAAA;AACnB,MAAG,GAAA;AACD,QAAM,MAAA,EAAE,CAAC,KAAK,GAAG,OAAU,GAAA,YAAA,CAAA,IAAA,EAAK,OAAM,MAAM,CAAA,CAAA;AAC5C,QAAI,IAAA,KAAA,KAAU,cAAc,CAAG,EAAA;AAC7B,UAAA,SAAA,CAAU,IAAK,CAAA,YAAA,CAAA,IAAA,EAAK,KAAM,CAAA,CAAA,MAAM,CAAC,CAAA,CAAA;AAAA,SACnC,MAAA,IAAW,SAAS,WAAa,EAAA;AAC/B,UAAA,MAAA;AAAA,SACF;AACA,QAAU,MAAA,IAAA,CAAA,CAAA;AAAA,OACZ,QAAS,MAAS,GAAA,YAAA,CAAA,IAAA,EAAK,KAAM,CAAA,CAAA,MAAA,EAAA;AAC7B,MAAO,OAAA,SAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,qDAAqD,MAAM,CAAA,CAAA;AAAA,OAC7D,CAAA;AAAA,KACF;AAEA,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAAA,EAEA,cAAA,CAAe,KAAe,EAAA,WAAA,GAAc,IAAM,EAAA;AAChD,IAAA,MAAM,IAAO,GAAA,WAAA,GAAc,IAAK,CAAA,WAAA,GAAc,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AACnD,IAAA,OAAO,KAAK,MAAO,CAAA,CAAC,QAAQ,GAAI,CAAA,KAAK,MAAM,KAAK,CAAA,CAAA;AAAA,GAClD;AACF,CAAA;AAhYE,aAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,KAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,MAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,kBAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,KAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,KAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,MAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AA4XF,SAAS,cAAA,CAAe,MAAuB,YAA2B,EAAA;AACxE,EAAA,MAAM,cAA+B,EAAC,CAAA;AACtC,EAAM,MAAA,KAAA,GAAe,EAAE,KAAA,EAAO,CAAE,EAAA,CAAA;AAChC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAM,MAAA,GAAA,GAAM,KAAK,CAAC,CAAA,CAAA;AAClB,IAAA,MAAM,EAAE,CAAC,KAAK,GAAG,KAAO,EAAA,CAAC,GAAG,GAAG,GAAK,EAAA,CAAC,OAAO,GAAG,QAAW,GAAA,GAAA,CAAA;AAC1D,IAAM,MAAA,UAAA,GAAa,YAAa,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACvC,IAAA,WAAA,CAAY,IAAK,CAAA,QAAA,CAAS,GAAK,EAAA,KAAA,EAAO,UAAU,CAAC,CAAA,CAAA;AACjD,IAAI,IAAA,CAAC,MAAU,IAAA,CAAC,UAAY,EAAA;AAC1B,MAAG,GAAA;AACD,QAAK,CAAA,IAAA,CAAA,CAAA;AAAA,OACP,QAAS,CAAI,GAAA,IAAA,CAAK,MAAS,GAAA,CAAA,IAAK,KAAK,CAAI,GAAA,CAAC,CAAE,CAAA,KAAK,CAAI,GAAA,KAAA,EAAA;AAAA,KACvD;AAAA,GACF;AACA,EAAO,OAAA,WAAA,CAAA;AACT,CAAA;AAEA,MAAM,QAAW,GAAA,CACf,GACA,EAAA,KAAA,EACA,UACkB,KAAA;AAClB,EAAM,MAAA,KAAA,GAAQ,IAAI,KAAM,EAAA,CAAA;AACxB,EAAM,KAAA,CAAA,CAAC,IAAI,KAAM,CAAA,KAAA,CAAA;AACjB,EAAM,KAAA,CAAA,CAAC,IAAI,KAAM,CAAA,KAAA,CAAA;AACjB,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,KAAA,CAAM,WAAW,CAAI,GAAA,IAAA,CAAA;AAAA,GACvB;AACA,EAAA,KAAA,CAAM,KAAS,IAAA,CAAA,CAAA;AACf,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;;;;"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
const aggregateData = (aggregations, targetData, groupBy, leafData, columnMap, groupMap) => {
|
|
2
|
+
const aggType = aggregations[aggregations.length - 1].aggType;
|
|
3
|
+
const groupIndices = groupBy.map((column) => columnMap[column]);
|
|
4
|
+
switch (aggType) {
|
|
5
|
+
case 1:
|
|
6
|
+
return aggregateSum(
|
|
7
|
+
groupMap,
|
|
8
|
+
leafData,
|
|
9
|
+
columnMap,
|
|
10
|
+
aggregations,
|
|
11
|
+
targetData,
|
|
12
|
+
groupIndices
|
|
13
|
+
);
|
|
14
|
+
case 2:
|
|
15
|
+
return aggregateAverage(
|
|
16
|
+
groupMap,
|
|
17
|
+
leafData,
|
|
18
|
+
columnMap,
|
|
19
|
+
aggregations,
|
|
20
|
+
targetData,
|
|
21
|
+
groupIndices
|
|
22
|
+
);
|
|
23
|
+
case 3:
|
|
24
|
+
return aggregateCount(
|
|
25
|
+
groupMap,
|
|
26
|
+
columnMap,
|
|
27
|
+
aggregations,
|
|
28
|
+
targetData,
|
|
29
|
+
groupIndices
|
|
30
|
+
);
|
|
31
|
+
case 4:
|
|
32
|
+
return aggregateHigh(
|
|
33
|
+
groupMap,
|
|
34
|
+
leafData,
|
|
35
|
+
columnMap,
|
|
36
|
+
aggregations,
|
|
37
|
+
targetData,
|
|
38
|
+
groupIndices
|
|
39
|
+
);
|
|
40
|
+
case 5:
|
|
41
|
+
return aggregateLow(
|
|
42
|
+
groupMap,
|
|
43
|
+
leafData,
|
|
44
|
+
columnMap,
|
|
45
|
+
aggregations,
|
|
46
|
+
targetData,
|
|
47
|
+
groupIndices
|
|
48
|
+
);
|
|
49
|
+
case 6:
|
|
50
|
+
return aggregateDistinct(
|
|
51
|
+
groupMap,
|
|
52
|
+
leafData,
|
|
53
|
+
columnMap,
|
|
54
|
+
aggregations,
|
|
55
|
+
targetData,
|
|
56
|
+
groupIndices
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
function aggregateCount(groupMap, columnMap, aggregations, targetData, groupIndices) {
|
|
61
|
+
const counts = {};
|
|
62
|
+
const aggColumn = getAggColumn(columnMap, aggregations);
|
|
63
|
+
function countRecursive(map) {
|
|
64
|
+
if (Array.isArray(map)) {
|
|
65
|
+
return map.length;
|
|
66
|
+
} else {
|
|
67
|
+
let count2 = 0;
|
|
68
|
+
for (const key in map) {
|
|
69
|
+
count2 += 1 + countRecursive(map[key]);
|
|
70
|
+
}
|
|
71
|
+
return count2;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const key in groupMap) {
|
|
75
|
+
const count2 = countRecursive(groupMap[key]);
|
|
76
|
+
counts[key] = count2;
|
|
77
|
+
}
|
|
78
|
+
for (let index = 0; index < targetData.length; index++) {
|
|
79
|
+
for (const key in counts) {
|
|
80
|
+
if (targetData[index][groupIndices[0]] === key) {
|
|
81
|
+
targetData[index][aggColumn] = counts[key];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
console.log("!!!! targetData", targetData);
|
|
86
|
+
console.log("!!!! counts", counts);
|
|
87
|
+
return counts;
|
|
88
|
+
}
|
|
89
|
+
function getAggColumn(columnMap, aggregations) {
|
|
90
|
+
console.log("!!!! aggregation length", aggregations.length);
|
|
91
|
+
const columnName = aggregations[aggregations.length - 1].column;
|
|
92
|
+
const columnNumber = columnMap[columnName];
|
|
93
|
+
return columnNumber;
|
|
94
|
+
}
|
|
95
|
+
function aggregateSum(groupMap, leafData, columnMap, aggregations, targetData, groupIndices) {
|
|
96
|
+
const sums = {};
|
|
97
|
+
const aggColumn = getAggColumn(columnMap, aggregations);
|
|
98
|
+
function sumRecursive(map, leafData2, aggColumn2) {
|
|
99
|
+
if (Array.isArray(map)) {
|
|
100
|
+
let sum = 0;
|
|
101
|
+
for (const key of map) {
|
|
102
|
+
sum += Number(leafData2[key][aggColumn2]);
|
|
103
|
+
}
|
|
104
|
+
return sum;
|
|
105
|
+
} else {
|
|
106
|
+
let sum = 0;
|
|
107
|
+
for (const key in map) {
|
|
108
|
+
sum += sumRecursive(map[key], leafData2, aggColumn2);
|
|
109
|
+
}
|
|
110
|
+
return sum;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
for (const key in groupMap) {
|
|
114
|
+
console.log(key);
|
|
115
|
+
const sum = Number(sumRecursive(groupMap[key], leafData, aggColumn));
|
|
116
|
+
sums[key] = sum;
|
|
117
|
+
}
|
|
118
|
+
for (let index = 0; index < targetData.length; index++) {
|
|
119
|
+
for (const key in sums) {
|
|
120
|
+
if (targetData[index][groupIndices[0]] === key) {
|
|
121
|
+
targetData[index][aggColumn] = sums[key];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
console.log("!!!! targetData", targetData);
|
|
126
|
+
console.log("!!!! sums", sums);
|
|
127
|
+
return sums;
|
|
128
|
+
}
|
|
129
|
+
function aggregateAverage(groupMap, leafData, columnMap, aggregations, targetData, groupIndices) {
|
|
130
|
+
const averages = {};
|
|
131
|
+
const aggColumn = getAggColumn(columnMap, aggregations);
|
|
132
|
+
const count2 = aggregateCount(
|
|
133
|
+
groupMap,
|
|
134
|
+
columnMap,
|
|
135
|
+
aggregations,
|
|
136
|
+
targetData,
|
|
137
|
+
groupIndices
|
|
138
|
+
);
|
|
139
|
+
const sum = aggregateSum(
|
|
140
|
+
groupMap,
|
|
141
|
+
leafData,
|
|
142
|
+
columnMap,
|
|
143
|
+
aggregations,
|
|
144
|
+
targetData,
|
|
145
|
+
groupIndices
|
|
146
|
+
);
|
|
147
|
+
for (const key in count2) {
|
|
148
|
+
let average = 0;
|
|
149
|
+
average = sum[key] / count2[key];
|
|
150
|
+
averages[key] = average;
|
|
151
|
+
}
|
|
152
|
+
for (let index = 0; index < targetData.length; index++) {
|
|
153
|
+
for (const key in averages) {
|
|
154
|
+
if (targetData[index][groupIndices[0]] === key) {
|
|
155
|
+
targetData[index][aggColumn] = averages[key];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
console.log("!!!! targetData", targetData);
|
|
160
|
+
console.log("!!!! averages", averages);
|
|
161
|
+
return averages;
|
|
162
|
+
}
|
|
163
|
+
function getLeafColumnData(map, leafData, aggColumn) {
|
|
164
|
+
const data = [];
|
|
165
|
+
if (Array.isArray(map)) {
|
|
166
|
+
for (const key of map) {
|
|
167
|
+
data.push(leafData[key][aggColumn]);
|
|
168
|
+
}
|
|
169
|
+
} else {
|
|
170
|
+
for (const key in map) {
|
|
171
|
+
data.push(...getLeafColumnData(map[key], leafData, aggColumn));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return data;
|
|
175
|
+
}
|
|
176
|
+
function aggregateDistinct(groupMap, leafData, columnMap, aggregations, targetData, groupIndices) {
|
|
177
|
+
const distincts = {};
|
|
178
|
+
const aggColumn = getAggColumn(columnMap, aggregations);
|
|
179
|
+
for (const key in groupMap) {
|
|
180
|
+
const leafColumnData = getLeafColumnData(
|
|
181
|
+
groupMap[key],
|
|
182
|
+
leafData,
|
|
183
|
+
aggColumn
|
|
184
|
+
);
|
|
185
|
+
const distinct = [...new Set(leafColumnData)];
|
|
186
|
+
distincts[key] = distinct;
|
|
187
|
+
}
|
|
188
|
+
for (let index = 0; index < targetData.length; index++) {
|
|
189
|
+
for (const key in distincts) {
|
|
190
|
+
if (targetData[index][groupIndices[0]] === key) {
|
|
191
|
+
targetData[index][aggColumn] = distincts[key];
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return distincts;
|
|
196
|
+
}
|
|
197
|
+
function aggregateHigh(groupMap, leafData, columnMap, aggregations, targetData, groupIndices) {
|
|
198
|
+
const highs = {};
|
|
199
|
+
const aggColumn = getAggColumn(columnMap, aggregations);
|
|
200
|
+
for (const key in groupMap) {
|
|
201
|
+
const leafColumnData = getLeafColumnData(
|
|
202
|
+
groupMap[key],
|
|
203
|
+
leafData,
|
|
204
|
+
aggColumn
|
|
205
|
+
);
|
|
206
|
+
const maxNumber = Math.max(...leafColumnData);
|
|
207
|
+
highs[key] = maxNumber;
|
|
208
|
+
}
|
|
209
|
+
for (let index = 0; index < targetData.length; index++) {
|
|
210
|
+
for (const key in highs) {
|
|
211
|
+
if (targetData[index][groupIndices[0]] === key) {
|
|
212
|
+
targetData[index][aggColumn] = highs[key];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return highs;
|
|
217
|
+
}
|
|
218
|
+
function aggregateLow(groupMap, leafData, columnMap, aggregations, targetData, groupIndices) {
|
|
219
|
+
const mins = {};
|
|
220
|
+
const aggColumn = getAggColumn(columnMap, aggregations);
|
|
221
|
+
for (const key in groupMap) {
|
|
222
|
+
const leafColumnData = getLeafColumnData(
|
|
223
|
+
groupMap[key],
|
|
224
|
+
leafData,
|
|
225
|
+
aggColumn
|
|
226
|
+
);
|
|
227
|
+
const minNumber = Math.min(...leafColumnData);
|
|
228
|
+
mins[key] = minNumber;
|
|
229
|
+
}
|
|
230
|
+
for (let index = 0; index < targetData.length; index++) {
|
|
231
|
+
for (const key in mins) {
|
|
232
|
+
if (targetData[index][groupIndices[0]] === key) {
|
|
233
|
+
targetData[index][aggColumn] = mins[key];
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return mins;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export { aggregateData };
|
|
241
|
+
//# sourceMappingURL=aggregate-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate-utils.js","sources":["../../src/array-data-source/aggregate-utils.ts"],"sourcesContent":["import type { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuAggregation, VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport type { GroupMap, KeyList } from \"./group-utils\";\n\nexport const count = (arr: any[]) => arr.length;\n\nexport const aggregateData = (\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupBy: VuuGroupBy,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n groupMap: GroupMap\n) => {\n const aggType = aggregations[aggregations.length - 1].aggType;\n const groupIndices = groupBy.map<number>((column) => columnMap[column]);\n\n switch (aggType) {\n case 1:\n return aggregateSum(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 2:\n return aggregateAverage(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 3:\n return aggregateCount(\n groupMap,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 4:\n return aggregateHigh(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 5:\n return aggregateLow(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 6:\n return aggregateDistinct(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n }\n};\n\nfunction aggregateCount(\n groupMap: GroupMap,\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const counts: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n function countRecursive(map: GroupMap | KeyList) {\n if (Array.isArray(map)) {\n return map.length;\n } else {\n let count = 0;\n for (const key in map) {\n count += 1 + countRecursive(map[key]);\n }\n return count;\n }\n }\n\n for (const key in groupMap) {\n const count = countRecursive(groupMap[key]);\n counts[key] = count;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in counts) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = counts[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! counts\", counts);\n return counts;\n}\n\nfunction getAggColumn(columnMap: ColumnMap, aggregations: VuuAggregation[]) {\n console.log(\"!!!! aggregation length\", aggregations.length);\n const columnName = aggregations[aggregations.length - 1].column;\n const columnNumber = columnMap[columnName];\n return columnNumber;\n}\n\nfunction aggregateSum(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const sums: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n function sumRecursive(\n map: GroupMap | KeyList,\n leafData: readonly DataSourceRow[],\n aggColumn: number\n ) {\n if (Array.isArray(map)) {\n let sum = 0;\n for (const key of map) {\n sum += Number(leafData[key][aggColumn]);\n }\n return sum;\n } else {\n let sum = 0;\n for (const key in map) {\n sum += sumRecursive(map[key], leafData, aggColumn);\n }\n return sum;\n }\n }\n\n for (const key in groupMap) {\n console.log(key);\n const sum = Number(sumRecursive(groupMap[key], leafData, aggColumn));\n sums[key] = sum;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in sums) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = sums[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! sums\", sums);\n return sums;\n}\n\nfunction aggregateAverage(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const averages: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n const count = aggregateCount(\n groupMap,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n const sum = aggregateSum(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n\n for (const key in count) {\n let average = 0;\n average = sum[key] / count[key];\n averages[key] = average;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in averages) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = averages[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! averages\", averages);\n return averages;\n}\n\nfunction getLeafColumnData(\n map: GroupMap | KeyList,\n leafData: readonly DataSourceRow[],\n aggColumn: number\n): number[] {\n const data: number[] = [];\n\n if (Array.isArray(map)) {\n for (const key of map) {\n data.push(leafData[key][aggColumn] as number);\n }\n } else {\n for (const key in map) {\n data.push(...getLeafColumnData(map[key], leafData, aggColumn));\n }\n }\n\n return data;\n}\n\nfunction aggregateDistinct(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const distincts: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn\n );\n const distinct: any = [...new Set(leafColumnData)];\n\n distincts[key] = distinct;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in distincts) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = distincts[key];\n }\n }\n }\n\n return distincts;\n}\n\nfunction aggregateHigh(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const highs: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn\n );\n const maxNumber = Math.max(...leafColumnData);\n\n highs[key] = maxNumber;\n }\n for (let index = 0; index < targetData.length; index++) {\n for (const key in highs) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = highs[key];\n }\n }\n }\n\n return highs;\n}\n\nfunction aggregateLow(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const mins: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn\n );\n const minNumber = Math.min(...leafColumnData);\n mins[key] = minNumber;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in mins) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = mins[key];\n }\n }\n }\n\n return mins;\n}\n"],"names":["count","leafData","aggColumn"],"mappings":"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"}
|