@deephaven/iris-grid 1.1.2-grid-render-loop.4 → 1.2.1-3-revert-plotly.1
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.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/EmptyIrisGridModel.js.map +1 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCacheUtils.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridDataBarCellRenderer.js.map +1 -1
- package/dist/IrisGridIcons.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridPartitionedTableModel.js.map +1 -1
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridShortcuts.js.map +1 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +3 -0
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridThemeProvider.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/LazyIrisGrid.js.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/MissingPartitionError.js.map +1 -1
- package/dist/NoPastePermissionModal.js.map +1 -1
- package/dist/PartitionedGridModel.js.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/declaration.d.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/key-handlers/index.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCopyCellMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/mousehandlers/index.js.map +1 -1
- package/dist/sidebar/AdvancedSettings.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/DownloadServiceWorkerUtils.js.map +1 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/OptionType.js.map +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/aggregations/index.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/icons/index.js.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -1
- 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","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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"}
|
|
@@ -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 => (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 => {\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, newBottom) => {\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","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 => (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 => {\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, newBottom) => {\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":";;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACrE,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,MAAM,EACNC,QAAQ,EACRC,cAAc,EACdC,QAAQ,EACRC,WAAW,QACN,uBAAuB;AAC9B,SAASC,eAAe,EAAEC,aAAa,QAAQ,kBAAkB;AACjE,SAASC,UAAU,QAAQ,wBAAwB;AAAC,SAE3CC,kBAAkB;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAAA,IAetBC,QAAQ;AAAA,WAARA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;AAAA,GAARA,QAAQ,KAARA,QAAQ;AAMb,IAAMC,kBAAkB,GAAG,EAAE;AAE7B,SAASC,eAAeA,CAAAC,IAAA,EAIc;EAAA,IAJb;IACvBC,WAAW;IACXC,OAAO;IACPC;EACoB,CAAC,GAAAH,IAAA;EACrB,IAAM,CAACI,GAAG,EAAEC,MAAM,CAAC,GAAGvB,QAAQ,CAAC,CAAC,CAAC,CAAC;EAClC,IAAM,CAACwB,MAAM,EAAEC,SAAS,CAAC,GAAGzB,QAAQ,CAAC,CAAC,CAAC,CAAC;EACxC,IAAM,CAAC0B,IAAI,EAAEC,OAAO,CAAC,GAAG3B,QAAQ,CAACe,QAAQ,CAACa,IAAI,CAAC;EAC/C,IAAM;IAAEC,MAAM;IAAEC;EAAS,CAAC,GAAGX,WAAW;EACxC,IAAMY,IAAI,GAAGhC,MAAM,CAAgC,IAAI,CAAC;EAExD,IAAMiC,UAAU,GAAGnC,WAAW,CAC5BoC,IAAI,IAAKH,QAAQ,CAACI,QAAQ,CAACD,IAAI,CAAC,GAAG,CAACJ,MAAM,GAAGA,MAAO,EACpD,CAACA,MAAM,EAAEC,QAAQ,CACnB,CAAC;EAED,IAAMK,YAAY,GAAGrC,OAAO,CAAC,MAAM;IACjC,IAAIsC,eAAe,GAAG1B,kBAAkB,CAACU,OAAO,EAAED,WAAW,CAACkB,SAAS,CAAC;IACxE,IAAIX,IAAI,KAAKX,QAAQ,CAACa,IAAI,EAAE;MAC1BQ,eAAe,GAAG3B,UAAU,CAAC6B,WAAW,CACtCF,eAAe,EACfV,IAAI,KAAKX,QAAQ,CAACwB,SACpB,CAAC;IACH;IACA,OAAOH,eAAe;EACxB,CAAC,EAAE,CAAChB,OAAO,EAAED,WAAW,CAACkB,SAAS,EAAEX,IAAI,CAAC,CAAC;EAE1C,IAAMc,KAAK,GAAG1C,OAAO,CACnB,MACEwB,GAAG,IAAI,CAAC,GACJa,YAAY,CAACM,KAAK,CAACnB,GAAG,EAAEE,MAAM,GAAG,CAAC,CAAC,CAACkB,GAAG,CAACC,CAAC,KAAK;IAC5CC,KAAK,EAAED,CAAC,CAACV,IAAI;IACbY,YAAY,EAAEF,CAAC,CAACV,IAAI;IACpBD,UAAU,EAAEA,UAAU,CAACW,CAAC,CAACV,IAAI;EAC/B,CAAC,CAAC,CAAC,GACH,EAAE,EACR,CAACE,YAAY,EAAEH,UAAU,EAAER,MAAM,EAAEF,GAAG,CACxC,CAAC;EAED,IAAMwB,YAAY,GAAGjD,WAAW,CAC9BkD,SAAS,IAAI;IACX,IAAM;MAAEd;IAAK,CAAC,GAAGE,YAAY,CAACY,SAAS,CAAC;IACxC,IAAMC,aAAa,GAAGlB,QAAQ,CAACmB,OAAO,CAAChB,IAAI,CAAC;IAC5C,IAAIiB,WAAW,GAAG,CAAC,GAAGpB,QAAQ,CAAC;IAC/B,IAAIqB,SAAS,GAAGtB,MAAM;IACtB,IAAImB,aAAa,IAAI,CAAC,EAAE;MACtBE,WAAW,CAACE,MAAM,CAACJ,aAAa,EAAE,CAAC,CAAC;IACtC,CAAC,MAAM;MACLE,WAAW,CAACG,IAAI,CAACpB,IAAI,CAAC;MACtB,IAAIiB,WAAW,CAACI,MAAM,KAAKnB,YAAY,CAACmB,MAAM,EAAE;QAC9C;QACAJ,WAAW,GAAG,EAAE;QAChBC,SAAS,GAAG,CAACtB,MAAM;MACrB;IACF;IAEAR,QAAQ,CAAAkC,aAAA,CAAAA,aAAA,KAAMpC,WAAW;MAAEW,QAAQ,EAAEoB,WAAW;MAAErB,MAAM,EAAEsB;IAAS,EAAE,CAAC;EACxE,CAAC,EACD,CAAChC,WAAW,EAAEU,MAAM,EAAEM,YAAY,EAAEL,QAAQ,EAAET,QAAQ,CACxD,CAAC;EAED,IAAMmC,WAAW,GAAG3D,WAAW,CAAC,MAAM;IACpC8B,OAAO,CAACZ,QAAQ,CAACa,IAAI,CAAC;IACtBP,QAAQ,CAAAkC,aAAA,CAAAA,aAAA,KAAMpC,WAAW;MAAEW,QAAQ,EAAE,EAAE;MAAED,MAAM,EAAE;IAAI,EAAE,CAAC;EAC1D,CAAC,EAAE,CAACV,WAAW,EAAEE,QAAQ,CAAC,CAAC;EAE3B,IAAMoC,oBAAoB,GAAG5D,WAAW,CACtC,CAAC6D,MAAM,EAAEC,SAAS,KAAK;IACrBpC,MAAM,CAACmC,MAAM,CAAC;IACdjC,SAAS,CAACkC,SAAS,CAAC;EACtB,CAAC,EACD,CAACpC,MAAM,EAAEE,SAAS,CACpB,CAAC;EAED,IAAMmC,SAAS,GAAG/D,WAAW,CAAC,MAAM;IAClC,IAAIiC,QAAQ,CAACwB,MAAM,KAAK,CAAC,EAAE;MACzBjC,QAAQ,CAAAkC,aAAA,CAAAA,aAAA,KAAMpC,WAAW;QAAEU,MAAM,EAAE,CAACA;MAAM,EAAE,CAAC;IAC/C,CAAC,MAAM;MACLR,QAAQ,CAAAkC,aAAA,CAAAA,aAAA,KAAMpC,WAAW;QAAEW,QAAQ,EAAE,EAAE;QAAED,MAAM,EAAE;MAAI,EAAE,CAAC;IAC1D;EACF,CAAC,EAAE,CAACV,WAAW,EAAEU,MAAM,EAAER,QAAQ,EAAES,QAAQ,CAAC,CAAC;EAE7C,IAAM+B,OAAO,GAAG/B,QAAQ,CAACwB,MAAM,KAAK,CAAC,GAAGzB,MAAM,GAAG,IAAI;EACrD,IAAMiC,UAAU,GAAGhC,QAAQ,CAACwB,MAAM,KAAK,CAAC,IAAI,CAACzB,MAAM,IAAIH,IAAI,KAAKX,QAAQ,CAACa,IAAI;EAE7E,oBACEd,KAAA;IAAKiD,IAAI,EAAC,MAAM;IAACC,SAAS,EAAC,kBAAkB;IAAAC,QAAA,gBAC3CrD,IAAA;MAAKoD,SAAS,EAAC,UAAU;MAAAC,QAAA,eACvBnD,KAAA;QAAKkD,SAAS,EAAC,aAAa;QAAAC,QAAA,gBAC1BrD,IAAA,CAACT,QAAQ;UAAC0D,OAAO,EAAEA,OAAQ;UAACxC,QAAQ,EAAEuC,SAAU;UAAAK,QAAA,EAAC;QAEjD,CAAU,CAAC,eACXrD,IAAA;UAAKoD,SAAS,EAAC;QAAQ,CAAE,CAAC,eAC1BpD,IAAA,CAACR,cAAc;UACb8D,EAAE,EAAEJ,UAAW;UACfK,OAAO,EAAE7D,WAAW,CAAC8D,gBAAiB;UACtCC,YAAY;UACZC,aAAa;UAAAL,QAAA,eAEbrD,IAAA,CAACV,MAAM;YAACqE,IAAI,EAAC,OAAO;YAACP,SAAS,EAAC,WAAW;YAACQ,OAAO,EAAEhB,WAAY;YAAAS,QAAA,EAAC;UAEjE,CAAQ;QAAC,CACK,CAAC,eACjBrD,IAAA,CAACV,MAAM;UACLqE,IAAI,EAAC,OAAO;UACZP,SAAS,EAAE/D,UAAU,CAAC;YACpBwE,MAAM,EAAE/C,IAAI,KAAKX,QAAQ,CAACwB;UAC5B,CAAC,CAAE;UACHmC,IAAI,EAAEnE,eAAgB;UACtBoE,OAAO,EAAC,gBAAgB;UACxBH,OAAO,EAAEA,CAAA,KAAM7C,OAAO,CAACZ,QAAQ,CAACwB,SAAS;QAAE,CAC5C,CAAC,eACF3B,IAAA,CAACV,MAAM;UACLqE,IAAI,EAAC,OAAO;UACZP,SAAS,EAAE/D,UAAU,CAAC;YACpBwE,MAAM,EAAE/C,IAAI,KAAKX,QAAQ,CAAC6D;UAC5B,CAAC,CAAE;UACHF,IAAI,EAAElE,aAAc;UACpBmE,OAAO,EAAC,iBAAiB;UACzBH,OAAO,EAAEA,CAAA,KAAM7C,OAAO,CAACZ,QAAQ,CAAC6D,UAAU;QAAE,CAC7C,CAAC;MAAA,CACC;IAAC,CACH,CAAC,eACNhE,IAAA;MAAKoD,SAAS,EAAC,4BAA4B;MAAAC,QAAA,eACzCrD,IAAA,CAACP,QAAQ;QACPwE,SAAS,EAAE1C,YAAY,CAACmB,MAAO;QAC/Bd,KAAK,EAAEA,KAAM;QACbsC,MAAM,EAAExD,GAAI;QACZyD,UAAU,EAAEC,KAAA;UAAA,IAAC;YAAEC;UAAK,CAAC,GAAAD,KAAA;UAAA,oBACnBpE,IAAA,CAACT,QAAQ;YAAC0D,OAAO,EAAE7B,UAAU,CAACiD,IAAI,CAACrC,KAAK,CAAE;YAAAqB,QAAA,EACvCgB,IAAI,CAACpC;UAAY,CACV,CAAC;QAAA,CACX;QACFqC,QAAQ,EAAEpC,YAAa;QACvBqC,gBAAgB,EAAE1B,oBAAqB;QACvC2B,SAAS,EAAEpE,kBAAmB;QAC9BqE,aAAa,EAAC,OAAO;QACrBC,GAAG,EAAEvD;MAAK,CACX;IAAC,CACC,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAed,eAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationOperation.js","names":["AggregationOperation"],"sources":["../../../src/sidebar/aggregations/AggregationOperation.ts"],"sourcesContent":["enum AggregationOperation {\n COUNT = 'Count',\n MIN = 'Min',\n MAX = 'Max',\n SUM = 'Sum',\n ABS_SUM = 'AbsSum',\n VAR = 'Var',\n AVG = 'Avg',\n MEDIAN = 'Median',\n STD = 'Std',\n FIRST = 'First',\n LAST = 'Last',\n SKIP = 'Skip',\n COUNT_DISTINCT = 'CountDistinct',\n DISTINCT = 'Distinct',\n UNIQUE = 'Unique',\n}\n\nexport default AggregationOperation;\n"],"mappings":"IAAKA,oBAAoB;AAAA,WAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;AAAA,GAApBA,oBAAoB,KAApBA,oBAAoB;AAkBzB,eAAeA,oBAAoB"
|
|
1
|
+
{"version":3,"file":"AggregationOperation.js","names":["AggregationOperation"],"sources":["../../../src/sidebar/aggregations/AggregationOperation.ts"],"sourcesContent":["enum AggregationOperation {\n COUNT = 'Count',\n MIN = 'Min',\n MAX = 'Max',\n SUM = 'Sum',\n ABS_SUM = 'AbsSum',\n VAR = 'Var',\n AVG = 'Avg',\n MEDIAN = 'Median',\n STD = 'Std',\n FIRST = 'First',\n LAST = 'Last',\n SKIP = 'Skip',\n COUNT_DISTINCT = 'CountDistinct',\n DISTINCT = 'Distinct',\n UNIQUE = 'Unique',\n}\n\nexport default AggregationOperation;\n"],"mappings":"IAAKA,oBAAoB;AAAA,WAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;AAAA,GAApBA,oBAAoB,KAApBA,oBAAoB;AAkBzB,eAAeA,oBAAoB"}
|
|
@@ -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 true;\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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"
|
|
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 true;\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","Radio","RadioGroup","Button","AggregationOperation","AggregationUtils","SELECTABLE_OPTIONS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","Aggregations","_ref","isRollup","settings","onChange","onEdit","dh","aggregations","showOnTop","options","filter","option","some","aggregation","operation","MEDIAN","undefined","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","added","arguments","length","removed","_objectSpread","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","_ref2","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","keep","remove","reduce","_ref3","keepSoFar","removeSoFar","push","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","value","setDefaultOperation","includes","renderAggregation","_ref4","item","isClone","selectedCount","text","badgeText","concat","className","isRollupProhibited","isEditable","children","icon","renderBadge","renderHandle","kind","tooltip","onClick","disabled","isOptionsShown","isAggregationsShown","map","type","id","marginStart","orientation","onDragStart","onDragEnd","itemCount","items","renderItem","offset","onSelectionChange","onSelect","isMultiSelect"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n Radio,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (\n settings: AggregationSettings,\n added: AggregationOperation[],\n removed: AggregationOperation[]\n ) => void;\n onEdit: (aggregation: Aggregation) => void;\n dh: typeof DhType;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n dh,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option) &&\n !(\n option === AggregationOperation.MEDIAN &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - MEDIAN is not defined in older version of Core\n dh.AggregationOperation.MEDIAN === undefined\n )\n ),\n [aggregations, dh]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n (changedSettings, added = [], removed = []) => {\n onChange({ ...settings, ...changedSettings }, added, removed);\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n (newAggregations, added = [], removed = []) => {\n changeSettings({ aggregations: newAggregations }, added, removed);\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations(\n [\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ],\n [selectedOperation]\n );\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n const [keep, remove] = aggregations.reduce(\n ([keepSoFar, removeSoFar], aggregation, index) => {\n if (index === itemIndex) {\n removeSoFar.push(aggregation.operation);\n } else {\n keepSoFar.push(aggregation);\n }\n return [keepSoFar, removeSoFar];\n },\n [[], []] as [Aggregation[], AggregationOperation[]]\n );\n changeAggregations(keep, [], remove);\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (value: string) => {\n changeShowOnTop(value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isRollupProhibited = AggregationUtils.isRollupProhibited(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n {isRollup && isRollupProhibited && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Not available on\n rollups\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div>\n <label id=\"placement-options-label\">Placement: </label>\n <RadioGroup\n aria-labelledby=\"placement-options-label\"\n marginStart=\"size-125\"\n orientation=\"horizontal\"\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <Radio value=\"true\">Top</Radio>\n <Radio value=\"false\">Bottom</Radio>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","Radio","RadioGroup","Button","AggregationOperation","AggregationUtils","SELECTABLE_OPTIONS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","Aggregations","_ref","isRollup","settings","onChange","onEdit","dh","aggregations","showOnTop","options","filter","option","some","aggregation","operation","MEDIAN","undefined","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","added","arguments","length","removed","_objectSpread","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","_ref2","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","keep","remove","reduce","_ref3","keepSoFar","removeSoFar","push","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","value","setDefaultOperation","includes","renderAggregation","_ref4","item","isClone","selectedCount","text","badgeText","concat","className","isRollupProhibited","isEditable","children","icon","renderBadge","renderHandle","kind","tooltip","onClick","disabled","isOptionsShown","isAggregationsShown","map","type","id","marginStart","orientation","onDragStart","onDragEnd","itemCount","items","renderItem","offset","onSelectionChange","onSelect","isMultiSelect"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n Radio,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (\n settings: AggregationSettings,\n added: AggregationOperation[],\n removed: AggregationOperation[]\n ) => void;\n onEdit: (aggregation: Aggregation) => void;\n dh: typeof DhType;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n dh,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option) &&\n !(\n option === AggregationOperation.MEDIAN &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - MEDIAN is not defined in older version of Core\n dh.AggregationOperation.MEDIAN === undefined\n )\n ),\n [aggregations, dh]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n (changedSettings, added = [], removed = []) => {\n onChange({ ...settings, ...changedSettings }, added, removed);\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n (newAggregations, added = [], removed = []) => {\n changeSettings({ aggregations: newAggregations }, added, removed);\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations(\n [\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ],\n [selectedOperation]\n );\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n const [keep, remove] = aggregations.reduce(\n ([keepSoFar, removeSoFar], aggregation, index) => {\n if (index === itemIndex) {\n removeSoFar.push(aggregation.operation);\n } else {\n keepSoFar.push(aggregation);\n }\n return [keepSoFar, removeSoFar];\n },\n [[], []] as [Aggregation[], AggregationOperation[]]\n );\n changeAggregations(keep, [], remove);\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (value: string) => {\n changeShowOnTop(value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isRollupProhibited = AggregationUtils.isRollupProhibited(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n {isRollup && isRollupProhibited && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Not available on\n rollups\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div>\n <label id=\"placement-options-label\">Placement: </label>\n <RadioGroup\n aria-labelledby=\"placement-options-label\"\n marginStart=\"size-125\"\n orientation=\"horizontal\"\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <Radio value=\"true\">Top</Radio>\n <Radio value=\"false\">Bottom</Radio>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","AggregationOperation","AggregationUtils"],"sources":["../../../src/sidebar/aggregations/index.ts"],"sourcesContent":["export * from './Aggregations';\nexport { default as AggregationOperation } from './AggregationOperation';\nexport { default as AggregationUtils } from './AggregationUtils';\n"],"mappings":";SACSA,OAAO,IAAIC,oBAAoB;AAAA,SAC/BD,OAAO,IAAIE,gBAAgB"
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","AggregationOperation","AggregationUtils"],"sources":["../../../src/sidebar/aggregations/index.ts"],"sourcesContent":["export * from './Aggregations';\nexport { default as AggregationOperation } from './AggregationOperation';\nexport { default as AggregationUtils } from './AggregationUtils';\n"],"mappings":";SACSA,OAAO,IAAIC,oBAAoB;AAAA,SAC/BD,OAAO,IAAIE,gBAAgB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnFormatEditor.js","names":["React","useCallback","useEffect","useMemo","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","FormatStyleType","ConditionEditor","StyleEditor","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","type","name","column","config","_objectSpread","style","ColumnFormatEditor","props","_columns$find","dh","onChange","selectedColumn","setColumn","find","c","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","value","newColumn","_ref","error","concat","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateColumnFormat","NO_FORMATTING","columnNames","map","_ref2","className","children","defaultSelectedKey"],"sources":["../../../src/sidebar/conditional-formatting/ColumnFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type BaseFormatConfig,\n type ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n type ModelColumn,\n FormatStyleType,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('ColumnFormatEditor');\n\nexport interface ColumnFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n dh: typeof DhType;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction makeDefaultConfig(columns: ModelColumn[]): BaseFormatConfig {\n const { type, name } = columns[0];\n const column = { type, name };\n const config = {\n column,\n style: getDefaultStyleConfig(),\n ...getDefaultConditionConfigForType(type),\n };\n return config;\n}\n\nfunction ColumnFormatEditor(props: ColumnFormatEditorProps): JSX.Element {\n const {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK,\n } = props;\n\n const [selectedColumn, setColumn] = useState(\n columns.find(\n c => c.name === config.column.name && c.type === config.column.type\n ) ?? columns[0]\n );\n const [conditionConfig, setConditionConfig] = useState(\n getConditionConfig(config)\n );\n const [conditionValid, setConditionValid] = useState(false);\n const [selectedStyle, setStyle] = useState(config.style);\n\n const handleColumnChange = useCallback(\n value => {\n const newColumn = columns.find(({ name }) => name === value);\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(`Column ${value} not found.`);\n }\n },\n [columns, selectedColumn]\n );\n\n const handleConditionChange = useCallback(\n (updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n\n useEffect(\n function updateColumnFormat() {\n let isValid = conditionValid;\n\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (\n selectedStyle === undefined ||\n selectedStyle.type === FormatStyleType.NO_FORMATTING\n ) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n\n const { type, name } = selectedColumn;\n const column = { type, name };\n onChange(\n {\n column,\n style: selectedStyle,\n ...conditionConfig,\n },\n isValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const columnNames = useMemo(() => columns.map(({ name }) => name), [columns]);\n\n return (\n <div className=\"conditional-rule-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\">Format Cell If</label>\n <ComboBox\n aria-label=\"Select column to format\"\n defaultSelectedKey={selectedColumn?.name}\n onChange={handleColumnChange}\n >\n {columnNames}\n </ComboBox>\n </div>\n\n {selectedColumn !== undefined && (\n <>\n <ConditionEditor\n dh={dh}\n column={selectedColumn}\n config={conditionConfig}\n onChange={handleConditionChange}\n />\n <StyleEditor config={selectedStyle} onChange={handleStyleChange} />\n </>\n )}\n </div>\n );\n}\n\nexport default ColumnFormatEditor;\n"],"mappings":"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"
|
|
1
|
+
{"version":3,"file":"ColumnFormatEditor.js","names":["React","useCallback","useEffect","useMemo","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","FormatStyleType","ConditionEditor","StyleEditor","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","type","name","column","config","_objectSpread","style","ColumnFormatEditor","props","_columns$find","dh","onChange","selectedColumn","setColumn","find","c","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","value","newColumn","_ref","error","concat","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateColumnFormat","NO_FORMATTING","columnNames","map","_ref2","className","children","defaultSelectedKey"],"sources":["../../../src/sidebar/conditional-formatting/ColumnFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type BaseFormatConfig,\n type ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n type ModelColumn,\n FormatStyleType,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('ColumnFormatEditor');\n\nexport interface ColumnFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n dh: typeof DhType;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction makeDefaultConfig(columns: ModelColumn[]): BaseFormatConfig {\n const { type, name } = columns[0];\n const column = { type, name };\n const config = {\n column,\n style: getDefaultStyleConfig(),\n ...getDefaultConditionConfigForType(type),\n };\n return config;\n}\n\nfunction ColumnFormatEditor(props: ColumnFormatEditorProps): JSX.Element {\n const {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK,\n } = props;\n\n const [selectedColumn, setColumn] = useState(\n columns.find(\n c => c.name === config.column.name && c.type === config.column.type\n ) ?? columns[0]\n );\n const [conditionConfig, setConditionConfig] = useState(\n getConditionConfig(config)\n );\n const [conditionValid, setConditionValid] = useState(false);\n const [selectedStyle, setStyle] = useState(config.style);\n\n const handleColumnChange = useCallback(\n value => {\n const newColumn = columns.find(({ name }) => name === value);\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(`Column ${value} not found.`);\n }\n },\n [columns, selectedColumn]\n );\n\n const handleConditionChange = useCallback(\n (updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n\n useEffect(\n function updateColumnFormat() {\n let isValid = conditionValid;\n\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (\n selectedStyle === undefined ||\n selectedStyle.type === FormatStyleType.NO_FORMATTING\n ) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n\n const { type, name } = selectedColumn;\n const column = { type, name };\n onChange(\n {\n column,\n style: selectedStyle,\n ...conditionConfig,\n },\n isValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const columnNames = useMemo(() => columns.map(({ name }) => name), [columns]);\n\n return (\n <div className=\"conditional-rule-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\">Format Cell If</label>\n <ComboBox\n aria-label=\"Select column to format\"\n defaultSelectedKey={selectedColumn?.name}\n onChange={handleColumnChange}\n >\n {columnNames}\n </ComboBox>\n </div>\n\n {selectedColumn !== undefined && (\n <>\n <ConditionEditor\n dh={dh}\n column={selectedColumn}\n config={conditionConfig}\n onChange={handleConditionChange}\n />\n <StyleEditor config={selectedStyle} onChange={handleStyleChange} />\n </>\n )}\n </div>\n );\n}\n\nexport default ColumnFormatEditor;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionEditor.js","names":["useCallback","useEffect","useMemo","useState","TableUtils","Log","Select","StringCondition","DateCondition","getLabelForNumberCondition","getLabelForDateCondition","getLabelForStringCondition","NumberCondition","getDefaultConditionForType","getLabelForBooleanCondition","BooleanCondition","CharCondition","getLabelForCharCondition","isDateConditionValid","getDefaultValueForType","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","numberConditionOptions","IS_EQUAL","IS_NOT_EQUAL","IS_BETWEEN","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","IS_NULL","IS_NOT_NULL","map","option","value","children","stringConditions","IS_EXACTLY","IS_NOT_EXACTLY","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","dateConditions","IS_BEFORE","IS_BEFORE_OR_EQUAL","IS_AFTER","IS_AFTER_OR_EQUAL","booleanConditions","IS_TRUE","IS_FALSE","charConditions","isNumberConditionValid","condition","startValue","endValue","Number","isNaN","parseFloat","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","conditionValue","type","className","placeholder","onChange","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","maxLength","ConditionEditor","props","column","config","dh","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setValue","setStartValue","start","setEndValue","end","conditions","isNumberType","isCharType","isStringType","isDateType","isBooleanType","handleConditionChange","debug","e","target","changeCondition","isValid","conditionInputs"],"sources":["../../../src/sidebar/conditional-formatting/ConditionEditor.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport {\n StringCondition,\n DateCondition,\n getLabelForNumberCondition,\n getLabelForDateCondition,\n getLabelForStringCondition,\n NumberCondition,\n type ModelColumn,\n type ConditionConfig,\n getDefaultConditionForType,\n getLabelForBooleanCondition,\n BooleanCondition,\n CharCondition,\n type Condition,\n getLabelForCharCondition,\n isDateConditionValid,\n getDefaultValueForType,\n} from './ConditionalFormattingUtils';\n\nconst log = Log.module('ConditionEditor');\n\nexport interface ConditionEditorProps {\n dh: typeof DhType;\n column: ModelColumn;\n config: ConditionConfig;\n onChange?: (config: ConditionConfig, isValid: boolean) => void;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst numberConditionOptions = [\n NumberCondition.IS_EQUAL,\n NumberCondition.IS_NOT_EQUAL,\n NumberCondition.IS_BETWEEN,\n NumberCondition.GREATER_THAN,\n NumberCondition.GREATER_THAN_OR_EQUAL,\n NumberCondition.LESS_THAN,\n NumberCondition.LESS_THAN_OR_EQUAL,\n NumberCondition.IS_NULL,\n NumberCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForNumberCondition(option)}\n </option>\n));\n\nconst stringConditions = [\n StringCondition.IS_EXACTLY,\n StringCondition.IS_NOT_EXACTLY,\n StringCondition.CONTAINS,\n StringCondition.DOES_NOT_CONTAIN,\n StringCondition.STARTS_WITH,\n StringCondition.ENDS_WITH,\n StringCondition.IS_NULL,\n StringCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForStringCondition(option)}\n </option>\n));\n\nconst dateConditions = [\n DateCondition.IS_EXACTLY,\n DateCondition.IS_NOT_EXACTLY,\n DateCondition.IS_BEFORE,\n DateCondition.IS_BEFORE_OR_EQUAL,\n DateCondition.IS_AFTER,\n DateCondition.IS_AFTER_OR_EQUAL,\n DateCondition.IS_NULL,\n DateCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForDateCondition(option)}\n </option>\n));\n\nconst booleanConditions = [\n BooleanCondition.IS_TRUE,\n BooleanCondition.IS_FALSE,\n BooleanCondition.IS_NULL,\n BooleanCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForBooleanCondition(option)}\n </option>\n));\n\nconst charConditions = [\n CharCondition.IS_EQUAL,\n CharCondition.IS_NOT_EQUAL,\n CharCondition.IS_NULL,\n CharCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForCharCondition(option)}\n </option>\n));\n\nfunction isNumberConditionValid(\n condition: NumberCondition,\n value?: string,\n startValue?: string,\n endValue?: string\n): boolean {\n if (\n condition === NumberCondition.IS_NULL ||\n condition === NumberCondition.IS_NOT_NULL\n ) {\n return true;\n }\n if (\n condition === NumberCondition.IS_BETWEEN &&\n startValue != null &&\n startValue !== '' &&\n !Number.isNaN(Number.parseFloat(startValue)) &&\n endValue != null &&\n endValue !== '' &&\n !Number.isNaN(Number.parseFloat(endValue))\n ) {\n return true;\n }\n if (\n condition !== NumberCondition.IS_BETWEEN &&\n value !== undefined &&\n value !== '' &&\n !Number.isNaN(Number.parseFloat(value))\n ) {\n return true;\n }\n return false;\n}\n\nfunction getNumberInputs(\n selectedCondition: NumberCondition,\n handleValueChange: (e: unknown) => void,\n handleStartValueChange: (e: unknown) => void,\n handleEndValueChange: (e: unknown) => void,\n conditionValue?: string,\n startValue?: string,\n endValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return (\n <input\n type=\"number\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n case NumberCondition.IS_BETWEEN:\n return (\n <div className=\"d-flex flex-row\">\n <input\n type=\"number\"\n className=\"form-control d-flex mr-2\"\n placeholder=\"Start value\"\n value={startValue ?? ''}\n onChange={handleStartValueChange}\n />\n <input\n type=\"number\"\n className=\"form-control d-flex\"\n placeholder=\"End value\"\n value={endValue ?? ''}\n onChange={handleEndValueChange}\n />\n </div>\n );\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\n\nfunction getStringInputs(\n selectedCondition: StringCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getDateInputs(\n selectedCondition: DateCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getBooleanInputs(): null {\n return null;\n}\n\nfunction getCharInputs(\n selectedCondition: CharCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n maxLength={1}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction ConditionEditor(props: ConditionEditorProps): JSX.Element {\n const { column, config, dh, onChange = DEFAULT_CALLBACK } = props;\n const selectedColumnType = column.type;\n const [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n const [selectedCondition, setCondition] = useState(config.condition);\n const [conditionValue, setValue] = useState(config.value);\n const [startValue, setStartValue] = useState(config.start);\n const [endValue, setEndValue] = useState(config.end);\n\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n\n const conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n\n const handleConditionChange = useCallback((value: string) => {\n log.debug('handleConditionChange', value);\n setCondition(value as Condition);\n }, []);\n\n const handleValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n\n const handleStartValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n\n const handleEndValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n\n useEffect(\n function changeCondition() {\n let isValid = true;\n\n if (selectedCondition === undefined) {\n log.debug(\n 'Unable to create formatting rule. Condition is not selected.'\n );\n isValid = false;\n } else if (\n TableUtils.isNumberType(column.type) &&\n !isNumberConditionValid(\n selectedCondition as NumberCondition,\n conditionValue,\n startValue,\n endValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid value',\n conditionValue\n );\n isValid = false;\n } else if (\n TableUtils.isDateType(column.type) &&\n !isDateConditionValid(\n dh,\n selectedCondition as DateCondition,\n conditionValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid date condition',\n conditionValue\n );\n isValid = false;\n }\n\n onChange(\n {\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue,\n },\n isValid\n );\n },\n [\n onChange,\n column.type,\n dh,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n ]\n );\n\n const conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return getNumberInputs(\n selectedCondition as NumberCondition,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n conditionValue,\n startValue,\n endValue\n );\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(\n selectedCondition as CharCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(\n selectedCondition as StringCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(\n selectedCondition as DateCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [\n selectedColumnType,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n ]);\n\n return (\n <div className=\"condition-editor mb-2\">\n <Select\n value={selectedCondition}\n data-testid=\"condition-select\"\n className=\"custom-select mb-2\"\n onChange={handleConditionChange}\n >\n {conditions}\n </Select>\n {conditionInputs}\n </div>\n );\n}\n\nexport default ConditionEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ConditionEditor.js","names":["useCallback","useEffect","useMemo","useState","TableUtils","Log","Select","StringCondition","DateCondition","getLabelForNumberCondition","getLabelForDateCondition","getLabelForStringCondition","NumberCondition","getDefaultConditionForType","getLabelForBooleanCondition","BooleanCondition","CharCondition","getLabelForCharCondition","isDateConditionValid","getDefaultValueForType","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","numberConditionOptions","IS_EQUAL","IS_NOT_EQUAL","IS_BETWEEN","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","IS_NULL","IS_NOT_NULL","map","option","value","children","stringConditions","IS_EXACTLY","IS_NOT_EXACTLY","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","dateConditions","IS_BEFORE","IS_BEFORE_OR_EQUAL","IS_AFTER","IS_AFTER_OR_EQUAL","booleanConditions","IS_TRUE","IS_FALSE","charConditions","isNumberConditionValid","condition","startValue","endValue","Number","isNaN","parseFloat","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","conditionValue","type","className","placeholder","onChange","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","maxLength","ConditionEditor","props","column","config","dh","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setValue","setStartValue","start","setEndValue","end","conditions","isNumberType","isCharType","isStringType","isDateType","isBooleanType","handleConditionChange","debug","e","target","changeCondition","isValid","conditionInputs"],"sources":["../../../src/sidebar/conditional-formatting/ConditionEditor.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport {\n StringCondition,\n DateCondition,\n getLabelForNumberCondition,\n getLabelForDateCondition,\n getLabelForStringCondition,\n NumberCondition,\n type ModelColumn,\n type ConditionConfig,\n getDefaultConditionForType,\n getLabelForBooleanCondition,\n BooleanCondition,\n CharCondition,\n type Condition,\n getLabelForCharCondition,\n isDateConditionValid,\n getDefaultValueForType,\n} from './ConditionalFormattingUtils';\n\nconst log = Log.module('ConditionEditor');\n\nexport interface ConditionEditorProps {\n dh: typeof DhType;\n column: ModelColumn;\n config: ConditionConfig;\n onChange?: (config: ConditionConfig, isValid: boolean) => void;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst numberConditionOptions = [\n NumberCondition.IS_EQUAL,\n NumberCondition.IS_NOT_EQUAL,\n NumberCondition.IS_BETWEEN,\n NumberCondition.GREATER_THAN,\n NumberCondition.GREATER_THAN_OR_EQUAL,\n NumberCondition.LESS_THAN,\n NumberCondition.LESS_THAN_OR_EQUAL,\n NumberCondition.IS_NULL,\n NumberCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForNumberCondition(option)}\n </option>\n));\n\nconst stringConditions = [\n StringCondition.IS_EXACTLY,\n StringCondition.IS_NOT_EXACTLY,\n StringCondition.CONTAINS,\n StringCondition.DOES_NOT_CONTAIN,\n StringCondition.STARTS_WITH,\n StringCondition.ENDS_WITH,\n StringCondition.IS_NULL,\n StringCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForStringCondition(option)}\n </option>\n));\n\nconst dateConditions = [\n DateCondition.IS_EXACTLY,\n DateCondition.IS_NOT_EXACTLY,\n DateCondition.IS_BEFORE,\n DateCondition.IS_BEFORE_OR_EQUAL,\n DateCondition.IS_AFTER,\n DateCondition.IS_AFTER_OR_EQUAL,\n DateCondition.IS_NULL,\n DateCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForDateCondition(option)}\n </option>\n));\n\nconst booleanConditions = [\n BooleanCondition.IS_TRUE,\n BooleanCondition.IS_FALSE,\n BooleanCondition.IS_NULL,\n BooleanCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForBooleanCondition(option)}\n </option>\n));\n\nconst charConditions = [\n CharCondition.IS_EQUAL,\n CharCondition.IS_NOT_EQUAL,\n CharCondition.IS_NULL,\n CharCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForCharCondition(option)}\n </option>\n));\n\nfunction isNumberConditionValid(\n condition: NumberCondition,\n value?: string,\n startValue?: string,\n endValue?: string\n): boolean {\n if (\n condition === NumberCondition.IS_NULL ||\n condition === NumberCondition.IS_NOT_NULL\n ) {\n return true;\n }\n if (\n condition === NumberCondition.IS_BETWEEN &&\n startValue != null &&\n startValue !== '' &&\n !Number.isNaN(Number.parseFloat(startValue)) &&\n endValue != null &&\n endValue !== '' &&\n !Number.isNaN(Number.parseFloat(endValue))\n ) {\n return true;\n }\n if (\n condition !== NumberCondition.IS_BETWEEN &&\n value !== undefined &&\n value !== '' &&\n !Number.isNaN(Number.parseFloat(value))\n ) {\n return true;\n }\n return false;\n}\n\nfunction getNumberInputs(\n selectedCondition: NumberCondition,\n handleValueChange: (e: unknown) => void,\n handleStartValueChange: (e: unknown) => void,\n handleEndValueChange: (e: unknown) => void,\n conditionValue?: string,\n startValue?: string,\n endValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return (\n <input\n type=\"number\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n case NumberCondition.IS_BETWEEN:\n return (\n <div className=\"d-flex flex-row\">\n <input\n type=\"number\"\n className=\"form-control d-flex mr-2\"\n placeholder=\"Start value\"\n value={startValue ?? ''}\n onChange={handleStartValueChange}\n />\n <input\n type=\"number\"\n className=\"form-control d-flex\"\n placeholder=\"End value\"\n value={endValue ?? ''}\n onChange={handleEndValueChange}\n />\n </div>\n );\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\n\nfunction getStringInputs(\n selectedCondition: StringCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getDateInputs(\n selectedCondition: DateCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getBooleanInputs(): null {\n return null;\n}\n\nfunction getCharInputs(\n selectedCondition: CharCondition,\n handleValueChange: (e: unknown) => void,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className=\"form-control\"\n maxLength={1}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction ConditionEditor(props: ConditionEditorProps): JSX.Element {\n const { column, config, dh, onChange = DEFAULT_CALLBACK } = props;\n const selectedColumnType = column.type;\n const [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n const [selectedCondition, setCondition] = useState(config.condition);\n const [conditionValue, setValue] = useState(config.value);\n const [startValue, setStartValue] = useState(config.start);\n const [endValue, setEndValue] = useState(config.end);\n\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n\n const conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n\n const handleConditionChange = useCallback((value: string) => {\n log.debug('handleConditionChange', value);\n setCondition(value as Condition);\n }, []);\n\n const handleValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n\n const handleStartValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n\n const handleEndValueChange = useCallback(e => {\n const { value } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n\n useEffect(\n function changeCondition() {\n let isValid = true;\n\n if (selectedCondition === undefined) {\n log.debug(\n 'Unable to create formatting rule. Condition is not selected.'\n );\n isValid = false;\n } else if (\n TableUtils.isNumberType(column.type) &&\n !isNumberConditionValid(\n selectedCondition as NumberCondition,\n conditionValue,\n startValue,\n endValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid value',\n conditionValue\n );\n isValid = false;\n } else if (\n TableUtils.isDateType(column.type) &&\n !isDateConditionValid(\n dh,\n selectedCondition as DateCondition,\n conditionValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid date condition',\n conditionValue\n );\n isValid = false;\n }\n\n onChange(\n {\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue,\n },\n isValid\n );\n },\n [\n onChange,\n column.type,\n dh,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n ]\n );\n\n const conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return getNumberInputs(\n selectedCondition as NumberCondition,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n conditionValue,\n startValue,\n endValue\n );\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(\n selectedCondition as CharCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(\n selectedCondition as StringCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(\n selectedCondition as DateCondition,\n handleValueChange,\n conditionValue\n );\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [\n selectedColumnType,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n ]);\n\n return (\n <div className=\"condition-editor mb-2\">\n <Select\n value={selectedCondition}\n data-testid=\"condition-select\"\n className=\"custom-select mb-2\"\n onChange={handleConditionChange}\n >\n {conditions}\n </Select>\n {conditionInputs}\n </div>\n );\n}\n\nexport default ConditionEditor;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACjE,SAASC,UAAU,QAAQ,wBAAwB;AAEnD,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,MAAM,QAAQ,uBAAuB;AAAC,SAE7CC,eAAe,EACfC,aAAa,EACbC,0BAA0B,EAC1BC,wBAAwB,EACxBC,0BAA0B,EAC1BC,eAAe,EAGfC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,gBAAgB,EAChBC,aAAa,EAEbC,wBAAwB,EACxBC,oBAAoB,EACpBC,sBAAsB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAGxB,IAAMC,GAAG,GAAGnB,GAAG,CAACoB,MAAM,CAAC,iBAAiB,CAAC;AASzC,IAAMC,gBAAgB,GAAGA,CAAA,KAAYC,SAAS;AAE9C,IAAMC,sBAAsB,GAAG,CAC7BhB,eAAe,CAACiB,QAAQ,EACxBjB,eAAe,CAACkB,YAAY,EAC5BlB,eAAe,CAACmB,UAAU,EAC1BnB,eAAe,CAACoB,YAAY,EAC5BpB,eAAe,CAACqB,qBAAqB,EACrCrB,eAAe,CAACsB,SAAS,EACzBtB,eAAe,CAACuB,kBAAkB,EAClCvB,eAAe,CAACwB,OAAO,EACvBxB,eAAe,CAACyB,WAAW,CAC5B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChChC,0BAA0B,CAAC8B,MAAM;AAAC,GADxBA,MAEL,CACT,CAAC;AAEF,IAAMG,gBAAgB,GAAG,CACvBnC,eAAe,CAACoC,UAAU,EAC1BpC,eAAe,CAACqC,cAAc,EAC9BrC,eAAe,CAACsC,QAAQ,EACxBtC,eAAe,CAACuC,gBAAgB,EAChCvC,eAAe,CAACwC,WAAW,EAC3BxC,eAAe,CAACyC,SAAS,EACzBzC,eAAe,CAAC6B,OAAO,EACvB7B,eAAe,CAAC8B,WAAW,CAC5B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChC9B,0BAA0B,CAAC4B,MAAM;AAAC,GADxBA,MAEL,CACT,CAAC;AAEF,IAAMU,cAAc,GAAG,CACrBzC,aAAa,CAACmC,UAAU,EACxBnC,aAAa,CAACoC,cAAc,EAC5BpC,aAAa,CAAC0C,SAAS,EACvB1C,aAAa,CAAC2C,kBAAkB,EAChC3C,aAAa,CAAC4C,QAAQ,EACtB5C,aAAa,CAAC6C,iBAAiB,EAC/B7C,aAAa,CAAC4B,OAAO,EACrB5B,aAAa,CAAC6B,WAAW,CAC1B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChC/B,wBAAwB,CAAC6B,MAAM;AAAC,GADtBA,MAEL,CACT,CAAC;AAEF,IAAMe,iBAAiB,GAAG,CACxBvC,gBAAgB,CAACwC,OAAO,EACxBxC,gBAAgB,CAACyC,QAAQ,EACzBzC,gBAAgB,CAACqB,OAAO,EACxBrB,gBAAgB,CAACsB,WAAW,CAC7B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChC3B,2BAA2B,CAACyB,MAAM;AAAC,GADzBA,MAEL,CACT,CAAC;AAEF,IAAMkB,cAAc,GAAG,CACrBzC,aAAa,CAACa,QAAQ,EACtBb,aAAa,CAACc,YAAY,EAC1Bd,aAAa,CAACoB,OAAO,EACrBpB,aAAa,CAACqB,WAAW,CAC1B,CAACC,GAAG,CAACC,MAAM,iBACVlB,IAAA;EAAqBmB,KAAK,EAAED,MAAO;EAAAE,QAAA,EAChCxB,wBAAwB,CAACsB,MAAM;AAAC,GADtBA,MAEL,CACT,CAAC;AAEF,SAASmB,sBAAsBA,CAC7BC,SAA0B,EAC1BnB,KAAc,EACdoB,UAAmB,EACnBC,QAAiB,EACR;EACT,IACEF,SAAS,KAAK/C,eAAe,CAACwB,OAAO,IACrCuB,SAAS,KAAK/C,eAAe,CAACyB,WAAW,EACzC;IACA,OAAO,IAAI;EACb;EACA,IACEsB,SAAS,KAAK/C,eAAe,CAACmB,UAAU,IACxC6B,UAAU,IAAI,IAAI,IAClBA,UAAU,KAAK,EAAE,IACjB,CAACE,MAAM,CAACC,KAAK,CAACD,MAAM,CAACE,UAAU,CAACJ,UAAU,CAAC,CAAC,IAC5CC,QAAQ,IAAI,IAAI,IAChBA,QAAQ,KAAK,EAAE,IACf,CAACC,MAAM,CAACC,KAAK,CAACD,MAAM,CAACE,UAAU,CAACH,QAAQ,CAAC,CAAC,EAC1C;IACA,OAAO,IAAI;EACb;EACA,IACEF,SAAS,KAAK/C,eAAe,CAACmB,UAAU,IACxCS,KAAK,KAAKb,SAAS,IACnBa,KAAK,KAAK,EAAE,IACZ,CAACsB,MAAM,CAACC,KAAK,CAACD,MAAM,CAACE,UAAU,CAACxB,KAAK,CAAC,CAAC,EACvC;IACA,OAAO,IAAI;EACb;EACA,OAAO,KAAK;AACd;AAEA,SAASyB,eAAeA,CACtBC,iBAAkC,EAClCC,iBAAuC,EACvCC,sBAA4C,EAC5CC,oBAA0C,EAC1CC,cAAuB,EACvBV,UAAmB,EACnBC,QAAiB,EACG;EACpB,QAAQK,iBAAiB;IACvB,KAAKtD,eAAe,CAACiB,QAAQ;IAC7B,KAAKjB,eAAe,CAACkB,YAAY;IACjC,KAAKlB,eAAe,CAACoB,YAAY;IACjC,KAAKpB,eAAe,CAACqB,qBAAqB;IAC1C,KAAKrB,eAAe,CAACsB,SAAS;IAC9B,KAAKtB,eAAe,CAACuB,kBAAkB;MACrC,oBACEd,IAAA;QACEkD,IAAI,EAAC,QAAQ;QACbC,SAAS,EAAC,cAAc;QACxBC,WAAW,EAAC,aAAa;QACzBjC,KAAK,EAAE8B,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,EAAG;QAC5BI,QAAQ,EAAEP;MAAkB,CAC7B,CAAC;IAEN,KAAKvD,eAAe,CAACmB,UAAU;MAC7B,oBACER,KAAA;QAAKiD,SAAS,EAAC,iBAAiB;QAAA/B,QAAA,gBAC9BpB,IAAA;UACEkD,IAAI,EAAC,QAAQ;UACbC,SAAS,EAAC,0BAA0B;UACpCC,WAAW,EAAC,aAAa;UACzBjC,KAAK,EAAEoB,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,EAAG;UACxBc,QAAQ,EAAEN;QAAuB,CAClC,CAAC,eACF/C,IAAA;UACEkD,IAAI,EAAC,QAAQ;UACbC,SAAS,EAAC,qBAAqB;UAC/BC,WAAW,EAAC,WAAW;UACvBjC,KAAK,EAAEqB,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,EAAG;UACtBa,QAAQ,EAAEL;QAAqB,CAChC,CAAC;MAAA,CACC,CAAC;IAEV,KAAKzD,eAAe,CAACwB,OAAO;IAC5B,KAAKxB,eAAe,CAACyB,WAAW;MAC9B,OAAO,IAAI;EACf;AACF;AAEA,SAASsC,eAAeA,CACtBT,iBAAkC,EAClCC,iBAAuC,EACvCG,cAAuB,EACH;EACpB,QAAQJ,iBAAiB;IACvB,KAAK3D,eAAe,CAAC6B,OAAO;IAC5B,KAAK7B,eAAe,CAAC8B,WAAW;MAC9B,OAAO,IAAI;IACb;MACE,oBACEhB,IAAA;QACEkD,IAAI,EAAC,MAAM;QACXC,SAAS,EAAC,cAAc;QACxBC,WAAW,EAAC,aAAa;QACzBjC,KAAK,EAAE8B,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,EAAG;QAC5BI,QAAQ,EAAEP;MAAkB,CAC7B,CAAC;EAER;AACF;AAEA,SAASS,aAAaA,CACpBV,iBAAgC,EAChCC,iBAAuC,EACvCG,cAAuB,EACH;EACpB,QAAQJ,iBAAiB;IACvB,KAAK1D,aAAa,CAAC4B,OAAO;IAC1B,KAAK5B,aAAa,CAAC6B,WAAW;MAC5B,OAAO,IAAI;IACb;MACE,oBACEhB,IAAA;QACEkD,IAAI,EAAC,MAAM;QACXC,SAAS,EAAC,cAAc;QACxBC,WAAW,EAAC,aAAa;QACzBjC,KAAK,EAAE8B,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,EAAG;QAC5BI,QAAQ,EAAEP;MAAkB,CAC7B,CAAC;EAER;AACF;AAEA,SAASU,gBAAgBA,CAAA,EAAS;EAChC,OAAO,IAAI;AACb;AAEA,SAASC,aAAaA,CACpBZ,iBAAgC,EAChCC,iBAAuC,EACvCG,cAAuB,EACH;EACpB,QAAQJ,iBAAiB;IACvB,KAAKlD,aAAa,CAACoB,OAAO;IAC1B,KAAKpB,aAAa,CAACqB,WAAW;MAC5B,OAAO,IAAI;IACb;MACE,oBACEhB,IAAA;QACEkD,IAAI,EAAC,MAAM;QACXC,SAAS,EAAC,cAAc;QACxBO,SAAS,EAAE,CAAE;QACbN,WAAW,EAAC,aAAa;QACzBjC,KAAK,EAAE8B,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,EAAG;QAC5BI,QAAQ,EAAEP;MAAkB,CAC7B,CAAC;EAER;AACF;AAEA,SAASa,eAAeA,CAACC,KAA2B,EAAe;EACjE,IAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC,EAAE;IAAEV,QAAQ,GAAGhD;EAAiB,CAAC,GAAGuD,KAAK;EACjE,IAAMI,kBAAkB,GAAGH,MAAM,CAACX,IAAI;EACtC,IAAM,CAACe,cAAc,EAAEC,iBAAiB,CAAC,GAAGpF,QAAQ,CAACkF,kBAAkB,CAAC;EACxE,IAAM,CAACnB,iBAAiB,EAAEsB,YAAY,CAAC,GAAGrF,QAAQ,CAACgF,MAAM,CAACxB,SAAS,CAAC;EACpE,IAAM,CAACW,cAAc,EAAEmB,QAAQ,CAAC,GAAGtF,QAAQ,CAACgF,MAAM,CAAC3C,KAAK,CAAC;EACzD,IAAM,CAACoB,UAAU,EAAE8B,aAAa,CAAC,GAAGvF,QAAQ,CAACgF,MAAM,CAACQ,KAAK,CAAC;EAC1D,IAAM,CAAC9B,QAAQ,EAAE+B,WAAW,CAAC,GAAGzF,QAAQ,CAACgF,MAAM,CAACU,GAAG,CAAC;EAEpD,IAAIR,kBAAkB,KAAKC,cAAc,EAAE;IACzC;IACAE,YAAY,CAAC3E,0BAA0B,CAACwE,kBAAkB,CAAC,CAAC;IAC5DI,QAAQ,CAACtE,sBAAsB,CAACkE,kBAAkB,CAAC,CAAC;IACpDK,aAAa,CAAC/D,SAAS,CAAC;IACxBiE,WAAW,CAACjE,SAAS,CAAC;IACtB4D,iBAAiB,CAACF,kBAAkB,CAAC;EACvC;EAEA,IAAMS,UAAU,GAAG5F,OAAO,CAAC,MAAM;IAC/B,IAAImF,kBAAkB,KAAK1D,SAAS,EAAE;MACpC,OAAO,EAAE;IACX;IACA,IAAIvB,UAAU,CAAC2F,YAAY,CAACV,kBAAkB,CAAC,EAAE;MAC/C,OAAOzD,sBAAsB;IAC/B;IACA,IAAIxB,UAAU,CAAC4F,UAAU,CAACX,kBAAkB,CAAC,EAAE;MAC7C,OAAO5B,cAAc;IACvB;IACA,IAAIrD,UAAU,CAAC6F,YAAY,CAACZ,kBAAkB,CAAC,EAAE;MAC/C,OAAO3C,gBAAgB;IACzB;IACA,IAAItC,UAAU,CAAC8F,UAAU,CAACb,kBAAkB,CAAC,EAAE;MAC7C,OAAOpC,cAAc;IACvB;IACA,IAAI7C,UAAU,CAAC+F,aAAa,CAACd,kBAAkB,CAAC,EAAE;MAChD,OAAO/B,iBAAiB;IAC1B;EACF,CAAC,EAAE,CAAC+B,kBAAkB,CAAC,CAAC;EAExB,IAAMe,qBAAqB,GAAGpG,WAAW,CAAEwC,KAAa,IAAK;IAC3DhB,GAAG,CAAC6E,KAAK,CAAC,uBAAuB,EAAE7D,KAAK,CAAC;IACzCgD,YAAY,CAAChD,KAAkB,CAAC;EAClC,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM2B,iBAAiB,GAAGnE,WAAW,CAACsG,CAAC,IAAI;IACzC,IAAM;MAAE9D;IAAM,CAAC,GAAG8D,CAAC,CAACC,MAAM;IAC1B/E,GAAG,CAAC6E,KAAK,CAAC,mBAAmB,EAAE7D,KAAK,CAAC;IACrCiD,QAAQ,CAACjD,KAAK,CAAC;EACjB,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM4B,sBAAsB,GAAGpE,WAAW,CAACsG,CAAC,IAAI;IAC9C,IAAM;MAAE9D;IAAM,CAAC,GAAG8D,CAAC,CAACC,MAAM;IAC1B/E,GAAG,CAAC6E,KAAK,CAAC,wBAAwB,EAAE7D,KAAK,CAAC;IAC1CkD,aAAa,CAAClD,KAAK,CAAC;EACtB,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM6B,oBAAoB,GAAGrE,WAAW,CAACsG,CAAC,IAAI;IAC5C,IAAM;MAAE9D;IAAM,CAAC,GAAG8D,CAAC,CAACC,MAAM;IAC1B/E,GAAG,CAAC6E,KAAK,CAAC,sBAAsB,EAAE7D,KAAK,CAAC;IACxCoD,WAAW,CAACpD,KAAK,CAAC;EACpB,CAAC,EAAE,EAAE,CAAC;EAENvC,SAAS,CACP,SAASuG,eAAeA,CAAA,EAAG;IACzB,IAAIC,OAAO,GAAG,IAAI;IAElB,IAAIvC,iBAAiB,KAAKvC,SAAS,EAAE;MACnCH,GAAG,CAAC6E,KAAK,CACP,8DACF,CAAC;MACDI,OAAO,GAAG,KAAK;IACjB,CAAC,MAAM,IACLrG,UAAU,CAAC2F,YAAY,CAACb,MAAM,CAACX,IAAI,CAAC,IACpC,CAACb,sBAAsB,CACrBQ,iBAAiB,EACjBI,cAAc,EACdV,UAAU,EACVC,QACF,CAAC,EACD;MACArC,GAAG,CAAC6E,KAAK,CACP,iDAAiD,EACjD/B,cACF,CAAC;MACDmC,OAAO,GAAG,KAAK;IACjB,CAAC,MAAM,IACLrG,UAAU,CAAC8F,UAAU,CAAChB,MAAM,CAACX,IAAI,CAAC,IAClC,CAACrD,oBAAoB,CACnBkE,EAAE,EACFlB,iBAAiB,EACjBI,cACF,CAAC,EACD;MACA9C,GAAG,CAAC6E,KAAK,CACP,0DAA0D,EAC1D/B,cACF,CAAC;MACDmC,OAAO,GAAG,KAAK;IACjB;IAEA/B,QAAQ,CACN;MACEf,SAAS,EAAEO,iBAAiB;MAC5B1B,KAAK,EAAE8B,cAAc;MACrBqB,KAAK,EAAE/B,UAAU;MACjBiC,GAAG,EAAEhC;IACP,CAAC,EACD4C,OACF,CAAC;EACH,CAAC,EACD,CACE/B,QAAQ,EACRQ,MAAM,CAACX,IAAI,EACXa,EAAE,EACFlB,iBAAiB,EACjBI,cAAc,EACdV,UAAU,EACVC,QAAQ,CAEZ,CAAC;EAED,IAAM6C,eAAe,GAAGxG,OAAO,CAAC,MAAM;IACpC,IAAImF,kBAAkB,KAAK1D,SAAS,EAAE;MACpC;MACA,OAAO,IAAI;IACb;IACA,IAAIvB,UAAU,CAAC2F,YAAY,CAACV,kBAAkB,CAAC,EAAE;MAC/C,OAAOpB,eAAe,CACpBC,iBAAiB,EACjBC,iBAAiB,EACjBC,sBAAsB,EACtBC,oBAAoB,EACpBC,cAAc,EACdV,UAAU,EACVC,QACF,CAAC;IACH;IACA,IAAIzD,UAAU,CAAC4F,UAAU,CAACX,kBAAkB,CAAC,EAAE;MAC7C,OAAOP,aAAa,CAClBZ,iBAAiB,EACjBC,iBAAiB,EACjBG,cACF,CAAC;IACH;IACA,IAAIlE,UAAU,CAAC6F,YAAY,CAACZ,kBAAkB,CAAC,EAAE;MAC/C,OAAOV,eAAe,CACpBT,iBAAiB,EACjBC,iBAAiB,EACjBG,cACF,CAAC;IACH;IACA,IAAIlE,UAAU,CAAC8F,UAAU,CAACb,kBAAkB,CAAC,EAAE;MAC7C,OAAOT,aAAa,CAClBV,iBAAiB,EACjBC,iBAAiB,EACjBG,cACF,CAAC;IACH;IACA,IAAIlE,UAAU,CAAC+F,aAAa,CAACd,kBAAkB,CAAC,EAAE;MAChD,OAAOR,gBAAgB,CAAC,CAAC;IAC3B;EACF,CAAC,EAAE,CACDQ,kBAAkB,EAClBnB,iBAAiB,EACjBI,cAAc,EACdV,UAAU,EACVC,QAAQ,EACRM,iBAAiB,EACjBC,sBAAsB,EACtBC,oBAAoB,CACrB,CAAC;EAEF,oBACE9C,KAAA;IAAKiD,SAAS,EAAC,uBAAuB;IAAA/B,QAAA,gBACpCpB,IAAA,CAACf,MAAM;MACLkC,KAAK,EAAE0B,iBAAkB;MACzB,eAAY,kBAAkB;MAC9BM,SAAS,EAAC,oBAAoB;MAC9BE,QAAQ,EAAE0B,qBAAsB;MAAA3D,QAAA,EAE/BqD;IAAU,CACL,CAAC,EACRY,eAAe;EAAA,CACb,CAAC;AAEV;AAEA,eAAe1B,eAAe"}
|