@deephaven/iris-grid 0.22.3-beta.11 → 0.22.3-beta.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","LoadingSpinner","RadioGroup","RadioItem","GridRange","GridUtils","vsWarning","dh","TimeUtils","shortid","Log","IrisGridUtils","log","module","TableCsvExporter","getDateString","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadOptionChanged","handleCustomizedDownloadOptionChanged","handleCustomizedDownloadRowsChanged","name","state","fileName","downloadOption","DOWNLOAD_OPTIONS","ALL_ROWS","customizedDownloadOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","errorMessage","id","generate","getSnapshotRanges","model","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","event","target","value","parseInt","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","toString","replace","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","width","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n LoadingSpinner,\n RadioGroup,\n RadioItem,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport dh, { Table, TableViewportSubscription } from '@deephaven/jsapi-shim';\nimport { TimeUtils } from '@deephaven/utils';\nimport shortid from 'shortid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: GridRange[],\n modelRanges: GridRange[]\n ) => void;\n onCancel: () => void;\n selectedRanges: GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadOption: string;\n customizedDownloadOption: string;\n customizedDownloadRows: number;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadOptionChanged = this.handleDownloadOptionChanged.bind(\n this\n );\n this.handleCustomizedDownloadOptionChanged = this.handleCustomizedDownloadOptionChanged.bind(\n this\n );\n this.handleCustomizedDownloadRowsChanged = this.handleCustomizedDownloadRowsChanged.bind(\n this\n );\n\n const { name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString()}.csv`,\n\n downloadOption: TableCsvExporter.DOWNLOAD_OPTIONS.ALL_ROWS,\n customizedDownloadOption: TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n errorMessage: null,\n id: shortid.generate(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadOption,\n customizedDownloadOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadOption) {\n case TableCsvExporter.DOWNLOAD_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const {\n model,\n isDownloading,\n onDownloadStart,\n onDownload,\n onCancel,\n } = this.props;\n const { fileName } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadOptionChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ downloadOption: event.target.value });\n }\n\n handleCustomizedDownloadOptionChanged(\n event: React.ChangeEvent<HTMLSelectElement>\n ): void {\n this.setState({ customizedDownloadOption: event.target.value });\n }\n\n handleCustomizedDownloadRowsChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ customizedDownloadRows: parseInt(event.target.value, 10) });\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadOption, customizedDownloadRows } = this.state;\n\n if (\n downloadOption === TableCsvExporter.DOWNLOAD_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadOption === TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadOption,\n customizedDownloadOption,\n customizedDownloadRows,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div className=\"section-title\">Download Rows</div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleDownloadOptionChanged}\n value={downloadOption}\n disabled={isDownloading}\n >\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n >\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadOption:\n TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <select\n value={customizedDownloadOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n className=\"custom-select\"\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadOptionChanged}\n >\n <option value=\"FIRST\">First</option>\n <option value=\"LAST\">Last</option>\n </select>\n <input\n type=\"number\"\n className=\"form-control\"\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n placeholder=\"100\"\n value={customizedDownloadRows}\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n />\n <div>Rows</div>\n </div>\n </RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","RadioItem","GridRange","GridUtils","vsWarning","dh","TimeUtils","shortid","Log","IrisGridUtils","log","module","TableCsvExporter","getDateString","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","name","state","fileName","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","generate","getSnapshotRanges","model","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","event","target","value","parseInt","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","toString","replace","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","width","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n RadioItem,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport dh, { Table, TableViewportSubscription } from '@deephaven/jsapi-shim';\nimport { TimeUtils } from '@deephaven/utils';\nimport shortid from 'shortid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: GridRange[],\n modelRanges: GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged = this.handleDownloadRowOptionChanged.bind(\n this\n );\n this.handleCustomizedDownloadRowOptionChanged = this.handleCustomizedDownloadRowOptionChanged.bind(\n this\n );\n this.handleCustomizedDownloadRowsChanged = this.handleCustomizedDownloadRowsChanged.bind(\n this\n );\n this.handleIncludeColumnHeadersChanged = this.handleIncludeColumnHeadersChanged.bind(\n this\n );\n this.handleIncludeHiddenColumnsChanged = this.handleIncludeHiddenColumnsChanged.bind(\n this\n );\n this.handleUseUnformattedValuesChanged = this.handleUseUnformattedValuesChanged.bind(\n this\n );\n\n const { name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString()}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: shortid.generate(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const {\n model,\n isDownloading,\n onDownloadStart,\n onDownload,\n onCancel,\n } = this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ downloadRowOption: event.target.value });\n }\n\n handleCustomizedDownloadRowOptionChanged(\n event: React.ChangeEvent<HTMLSelectElement>\n ): void {\n this.setState({ customizedDownloadRowOption: event.target.value });\n }\n\n handleCustomizedDownloadRowsChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ customizedDownloadRows: parseInt(event.target.value, 10) });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div className=\"section-title\">Download Rows</div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n disabled={isDownloading}\n >\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n >\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <select\n value={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n className=\"custom-select\"\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n >\n <option value=\"FIRST\">First</option>\n <option value=\"LAST\">Last</option>\n </select>\n <input\n type=\"number\"\n className=\"form-control\"\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n placeholder=\"100\"\n value={customizedDownloadRows}\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n />\n <div>Rows</div>\n </div>\n </RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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"}
@@ -34,6 +34,8 @@ export default class TableSaver extends PureComponent<TableSaverProps, Record<st
34
34
  tableSubscription?: TableViewportSubscription;
35
35
  columns?: Column[];
36
36
  fileName?: string;
37
+ includeColumnHeaders: boolean;
38
+ useUnformattedValues: boolean;
37
39
  chunkRows?: number;
38
40
  gridRanges: GridRange[];
39
41
  gridRangeCounter?: number;
@@ -54,19 +56,19 @@ export default class TableSaver extends PureComponent<TableSaverProps, Record<st
54
56
  downloadStartTime?: number;
55
57
  iframes: HTMLIFrameElement[];
56
58
  useBlobFallback: boolean;
57
- getCachedCustomColumnFormatFlag: typeof import("@deephaven/jsapi-utils").isCustomColumnFormatDefined & import("memoizee").Memoized<typeof import("@deephaven/jsapi-utils").isCustomColumnFormatDefined>;
59
+ getCachedCustomColumnFormatFlag: typeof import("@deephaven/jsapi-utils").isCustomColumnFormatDefined & import("@types/memoizee").Memoized<typeof import("@deephaven/jsapi-utils").isCustomColumnFormatDefined>;
58
60
  createWriterStream(port: MessagePort): WritableStream<{
59
61
  rows?: string | undefined;
60
62
  header?: string | undefined;
61
63
  }>;
62
- startDownload(fileName: string, frozenTable: Table, tableSubscription: TableViewportSubscription, snapshotRanges: GridRange[], modelRanges: GridRange[]): void;
64
+ startDownload(fileName: string, frozenTable: Table, tableSubscription: TableViewportSubscription, snapshotRanges: GridRange[], modelRanges: GridRange[], includeColumnHeaders: boolean, useUnformattedValues: boolean): void;
63
65
  finishDownload(): void;
64
66
  cancelDownload(): void;
65
67
  resetTableSaver(): void;
66
68
  handleDownloadTimeout(): void;
67
69
  writeTableHeader(): void;
68
70
  startWriteTableBody(): void;
69
- writeCsvTable(): void;
71
+ writeCsvTable(includeColumnHeaders: boolean): void;
70
72
  writeSnapshot(snapshotIndex: number, snapshotStartRow: GridRangeIndex, snapshotEndRow: GridRangeIndex): void;
71
73
  updateDownloadProgress(snapshotIndex: GridRangeIndex): void;
72
74
  convertSnapshotIntoCsv(snapshot: UpdateEventData): string;
