@deephaven/iris-grid 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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/AdvancedFilterCreator.js +65 -102
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js +6 -8
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +22 -28
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js +20 -29
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +19 -46
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js +32 -29
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js +490 -822
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js +10 -11
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCacheUtils.js +28 -8
- package/dist/IrisGridCacheUtils.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +30 -13
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js +6 -12
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +28 -47
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js +28 -51
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModelUpdater.js +32 -30
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js +28 -62
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js +7 -12
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js +162 -264
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js +23 -16
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +49 -73
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js +19 -19
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.js +35 -52
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js +9 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridThemeProvider.js +5 -7
- package/dist/IrisGridThemeProvider.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js +5 -9
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +246 -300
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/NoPastePermissionModal.js +3 -5
- package/dist/NoPastePermissionModal.js.map +1 -1
- package/dist/PendingDataBottomBar.js +27 -16
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/ToastBottomBar.js +16 -8
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +11 -24
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
- package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +1 -3
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js +1 -3
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +10 -18
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js +45 -102
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +35 -77
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +9 -11
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +17 -24
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js +6 -11
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -1
- package/dist/sidebar/RollupRows.js +72 -113
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +16 -33
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +50 -74
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +18 -42
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +3 -4
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +45 -34
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableSaver.js","names":["PureComponent","Log","memoizeClear","FormatterUtils","TableUtils","PromiseUtils","assertNotNull","IrisGridUtils","log","module","UNFORMATTED_DATE_PATTERN","isUpdateEventData","data","added","undefined","assertIsUpdateEventData","Error","TableSaver","csvEscapeString","str","concat","replace","constructor","props","_defineProperty","isCustomColumnFormatDefined","max","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","includeColumnHeaders","useUnformattedValues","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","useBlobFallback","componentDidMount","getDownloadWorker","then","sw","info","postMessage","catch","error","warn","componentWillUnmount","removeIframe","streamTimeout","clearTimeout","snapshotHandlerTimeout","createWriterStream","port","useBlob","chunks","encode","TextEncoder","prototype","fileName","streamConfig","write","chunk","header","push","rows","close","blob","Blob","type","link","document","createElement","href","URL","createObjectURL","download","click","abort","cancel","end","WritableStream","startDownload","frozenTable","tableSubscription","snapshotRanges","modelRanges","isDownloading","downloadStartTime","Date","now","table","columns","columnsFromRanges","encodedFileName","encodeURIComponent","escape","messageChannel","MessageChannel","port1","fileWriter","getWriter","writeCsvTable","port2","onmessage","finishDownload","onDownloadCompleted","resetTableSaver","cancelDownload","_this$table","_this$tableSubscripti","_this$fileWriter","forEach","cancelable","onDownloadCanceled","chunkRows","writeTableHeader","_this$fileWriter2","headerString","i","length","name","startWriteTableBody","Math","floor","DOWNLOAD_CELL_CHUNK","map","range","endRow","startRow","ceil","reduce","total","snapshotCount","makeSnapshot","min","SNAPSHOT_BUFFER_SIZE","writeSnapshot","snapshotIndex","snapshotStartRow","snapshotEndRow","has","n","get","convertSnapshotIntoCsv","delete","updateDownloadProgress","debug2","size","onDownloadProgressUpdate","downloadProgress","estimateTime","snapshot","csvString","snapshotIterator","iterator","dh","formatter","hasNext","next","value","rowIdx","j","cellData","_snapshot$getData","getData","isDateType","i18n","DateTimeFormat","format","TimeZone","getTimeZone","timeZone","toString","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","formatOverride","cellFormat","getFormat","formatString","getFormattedString","_this","currentGridRange","_loop","makeCancelable","RangeSet","ofRange","err","val","_ref","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","iframe","hidden","body","appendChild","_this$iframe","remove","render"],"sources":["../../src/sidebar/TableSaver.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport {\n type GridRange,\n type GridRangeIndex,\n memoizeClear,\n} from '@deephaven/grid';\nimport {\n type Formatter,\n FormatterUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport {\n type CancelablePromise,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableSaver');\n\nconst UNFORMATTED_DATE_PATTERN = `yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z`;\n\ninterface TableSaverProps {\n dh: typeof DhType;\n getDownloadWorker: () => Promise<ServiceWorker>;\n isDownloading: boolean;\n onDownloadCompleted: () => void;\n onDownloadCanceled: () => void;\n onDownloadProgressUpdate: (\n progress: number,\n estimatedTime: number | null\n ) => void;\n formatter: Formatter;\n}\n\nfunction isUpdateEventData(\n data: DhType.TableData\n): data is DhType.SubscriptionTableData {\n return (data as DhType.SubscriptionTableData).added !== undefined;\n}\n\nfunction assertIsUpdateEventData(\n data: DhType.TableData\n): asserts data is DhType.SubscriptionTableData {\n if (!isUpdateEventData(data)) {\n throw new Error('event is not UpdateEventData');\n }\n}\n\nexport default class TableSaver extends PureComponent<\n TableSaverProps,\n Record<string, never>\n> {\n static DOWNLOAD_CELL_CHUNK = 6000;\n\n static SNAPSHOT_BUFFER_SIZE = 5;\n\n static STREAM_TIMEOUT = 8000;\n\n static SNAPSHOT_HANDLER_TIMEOUT = 5;\n\n static defaultProps = {\n isDownloading: false,\n onDownloadCompleted: (): void => undefined,\n onDownloadCanceled: (): void => undefined,\n onDownloadProgressUpdate: (): void => undefined,\n };\n\n static csvEscapeString(str: string): string {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n constructor(props: TableSaverProps) {\n super(props);\n\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n\n this.state = {};\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n\n this.useBlobFallback = false;\n }\n\n componentDidMount(): void {\n const { getDownloadWorker } = this.props;\n getDownloadWorker()\n .then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n })\n .catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n\n componentWillUnmount(): void {\n this.removeIframe();\n if (this.streamTimeout) clearTimeout(this.streamTimeout);\n if (this.snapshotHandlerTimeout) clearTimeout(this.snapshotHandlerTimeout);\n }\n\n sw?: ServiceWorker;\n\n port?: MessagePort;\n\n fileWriter?: WritableStreamDefaultWriter<unknown>;\n\n table?: DhType.Table;\n\n tableSubscription?: DhType.TableViewportSubscription;\n\n columns?: readonly DhType.Column[];\n\n fileName?: string;\n\n includeColumnHeaders: boolean;\n\n useUnformattedValues: boolean;\n\n chunkRows?: number;\n\n gridRanges: readonly GridRange[];\n\n gridRangeCounter?: number;\n\n rangedSnapshotsTotal: readonly number[];\n\n rangedSnapshotCounter?: number;\n\n snapshotsTotal: number;\n\n snapshotCounter: number;\n\n snapshotsBuffer: Map<number, DhType.SubscriptionTableData>;\n\n currentSnapshotIndex: number;\n\n snapshotPending: number;\n\n cancelableSnapshots: (CancelablePromise<unknown> | null)[];\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n streamTimeout?: ReturnType<typeof setTimeout>;\n\n snapshotHandlerTimeout?: ReturnType<typeof setTimeout>;\n\n downloadStartTime?: number;\n\n iframe?: HTMLIFrameElement;\n\n useBlobFallback: boolean;\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n createWriterStream(port: MessagePort): WritableStream<{\n rows?: string | undefined;\n header?: string | undefined;\n }> {\n // use blob fall back if it's safari\n const useBlob = this.useBlobFallback;\n const chunks = [] as BlobPart[];\n let encode: ((input?: string) => Uint8Array) | null = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n const { fileName } = this;\n\n const streamConfig = {} as UnderlyingSink<{\n rows?: string | undefined;\n header?: string | undefined;\n }>;\n if (useBlob) {\n streamConfig.write = (chunk: { rows?: string; header?: string }) => {\n assertNotNull(encode);\n if (chunk.header !== undefined) {\n chunks.push(encode(chunk.header));\n }\n if (chunk.rows !== undefined) {\n chunks.push(encode(chunk.rows));\n }\n };\n streamConfig.close = () => {\n assertNotNull(fileName);\n const blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8',\n });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n } else {\n streamConfig.write = (chunk: unknown) => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({ end: true });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n }\n\n return new WritableStream(streamConfig);\n }\n\n startDownload(\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ): void {\n // don't trigger another download when a download is ongoing\n const { isDownloading } = this.props;\n if (isDownloading) {\n return;\n }\n\n this.downloadStartTime = Date.now();\n log.info(`start downloading ${fileName}`);\n\n this.table = frozenTable;\n this.columns = IrisGridUtils.columnsFromRanges(\n modelRanges,\n frozenTable.columns\n );\n this.tableSubscription = tableSubscription;\n this.gridRanges = snapshotRanges;\n this.includeColumnHeaders = includeColumnHeaders;\n this.useUnformattedValues = useUnformattedValues;\n\n // Make filename RFC5987 compatible\n const encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':'))\n .replace(/['()]/g, escape)\n .replace(/\\*/g, '%2A');\n\n const messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable(includeColumnHeaders);\n return;\n }\n\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({ encodedFileName }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n\n finishDownload(): void {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n\n const { onDownloadCompleted } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n\n if (this.downloadStartTime !== undefined) {\n log.info(\n `download finished, total elapsed time ${\n (Date.now() - this.downloadStartTime) / 1000\n } seconds`\n );\n }\n }\n\n cancelDownload(): void {\n this.table?.close();\n this.tableSubscription?.close();\n this.fileWriter?.abort();\n\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => null);\n cancelable.cancel();\n }\n });\n const { onDownloadCanceled } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n\n resetTableSaver(): void {\n this.table = undefined;\n this.tableSubscription = undefined;\n this.columns = undefined;\n this.chunkRows = undefined;\n this.removeIframe();\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n\n if (this.snapshotHandlerTimeout != null) {\n clearTimeout(this.snapshotHandlerTimeout);\n }\n this.streamTimeout = undefined;\n this.snapshotHandlerTimeout = undefined;\n }\n\n handleDownloadTimeout(): void {\n log.info('download canceled');\n this.cancelDownload();\n }\n\n writeTableHeader(): void {\n let headerString = '';\n if (this.columns) {\n for (let i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n this.fileWriter?.write({ header: headerString }).then(() => null);\n }\n\n startWriteTableBody(): void {\n if (this.columns && this.gridRanges != null) {\n this.chunkRows = Math.floor(\n TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length\n );\n\n this.rangedSnapshotsTotal = this.gridRanges.map((range: GridRange) => {\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n assertNotNull(this.chunkRows);\n\n return Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows);\n });\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce(\n (total: number, snapshotCount: number) => total + snapshotCount\n );\n\n log.info(`start writing table, total snapshots: `, this.snapshotsTotal);\n\n this.makeSnapshot(\n Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal)\n );\n }\n }\n\n writeCsvTable(includeColumnHeaders: boolean): void {\n if (includeColumnHeaders) {\n this.writeTableHeader();\n }\n this.startWriteTableBody();\n }\n\n writeSnapshot(\n snapshotIndex: number,\n snapshotStartRow: GridRangeIndex,\n snapshotEndRow: GridRangeIndex\n ): void {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n const n = this.snapshotsBuffer.get(this.currentSnapshotIndex);\n assertNotNull(n);\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(n),\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n\n this.updateDownloadProgress(snapshotIndex);\n }\n if (\n this.snapshotsTotal &&\n this.currentSnapshotIndex >= this.snapshotsTotal\n ) {\n this.finishDownload();\n return;\n }\n }\n\n if (\n this.snapshotCounter &&\n this.snapshotsTotal &&\n this.snapshotCounter < this.snapshotsTotal\n ) {\n log.debug2(\n `\n current range index: ${this.gridRangeCounter}, \n snapshotIndexCounter: ${this.snapshotCounter}, \n currentRangedSnapshotIndex : ${this.rangedSnapshotCounter}, \n snapshotpending: ${this.snapshotPending}, \n buffered ${this.snapshotsBuffer.size}\n making ${Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )} more snapshots\n `\n );\n this.makeSnapshot(\n Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )\n );\n }\n }\n\n updateDownloadProgress(snapshotIndex: GridRangeIndex): void {\n if (\n snapshotIndex != null &&\n this.snapshotsTotal != null &&\n this.downloadStartTime != null\n ) {\n const { onDownloadProgressUpdate } = this.props;\n const downloadProgress = Math.floor(\n (snapshotIndex * 100) / this.snapshotsTotal\n );\n const estimateTime =\n snapshotIndex > 1\n ? Math.floor(\n ((Date.now() - this.downloadStartTime) *\n (this.snapshotsTotal - snapshotIndex)) /\n snapshotIndex /\n 1000\n )\n : null;\n\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n }\n\n convertSnapshotIntoCsv(snapshot: DhType.SubscriptionTableData): string {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { dh, formatter } = this.props;\n\n const rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n\n assertNotNull(this.columns);\n\n const { useUnformattedValues } = this;\n for (let i = 0; i < rows.length; i += 1) {\n const rowIdx = rows[i];\n for (let j = 0; j < this.columns.length; j += 1) {\n const { type, name } = this.columns[j];\n let cellData = null;\n if (useUnformattedValues) {\n let value = snapshot.getData(rowIdx, this.columns[j]) ?? '';\n if (value !== '' && TableUtils.isDateType(type)) {\n // value is just a long value, we should return the value formatted as a full date string\n value = dh.i18n.DateTimeFormat.format(\n UNFORMATTED_DATE_PATTERN,\n value as number | Date | DhType.DateWrapper,\n dh.i18n.TimeZone.getTimeZone(formatter.timeZone)\n );\n }\n cellData = value.toString();\n } else {\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n formatter,\n name,\n type\n );\n let formatOverride = null;\n if (!hasCustomColumnFormat) {\n const cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);\n formatOverride =\n cellFormat?.formatString != null ? cellFormat : null;\n }\n if (formatOverride) {\n cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name,\n formatOverride\n );\n } else {\n cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name\n );\n }\n }\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n\n return csvString;\n }\n\n makeSnapshot(n: number): void {\n if (n <= 0) {\n return;\n }\n const { dh } = this.props;\n assertNotNull(this.gridRangeCounter);\n let i = 0;\n let currentGridRange = this.gridRanges[this.gridRangeCounter];\n\n assertNotNull(this.tableSubscription);\n assertNotNull(this.columns);\n while (i < n) {\n assertNotNull(currentGridRange);\n assertNotNull(currentGridRange.startRow);\n assertNotNull(currentGridRange.endRow);\n assertNotNull(this.rangedSnapshotCounter);\n assertNotNull(this.chunkRows);\n const snapshotStartRow =\n currentGridRange.startRow + this.rangedSnapshotCounter * this.chunkRows;\n const snapshotEndRow = Math.min(\n snapshotStartRow + this.chunkRows - 1,\n currentGridRange.endRow\n );\n\n const snapshotIndex = this.snapshotCounter;\n this.cancelableSnapshots.push(\n PromiseUtils.makeCancelable(\n this.tableSubscription\n .snapshot(\n dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow),\n this.columns as DhType.Column[]\n )\n .then(snapshot => {\n assertIsUpdateEventData(snapshot);\n this.handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n );\n\n return snapshotIndex;\n })\n .catch(err => {\n log.error(err);\n }),\n val => {\n log.info(`snapshot ${val} has been canceled`);\n }\n )\n );\n\n this.rangedSnapshotCounter += 1;\n this.snapshotCounter += 1;\n this.snapshotPending += 1;\n\n if (\n this.rangedSnapshotCounter >=\n this.rangedSnapshotsTotal[this.gridRangeCounter]\n ) {\n this.gridRangeCounter += 1;\n this.rangedSnapshotCounter = 0;\n currentGridRange = this.gridRanges[this.gridRangeCounter];\n }\n i += 1;\n }\n }\n\n handlePortMessage({\n data,\n }: MessageEvent<{\n download: unknown;\n readableStreamPulling: unknown;\n }>): void {\n const { download, readableStreamPulling } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download != null) {\n const { includeColumnHeaders } = this;\n this.makeIframe(`${download}`);\n this.writeCsvTable(includeColumnHeaders);\n }\n if (readableStreamPulling != null) {\n if (!this.useBlobFallback) {\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n this.streamTimeout = setTimeout(\n this.handleDownloadTimeout,\n TableSaver.STREAM_TIMEOUT\n );\n }\n }\n }\n\n handleSnapshotResolved(\n snapshot: DhType.SubscriptionTableData,\n snapshotIndex: number,\n snapshotStartRow: GridRangeIndex,\n snapshotEndRow: GridRangeIndex\n ): void {\n // use time out to break writeSnapshot into an individual task in browser with timeout, so there's window for the browser to update table in needed.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n\n makeIframe(src: string): void {\n // make a return value and make it static method\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = src;\n iframe.name = 'iframe';\n document.body.appendChild(iframe);\n this.iframe = iframe;\n }\n\n removeIframe(): void {\n this.iframe?.remove();\n this.iframe = undefined;\n }\n\n render(): null {\n return null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TableSaver.js","names":["PureComponent","Log","memoizeClear","FormatterUtils","TableUtils","PromiseUtils","assertNotNull","IrisGridUtils","log","module","UNFORMATTED_DATE_PATTERN","isUpdateEventData","data","added","undefined","assertIsUpdateEventData","Error","TableSaver","csvEscapeString","str","concat","replace","constructor","props","_defineProperty","isCustomColumnFormatDefined","max","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","includeColumnHeaders","useUnformattedValues","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","useBlobFallback","componentDidMount","getDownloadWorker","then","sw","info","postMessage","catch","error","warn","componentWillUnmount","removeIframe","streamTimeout","clearTimeout","snapshotHandlerTimeout","createWriterStream","port","useBlob","chunks","encode","TextEncoder","prototype","fileName","streamConfig","write","chunk","header","push","rows","close","blob","Blob","type","link","document","createElement","href","URL","createObjectURL","download","click","abort","cancel","end","WritableStream","startDownload","frozenTable","tableSubscription","snapshotRanges","modelRanges","isDownloading","downloadStartTime","Date","now","table","columns","columnsFromRanges","encodedFileName","encodeURIComponent","escape","messageChannel","MessageChannel","port1","fileWriter","getWriter","writeCsvTable","port2","onmessage","finishDownload","onDownloadCompleted","resetTableSaver","cancelDownload","_this$table","_this$tableSubscripti","_this$fileWriter","forEach","cancelable","onDownloadCanceled","chunkRows","writeTableHeader","_this$fileWriter2","headerString","i","length","name","startWriteTableBody","Math","floor","DOWNLOAD_CELL_CHUNK","map","range","endRow","startRow","ceil","reduce","total","snapshotCount","makeSnapshot","min","SNAPSHOT_BUFFER_SIZE","writeSnapshot","snapshotIndex","snapshotStartRow","snapshotEndRow","has","n","get","convertSnapshotIntoCsv","delete","updateDownloadProgress","debug2","size","onDownloadProgressUpdate","downloadProgress","estimateTime","snapshot","csvString","snapshotIterator","iterator","_this$props","dh","formatter","hasNext","next","value","rowIdx","j","_this$columns$j","cellData","_snapshot$getData","getData","isDateType","i18n","DateTimeFormat","format","TimeZone","getTimeZone","timeZone","toString","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","formatOverride","cellFormat","getFormat","formatString","getFormattedString","_this","currentGridRange","_loop","makeCancelable","RangeSet","ofRange","err","val","_ref","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","iframe","hidden","body","appendChild","_this$iframe","remove","render"],"sources":["../../src/sidebar/TableSaver.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport {\n type GridRange,\n type GridRangeIndex,\n memoizeClear,\n} from '@deephaven/grid';\nimport {\n type Formatter,\n FormatterUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport {\n type CancelablePromise,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableSaver');\n\nconst UNFORMATTED_DATE_PATTERN = `yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z`;\n\ninterface TableSaverProps {\n dh: typeof DhType;\n getDownloadWorker: () => Promise<ServiceWorker>;\n isDownloading: boolean;\n onDownloadCompleted: () => void;\n onDownloadCanceled: () => void;\n onDownloadProgressUpdate: (\n progress: number,\n estimatedTime: number | null\n ) => void;\n formatter: Formatter;\n}\n\nfunction isUpdateEventData(\n data: DhType.TableData\n): data is DhType.SubscriptionTableData {\n return (data as DhType.SubscriptionTableData).added !== undefined;\n}\n\nfunction assertIsUpdateEventData(\n data: DhType.TableData\n): asserts data is DhType.SubscriptionTableData {\n if (!isUpdateEventData(data)) {\n throw new Error('event is not UpdateEventData');\n }\n}\n\nexport default class TableSaver extends PureComponent<\n TableSaverProps,\n Record<string, never>\n> {\n static DOWNLOAD_CELL_CHUNK = 6000;\n\n static SNAPSHOT_BUFFER_SIZE = 5;\n\n static STREAM_TIMEOUT = 8000;\n\n static SNAPSHOT_HANDLER_TIMEOUT = 5;\n\n static defaultProps = {\n isDownloading: false,\n onDownloadCompleted: (): void => undefined,\n onDownloadCanceled: (): void => undefined,\n onDownloadProgressUpdate: (): void => undefined,\n };\n\n static csvEscapeString(str: string): string {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n constructor(props: TableSaverProps) {\n super(props);\n\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n\n this.state = {};\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n\n this.useBlobFallback = false;\n }\n\n componentDidMount(): void {\n const { getDownloadWorker } = this.props;\n getDownloadWorker()\n .then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n })\n .catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n\n componentWillUnmount(): void {\n this.removeIframe();\n if (this.streamTimeout) clearTimeout(this.streamTimeout);\n if (this.snapshotHandlerTimeout) clearTimeout(this.snapshotHandlerTimeout);\n }\n\n sw?: ServiceWorker;\n\n port?: MessagePort;\n\n fileWriter?: WritableStreamDefaultWriter<unknown>;\n\n table?: DhType.Table;\n\n tableSubscription?: DhType.TableViewportSubscription;\n\n columns?: readonly DhType.Column[];\n\n fileName?: string;\n\n includeColumnHeaders: boolean;\n\n useUnformattedValues: boolean;\n\n chunkRows?: number;\n\n gridRanges: readonly GridRange[];\n\n gridRangeCounter?: number;\n\n rangedSnapshotsTotal: readonly number[];\n\n rangedSnapshotCounter?: number;\n\n snapshotsTotal: number;\n\n snapshotCounter: number;\n\n snapshotsBuffer: Map<number, DhType.SubscriptionTableData>;\n\n currentSnapshotIndex: number;\n\n snapshotPending: number;\n\n cancelableSnapshots: (CancelablePromise<unknown> | null)[];\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n streamTimeout?: ReturnType<typeof setTimeout>;\n\n snapshotHandlerTimeout?: ReturnType<typeof setTimeout>;\n\n downloadStartTime?: number;\n\n iframe?: HTMLIFrameElement;\n\n useBlobFallback: boolean;\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n createWriterStream(port: MessagePort): WritableStream<{\n rows?: string | undefined;\n header?: string | undefined;\n }> {\n // use blob fall back if it's safari\n const useBlob = this.useBlobFallback;\n const chunks = [] as BlobPart[];\n let encode: ((input?: string) => Uint8Array) | null = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n const { fileName } = this;\n\n const streamConfig = {} as UnderlyingSink<{\n rows?: string | undefined;\n header?: string | undefined;\n }>;\n if (useBlob) {\n streamConfig.write = (chunk: { rows?: string; header?: string }) => {\n assertNotNull(encode);\n if (chunk.header !== undefined) {\n chunks.push(encode(chunk.header));\n }\n if (chunk.rows !== undefined) {\n chunks.push(encode(chunk.rows));\n }\n };\n streamConfig.close = () => {\n assertNotNull(fileName);\n const blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8',\n });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n } else {\n streamConfig.write = (chunk: unknown) => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({ end: true });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n }\n\n return new WritableStream(streamConfig);\n }\n\n startDownload(\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ): void {\n // don't trigger another download when a download is ongoing\n const { isDownloading } = this.props;\n if (isDownloading) {\n return;\n }\n\n this.downloadStartTime = Date.now();\n log.info(`start downloading ${fileName}`);\n\n this.table = frozenTable;\n this.columns = IrisGridUtils.columnsFromRanges(\n modelRanges,\n frozenTable.columns\n );\n this.tableSubscription = tableSubscription;\n this.gridRanges = snapshotRanges;\n this.includeColumnHeaders = includeColumnHeaders;\n this.useUnformattedValues = useUnformattedValues;\n\n // Make filename RFC5987 compatible\n const encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':'))\n .replace(/['()]/g, escape)\n .replace(/\\*/g, '%2A');\n\n const messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable(includeColumnHeaders);\n return;\n }\n\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({ encodedFileName }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n\n finishDownload(): void {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n\n const { onDownloadCompleted } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n\n if (this.downloadStartTime !== undefined) {\n log.info(\n `download finished, total elapsed time ${\n (Date.now() - this.downloadStartTime) / 1000\n } seconds`\n );\n }\n }\n\n cancelDownload(): void {\n this.table?.close();\n this.tableSubscription?.close();\n this.fileWriter?.abort();\n\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => null);\n cancelable.cancel();\n }\n });\n const { onDownloadCanceled } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n\n resetTableSaver(): void {\n this.table = undefined;\n this.tableSubscription = undefined;\n this.columns = undefined;\n this.chunkRows = undefined;\n this.removeIframe();\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n\n if (this.snapshotHandlerTimeout != null) {\n clearTimeout(this.snapshotHandlerTimeout);\n }\n this.streamTimeout = undefined;\n this.snapshotHandlerTimeout = undefined;\n }\n\n handleDownloadTimeout(): void {\n log.info('download canceled');\n this.cancelDownload();\n }\n\n writeTableHeader(): void {\n let headerString = '';\n if (this.columns) {\n for (let i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n this.fileWriter?.write({ header: headerString }).then(() => null);\n }\n\n startWriteTableBody(): void {\n if (this.columns && this.gridRanges != null) {\n this.chunkRows = Math.floor(\n TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length\n );\n\n this.rangedSnapshotsTotal = this.gridRanges.map((range: GridRange) => {\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n assertNotNull(this.chunkRows);\n\n return Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows);\n });\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce(\n (total: number, snapshotCount: number) => total + snapshotCount\n );\n\n log.info(`start writing table, total snapshots: `, this.snapshotsTotal);\n\n this.makeSnapshot(\n Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal)\n );\n }\n }\n\n writeCsvTable(includeColumnHeaders: boolean): void {\n if (includeColumnHeaders) {\n this.writeTableHeader();\n }\n this.startWriteTableBody();\n }\n\n writeSnapshot(\n snapshotIndex: number,\n snapshotStartRow: GridRangeIndex,\n snapshotEndRow: GridRangeIndex\n ): void {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n const n = this.snapshotsBuffer.get(this.currentSnapshotIndex);\n assertNotNull(n);\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(n),\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n\n this.updateDownloadProgress(snapshotIndex);\n }\n if (\n this.snapshotsTotal &&\n this.currentSnapshotIndex >= this.snapshotsTotal\n ) {\n this.finishDownload();\n return;\n }\n }\n\n if (\n this.snapshotCounter &&\n this.snapshotsTotal &&\n this.snapshotCounter < this.snapshotsTotal\n ) {\n log.debug2(\n `\n current range index: ${this.gridRangeCounter}, \n snapshotIndexCounter: ${this.snapshotCounter}, \n currentRangedSnapshotIndex : ${this.rangedSnapshotCounter}, \n snapshotpending: ${this.snapshotPending}, \n buffered ${this.snapshotsBuffer.size}\n making ${Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )} more snapshots\n `\n );\n this.makeSnapshot(\n Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )\n );\n }\n }\n\n updateDownloadProgress(snapshotIndex: GridRangeIndex): void {\n if (\n snapshotIndex != null &&\n this.snapshotsTotal != null &&\n this.downloadStartTime != null\n ) {\n const { onDownloadProgressUpdate } = this.props;\n const downloadProgress = Math.floor(\n (snapshotIndex * 100) / this.snapshotsTotal\n );\n const estimateTime =\n snapshotIndex > 1\n ? Math.floor(\n ((Date.now() - this.downloadStartTime) *\n (this.snapshotsTotal - snapshotIndex)) /\n snapshotIndex /\n 1000\n )\n : null;\n\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n }\n\n convertSnapshotIntoCsv(snapshot: DhType.SubscriptionTableData): string {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { dh, formatter } = this.props;\n\n const rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n\n assertNotNull(this.columns);\n\n const { useUnformattedValues } = this;\n for (let i = 0; i < rows.length; i += 1) {\n const rowIdx = rows[i];\n for (let j = 0; j < this.columns.length; j += 1) {\n const { type, name } = this.columns[j];\n let cellData = null;\n if (useUnformattedValues) {\n let value = snapshot.getData(rowIdx, this.columns[j]) ?? '';\n if (value !== '' && TableUtils.isDateType(type)) {\n // value is just a long value, we should return the value formatted as a full date string\n value = dh.i18n.DateTimeFormat.format(\n UNFORMATTED_DATE_PATTERN,\n value as number | Date | DhType.DateWrapper,\n dh.i18n.TimeZone.getTimeZone(formatter.timeZone)\n );\n }\n cellData = value.toString();\n } else {\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n formatter,\n name,\n type\n );\n let formatOverride = null;\n if (!hasCustomColumnFormat) {\n const cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);\n formatOverride =\n cellFormat?.formatString != null ? cellFormat : null;\n }\n if (formatOverride) {\n cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name,\n formatOverride\n );\n } else {\n cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name\n );\n }\n }\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n\n return csvString;\n }\n\n makeSnapshot(n: number): void {\n if (n <= 0) {\n return;\n }\n const { dh } = this.props;\n assertNotNull(this.gridRangeCounter);\n let i = 0;\n let currentGridRange = this.gridRanges[this.gridRangeCounter];\n\n assertNotNull(this.tableSubscription);\n assertNotNull(this.columns);\n while (i < n) {\n assertNotNull(currentGridRange);\n assertNotNull(currentGridRange.startRow);\n assertNotNull(currentGridRange.endRow);\n assertNotNull(this.rangedSnapshotCounter);\n assertNotNull(this.chunkRows);\n const snapshotStartRow =\n currentGridRange.startRow + this.rangedSnapshotCounter * this.chunkRows;\n const snapshotEndRow = Math.min(\n snapshotStartRow + this.chunkRows - 1,\n currentGridRange.endRow\n );\n\n const snapshotIndex = this.snapshotCounter;\n this.cancelableSnapshots.push(\n PromiseUtils.makeCancelable(\n this.tableSubscription\n .snapshot(\n dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow),\n this.columns as DhType.Column[]\n )\n .then(snapshot => {\n assertIsUpdateEventData(snapshot);\n this.handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n );\n\n return snapshotIndex;\n })\n .catch(err => {\n log.error(err);\n }),\n val => {\n log.info(`snapshot ${val} has been canceled`);\n }\n )\n );\n\n this.rangedSnapshotCounter += 1;\n this.snapshotCounter += 1;\n this.snapshotPending += 1;\n\n if (\n this.rangedSnapshotCounter >=\n this.rangedSnapshotsTotal[this.gridRangeCounter]\n ) {\n this.gridRangeCounter += 1;\n this.rangedSnapshotCounter = 0;\n currentGridRange = this.gridRanges[this.gridRangeCounter];\n }\n i += 1;\n }\n }\n\n handlePortMessage({\n data,\n }: MessageEvent<{\n download: unknown;\n readableStreamPulling: unknown;\n }>): void {\n const { download, readableStreamPulling } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download != null) {\n const { includeColumnHeaders } = this;\n this.makeIframe(`${download}`);\n this.writeCsvTable(includeColumnHeaders);\n }\n if (readableStreamPulling != null) {\n if (!this.useBlobFallback) {\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n this.streamTimeout = setTimeout(\n this.handleDownloadTimeout,\n TableSaver.STREAM_TIMEOUT\n );\n }\n }\n }\n\n handleSnapshotResolved(\n snapshot: DhType.SubscriptionTableData,\n snapshotIndex: number,\n snapshotStartRow: GridRangeIndex,\n snapshotEndRow: GridRangeIndex\n ): void {\n // use time out to break writeSnapshot into an individual task in browser with timeout, so there's window for the browser to update table in needed.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n\n makeIframe(src: string): void {\n // make a return value and make it static method\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = src;\n iframe.name = 'iframe';\n document.body.appendChild(iframe);\n this.iframe = iframe;\n }\n\n removeIframe(): void {\n this.iframe?.remove();\n this.iframe = undefined;\n }\n\n render(): null {\n return null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,6 +3,12 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
3
3
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
4
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
7
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
8
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
9
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
10
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
11
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
6
12
|
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|
7
13
|
import classNames from 'classnames';
|
|
8
14
|
import { Button, Checkbox, FadeTransition, ItemList, ThemeExport } from '@deephaven/components';
|
|
@@ -19,18 +25,23 @@ var SortType = /*#__PURE__*/function (SortType) {
|
|
|
19
25
|
}(SortType || {});
|
|
20
26
|
var DEFAULT_ROW_HEIGHT = 30;
|
|
21
27
|
function AggregationEdit(_ref) {
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
var aggregation = _ref.aggregation,
|
|
29
|
+
columns = _ref.columns,
|
|
30
|
+
onChange = _ref.onChange;
|
|
31
|
+
var _useState = useState(-1),
|
|
32
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
33
|
+
top = _useState2[0],
|
|
34
|
+
setTop = _useState2[1];
|
|
35
|
+
var _useState3 = useState(-1),
|
|
36
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
37
|
+
bottom = _useState4[0],
|
|
38
|
+
setBottom = _useState4[1];
|
|
39
|
+
var _useState5 = useState(SortType.NONE),
|
|
40
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
41
|
+
sort = _useState6[0],
|
|
42
|
+
setSort = _useState6[1];
|
|
43
|
+
var invert = aggregation.invert,
|
|
44
|
+
selected = aggregation.selected;
|
|
34
45
|
var list = useRef(null);
|
|
35
46
|
var isSelected = useCallback(name => selected.includes(name) ? !invert : invert, [invert, selected]);
|
|
36
47
|
var validColumns = useMemo(() => {
|
|
@@ -46,9 +57,7 @@ function AggregationEdit(_ref) {
|
|
|
46
57
|
isSelected: isSelected(c.name)
|
|
47
58
|
})) : [], [validColumns, isSelected, bottom, top]);
|
|
48
59
|
var handleSelect = useCallback(itemIndex => {
|
|
49
|
-
var
|
|
50
|
-
name
|
|
51
|
-
} = validColumns[itemIndex];
|
|
60
|
+
var name = validColumns[itemIndex].name;
|
|
52
61
|
var selectedIndex = selected.indexOf(name);
|
|
53
62
|
var newSelected = [...selected];
|
|
54
63
|
var newInvert = invert;
|
|
@@ -141,9 +150,7 @@ function AggregationEdit(_ref) {
|
|
|
141
150
|
items: items,
|
|
142
151
|
offset: top,
|
|
143
152
|
renderItem: _ref2 => {
|
|
144
|
-
var
|
|
145
|
-
item
|
|
146
|
-
} = _ref2;
|
|
153
|
+
var item = _ref2.item;
|
|
147
154
|
return /*#__PURE__*/_jsx(Checkbox, {
|
|
148
155
|
checked: isSelected(item.value),
|
|
149
156
|
children: item.displayValue
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationEdit.js","names":["React","useCallback","useMemo","useRef","useState","classNames","Button","Checkbox","FadeTransition","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","TableUtils","filterValidColumns","jsx","_jsx","jsxs","_jsxs","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","_ref","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","_objectSpread","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","role","className","children","in","timeout","transitionSlowMs","mountOnEnter","unmountOnExit","kind","onClick","active","icon","tooltip","DESCENDING","itemCount","offset","renderItem","_ref2","item","onSelect","onViewportChange","rowHeight","focusSelector","ref"],"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n Checkbox,\n FadeTransition,\n ItemList,\n ThemeExport,\n} from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { type Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\nimport { type DisplayColumn } from '../../IrisGridModel';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: readonly DisplayColumn[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nfunction AggregationEdit({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n (name: string) => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n (itemIndex: number) => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop: number, newBottom: number) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <FadeTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </FadeTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n}\n\nexport default AggregationEdit;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"AggregationEdit.js","names":["React","useCallback","useMemo","useRef","useState","classNames","Button","Checkbox","FadeTransition","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","TableUtils","filterValidColumns","jsx","_jsx","jsxs","_jsxs","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","_ref","aggregation","columns","onChange","_useState","_useState2","_slicedToArray","top","setTop","_useState3","_useState4","bottom","setBottom","_useState5","NONE","_useState6","sort","setSort","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","_objectSpread","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","role","className","children","in","timeout","transitionSlowMs","mountOnEnter","unmountOnExit","kind","onClick","active","icon","tooltip","DESCENDING","itemCount","offset","renderItem","_ref2","item","onSelect","onViewportChange","rowHeight","focusSelector","ref"],"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n Checkbox,\n FadeTransition,\n ItemList,\n ThemeExport,\n} from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { type Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\nimport { type DisplayColumn } from '../../IrisGridModel';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: readonly DisplayColumn[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nfunction AggregationEdit({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n (name: string) => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n (itemIndex: number) => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop: number, newBottom: number) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <FadeTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </FadeTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n}\n\nexport default AggregationEdit;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,kBAAkB,wBAe9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAU,oBAAoB,KAAG,OAM9D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAAU,oBAAoB,KAAG,OAO/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,kBACZ,oBAAoB,cACvB,MAAM,KACjB,
|
|
1
|
+
{"version":3,"file":"AggregationUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,kBAAkB,wBAe9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAU,oBAAoB,KAAG,OAM9D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAAU,oBAAoB,KAAG,OAO/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,kBACZ,oBAAoB,cACvB,MAAM,KACjB,OA4BF,CAAC;AAEF,eAAO,MAAM,kBAAkB,YACpB,SAAS,aAAa,EAAE,iBAClB,oBAAoB,KAClC,aAAa,EAGb,CAAC;AAEJ,eAAO,MAAM,uBAAuB,YACzB,SAAS,aAAa,EAAE,iBAClB,oBAAoB,YACzB,SAAS,MAAM,EAAE,UACnB,OAAO,KACd,MAAM,EAGwD,CAAC;;sCAhDjD,oBAAoB,cACvB,MAAM,KACjB,OAAO;8BA9B8B,oBAAoB,KAAG,OAAO;+BAa7B,oBAAoB,KAAG,OAAO;kCAgD5D,SAAS,aAAa,EAAE,iBAClB,oBAAoB,KAClC,aAAa,EAAE;uCAMP,SAAS,aAAa,EAAE,iBAClB,oBAAoB,YACzB,SAAS,MAAM,EAAE,UACnB,OAAO,KACd,MAAM,EAAE;;AAKX,wBAME"}
|
|
@@ -39,10 +39,11 @@ export var isValidOperation = (operationType, columnType) => {
|
|
|
39
39
|
case AggregationOperation.COUNT:
|
|
40
40
|
case AggregationOperation.FIRST:
|
|
41
41
|
case AggregationOperation.LAST:
|
|
42
|
+
return true;
|
|
42
43
|
case AggregationOperation.COUNT_DISTINCT:
|
|
43
44
|
case AggregationOperation.DISTINCT:
|
|
44
45
|
case AggregationOperation.UNIQUE:
|
|
45
|
-
return
|
|
46
|
+
return !TableUtils.isArrayType(columnType);
|
|
46
47
|
case AggregationOperation.MEDIAN:
|
|
47
48
|
case AggregationOperation.MIN:
|
|
48
49
|
case AggregationOperation.MAX:
|
|
@@ -60,9 +61,7 @@ export var isValidOperation = (operationType, columnType) => {
|
|
|
60
61
|
};
|
|
61
62
|
export var filterValidColumns = (columns, operationType) => columns.filter(c => c.isProxy !== true && isValidOperation(operationType, c.type));
|
|
62
63
|
export var getOperationColumnNames = (columns, operationType, selected, invert) => filterValidColumns(columns, operationType).map(_ref => {
|
|
63
|
-
var
|
|
64
|
-
name
|
|
65
|
-
} = _ref;
|
|
64
|
+
var name = _ref.name;
|
|
66
65
|
return name;
|
|
67
66
|
}).filter(name => selected.includes(name) ? !invert : invert);
|
|
68
67
|
export default {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationUtils.js","names":["TableUtils","AggregationOperation","SELECTABLE_OPTIONS","SUM","ABS_SUM","MIN","MAX","VAR","AVG","MEDIAN","STD","FIRST","LAST","COUNT_DISTINCT","DISTINCT","COUNT","UNIQUE","isRollupOperation","type","isRollupProhibited","isValidOperation","operationType","columnType","isNumberType","isDateType","isTextType","SKIP","filterValidColumns","columns","filter","c","isProxy","getOperationColumnNames","selected","invert","map","_ref","name","includes"],"sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"sourcesContent":["import { TableUtils } from '@deephaven/jsapi-utils';\nimport { type DisplayColumn } from '../../IrisGridModel';\nimport AggregationOperation from './AggregationOperation';\n\nexport const SELECTABLE_OPTIONS = [\n AggregationOperation.SUM,\n AggregationOperation.ABS_SUM,\n AggregationOperation.MIN,\n AggregationOperation.MAX,\n AggregationOperation.VAR,\n AggregationOperation.AVG,\n AggregationOperation.MEDIAN,\n AggregationOperation.STD,\n AggregationOperation.FIRST,\n AggregationOperation.LAST,\n AggregationOperation.COUNT_DISTINCT,\n AggregationOperation.DISTINCT,\n AggregationOperation.COUNT,\n AggregationOperation.UNIQUE,\n];\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport const isRollupOperation = (type: AggregationOperation): boolean => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is not supported for a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation is not supported for a rollup/table grouping\n */\nexport const isRollupProhibited = (type: AggregationOperation): boolean => {\n switch (type) {\n case AggregationOperation.MEDIAN:\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport const isValidOperation = (\n operationType: AggregationOperation,\n columnType: string\n): boolean => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return
|
|
1
|
+
{"version":3,"file":"AggregationUtils.js","names":["TableUtils","AggregationOperation","SELECTABLE_OPTIONS","SUM","ABS_SUM","MIN","MAX","VAR","AVG","MEDIAN","STD","FIRST","LAST","COUNT_DISTINCT","DISTINCT","COUNT","UNIQUE","isRollupOperation","type","isRollupProhibited","isValidOperation","operationType","columnType","isArrayType","isNumberType","isDateType","isTextType","SKIP","filterValidColumns","columns","filter","c","isProxy","getOperationColumnNames","selected","invert","map","_ref","name","includes"],"sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"sourcesContent":["import { TableUtils } from '@deephaven/jsapi-utils';\nimport { type DisplayColumn } from '../../IrisGridModel';\nimport AggregationOperation from './AggregationOperation';\n\nexport const SELECTABLE_OPTIONS = [\n AggregationOperation.SUM,\n AggregationOperation.ABS_SUM,\n AggregationOperation.MIN,\n AggregationOperation.MAX,\n AggregationOperation.VAR,\n AggregationOperation.AVG,\n AggregationOperation.MEDIAN,\n AggregationOperation.STD,\n AggregationOperation.FIRST,\n AggregationOperation.LAST,\n AggregationOperation.COUNT_DISTINCT,\n AggregationOperation.DISTINCT,\n AggregationOperation.COUNT,\n AggregationOperation.UNIQUE,\n];\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport const isRollupOperation = (type: AggregationOperation): boolean => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is not supported for a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation is not supported for a rollup/table grouping\n */\nexport const isRollupProhibited = (type: AggregationOperation): boolean => {\n switch (type) {\n case AggregationOperation.MEDIAN:\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport const isValidOperation = (\n operationType: AggregationOperation,\n columnType: string\n): boolean => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n return true;\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return !TableUtils.isArrayType(columnType);\n case AggregationOperation.MEDIAN:\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isDateType(columnType) ||\n TableUtils.isTextType(columnType)\n );\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\n\nexport const filterValidColumns = (\n columns: readonly DisplayColumn[],\n operationType: AggregationOperation\n): DisplayColumn[] =>\n columns.filter(\n c => c.isProxy !== true && isValidOperation(operationType, c.type)\n );\n\nexport const getOperationColumnNames = (\n columns: readonly DisplayColumn[],\n operationType: AggregationOperation,\n selected: readonly string[],\n invert: boolean\n): string[] =>\n filterValidColumns(columns, operationType)\n .map(({ name }) => name)\n .filter(name => (selected.includes(name) ? !invert : invert));\n\nexport default {\n isValidOperation,\n isRollupOperation,\n isRollupProhibited,\n filterValidColumns,\n getOperationColumnNames,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,6 +3,12 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
3
3
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
4
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
7
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
8
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
9
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
10
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
11
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
6
12
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
7
13
|
import { DragDropContext } from '@hello-pangea/dnd';
|
|
8
14
|
import classNames from 'classnames';
|
|
@@ -16,24 +22,27 @@ import "./Aggregations.css";
|
|
|
16
22
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
17
23
|
var log = Log.module('Aggregations');
|
|
18
24
|
function Aggregations(_ref) {
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
availablePlacements = ['top', 'bottom'],
|
|
23
|
-
onChange,
|
|
24
|
-
onEdit,
|
|
25
|
-
dh
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
aggregations,
|
|
29
|
-
showOnTop
|
|
30
|
-
} = settings;
|
|
25
|
+
var isRollup = _ref.isRollup,
|
|
26
|
+
settings = _ref.settings,
|
|
27
|
+
_ref$availablePlaceme = _ref.availablePlacements,
|
|
28
|
+
availablePlacements = _ref$availablePlaceme === void 0 ? ['top', 'bottom'] : _ref$availablePlaceme,
|
|
29
|
+
onChange = _ref.onChange,
|
|
30
|
+
onEdit = _ref.onEdit,
|
|
31
|
+
dh = _ref.dh;
|
|
32
|
+
var aggregations = settings.aggregations,
|
|
33
|
+
showOnTop = settings.showOnTop;
|
|
31
34
|
var options = useMemo(() => SELECTABLE_OPTIONS.filter(option => !aggregations.some(aggregation => aggregation.operation === option) && !(option === AggregationOperation.MEDIAN &&
|
|
32
35
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
33
36
|
// @ts-ignore - MEDIAN is not defined in older version of Core
|
|
34
37
|
dh.AggregationOperation.MEDIAN === undefined)), [aggregations, dh]);
|
|
35
|
-
var
|
|
36
|
-
|
|
38
|
+
var _useState = useState(options[0]),
|
|
39
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
40
|
+
selectedOperation = _useState2[0],
|
|
41
|
+
setSelectedOperation = _useState2[1];
|
|
42
|
+
var _useState3 = useState([]),
|
|
43
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
44
|
+
selectedRanges = _useState4[0],
|
|
45
|
+
setSelectedRanges = _useState4[1];
|
|
37
46
|
var changeSettings = useCallback(function (changedSettings) {
|
|
38
47
|
var added = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
39
48
|
var removed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
@@ -56,10 +65,8 @@ function Aggregations(_ref) {
|
|
|
56
65
|
DragUtils.startDragging();
|
|
57
66
|
}, []);
|
|
58
67
|
var handleDragEnd = useCallback(_ref2 => {
|
|
59
|
-
var
|
|
60
|
-
|
|
61
|
-
source
|
|
62
|
-
} = _ref2;
|
|
68
|
+
var destination = _ref2.destination,
|
|
69
|
+
source = _ref2.source;
|
|
63
70
|
log.debug('handleDragEnd', destination, source);
|
|
64
71
|
DragUtils.stopDragging();
|
|
65
72
|
if (destination == null) {
|
|
@@ -87,15 +94,20 @@ function Aggregations(_ref) {
|
|
|
87
94
|
}], [selectedOperation]);
|
|
88
95
|
}, [aggregations, selectedOperation, changeAggregations]);
|
|
89
96
|
var handleDeleteClicked = useCallback(itemIndex => {
|
|
90
|
-
var
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
var _aggregations$reduce = aggregations.reduce((_ref3, aggregation, index) => {
|
|
98
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
99
|
+
keepSoFar = _ref4[0],
|
|
100
|
+
removeSoFar = _ref4[1];
|
|
101
|
+
if (index === itemIndex) {
|
|
102
|
+
removeSoFar.push(aggregation.operation);
|
|
103
|
+
} else {
|
|
104
|
+
keepSoFar.push(aggregation);
|
|
105
|
+
}
|
|
106
|
+
return [keepSoFar, removeSoFar];
|
|
107
|
+
}, [[], []]),
|
|
108
|
+
_aggregations$reduce2 = _slicedToArray(_aggregations$reduce, 2),
|
|
109
|
+
keep = _aggregations$reduce2[0],
|
|
110
|
+
remove = _aggregations$reduce2[1];
|
|
99
111
|
changeAggregations(keep, [], remove);
|
|
100
112
|
}, [aggregations, changeAggregations]);
|
|
101
113
|
var handleAggregationSelectionChange = useCallback(newSelectedRanges => {
|
|
@@ -115,13 +127,12 @@ function Aggregations(_ref) {
|
|
|
115
127
|
setSelectedOperation(options[0]);
|
|
116
128
|
}
|
|
117
129
|
}, [options, selectedOperation]);
|
|
118
|
-
var renderAggregation = useCallback(
|
|
119
|
-
var
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
isClone = false,
|
|
123
|
-
selectedCount
|
|
124
|
-
} = _ref4;
|
|
130
|
+
var renderAggregation = useCallback(_ref5 => {
|
|
131
|
+
var item = _ref5.item,
|
|
132
|
+
itemIndex = _ref5.itemIndex,
|
|
133
|
+
_ref5$isClone = _ref5.isClone,
|
|
134
|
+
isClone = _ref5$isClone === void 0 ? false : _ref5$isClone,
|
|
135
|
+
selectedCount = _ref5.selectedCount;
|
|
125
136
|
var text = item.operation;
|
|
126
137
|
var badgeText = isClone ? "".concat(selectedCount) : undefined;
|
|
127
138
|
var className = isClone ? 'item-list-item-clone' : undefined;
|