@hrforte/react-pivottable 2.2.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PivotDataWorker.js +219 -13
- package/dist/PivotDataWorker.js.map +1 -1
- package/dist/PivotTable.js +2 -1
- package/dist/PivotTable.js.map +1 -1
- package/dist/PivotTableUI.js +145 -48
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/TableRenderers.js +629 -118
- package/dist/TableRenderers.js.map +1 -1
- package/dist/Utilities.js +104 -179
- package/dist/Utilities.js.map +1 -1
- package/dist/__tests__/PivotDataWorker-test.js +437 -7
- package/dist/__tests__/PivotDataWorker-test.js.map +1 -1
- package/dist/__tests__/PivotTableUI-processing-test.js +42 -3
- package/dist/__tests__/PivotTableUI-processing-test.js.map +1 -1
- package/dist/__tests__/PivotTableUI-rerender-test.js +314 -0
- package/dist/__tests__/PivotTableUI-rerender-test.js.map +1 -0
- package/dist/__tests__/TableRenderers-showNumericalOrder-test.js +449 -0
- package/dist/__tests__/TableRenderers-showNumericalOrder-test.js.map +1 -1
- package/dist/__tests__/pivotCompute-test.js +137 -0
- package/dist/__tests__/pivotCompute-test.js.map +1 -1
- package/dist/pivot-worker.js +510 -201
- package/dist/pivotCompute.js +238 -12
- package/dist/pivotCompute.js.map +1 -1
- package/dist/pivotWorker.js +165 -9
- package/dist/pivotWorker.js.map +1 -1
- package/dist/pivottable.css +277 -235
- package/package.json +1 -1
package/dist/pivotWorker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pivotWorker.js"],"names":["MAX_CACHED_DATASETS","datasetCache","Map","debugEnabled","cacheDataset","dataKey","dataset","delete","set","size","oldestKey","keys","next","value","postToMain","self","postMessage","message","log","detail","type","toErrorMessage","String","error","addEventListener","event","data","Boolean","enabled","startedAt","Date","now","id","length","totalRecords","Object","attrValues","join","config","get","Error","rows","cols","result","rowKeys","colKeys","aggregations","map","agg","key"],"mappings":"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","file":"pivotWorker.js","sourcesContent":["import {materializeData, computePivotState} from './pivotCompute';\n\nconst MAX_CACHED_DATASETS = 4;\n\nconst datasetCache = new Map();\n\nlet debugEnabled = false;\n\nconst cacheDataset = (dataKey, dataset) => {\n datasetCache.delete(dataKey);\n datasetCache.set(dataKey, dataset);\n while (datasetCache.size > MAX_CACHED_DATASETS) {\n const oldestKey = datasetCache.keys().next().value;\n datasetCache.delete(oldestKey);\n }\n return dataset;\n};\n\nconst postToMain = message => {\n self.postMessage(message);\n};\n\nconst log = (message, detail) => {\n if (debugEnabled) {\n postToMain({type: 'pivot:log', message, detail});\n }\n};\n\nconst toErrorMessage = error => String((error && error.message) || error);\n\nself.addEventListener('message', event => {\n const message = event.data || {};\n\n if (message.type === 'pivot:debug') {\n debugEnabled = Boolean(message.enabled);\n log(`debug logging ${debugEnabled ? 'enabled' : 'disabled'} in worker`);\n return;\n }\n\n if (message.type === 'pivot:setData') {\n const startedAt = Date.now();\n log(\n `#${message.id} setData received: ${\n (message.data || []).length\n } records (dataKey=${message.dataKey})`\n );\n try {\n const dataset = cacheDataset(\n message.dataKey,\n materializeData(message.data, {})\n );\n log(\n `#${message.id} materialized ${dataset.totalRecords} records in ` +\n `${Date.now() - startedAt}ms (attributes: ${Object.keys(\n dataset.attrValues\n ).join(', ')})`\n );\n } catch (error) {\n log(`#${message.id} setData failed: ${toErrorMessage(error)}`);\n postToMain({\n type: 'pivot:error',\n id: message.id,\n message: toErrorMessage(error),\n });\n }\n return;\n }\n\n if (message.type === 'pivot:compute') {\n const startedAt = Date.now();\n const config = message.config || {};\n try {\n const dataset = datasetCache.get(message.dataKey);\n if (!dataset) {\n throw new Error(`no dataset staged for key ${message.dataKey}`);\n }\n log(\n `#${message.id} compute received (rows=[${(config.rows || []).join(\n ', '\n )}] cols=[${(config.cols || []).join(', ')}])`\n );\n const result = computePivotState(dataset, message.config);\n log(\n `#${message.id} computed in ${Date.now() - startedAt}ms (rowKeys: ${\n result.rowKeys.length\n }, colKeys: ${\n result.colKeys.length\n }, aggregations: ${result.aggregations.map(agg => agg.key).join(', ')})`\n );\n postToMain({type: 'pivot:result', id: message.id, result});\n } catch (error) {\n log(`#${message.id} compute failed: ${toErrorMessage(error)}`);\n postToMain({\n type: 'pivot:error',\n id: message.id,\n message: toErrorMessage(error),\n });\n }\n }\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/pivotWorker.js"],"names":["MAX_CACHED_DATASETS","MAX_CACHED_PIVOTS","datasetCache","Map","pendingDatasets","pivotCache","pivotDataKeys","pivotOwners","debugEnabled","cacheDataset","dataKey","dataset","ownerKey","forEach","cached","cachedKey","delete","set","size","oldestKey","keys","next","value","postToMain","self","postMessage","message","log","detail","type","toErrorMessage","String","error","addEventListener","event","data","Boolean","enabled","startedAt","Date","now","id","length","totalRecords","Object","attrValues","join","records","pending","get","push","record","Error","config","rows","cols","result","columnMode","aggregationDisplayMode","totalRows","totalColumns","useVirtualSummary","virtualizeRows","rendererName","sortersRequireMainThread","VIRTUAL_ROW_THRESHOLD","VIRTUAL_COLUMN_THRESHOLD","sparseColumnsAligned","resultForMain","viewportKey","rowKeys","aggregations","colKeys","map","agg","key","pivot","start","end","columnStart","columnEnd","datasets","pivots","Array","isArray","materializedInput"],"mappings":"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","file":"pivotWorker.js","sourcesContent":["import {\n alignSparseColumnsToRows,\n materializeData,\n computePivotState,\n computePivotViewport,\n createVirtualPivotSummary,\n getPivotViewportColumnCount,\n getPivotViewportRowCount,\n VIRTUAL_COLUMN_THRESHOLD,\n VIRTUAL_ROW_THRESHOLD,\n} from './pivotCompute';\n\nconst MAX_CACHED_DATASETS = 2;\nconst MAX_CACHED_PIVOTS = 2;\n\nconst datasetCache = new Map();\nconst pendingDatasets = new Map();\nconst pivotCache = new Map();\nconst pivotDataKeys = new Map();\nconst pivotOwners = new Map();\n\nlet debugEnabled = false;\n\nconst cacheDataset = (dataKey, dataset, ownerKey) => {\n if (ownerKey) {\n datasetCache.forEach((cached, cachedKey) => {\n if (cached.ownerKey === ownerKey && cachedKey !== dataKey) {\n datasetCache.delete(cachedKey);\n }\n });\n }\n dataset.ownerKey = ownerKey || null;\n datasetCache.delete(dataKey);\n datasetCache.set(dataKey, dataset);\n while (datasetCache.size > MAX_CACHED_DATASETS) {\n const oldestKey = datasetCache.keys().next().value;\n datasetCache.delete(oldestKey);\n }\n return dataset;\n};\n\nconst postToMain = message => {\n self.postMessage(message);\n};\n\nconst log = (message, detail) => {\n if (debugEnabled) {\n postToMain({type: 'pivot:log', message, detail});\n }\n};\n\nconst toErrorMessage = error => String((error && error.message) || error);\n\nself.addEventListener('message', event => {\n const message = event.data || {};\n\n if (message.type === 'pivot:debug') {\n debugEnabled = Boolean(message.enabled);\n log(`debug logging ${debugEnabled ? 'enabled' : 'disabled'} in worker`);\n return;\n }\n\n if (message.type === 'pivot:setData') {\n const startedAt = Date.now();\n log(\n `#${message.id} setData received: ${\n (message.data || []).length\n } records (dataKey=${message.dataKey})`\n );\n try {\n const dataset = cacheDataset(\n message.dataKey,\n materializeData(message.data, {}),\n message.ownerKey\n );\n log(\n `#${message.id} materialized ${dataset.totalRecords} records in ` +\n `${Date.now() - startedAt}ms (attributes: ${Object.keys(\n dataset.attrValues\n ).join(', ')})`\n );\n } catch (error) {\n log(`#${message.id} setData failed: ${toErrorMessage(error)}`);\n postToMain({\n type: 'pivot:error',\n id: message.id,\n message: toErrorMessage(error),\n });\n }\n return;\n }\n\n if (message.type === 'pivot:setDataStart') {\n pendingDatasets.set(message.dataKey, {\n records: [],\n ownerKey: message.ownerKey,\n });\n return;\n }\n\n if (message.type === 'pivot:setDataChunk') {\n const pending = pendingDatasets.get(message.dataKey);\n if (pending) {\n (message.data || []).forEach(record => pending.records.push(record));\n }\n return;\n }\n\n if (message.type === 'pivot:setDataEnd') {\n const startedAt = Date.now();\n try {\n const pending = pendingDatasets.get(message.dataKey);\n if (!pending) {\n throw new Error(`no dataset staging buffer for key ${message.dataKey}`);\n }\n pendingDatasets.delete(message.dataKey);\n const dataset = cacheDataset(\n message.dataKey,\n materializeData(pending.records, {}),\n pending.ownerKey\n );\n log(\n `#${message.id} materialized ${dataset.totalRecords} chunked records ` +\n `in ${Date.now() - startedAt}ms`\n );\n } catch (error) {\n pendingDatasets.delete(message.dataKey);\n postToMain({\n type: 'pivot:error',\n id: message.id,\n message: toErrorMessage(error),\n });\n }\n return;\n }\n\n if (message.type === 'pivot:compute') {\n const startedAt = Date.now();\n const config = message.config || {};\n try {\n const dataset = datasetCache.get(message.dataKey);\n if (!dataset) {\n throw new Error(`no dataset staged for key ${message.dataKey}`);\n }\n log(\n `#${message.id} compute received (rows=[${(config.rows || []).join(\n ', '\n )}] cols=[${(config.cols || []).join(', ')}])`\n );\n const result = computePivotState(dataset, message.config);\n const columnMode = config.aggregationDisplayMode === 'column';\n const totalRows = getPivotViewportRowCount(result, columnMode);\n const totalColumns = getPivotViewportColumnCount(result, columnMode);\n const useVirtualSummary =\n config.virtualizeRows &&\n (config.rendererName || 'Table') === 'Table' &&\n !config.sortersRequireMainThread &&\n (totalRows > VIRTUAL_ROW_THRESHOLD ||\n totalColumns > VIRTUAL_COLUMN_THRESHOLD);\n const sparseColumnsAligned =\n useVirtualSummary && alignSparseColumnsToRows(result);\n const resultForMain = useVirtualSummary\n ? createVirtualPivotSummary(result, columnMode)\n : result;\n resultForMain.viewportKey = message.id;\n pivotCache.set(\n message.id,\n useVirtualSummary\n ? result\n : {\n rowKeys: result.rowKeys,\n aggregations: result.aggregations,\n }\n );\n pivotDataKeys.set(message.id, message.dataKey);\n pivotOwners.set(message.id, message.ownerKey || null);\n while (pivotCache.size > MAX_CACHED_PIVOTS) {\n const oldestKey = pivotCache.keys().next().value;\n pivotCache.delete(oldestKey);\n pivotDataKeys.delete(oldestKey);\n pivotOwners.delete(oldestKey);\n }\n log(\n `#${message.id} computed in ${Date.now() - startedAt}ms (rowKeys: ${\n result.rowKeys.length\n }, colKeys: ${\n result.colKeys.length\n }, sparse columns aligned: ${sparseColumnsAligned}, aggregations: ${result.aggregations\n .map(agg => agg.key)\n .join(', ')})`\n );\n postToMain({type: 'pivot:result', id: message.id, result: resultForMain});\n } catch (error) {\n log(`#${message.id} compute failed: ${toErrorMessage(error)}`);\n postToMain({\n type: 'pivot:error',\n id: message.id,\n message: toErrorMessage(error),\n });\n }\n return;\n }\n\n if (message.type === 'pivot:viewport') {\n try {\n const pivot = pivotCache.get(message.viewportKey);\n if (!pivot) {\n throw new Error('Pivot viewport cache is unavailable');\n }\n const result = computePivotViewport(\n pivot,\n message.start,\n message.end,\n message.columnMode,\n message.columnStart,\n message.columnEnd\n );\n postToMain({type: 'pivot:viewportResult', id: message.id, result});\n log(`#${message.id} viewport released after postMessage`, {\n rows: result.rows.length,\n datasets: datasetCache.size,\n pivots: pivotCache.size,\n });\n } catch (error) {\n postToMain({\n type: 'pivot:error',\n id: message.id,\n message: toErrorMessage(error),\n });\n }\n return;\n }\n\n if (message.type === 'pivot:release') {\n pivotCache.delete(message.viewportKey);\n pivotDataKeys.delete(message.viewportKey);\n pivotOwners.delete(message.viewportKey);\n log(`released pivot ${message.viewportKey}`, {\n datasets: datasetCache.size,\n pivots: pivotCache.size,\n });\n return;\n }\n\n if (message.type === 'pivot:releaseData') {\n const dataset = datasetCache.get(message.dataKey);\n if (dataset) {\n if (Array.isArray(dataset.materializedInput)) {\n dataset.materializedInput.length = 0;\n }\n dataset.attrValues = null;\n }\n datasetCache.delete(message.dataKey);\n pendingDatasets.delete(message.dataKey);\n pivotCache.forEach((pivot, viewportKey) => {\n if (pivotDataKeys.get(viewportKey) === message.dataKey) {\n pivot.attrValues = null;\n }\n });\n log(`released dataset ${message.dataKey}`, {\n datasets: datasetCache.size,\n pivots: pivotCache.size,\n });\n return;\n }\n\n if (message.type === 'pivot:releaseOwner') {\n pendingDatasets.forEach((pending, dataKey) => {\n if (pending.ownerKey === message.ownerKey) {\n pending.records.length = 0;\n pendingDatasets.delete(dataKey);\n }\n });\n datasetCache.forEach((dataset, dataKey) => {\n if (dataset.ownerKey === message.ownerKey) {\n if (Array.isArray(dataset.materializedInput)) {\n dataset.materializedInput.length = 0;\n }\n datasetCache.delete(dataKey);\n }\n });\n pivotCache.forEach((pivot, viewportKey) => {\n if (pivotOwners.get(viewportKey) === message.ownerKey) {\n pivotCache.delete(viewportKey);\n pivotDataKeys.delete(viewportKey);\n pivotOwners.delete(viewportKey);\n }\n });\n log(`released owner ${message.ownerKey}`, {\n datasets: datasetCache.size,\n pivots: pivotCache.size,\n });\n }\n});\n"]}
|