@@ -1 +1 @@
1
- {"version":3,"file":"TableSaver.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableSaver.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAW,EACT,MAAM,EACN,KAAK,EAEL,yBAAyB,EACzB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAgB,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAkB,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAK1B,UAAU,eAAe;IACvB,iBAAiB,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,wBAAwB,EAAE,CACxB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,KACzB,IAAI,CAAC;IACV,SAAS,EAAE,SAAS,CAAC;CACtB;AAcD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,aAAa,CACnD,eAAe,EACf,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,mBAAmB,SAAQ;IAElC,MAAM,CAAC,oBAAoB,SAAK;IAEhC,MAAM,CAAC,cAAc,SAAQ;IAE7B,MAAM,CAAC,wBAAwB,SAAK;IAEpC,MAAM,CAAC,YAAY;iCACM,QAAQ,KAAK,CAAC;;mCAGZ,IAAI;kCACL,IAAI;wCACE,IAAI;MAClC;IAEF,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;gBAI/B,KAAK,EAAE,eAAe;IAmClC,iBAAiB,IAAI,IAAI;IAezB,oBAAoB,IAAI,IAAI;IAU5B,EAAE,CAAC,EAAE,aAAa,CAAC;IAEnB,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,UAAU,CAAC,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAElD,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAE9C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,cAAc,EAAE,MAAM,CAAC;IAEvB,eAAe,EAAE,MAAM,CAAC;IAExB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE9C,oBAAoB,EAAE,MAAM,CAAC;IAE7B,eAAe,EAAE,MAAM,CAAC;IAExB,mBAAmB,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAK3D,cAAc;;;MAAmD;IAOjE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE9C,sBAAsB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAEvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAE7B,eAAe,EAAE,OAAO,CAAC;IAEzB,+BAA+B,yKAG7B;IAEF,kBAAkB,CAChB,IAAI,EAAE,WAAW,GAChB,cAAc,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC7B,CAAC;IAuDF,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,KAAK,EAClB,iBAAiB,EAAE,yBAAyB,EAC5C,cAAc,EAAE,SAAS,EAAE,EAC3B,WAAW,EAAE,SAAS,EAAE,GACvB,IAAI;IAyCP,cAAc,IAAI,IAAI;IAwBtB,cAAc,IAAI,IAAI;IAsBtB,eAAe,IAAI,IAAI;IA8BvB,qBAAqB,IAAI,IAAI;IAK7B,gBAAgB,IAAI,IAAI;IAWxB,mBAAmB,IAAI,IAAI;IAyB3B,aAAa,IAAI,IAAI;IAKrB,aAAa,CACX,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,cAAc,EAChC,cAAc,EAAE,cAAc,GAC7B,IAAI;IAqDP,sBAAsB,CAAC,aAAa,EAAE,cAAc,GAAG,IAAI;IAwB3D,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM;IAiDzD,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAmE7B,iBAAiB,CAAC,EAChB,IAAI,GACL,EAAE,YAAY,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,qBAAqB,EAAE,OAAO,CAAC;KAChC,CAAC,GAAG,IAAI;IAsBT,sBAAsB,CACpB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,cAAc,EAChC,cAAc,EAAE,cAAc,GAC7B,IAAI;IAUP,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAU7B,MAAM,IAAI,IAAI;CAGf"}
1
+ {"version":3,"file":"TableSaver.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableSaver.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAW,EACT,MAAM,EAEN,KAAK,EAEL,yBAAyB,EACzB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAgB,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,SAAS,EAA8B,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAO1B,UAAU,eAAe;IACvB,iBAAiB,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,wBAAwB,EAAE,CACxB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,KACzB,IAAI,CAAC;IACV,SAAS,EAAE,SAAS,CAAC;CACtB;AAcD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,aAAa,CACnD,eAAe,EACf,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,mBAAmB,SAAQ;IAElC,MAAM,CAAC,oBAAoB,SAAK;IAEhC,MAAM,CAAC,cAAc,SAAQ;IAE7B,MAAM,CAAC,wBAAwB,SAAK;IAEpC,MAAM,CAAC,YAAY;iCACM,QAAQ,KAAK,CAAC;;mCAGZ,IAAI;kCACL,IAAI;wCACE,IAAI;MAClC;IAEF,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;gBAI/B,KAAK,EAAE,eAAe;IAsClC,iBAAiB,IAAI,IAAI;IAezB,oBAAoB,IAAI,IAAI;IAU5B,EAAE,CAAC,EAAE,aAAa,CAAC;IAEnB,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,UAAU,CAAC,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAElD,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAE9C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,oBAAoB,EAAE,OAAO,CAAC;IAE9B,oBAAoB,EAAE,OAAO,CAAC;IAE9B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,cAAc,EAAE,MAAM,CAAC;IAEvB,eAAe,EAAE,MAAM,CAAC;IAExB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE9C,oBAAoB,EAAE,MAAM,CAAC;IAE7B,eAAe,EAAE,MAAM,CAAC;IAExB,mBAAmB,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAK3D,cAAc;;;MAAmD;IAOjE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE9C,sBAAsB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAEvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAE7B,eAAe,EAAE,OAAO,CAAC;IAEzB,+BAA+B,gLAG7B;IAEF,kBAAkB,CAChB,IAAI,EAAE,WAAW,GAChB,cAAc,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC7B,CAAC;IAuDF,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,KAAK,EAClB,iBAAiB,EAAE,yBAAyB,EAC5C,cAAc,EAAE,SAAS,EAAE,EAC3B,WAAW,EAAE,SAAS,EAAE,EACxB,oBAAoB,EAAE,OAAO,EAC7B,oBAAoB,EAAE,OAAO,GAC5B,IAAI;IA2CP,cAAc,IAAI,IAAI;IAwBtB,cAAc,IAAI,IAAI;IAsBtB,eAAe,IAAI,IAAI;IAiCvB,qBAAqB,IAAI,IAAI;IAK7B,gBAAgB,IAAI,IAAI;IAWxB,mBAAmB,IAAI,IAAI;IAyB3B,aAAa,CAAC,oBAAoB,EAAE,OAAO,GAAG,IAAI;IAOlD,aAAa,CACX,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,cAAc,EAChC,cAAc,EAAE,cAAc,GAC7B,IAAI;IAqDP,sBAAsB,CAAC,aAAa,EAAE,cAAc,GAAG,IAAI;IAwB3D,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM;IAgEzD,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAmE7B,iBAAiB,CAAC,EAChB,IAAI,GACL,EAAE,YAAY,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,qBAAqB,EAAE,OAAO,CAAC;KAChC,CAAC,GAAG,IAAI;IAuBT,sBAAsB,CACpB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,cAAc,EAChC,cAAc,EAAE,cAAc,GAC7B,IAAI;IAUP,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAU7B,MAAM,IAAI,IAAI;CAGf"}
@@ -5,10 +5,11 @@ import { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/p
5
5
  import dh from '@deephaven/jsapi-shim';
6
6
  import Log from '@deephaven/log';
7
7
  import { memoizeClear } from '@deephaven/grid';
8
- import { FormatterUtils } from '@deephaven/jsapi-utils';
8
+ import { FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';
9
9
  import { PromiseUtils, assertNotNull } from '@deephaven/utils';
10
10
  import IrisGridUtils from "../IrisGridUtils.js";
11
11
  var log = Log.module('TableSaver');
12
+ var UNFORMATTED_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z";
12
13
 
13
14
  function isUpdateEventData(data) {
14
15
  return data.added !== undefined;
@@ -44,6 +45,10 @@ export default class TableSaver extends PureComponent {
44
45
 
45
46
  _defineProperty(this, "fileName", void 0);
46
47
 
48
+ _defineProperty(this, "includeColumnHeaders", void 0);
49
+
50
+ _defineProperty(this, "useUnformattedValues", void 0);
51
+
47
52
  _defineProperty(this, "chunkRows", void 0);
48
53
 
49
54
  _defineProperty(this, "gridRanges", void 0);
@@ -90,6 +95,8 @@ export default class TableSaver extends PureComponent {
90
95
  this.gridRangeCounter = 0;
91
96
  this.rangedSnapshotsTotal = [];
92
97
  this.rangedSnapshotCounter = 0;
98
+ this.includeColumnHeaders = true;
99
+ this.useUnformattedValues = false;
93
100
  this.snapshotsTotal = 0;
94
101
  this.snapshotCounter = 0;
95
102
  this.snapshotsBuffer = new Map();
@@ -200,7 +207,7 @@ export default class TableSaver extends PureComponent {
200
207
  return new this.WritableStream(streamConfig);
201
208
  }
202
209
 
203
- startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges) {
210
+ startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {
204
211
  // don't trigger another download when a download is ongoing
205
212
  var {
206
213
  isDownloading
@@ -215,7 +222,9 @@ export default class TableSaver extends PureComponent {
215
222
  this.table = frozenTable;
216
223
  this.columns = IrisGridUtils.columnsFromRanges(modelRanges, frozenTable.columns);
217
224
  this.tableSubscription = tableSubscription;
218
- this.gridRanges = snapshotRanges; // Make filename RFC5987 compatible
225
+ this.gridRanges = snapshotRanges;
226
+ this.includeColumnHeaders = includeColumnHeaders;
227
+ this.useUnformattedValues = useUnformattedValues; // Make filename RFC5987 compatible
219
228
 
220
229
  var encodedFileName = encodeURIComponent(fileName.replace(/\//g, ':')).replace(/['()]/g, escape).replace(/\*/g, '%2A');
221
230
  var messageChannel = new MessageChannel();
@@ -224,7 +233,7 @@ export default class TableSaver extends PureComponent {
224
233
  this.fileWriter = this.createWriterStream(this.port).getWriter(); // if the browser doesn't support stream or there's no active service worker, use blobs for table download
225
234
 
226
235
  if (this.useBlobFallback) {
227
- this.writeCsvTable();
236
+ this.writeCsvTable(includeColumnHeaders);
228
237
  return;
229
238
  }
230
239
 
@@ -297,6 +306,8 @@ export default class TableSaver extends PureComponent {
297
306
  this.gridRangeCounter = 0;
298
307
  this.rangedSnapshotsTotal = [];
299
308
  this.rangedSnapshotCounter = 0;
309
+ this.includeColumnHeaders = true;
310
+ this.useUnformattedValues = false;
300
311
  this.snapshotsTotal = 0;
301
312
  this.snapshotCounter = 0;
302
313
  this.snapshotsBuffer = new Map();
@@ -353,8 +364,11 @@ export default class TableSaver extends PureComponent {
353
364
  }
354
365
  }
355
366
 
356
- writeCsvTable() {
357
- this.writeTableHeader();
367
+ writeCsvTable(includeColumnHeaders) {
368
+ if (includeColumnHeaders) {
369
+ this.writeTableHeader();
370
+ }
371
+
358
372
  this.startWriteTableBody();
359
373
  }
360
374
 
@@ -407,6 +421,9 @@ export default class TableSaver extends PureComponent {
407
421
  }
408
422
 
409
423
  assertNotNull(this.columns);
424
+ var {
425
+ useUnformattedValues
426
+ } = this;
410
427
 
411
428
  for (var i = 0; i < rows.length; i += 1) {
412
429
  var rowIdx = rows[i];
@@ -418,20 +435,33 @@ export default class TableSaver extends PureComponent {
418
435
  type,
419
436
  name
420
437
  } = this.columns[j];
421
- var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(formatter, name, type);
422
- var formatOverride = null;
438
+ var cellData = null;
423
439
 
424
- if (!hasCustomColumnFormat) {
425
- var cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);
426
- formatOverride = (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.formatString) != null ? cellFormat : null;
427
- }
440
+ if (useUnformattedValues) {
441
+ var _snapshot$getData;
428
442
 
429
- var cellData = null;
443
+ var value = (_snapshot$getData = snapshot.getData(rowIdx, this.columns[j])) !== null && _snapshot$getData !== void 0 ? _snapshot$getData : '';
430
444
 
431
- if (formatOverride) {
432
- cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name, formatOverride);
445
+ if (value !== '' && TableUtils.isDateType(type)) {
446
+ // value is just a long value, we should return the value formatted as a full date string
447
+ value = dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));
448
+ }
449
+
450
+ cellData = value.toString();
433
451
  } else {
434
- cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name);
452
+ var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(formatter, name, type);
453
+ var formatOverride = null;
454
+
455
+ if (!hasCustomColumnFormat) {
456
+ var cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);
457
+ formatOverride = (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.formatString) != null ? cellFormat : null;
458
+ }
459
+
460
+ if (formatOverride) {
461
+ cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name, formatOverride);
462
+ } else {
463
+ cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name);
464
+ }
435
465
  }
436
466
 
437
467
  csvString += TableSaver.csvEscapeString(cellData);
@@ -509,8 +539,11 @@ export default class TableSaver extends PureComponent {
509
539
  }
510
540
 
511
541
  if (download != null) {
542
+ var {
543
+ includeColumnHeaders
544
+ } = this;
512
545
  this.makeIframe("".concat(download));
513
- this.writeCsvTable();
546
+ this.writeCsvTable(includeColumnHeaders);
514
547
  }
515
548
 
516
549
  if (readableStreamPulling != null) {
@@ -1 +1 @@
1
- {"version":3,"file":"TableSaver.js","names":["PureComponent","WritableStream","ponyfillWritableStream","dh","Log","memoizeClear","FormatterUtils","PromiseUtils","assertNotNull","IrisGridUtils","log","module","isUpdateEventData","data","added","undefined","assertIsUpdateEventData","Error","TableSaver","csvEscapeString","str","replace","constructor","props","window","isCustomColumnFormatDefined","max","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","iframes","useBlobFallback","componentDidMount","getDownloadWorker","then","sw","info","postMessage","catch","error","warn","componentWillUnmount","length","forEach","iframe","remove","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","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","cancelable","onDownloadCanceled","chunkRows","writeTableHeader","headerString","i","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","formatter","hasNext","next","value","rowIdx","j","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","formatOverride","cellFormat","getFormat","formatString","cellData","getFormattedString","getData","currentGridRange","makeCancelable","RangeSet","ofRange","err","val","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","hidden","body","appendChild","render","Promise","reject"],"sources":["../../src/sidebar/TableSaver.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/ponyfill';\nimport dh, {\n Column,\n Table,\n TableData,\n TableViewportSubscription,\n UpdateEventData,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { GridRange, GridRangeIndex, memoizeClear } from '@deephaven/grid';\n\nimport { Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport {\n CancelablePromise,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableSaver');\n\ninterface TableSaverProps {\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(data: TableData): data is UpdateEventData {\n return (data as UpdateEventData).added !== undefined;\n}\n\nfunction assertIsUpdateEventData(\n data: TableData\n): asserts data is UpdateEventData {\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 getDownloadWorker: (): Promise<never> =>\n Promise.reject(new Error('Download worker not provided')),\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.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 // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead\n this.WritableStream = window.WritableStream ?? ponyfillWritableStream;\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.iframes = [];\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 if (this.iframes.length > 0) {\n this.iframes.forEach(iframe => {\n iframe.remove();\n });\n }\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?: Table;\n\n tableSubscription?: TableViewportSubscription;\n\n columns?: Column[];\n\n fileName?: string;\n\n chunkRows?: number;\n\n gridRanges: GridRange[];\n\n gridRangeCounter?: number;\n\n rangedSnapshotsTotal: number[];\n\n rangedSnapshotCounter?: number;\n\n snapshotsTotal: number;\n\n snapshotCounter: number;\n\n snapshotsBuffer: Map<number, UpdateEventData>;\n\n currentSnapshotIndex: number;\n\n snapshotPending: number;\n\n cancelableSnapshots: (CancelablePromise<unknown> | null)[];\n\n // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead\n\n // TODO: Fix type error\n WritableStream = window.WritableStream ?? ponyfillWritableStream;\n // WritableStream: typeof window.WritableStream | typeof ponyfillWritableStream;\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 iframes: HTMLIFrameElement[];\n\n useBlobFallback: boolean;\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n createWriterStream(\n port: MessagePort\n ): 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 this.WritableStream(streamConfig);\n }\n\n startDownload(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: GridRange[],\n modelRanges: GridRange[]\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\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();\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 if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.abort();\n }\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\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\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(): void {\n this.writeTableHeader();\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: UpdateEventData): string {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { 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 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 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 = cellFormat?.formatString != null ? cellFormat : null;\n }\n let cellData = null;\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 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 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\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 this.makeIframe(`${download}`);\n this.writeCsvTable();\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: UpdateEventData,\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 = `download/${src}`;\n iframe.name = 'iframe';\n document.body.appendChild(iframe);\n this.iframes.push(iframe);\n }\n\n render(): null {\n return null;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableSaver.js","names":["PureComponent","WritableStream","ponyfillWritableStream","dh","Log","memoizeClear","FormatterUtils","TableUtils","PromiseUtils","assertNotNull","IrisGridUtils","log","module","UNFORMATTED_DATE_PATTERN","isUpdateEventData","data","added","undefined","assertIsUpdateEventData","Error","TableSaver","csvEscapeString","str","replace","constructor","props","window","isCustomColumnFormatDefined","max","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","includeColumnHeaders","useUnformattedValues","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","iframes","useBlobFallback","componentDidMount","getDownloadWorker","then","sw","info","postMessage","catch","error","warn","componentWillUnmount","length","forEach","iframe","remove","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","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","cancelable","onDownloadCanceled","chunkRows","writeTableHeader","headerString","i","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","formatter","hasNext","next","value","rowIdx","j","cellData","getData","isDateType","i18n","DateTimeFormat","format","TimeZone","getTimeZone","timeZone","toString","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","formatOverride","cellFormat","getFormat","formatString","getFormattedString","currentGridRange","makeCancelable","RangeSet","ofRange","err","val","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","hidden","body","appendChild","render","Promise","reject"],"sources":["../../src/sidebar/TableSaver.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/ponyfill';\nimport dh, {\n Column,\n DateWrapper,\n Table,\n TableData,\n TableViewportSubscription,\n UpdateEventData,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { GridRange, GridRangeIndex, memoizeClear } from '@deephaven/grid';\n\nimport { Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n 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 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(data: TableData): data is UpdateEventData {\n return (data as UpdateEventData).added !== undefined;\n}\n\nfunction assertIsUpdateEventData(\n data: TableData\n): asserts data is UpdateEventData {\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 getDownloadWorker: (): Promise<never> =>\n Promise.reject(new Error('Download worker not provided')),\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 // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead\n this.WritableStream = window.WritableStream ?? ponyfillWritableStream;\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.iframes = [];\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 if (this.iframes.length > 0) {\n this.iframes.forEach(iframe => {\n iframe.remove();\n });\n }\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?: Table;\n\n tableSubscription?: TableViewportSubscription;\n\n columns?: Column[];\n\n fileName?: string;\n\n includeColumnHeaders: boolean;\n\n useUnformattedValues: boolean;\n\n chunkRows?: number;\n\n gridRanges: GridRange[];\n\n gridRangeCounter?: number;\n\n rangedSnapshotsTotal: number[];\n\n rangedSnapshotCounter?: number;\n\n snapshotsTotal: number;\n\n snapshotCounter: number;\n\n snapshotsBuffer: Map<number, UpdateEventData>;\n\n currentSnapshotIndex: number;\n\n snapshotPending: number;\n\n cancelableSnapshots: (CancelablePromise<unknown> | null)[];\n\n // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead\n\n // TODO: Fix type error\n WritableStream = window.WritableStream ?? ponyfillWritableStream;\n // WritableStream: typeof window.WritableStream | typeof ponyfillWritableStream;\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 iframes: HTMLIFrameElement[];\n\n useBlobFallback: boolean;\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n createWriterStream(\n port: MessagePort\n ): 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 this.WritableStream(streamConfig);\n }\n\n startDownload(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: GridRange[],\n modelRanges: 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 if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.abort();\n }\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\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: UpdateEventData): string {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { 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 | 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 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\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: UpdateEventData,\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 = `download/${src}`;\n iframe.name = 'iframe';\n document.body.appendChild(iframe);\n this.iframes.push(iframe);\n }\n\n render(): null {\n return null;\n }\n}\n"],"mappings":";;AAAA,SAASA,aAAT,QAA8B,OAA9B;AACA,SAASC,cAAc,IAAIC,sBAA3B,QAAyD,+BAAzD;AACA,OAAOC,EAAP,MAOO,uBAPP;AAQA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAAoCC,YAApC,QAAwD,iBAAxD;AAEA,SAAoBC,cAApB,EAAoCC,UAApC,QAAsD,wBAAtD;AACA,SAEEC,YAFF,EAGEC,aAHF,QAIO,kBAJP;OAKOC,a;AAEP,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAJ,CAAW,YAAX,CAAZ;AAEA,IAAMC,wBAAwB,sCAA9B;;AAcA,SAASC,iBAAT,CAA2BC,IAA3B,EAAqE;EACnE,OAAQA,IAAD,CAA0BC,KAA1B,KAAoCC,SAA3C;AACD;;AAED,SAASC,uBAAT,CACEH,IADF,EAEmC;EACjC,IAAI,CAACD,iBAAiB,CAACC,IAAD,CAAtB,EAA8B;IAC5B,MAAM,IAAII,KAAJ,CAAU,8BAAV,CAAN;EACD;AACF;;AAED,eAAe,MAAMC,UAAN,SAAyBpB,aAAzB,CAGb;EAkBsB,OAAfqB,eAAe,CAACC,GAAD,EAAsB;IAC1C,mBAAWA,GAAG,CAACC,OAAJ,CAAY,IAAZ,EAAkB,IAAlB,CAAX;EACD;;EAEDC,WAAW,CAACC,KAAD,EAAyB;IAAA;;IAClC,MAAMA,KAAN;;IADkC;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA,iEA0GnBC,MAAM,CAACzB,cA1GY,yEA0GMC,sBA1GN;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA,yDA2HFG,YAAY,CAC5CC,cAAc,CAACqB,2BAD6B,EAE5C;MAAEC,GAAG,EAAE;IAAP,CAF4C,CA3HV;;IAGlC,KAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKC,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BD,IAA5B,CAAiC,IAAjC,CAA9B;IACA,KAAKE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BF,IAA3B,CAAgC,IAAhC,CAA7B;IAEA,KAAKG,KAAL,GAAa,EAAb;IAEA,KAAKC,UAAL,GAAkB,EAAlB;IACA,KAAKC,gBAAL,GAAwB,CAAxB;IACA,KAAKC,oBAAL,GAA4B,EAA5B;IACA,KAAKC,qBAAL,GAA6B,CAA7B;IAEA,KAAKC,oBAAL,GAA4B,IAA5B;IACA,KAAKC,oBAAL,GAA4B,KAA5B;IAEA,KAAKC,cAAL,GAAsB,CAAtB;IACA,KAAKC,eAAL,GAAuB,CAAvB;IACA,KAAKC,eAAL,GAAuB,IAAIC,GAAJ,EAAvB;IAEA,KAAKC,oBAAL,GAA4B,CAA5B;IACA,KAAKC,eAAL,GAAuB,CAAvB;IACA,KAAKC,mBAAL,GAA2B,EAA3B,CAvBkC,CAyBlC;;IACA,KAAK7C,cAAL,6BAAsByB,MAAM,CAACzB,cAA7B,2EAA+CC,sBAA/C,CA1BkC,CA4BlC;IACA;IACA;IACA;;IAEA,KAAK6C,OAAL,GAAe,EAAf;IAEA,KAAKC,eAAL,GAAuB,KAAvB;EACD;;EAEDC,iBAAiB,GAAS;IACxB,IAAM;MAAEC;IAAF,IAAwB,KAAKzB,KAAnC;IACAyB,iBAAiB,GACdC,IADH,CACQC,EAAE,IAAI;MACVzC,GAAG,CAAC0C,IAAJ,CAAS,6BAAT;MACA,KAAKD,EAAL,GAAUA,EAAV;MACA,KAAKA,EAAL,CAAQE,WAAR,CAAoB,MAApB,EAHU,CAGmB;IAC9B,CALH,EAMGC,KANH,CAMSC,KAAK,IAAI;MACd;MACA7C,GAAG,CAAC8C,IAAJ,CAAS,gCAAT,EAA2CD,KAA3C;MACA,KAAKR,eAAL,GAAuB,IAAvB;IACD,CAVH;EAWD;;EAEDU,oBAAoB,GAAS;IAC3B,IAAI,KAAKX,OAAL,CAAaY,MAAb,GAAsB,CAA1B,EAA6B;MAC3B,KAAKZ,OAAL,CAAaa,OAAb,CAAqBC,MAAM,IAAI;QAC7BA,MAAM,CAACC,MAAP;MACD,CAFD;IAGD;;IACD,IAAI,KAAKC,aAAT,EAAwBC,YAAY,CAAC,KAAKD,aAAN,CAAZ;IACxB,IAAI,KAAKE,sBAAT,EAAiCD,YAAY,CAAC,KAAKC,sBAAN,CAAZ;EAClC;;EAmEDC,kBAAkB,CAChBC,IADgB,EAKf;IACD;IACA,IAAMC,OAAO,GAAG,KAAKpB,eAArB;IACA,IAAMqB,MAAM,GAAG,EAAf;IACA,IAAIC,MAA+C,GAAG,IAAtD;;IACA,IAAIF,OAAJ,EAAa;MACXE,MAAM,GAAGC,WAAW,CAACC,SAAZ,CAAsBF,MAAtB,CAA6BxC,IAA7B,CAAkC,IAAIyC,WAAJ,EAAlC,CAAT;IACD;;IACD,IAAM;MAAEE;IAAF,IAAe,IAArB;IAEA,IAAMC,YAAY,GAAG,EAArB;;IAIA,IAAIN,OAAJ,EAAa;MACXM,YAAY,CAACC,KAAb,GAAsBC,KAAD,IAA+C;QAClEnE,aAAa,CAAC6D,MAAD,CAAb;;QACA,IAAIM,KAAK,CAACC,MAAN,KAAiB5D,SAArB,EAAgC;UAC9BoD,MAAM,CAACS,IAAP,CAAYR,MAAM,CAACM,KAAK,CAACC,MAAP,CAAlB;QACD;;QACD,IAAID,KAAK,CAACG,IAAN,KAAe9D,SAAnB,EAA8B;UAC5BoD,MAAM,CAACS,IAAP,CAAYR,MAAM,CAACM,KAAK,CAACG,IAAP,CAAlB;QACD;MACF,CARD;;MASAL,YAAY,CAACM,KAAb,GAAqB,MAAM;QACzBvE,aAAa,CAACgE,QAAD,CAAb;QACA,IAAMQ,IAAI,GAAG,IAAIC,IAAJ,CAASb,MAAT,EAAiB;UAC5Bc,IAAI,EAAE;QADsB,CAAjB,CAAb;QAGA,IAAMC,IAAI,GAAGC,QAAQ,CAACC,aAAT,CAAuB,GAAvB,CAAb;QACAF,IAAI,CAACG,IAAL,GAAYC,GAAG,CAACC,eAAJ,CAAoBR,IAApB,CAAZ;QACAG,IAAI,CAACM,QAAL,GAAgBjB,QAAhB;QACAW,IAAI,CAACO,KAAL;MACD,CATD;;MAUAjB,YAAY,CAACkB,KAAb,GAAqB,MAAM;QACzBzB,IAAI,CAACb,WAAL,CAAiB;UAAEuC,MAAM,EAAE;QAAV,CAAjB;QACA1B,IAAI,CAACa,KAAL;MACD,CAHD;IAID,CAxBD,MAwBO;MACLN,YAAY,CAACC,KAAb,GAAsBC,KAAD,IAAoB;QACvCT,IAAI,CAACb,WAAL,CAAiBsB,KAAjB;MACD,CAFD;;MAGAF,YAAY,CAACM,KAAb,GAAqB,MAAM;QACzBb,IAAI,CAACb,WAAL,CAAiB;UAAEwC,GAAG,EAAE;QAAP,CAAjB;QACA3B,IAAI,CAACa,KAAL;MACD,CAHD;;MAIAN,YAAY,CAACkB,KAAb,GAAqB,MAAM;QACzBzB,IAAI,CAACb,WAAL,CAAiB;UAAEuC,MAAM,EAAE;QAAV,CAAjB;QACA1B,IAAI,CAACa,KAAL;MACD,CAHD;IAID;;IAED,OAAO,IAAI,KAAK/E,cAAT,CAAwByE,YAAxB,CAAP;EACD;;EAEDqB,aAAa,CACXtB,QADW,EAEXuB,WAFW,EAGXC,iBAHW,EAIXC,cAJW,EAKXC,WALW,EAMX7D,oBANW,EAOXC,oBAPW,EAQL;IACN;IACA,IAAM;MAAE6D;IAAF,IAAoB,KAAK3E,KAA/B;;IACA,IAAI2E,aAAJ,EAAmB;MACjB;IACD;;IAED,KAAKC,iBAAL,GAAyBC,IAAI,CAACC,GAAL,EAAzB;IACA5F,GAAG,CAAC0C,IAAJ,6BAA8BoB,QAA9B;IAEA,KAAK+B,KAAL,GAAaR,WAAb;IACA,KAAKS,OAAL,GAAe/F,aAAa,CAACgG,iBAAd,CACbP,WADa,EAEbH,WAAW,CAACS,OAFC,CAAf;IAIA,KAAKR,iBAAL,GAAyBA,iBAAzB;IACA,KAAK/D,UAAL,GAAkBgE,cAAlB;IACA,KAAK5D,oBAAL,GAA4BA,oBAA5B;IACA,KAAKC,oBAAL,GAA4BA,oBAA5B,CAlBM,CAoBN;;IACA,IAAMoE,eAAe,GAAGC,kBAAkB,CAACnC,QAAQ,CAAClD,OAAT,CAAiB,KAAjB,EAAwB,GAAxB,CAAD,CAAlB,CACrBA,OADqB,CACb,QADa,EACHsF,MADG,EAErBtF,OAFqB,CAEb,KAFa,EAEN,KAFM,CAAxB;IAIA,IAAMuF,cAAc,GAAG,IAAIC,cAAJ,EAAvB;IACA,KAAK5C,IAAL,GAAY2C,cAAc,CAACE,KAA3B;IACA,KAAKvC,QAAL,GAAgBA,QAAhB;IACA,KAAKwC,UAAL,GAAkB,KAAK/C,kBAAL,CAAwB,KAAKC,IAA7B,EAAmC+C,SAAnC,EAAlB,CA5BM,CA8BN;;IACA,IAAI,KAAKlE,eAAT,EAA0B;MACxB,KAAKmE,aAAL,CAAmB7E,oBAAnB;MACA;IACD;;IAED,IAAI,KAAKc,EAAT,EAAa;MACX;MACA,KAAKA,EAAL,CAAQE,WAAR,CAAoB;QAAEqD;MAAF,CAApB,EAAyC,CAACG,cAAc,CAACM,KAAhB,CAAzC;IACD;;IACD,KAAKjD,IAAL,CAAUkD,SAAV,GAAsB,KAAKxF,iBAA3B;EACD;;EAEDyF,cAAc,GAAS;IACrB,IAAI,KAAKd,KAAT,EAAgB;MACd,KAAKA,KAAL,CAAWxB,KAAX;IACD;;IACD,IAAI,KAAKiB,iBAAT,EAA4B;MAC1B,KAAKA,iBAAL,CAAuBjB,KAAvB;IACD;;IACD,IAAI,KAAKiC,UAAT,EAAqB;MACnB,KAAKA,UAAL,CAAgBjC,KAAhB;IACD;;IAED,IAAM;MAAEuC;IAAF,IAA0B,KAAK9F,KAArC;IACA8F,mBAAmB;IACnB,KAAKC,eAAL;;IAEA,IAAI,KAAKnB,iBAAL,KAA2BpF,SAA/B,EAA0C;MACxCN,GAAG,CAAC0C,IAAJ,iDAEI,CAACiD,IAAI,CAACC,GAAL,KAAa,KAAKF,iBAAnB,IAAwC,IAF5C;IAKD;EACF;;EAEDoB,cAAc,GAAS;IACrB,IAAI,KAAKjB,KAAT,EAAgB;MACd,KAAKA,KAAL,CAAWxB,KAAX;IACD;;IACD,IAAI,KAAKiB,iBAAT,EAA4B;MAC1B,KAAKA,iBAAL,CAAuBjB,KAAvB;IACD;;IACD,IAAI,KAAKiC,UAAT,EAAqB;MACnB,KAAKA,UAAL,CAAgBrB,KAAhB;IACD;;IAED,KAAK9C,mBAAL,CAAyBc,OAAzB,CAAiC8D,UAAU,IAAI;MAC7C,IAAIA,UAAJ,EAAgB;QACdA,UAAU,CAACnE,KAAX,CAAiB,MAAM,IAAvB;QACAmE,UAAU,CAAC7B,MAAX;MACD;IACF,CALD;IAMA,IAAM;MAAE8B;IAAF,IAAyB,KAAKlG,KAApC;IACAkG,kBAAkB;IAClB,KAAKH,eAAL;EACD;;EAEDA,eAAe,GAAS;IACtB,KAAKhB,KAAL,GAAavF,SAAb;IACA,KAAKgF,iBAAL,GAAyBhF,SAAzB;IACA,KAAKwF,OAAL,GAAexF,SAAf;IACA,KAAK2G,SAAL,GAAiB3G,SAAjB;IAEA,KAAKiB,UAAL,GAAkB,EAAlB;IACA,KAAKC,gBAAL,GAAwB,CAAxB;IACA,KAAKC,oBAAL,GAA4B,EAA5B;IACA,KAAKC,qBAAL,GAA6B,CAA7B;IAEA,KAAKC,oBAAL,GAA4B,IAA5B;IACA,KAAKC,oBAAL,GAA4B,KAA5B;IAEA,KAAKC,cAAL,GAAsB,CAAtB;IACA,KAAKC,eAAL,GAAuB,CAAvB;IACA,KAAKC,eAAL,GAAuB,IAAIC,GAAJ,EAAvB;IAEA,KAAKC,oBAAL,GAA4B,CAA5B;IACA,KAAKC,eAAL,GAAuB,CAAvB;IACA,KAAKC,mBAAL,GAA2B,EAA3B;;IAEA,IAAI,KAAKiB,aAAL,IAAsB,IAA1B,EAAgC;MAC9BC,YAAY,CAAC,KAAKD,aAAN,CAAZ;IACD;;IAED,IAAI,KAAKE,sBAAL,IAA+B,IAAnC,EAAyC;MACvCD,YAAY,CAAC,KAAKC,sBAAN,CAAZ;IACD;;IACD,KAAKF,aAAL,GAAqB9C,SAArB;IACA,KAAKgD,sBAAL,GAA8BhD,SAA9B;EACD;;EAEDe,qBAAqB,GAAS;IAC5BrB,GAAG,CAAC0C,IAAJ,CAAS,mBAAT;IACA,KAAKoE,cAAL;EACD;;EAEDI,gBAAgB,GAAS;IAAA;;IACvB,IAAIC,YAAY,GAAG,EAAnB;;IACA,IAAI,KAAKrB,OAAT,EAAkB;MAChB,KAAK,IAAIsB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKtB,OAAL,CAAa9C,MAAjC,EAAyCoE,CAAC,IAAI,CAA9C,EAAiD;QAC/CD,YAAY,IAAI,KAAKrB,OAAL,CAAasB,CAAb,EAAgBC,IAAhC;QACAF,YAAY,IAAIC,CAAC,KAAK,KAAKtB,OAAL,CAAa9C,MAAb,GAAsB,CAA5B,GAAgC,IAAhC,GAAuC,GAAvD;MACD;IACF;;IACD,yBAAKsD,UAAL,sEAAiBtC,KAAjB,CAAuB;MAAEE,MAAM,EAAEiD;IAAV,CAAvB,EAAiD3E,IAAjD,CAAsD,MAAM,IAA5D;EACD;;EAED8E,mBAAmB,GAAS;IAC1B,IAAI,KAAKxB,OAAL,IAAgB,KAAKvE,UAAL,IAAmB,IAAvC,EAA6C;MAC3C,KAAK0F,SAAL,GAAiBM,IAAI,CAACC,KAAL,CACf/G,UAAU,CAACgH,mBAAX,GAAiC,KAAK3B,OAAL,CAAa9C,MAD/B,CAAjB;MAIA,KAAKvB,oBAAL,GAA4B,KAAKF,UAAL,CAAgBmG,GAAhB,CAAqBC,KAAD,IAAsB;QACpE7H,aAAa,CAAC6H,KAAK,CAACC,MAAP,CAAb;QACA9H,aAAa,CAAC6H,KAAK,CAACE,QAAP,CAAb;QACA/H,aAAa,CAAC,KAAKmH,SAAN,CAAb;QAEA,OAAOM,IAAI,CAACO,IAAL,CAAU,CAACH,KAAK,CAACC,MAAN,GAAeD,KAAK,CAACE,QAArB,GAAgC,CAAjC,IAAsC,KAAKZ,SAArD,CAAP;MACD,CAN2B,CAA5B;MAOA,KAAKpF,cAAL,GAAsB,KAAKJ,oBAAL,CAA0BsG,MAA1B,CACpB,CAACC,KAAD,EAAgBC,aAAhB,KAA0CD,KAAK,GAAGC,aAD9B,CAAtB;MAIAjI,GAAG,CAAC0C,IAAJ,2CAAmD,KAAKb,cAAxD;MAEA,KAAKqG,YAAL,CACEX,IAAI,CAACY,GAAL,CAAS1H,UAAU,CAAC2H,oBAApB,EAA0C,KAAKvG,cAA/C,CADF;IAGD;EACF;;EAED2E,aAAa,CAAC7E,oBAAD,EAAsC;IACjD,IAAIA,oBAAJ,EAA0B;MACxB,KAAKuF,gBAAL;IACD;;IACD,KAAKI,mBAAL;EACD;;EAEDe,aAAa,CACXC,aADW,EAEXC,gBAFW,EAGXC,cAHW,EAIL;IACN,IAAI,KAAKvG,oBAAL,KAA8BqG,aAA9B,IAA+C,KAAKhC,UAAxD,EAAoE;MAClE,OAAO,KAAKvE,eAAL,CAAqB0G,GAArB,CAAyB,KAAKxG,oBAA9B,CAAP,EAA4D;QAC1D,IAAMyG,CAAC,GAAG,KAAK3G,eAAL,CAAqB4G,GAArB,CAAyB,KAAK1G,oBAA9B,CAAV;QACAnC,aAAa,CAAC4I,CAAD,CAAb;QACA,KAAKpC,UAAL,CAAgBtC,KAAhB,CAAsB;UACpBI,IAAI,EAAE,KAAKwE,sBAAL,CAA4BF,CAA5B;QADc,CAAtB;QAGA,KAAK3G,eAAL,CAAqB8G,MAArB,CAA4B,KAAK5G,oBAAjC;QACA,KAAKA,oBAAL,IAA6B,CAA7B;QAEA,KAAK6G,sBAAL,CAA4BR,aAA5B;MACD;;MACD,IACE,KAAKzG,cAAL,IACA,KAAKI,oBAAL,IAA6B,KAAKJ,cAFpC,EAGE;QACA,KAAK8E,cAAL;QACA;MACD;IACF;;IAED,IACE,KAAK7E,eAAL,IACA,KAAKD,cADL,IAEA,KAAKC,eAAL,GAAuB,KAAKD,cAH9B,EAIE;MACA7B,GAAG,CAAC+I,MAAJ,0CAEyB,KAAKvH,gBAF9B,+CAG0B,KAAKM,eAH/B,sDAIiC,KAAKJ,qBAJtC,0CAKqB,KAAKQ,eAL1B,kCAMa,KAAKH,eAAL,CAAqBiH,IANlC,8BAOWzB,IAAI,CAACY,GAAL,CACP1H,UAAU,CAAC2H,oBAAX,GACE,KAAKrG,eAAL,CAAqBiH,IADvB,GAEE,KAAK9G,eAHA,EAIP,KAAKL,cAAL,GAAsB,KAAKC,eAJpB,CAPX;MAeA,KAAKoG,YAAL,CACEX,IAAI,CAACY,GAAL,CACE1H,UAAU,CAAC2H,oBAAX,GACE,KAAKrG,eAAL,CAAqBiH,IADvB,GAEE,KAAK9G,eAHT,EAIE,KAAKL,cAAL,GAAsB,KAAKC,eAJ7B,CADF;IAQD;EACF;;EAEDgH,sBAAsB,CAACR,aAAD,EAAsC;IAC1D,IACEA,aAAa,IAAI,IAAjB,IACA,KAAKzG,cAAL,IAAuB,IADvB,IAEA,KAAK6D,iBAAL,IAA0B,IAH5B,EAIE;MACA,IAAM;QAAEuD;MAAF,IAA+B,KAAKnI,KAA1C;MACA,IAAMoI,gBAAgB,GAAG3B,IAAI,CAACC,KAAL,CACtBc,aAAa,GAAG,GAAjB,GAAwB,KAAKzG,cADN,CAAzB;MAGA,IAAMsH,YAAY,GAChBb,aAAa,GAAG,CAAhB,GACIf,IAAI,CAACC,KAAL,CACG,CAAC7B,IAAI,CAACC,GAAL,KAAa,KAAKF,iBAAnB,KACE,KAAK7D,cAAL,GAAsByG,aADxB,CAAD,GAEEA,aAFF,GAGE,IAJJ,CADJ,GAOI,IARN;MAUAW,wBAAwB,CAACC,gBAAD,EAAmBC,YAAnB,CAAxB;IACD;EACF;;EAEDP,sBAAsB,CAACQ,QAAD,EAAoC;IACxD,IAAIC,SAAS,GAAG,EAAhB;IACA,IAAMC,gBAAgB,GAAGF,QAAQ,CAAC/I,KAAT,CAAekJ,QAAf,EAAzB;IACA,IAAM;MAAEC;IAAF,IAAgB,KAAK1I,KAA3B;IAEA,IAAMsD,IAAI,GAAG,EAAb;;IACA,OAAOkF,gBAAgB,CAACG,OAAjB,EAAP,EAAmC;MACjCrF,IAAI,CAACD,IAAL,CAAUmF,gBAAgB,CAACI,IAAjB,GAAwBC,KAAlC;IACD;;IAED7J,aAAa,CAAC,KAAKgG,OAAN,CAAb;IAEA,IAAM;MAAElE;IAAF,IAA2B,IAAjC;;IACA,KAAK,IAAIwF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhD,IAAI,CAACpB,MAAzB,EAAiCoE,CAAC,IAAI,CAAtC,EAAyC;MACvC,IAAMwC,MAAM,GAAGxF,IAAI,CAACgD,CAAD,CAAnB;;MACA,KAAK,IAAIyC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/D,OAAL,CAAa9C,MAAjC,EAAyC6G,CAAC,IAAI,CAA9C,EAAiD;QAAA;;QAC/C,IAAM;UAAErF,IAAF;UAAQ6C;QAAR,IAAiB,KAAKvB,OAAL,CAAa+D,CAAb,CAAvB;QACA,IAAIC,QAAQ,GAAG,IAAf;;QACA,IAAIlI,oBAAJ,EAA0B;UAAA;;UACxB,IAAI+H,KAAK,wBAAGP,QAAQ,CAACW,OAAT,CAAiBH,MAAjB,EAAyB,KAAK9D,OAAL,CAAa+D,CAAb,CAAzB,CAAH,iEAAgD,EAAzD;;UACA,IAAIF,KAAK,KAAK,EAAV,IAAgB/J,UAAU,CAACoK,UAAX,CAAsBxF,IAAtB,CAApB,EAAiD;YAC/C;YACAmF,KAAK,GAAGnK,EAAE,CAACyK,IAAH,CAAQC,cAAR,CAAuBC,MAAvB,CACNjK,wBADM,EAENyJ,KAFM,EAGNnK,EAAE,CAACyK,IAAH,CAAQG,QAAR,CAAiBC,WAAjB,CAA6Bb,SAAS,CAACc,QAAvC,CAHM,CAAR;UAKD;;UACDR,QAAQ,GAAGH,KAAK,CAACY,QAAN,EAAX;QACD,CAXD,MAWO;UACL,IAAMC,qBAAqB,GAAG,KAAKC,+BAAL,CAC5BjB,SAD4B,EAE5BnC,IAF4B,EAG5B7C,IAH4B,CAA9B;UAKA,IAAIkG,cAAc,GAAG,IAArB;;UACA,IAAI,CAACF,qBAAL,EAA4B;YAC1B,IAAMG,UAAU,GAAGvB,QAAQ,CAACwB,SAAT,CAAmBhB,MAAnB,EAA2B,KAAK9D,OAAL,CAAa+D,CAAb,CAA3B,CAAnB;YACAa,cAAc,GACZ,CAAAC,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEE,YAAZ,KAA4B,IAA5B,GAAmCF,UAAnC,GAAgD,IADlD;UAED;;UACD,IAAID,cAAJ,EAAoB;YAClBZ,QAAQ,GAAGN,SAAS,CAACsB,kBAAV,CACT1B,QAAQ,CAACW,OAAT,CAAiBH,MAAjB,EAAyB,KAAK9D,OAAL,CAAa+D,CAAb,CAAzB,CADS,EAETrF,IAFS,EAGT6C,IAHS,EAITqD,cAJS,CAAX;UAMD,CAPD,MAOO;YACLZ,QAAQ,GAAGN,SAAS,CAACsB,kBAAV,CACT1B,QAAQ,CAACW,OAAT,CAAiBH,MAAjB,EAAyB,KAAK9D,OAAL,CAAa+D,CAAb,CAAzB,CADS,EAETrF,IAFS,EAGT6C,IAHS,CAAX;UAKD;QACF;;QACDgC,SAAS,IAAI5I,UAAU,CAACC,eAAX,CAA2BoJ,QAA3B,CAAb;QACAT,SAAS,IAAIQ,CAAC,KAAK,uBAAK/D,OAAL,gEAAc9C,MAAd,IAAuB,CAA7B,GAAiC,IAAjC,GAAwC,GAArD;MACD;IACF;;IAED,OAAOqG,SAAP;EACD;;EAEDnB,YAAY,CAACQ,CAAD,EAAkB;IAAA;;IAC5B,IAAIA,CAAC,IAAI,CAAT,EAAY;MACV;IACD;;IACD5I,aAAa,CAAC,KAAK0B,gBAAN,CAAb;IACA,IAAI4F,CAAC,GAAG,CAAR;IACA,IAAI2D,gBAAgB,GAAG,KAAKxJ,UAAL,CAAgB,KAAKC,gBAArB,CAAvB;IAEA1B,aAAa,CAAC,KAAKwF,iBAAN,CAAb;IACAxF,aAAa,CAAC,KAAKgG,OAAN,CAAb;;IAT4B;MAW1BhG,aAAa,CAACiL,gBAAD,CAAb;MACAjL,aAAa,CAACiL,gBAAgB,CAAClD,QAAlB,CAAb;MACA/H,aAAa,CAACiL,gBAAgB,CAACnD,MAAlB,CAAb;MACA9H,aAAa,CAAC,KAAI,CAAC4B,qBAAN,CAAb;MACA5B,aAAa,CAAC,KAAI,CAACmH,SAAN,CAAb;MACA,IAAMsB,gBAAgB,GACpBwC,gBAAgB,CAAClD,QAAjB,GAA4B,KAAI,CAACnG,qBAAL,GAA6B,KAAI,CAACuF,SADhE;MAEA,IAAMuB,cAAc,GAAGjB,IAAI,CAACY,GAAL,CACrBI,gBAAgB,GAAG,KAAI,CAACtB,SAAxB,GAAoC,CADf,EAErB8D,gBAAgB,CAACnD,MAFI,CAAvB;MAKA,IAAMU,aAAa,GAAG,KAAI,CAACxG,eAA3B;;MACA,KAAI,CAACK,mBAAL,CAAyBgC,IAAzB,CACEtE,YAAY,CAACmL,cAAb,CACE,KAAI,CAAC1F,iBAAL,CACG8D,QADH,CAEI5J,EAAE,CAACyL,QAAH,CAAYC,OAAZ,CAAoB3C,gBAApB,EAAsCC,cAAtC,CAFJ,EAGI,KAAI,CAAC1C,OAHT,EAKGtD,IALH,CAKQ4G,QAAQ,IAAI;QAChB7I,uBAAuB,CAAC6I,QAAD,CAAvB;;QACA,KAAI,CAAChI,sBAAL,CACEgI,QADF,EAEEd,aAFF,EAGEC,gBAHF,EAIEC,cAJF;;QAOA,OAAOF,aAAP;MACD,CAfH,EAgBG1F,KAhBH,CAgBSuI,GAAG,IAAI;QACZnL,GAAG,CAAC6C,KAAJ,CAAUsI,GAAV;MACD,CAlBH,CADF,EAoBEC,GAAG,IAAI;QACLpL,GAAG,CAAC0C,IAAJ,oBAAqB0I,GAArB;MACD,CAtBH,CADF;;MA2BA,KAAI,CAAC1J,qBAAL,IAA8B,CAA9B;MACA,KAAI,CAACI,eAAL,IAAwB,CAAxB;MACA,KAAI,CAACI,eAAL,IAAwB,CAAxB;;MAEA,IACE,KAAI,CAACR,qBAAL,IACA,KAAI,CAACD,oBAAL,CAA0B,KAAI,CAACD,gBAA/B,CAFF,EAGE;QACA,KAAI,CAACA,gBAAL,IAAyB,CAAzB;QACA,KAAI,CAACE,qBAAL,GAA6B,CAA7B;QACAqJ,gBAAgB,GAAG,KAAI,CAACxJ,UAAL,CAAgB,KAAI,CAACC,gBAArB,CAAnB;MACD;;MACD4F,CAAC,IAAI,CAAL;IA/D0B;;IAU5B,OAAOA,CAAC,GAAGsB,CAAX,EAAc;MAAA;IAsDb;EACF;;EAEDxH,iBAAiB,OAKP;IAAA,IALQ;MAChBd;IADgB,CAKR;IACR,IAAM;MAAE2E,QAAF;MAAYsG;IAAZ,IAAsCjL,IAA5C;;IACA,IAAI,KAAKiC,eAAT,EAA0B;MACxB;IACD;;IACD,IAAI0C,QAAQ,IAAI,IAAhB,EAAsB;MACpB,IAAM;QAAEpD;MAAF,IAA2B,IAAjC;MACA,KAAK2J,UAAL,WAAmBvG,QAAnB;MACA,KAAKyB,aAAL,CAAmB7E,oBAAnB;IACD;;IACD,IAAI0J,qBAAqB,IAAI,IAA7B,EAAmC;MACjC,IAAI,CAAC,KAAKhJ,eAAV,EAA2B;QACzB,IAAI,KAAKe,aAAL,IAAsB,IAA1B,EAAgC;UAC9BC,YAAY,CAAC,KAAKD,aAAN,CAAZ;QACD;;QACD,KAAKA,aAAL,GAAqBmI,UAAU,CAC7B,KAAKlK,qBADwB,EAE7BZ,UAAU,CAAC+K,cAFkB,CAA/B;MAID;IACF;EACF;;EAEDpK,sBAAsB,CACpBgI,QADoB,EAEpBd,aAFoB,EAGpBC,gBAHoB,EAIpBC,cAJoB,EAKd;IACN;IACA,KAAKlF,sBAAL,GAA8BiI,UAAU,CAAC,MAAM;MAC7C,KAAKxJ,eAAL,CAAqB0J,GAArB,CAAyBnD,aAAzB,EAAwCc,QAAxC;MACA,KAAKlH,eAAL,IAAwB,CAAxB;MACA,KAAKmG,aAAL,CAAmBC,aAAnB,EAAkCC,gBAAlC,EAAoDC,cAApD;MACA,KAAKrG,mBAAL,CAAyBmG,aAAzB,IAA0C,IAA1C;IACD,CALuC,EAKrC7H,UAAU,CAACiL,wBAL0B,CAAxC;EAMD;;EAEDJ,UAAU,CAACK,GAAD,EAAoB;IAC5B;IACA,IAAMzI,MAAM,GAAGwB,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf;IACAzB,MAAM,CAAC0I,MAAP,GAAgB,IAAhB;IACA1I,MAAM,CAACyI,GAAP,sBAAyBA,GAAzB;IACAzI,MAAM,CAACmE,IAAP,GAAc,QAAd;IACA3C,QAAQ,CAACmH,IAAT,CAAcC,WAAd,CAA0B5I,MAA1B;IACA,KAAKd,OAAL,CAAa+B,IAAb,CAAkBjB,MAAlB;EACD;;EAED6I,MAAM,GAAS;IACb,OAAO,IAAP;EACD;;AA/oBD;;gBAHmBtL,U,yBAIU,I;;gBAJVA,U,0BAMW,C;;gBANXA,U,oBAQK,I;;gBARLA,U,8BAUe,C;;gBAVfA,U,kBAYG;EACpB8B,iBAAiB,EAAE,MACjByJ,OAAO,CAACC,MAAR,CAAe,IAAIzL,KAAJ,CAAU,8BAAV,CAAf,CAFkB;EAGpBiF,aAAa,EAAE,KAHK;EAIpBmB,mBAAmB,EAAE,MAAYtG,SAJb;EAKpB0G,kBAAkB,EAAE,MAAY1G,SALZ;EAMpB2I,wBAAwB,EAAE,MAAY3I;AANlB,C"}
@@ -2,6 +2,7 @@ import React, { ChangeEvent, Component, ReactElement } from 'react';
2
2
  import { ModelIndex, ModelSizeMap, MoveOperation, VisibleIndex } from '@deephaven/grid';
3
3
  import { DragStart, DropResult } from 'react-beautiful-dnd';
4
4
  import memoize from 'memoizee';
5
+ import type { Column } from '@deephaven/jsapi-shim';
5
6
  import './VisibilityOrderingBuilder.scss';
6
7
  import IrisGridModel from '../IrisGridModel';
7
8
  import { ColumnName } from '../CommonTypes';
@@ -68,8 +69,8 @@ declare class VisibilityOrderingBuilder extends Component<VisibilityOrderingBuil
68
69
  addColumnToSelected(columnsToBeAdded: ModelIndex[], addToExisting?: boolean): void;
69
70
  removeColumnFromSelected(modelIndex: ModelIndex): void;
70
71
  makeVisibilityOrderingList(): ReactElement[];
71
- getFirstMovableIndex: ((model: IrisGridModel, columns: any) => number | null) & memoize.Memoized<(model: IrisGridModel, columns: any) => number | null>;
72
- getLastMovableIndex: ((model: IrisGridModel, columns: any) => number | null) & memoize.Memoized<(model: IrisGridModel, columns: any) => number | null>;
72
+ getFirstMovableIndex: ((model: IrisGridModel, columns: Column[]) => number | null) & memoize.Memoized<(model: IrisGridModel, columns: Column[]) => number | null>;
73
+ getLastMovableIndex: ((model: IrisGridModel, columns: Column[]) => number | null) & memoize.Memoized<(model: IrisGridModel, columns: Column[]) => number | null>;
73
74
  renderImmovableItem: ((columnName: ColumnName) => ReactElement) & memoize.Memoized<(columnName: ColumnName) => ReactElement>;
74
75
  renderVisibilityOrderingItem: ((columnName: ColumnName, modelIndex: ModelIndex, visibleIndex: VisibleIndex, isHidden: boolean, isSelected: boolean, isDragging: boolean, isDragged: boolean, columnsDragged: number | null) => JSX.Element) & memoize.Memoized<(columnName: ColumnName, modelIndex: ModelIndex, visibleIndex: VisibleIndex, isHidden: boolean, isSelected: boolean, isDragging: boolean, isDragged: boolean, columnsDragged: number | null) => JSX.Element>;
75
76
  render(): ReactElement;
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/VisibilityOrderingBuilder.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VisibilityOrderingBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/VisibilityOrderingBuilder.tsx"],"names":[],"mappings":"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"}