@deephaven/console 0.19.2-beta.0 → 0.19.2-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Console.d.ts +2 -2
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js +7 -7
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleMenu.d.ts.map +1 -1
- package/dist/ConsoleMenu.js +6 -6
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/command-history/CommandHistoryActions.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryActions.js +2 -2
- package/dist/command-history/CommandHistoryActions.js.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.js +9 -8
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
- package/dist/common/Code.js +1 -1
- package/dist/common/Code.js.map +1 -1
- package/dist/common/ConsoleUtils.js +2 -2
- package/dist/common/ConsoleUtils.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.d.ts.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js +5 -5
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/csv/CsvInputBar.d.ts.map +1 -1
- package/dist/csv/CsvInputBar.js +9 -9
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.d.ts +1 -1
- package/dist/csv/CsvOverlay.d.ts.map +1 -1
- package/dist/csv/CsvOverlay.js +7 -7
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/csv/CsvParser.js +1 -1
- package/dist/csv/CsvParser.js.map +1 -1
- package/dist/csv/CsvTypeParser.js +2 -2
- package/dist/csv/CsvTypeParser.js.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts +1 -1
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js +4 -4
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/notebook/ScriptEditor.d.ts.map +1 -1
- package/dist/notebook/ScriptEditor.js +8 -8
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/package.json +11 -11
- package/dist/common/index.d.js +0 -3
- package/dist/common/index.d.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandHistoryItemTooltip.js","names":["React","Component","debounce","memoize","LoadingSpinner","TimeUtils","FontAwesomeIcon","vsWarning","Code","LOAD_DATA_DEBOUNCE","MAX_NUMBER_OF_LINES","CommandHistoryItemTooltip","getTimeString","startTime","endTime","deltaTime","Math","round","Date","valueOf","formatElapsedTime","constructor","props","commandHistoryStorage","item","language","id","cleanup","listenItem","handleUpdate","handleError","name","split","join","max","bind","handleTimeout","state","currentTime","now","componentDidMount","loadData","componentDidUpdate","prevProps","prevState","data","timer","result","startTimer","stopTimer","componentWillUnmount","cancel","setInterval","clearInterval","undefined","updateTime","setState","error","onUpdate","render","errorMessage","timeString","previewText","getPreviewText","length"],"sources":["../../src/command-history/CommandHistoryItemTooltip.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport debounce from 'lodash.debounce';\nimport memoize from 'memoizee';\nimport { LoadingSpinner } from '@deephaven/components';\nimport { TimeUtils } from '@deephaven/utils';\nimport { StorageListenerRemover } from '@deephaven/storage';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsWarning } from '@deephaven/icons';\nimport Code from '../common/Code';\nimport './CommandHistoryItemTooltip.scss';\nimport CommandHistoryStorage, {\n CommandHistoryStorageData,\n CommandHistoryStorageItem,\n} from './CommandHistoryStorage';\n\ninterface CommandHistoryItemTooltipProps {\n item: CommandHistoryStorageItem;\n language: string;\n onUpdate?: (data: CommandHistoryStorageData | null) => void;\n commandHistoryStorage: CommandHistoryStorage;\n}\n\ninterface CommandHistoryItemTooltipState {\n currentTime: number;\n data?: CommandHistoryStorageData;\n error?: string;\n}\n\nconst LOAD_DATA_DEBOUNCE = 250;\nconst MAX_NUMBER_OF_LINES = 2500;\n\nexport class CommandHistoryItemTooltip extends Component<\n CommandHistoryItemTooltipProps,\n CommandHistoryItemTooltipState\n> {\n static defaultProps = {\n onUpdate: (): void => undefined,\n };\n\n static getTimeString(\n startTime: string | undefined,\n endTime: string | number\n ): string | null {\n if (!startTime || !endTime) {\n return null;\n }\n\n const deltaTime = Math.round(\n (new Date(endTime).valueOf() - new Date(startTime).valueOf()) / 1000\n );\n\n if (deltaTime < 1) return '<1s';\n\n return TimeUtils.formatElapsedTime(deltaTime);\n }\n\n constructor(props: CommandHistoryItemTooltipProps) {\n super(props);\n\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n\n this.state = {\n currentTime: Date.now(),\n };\n }\n\n componentDidMount(): void {\n this.loadData();\n }\n\n componentDidUpdate(\n prevProps: CommandHistoryItemTooltipProps,\n prevState: CommandHistoryItemTooltipState\n ): void {\n const { data } = this.state;\n\n if (\n this.timer == null &&\n !data?.result &&\n data?.startTime &&\n !data?.endTime\n ) {\n this.startTimer();\n } else if (\n (data?.result && !prevState.data?.result) ||\n (data?.endTime && !prevState.data?.endTime)\n ) {\n // Command complete\n this.stopTimer();\n }\n }\n\n componentWillUnmount(): void {\n this.loadData.cancel();\n if (this.cleanup != null) {\n this.cleanup();\n }\n this.stopTimer();\n }\n\n timer?: NodeJS.Timer;\n\n cleanup?: StorageListenerRemover;\n\n loadData = debounce((): void => {\n const { commandHistoryStorage, item, language } = this.props;\n const { id } = item;\n this.cleanup = commandHistoryStorage.listenItem(\n language,\n id,\n this.handleUpdate,\n this.handleError\n );\n }, LOAD_DATA_DEBOUNCE);\n\n startTimer(): void {\n this.stopTimer();\n\n this.timer = setInterval(this.handleTimeout, 1000);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n updateTime(): void {\n this.setState({\n currentTime: Date.now(),\n });\n }\n\n handleError(error: string): void {\n this.setState({ error: `${error}` });\n }\n\n handleUpdate(item: CommandHistoryStorageItem): void {\n const { data } = item ?? {};\n this.setState({ data });\n\n const { onUpdate } = this.props;\n onUpdate?.(data);\n }\n\n handleTimeout(): void {\n this.updateTime();\n }\n\n getPreviewText = memoize(\n name => name.split('\\n', MAX_NUMBER_OF_LINES).join('\\n'),\n { max: 1 }\n );\n\n render(): ReactElement {\n const {\n item: { name },\n language,\n } = this.props;\n const { currentTime, data, error } = this.state;\n const { result, startTime, endTime } = data ?? {};\n\n const errorMessage = result?.error ?? error;\n\n const timeString = CommandHistoryItemTooltip.getTimeString(\n startTime,\n endTime || currentTime\n );\n\n // colorizing in monaco is mostly a function of the number of lines,\n // it gets real slow after a few thousand lines. Truncate the tooltip\n // to avoid UI locks. The full command is still inserted.\n const previewText = this.getPreviewText(name);\n\n return (\n <div className=\"command-history-item-tooltip\">\n <div className=\"scroll-container\">\n <Code language={language}>{previewText}</Code>\n {previewText.length < name.length && <p>Preview Truncated...</p>}\n </div>\n <div className=\"result-info\">\n <div className=\"d-flex justify-content-between\">\n {errorMessage && (\n <div className=\"text-danger mr-1\">\n <FontAwesomeIcon icon={vsWarning} /> Executed with errors\n </div>\n )}\n <div className=\"time-wrapper\">\n Elapsed time:{' '}\n {timeString ? (\n <span className=\"time-string\">{timeString}</span>\n ) : (\n <LoadingSpinner />\n )}\n </div>\n </div>\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistoryItemTooltip;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CommandHistoryItemTooltip.js","names":["React","Component","debounce","memoize","LoadingSpinner","TimeUtils","FontAwesomeIcon","vsWarning","Code","LOAD_DATA_DEBOUNCE","MAX_NUMBER_OF_LINES","CommandHistoryItemTooltip","getTimeString","startTime","endTime","deltaTime","Math","round","Date","valueOf","formatElapsedTime","constructor","props","commandHistoryStorage","item","language","id","cleanup","listenItem","handleUpdate","handleError","name","split","join","max","bind","handleTimeout","state","currentTime","now","componentDidMount","loadData","componentDidUpdate","prevProps","prevState","data","timer","result","Boolean","undefined","startTimer","stopTimer","componentWillUnmount","cancel","setInterval","clearInterval","updateTime","setState","error","onUpdate","render","errorMessage","timeString","previewText","getPreviewText","hasTimeString","length"],"sources":["../../src/command-history/CommandHistoryItemTooltip.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport debounce from 'lodash.debounce';\nimport memoize from 'memoizee';\nimport { LoadingSpinner } from '@deephaven/components';\nimport { TimeUtils } from '@deephaven/utils';\nimport { StorageListenerRemover } from '@deephaven/storage';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsWarning } from '@deephaven/icons';\nimport Code from '../common/Code';\nimport './CommandHistoryItemTooltip.scss';\nimport CommandHistoryStorage, {\n CommandHistoryStorageData,\n CommandHistoryStorageItem,\n} from './CommandHistoryStorage';\n\ninterface CommandHistoryItemTooltipProps {\n item: CommandHistoryStorageItem;\n language: string;\n onUpdate?: (data: CommandHistoryStorageData | null) => void;\n commandHistoryStorage: CommandHistoryStorage;\n}\n\ninterface CommandHistoryItemTooltipState {\n currentTime: number;\n data?: CommandHistoryStorageData;\n error?: string;\n}\n\nconst LOAD_DATA_DEBOUNCE = 250;\nconst MAX_NUMBER_OF_LINES = 2500;\n\nexport class CommandHistoryItemTooltip extends Component<\n CommandHistoryItemTooltipProps,\n CommandHistoryItemTooltipState\n> {\n static defaultProps = {\n onUpdate: (): void => undefined,\n };\n\n static getTimeString(\n startTime: string | undefined,\n endTime: string | number\n ): string | null {\n if (startTime == null || endTime === '' || endTime === 0) {\n return null;\n }\n\n const deltaTime = Math.round(\n (new Date(endTime).valueOf() - new Date(startTime).valueOf()) / 1000\n );\n\n if (deltaTime < 1) return '<1s';\n\n return TimeUtils.formatElapsedTime(deltaTime);\n }\n\n constructor(props: CommandHistoryItemTooltipProps) {\n super(props);\n\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n\n this.state = {\n currentTime: Date.now(),\n };\n }\n\n componentDidMount(): void {\n this.loadData();\n }\n\n componentDidUpdate(\n prevProps: CommandHistoryItemTooltipProps,\n prevState: CommandHistoryItemTooltipState\n ): void {\n const { data } = this.state;\n\n if (\n this.timer == null &&\n !data?.result &&\n Boolean(data?.startTime) &&\n !(data == null || data.endTime === undefined)\n ) {\n this.startTimer();\n } else if (\n (data?.result && !prevState.data?.result) ||\n (Boolean(data?.endTime) &&\n !(prevState.data == null || prevState.data.endTime === undefined))\n ) {\n // Command complete\n this.stopTimer();\n }\n }\n\n componentWillUnmount(): void {\n this.loadData.cancel();\n if (this.cleanup != null) {\n this.cleanup();\n }\n this.stopTimer();\n }\n\n timer?: NodeJS.Timer;\n\n cleanup?: StorageListenerRemover;\n\n loadData = debounce((): void => {\n const { commandHistoryStorage, item, language } = this.props;\n const { id } = item;\n this.cleanup = commandHistoryStorage.listenItem(\n language,\n id,\n this.handleUpdate,\n this.handleError\n );\n }, LOAD_DATA_DEBOUNCE);\n\n startTimer(): void {\n this.stopTimer();\n\n this.timer = setInterval(this.handleTimeout, 1000);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n updateTime(): void {\n this.setState({\n currentTime: Date.now(),\n });\n }\n\n handleError(error: string): void {\n this.setState({ error: `${error}` });\n }\n\n handleUpdate(item: CommandHistoryStorageItem): void {\n const { data } = item ?? {};\n this.setState({ data });\n\n const { onUpdate } = this.props;\n onUpdate?.(data);\n }\n\n handleTimeout(): void {\n this.updateTime();\n }\n\n getPreviewText = memoize(\n name => name.split('\\n', MAX_NUMBER_OF_LINES).join('\\n'),\n { max: 1 }\n );\n\n render(): ReactElement {\n const {\n item: { name },\n language,\n } = this.props;\n const { currentTime, data, error } = this.state;\n const { result, startTime, endTime } = data ?? {};\n\n const errorMessage = result?.error ?? error;\n\n const timeString = CommandHistoryItemTooltip.getTimeString(\n startTime,\n endTime ?? currentTime\n );\n\n // colorizing in monaco is mostly a function of the number of lines,\n // it gets real slow after a few thousand lines. Truncate the tooltip\n // to avoid UI locks. The full command is still inserted.\n const previewText = this.getPreviewText(name);\n\n const hasTimeString = Boolean(timeString);\n return (\n <div className=\"command-history-item-tooltip\">\n <div className=\"scroll-container\">\n <Code language={language}>{previewText}</Code>\n {previewText.length < name.length && <p>Preview Truncated...</p>}\n </div>\n <div className=\"result-info\">\n <div className=\"d-flex justify-content-between\">\n {Boolean(errorMessage) && (\n <div className=\"text-danger mr-1\">\n <FontAwesomeIcon icon={vsWarning} /> Executed with errors\n </div>\n )}\n <div className=\"time-wrapper\">\n Elapsed time:{' '}\n {hasTimeString ? (\n <span className=\"time-string\">{timeString}</span>\n ) : (\n <LoadingSpinner />\n )}\n </div>\n </div>\n {Boolean(errorMessage) && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistoryItemTooltip;\n"],"mappings":"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"}
|
package/dist/common/Code.js
CHANGED
package/dist/common/Code.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Code.js","names":["React","Component","monaco","Code","constructor","props","container","componentDidMount","colorize","children","editor","colorizeElement","theme","render","language","pointerEvents"],"sources":["../../src/common/Code.tsx"],"sourcesContent":["import React, { Component, ReactElement, ReactNode } from 'react';\nimport * as monaco from 'monaco-editor';\n\ninterface CodeProps {\n children: ReactNode;\n language: string;\n}\n\nclass Code extends Component<CodeProps, Record<string, never>> {\n constructor(props: CodeProps) {\n super(props);\n\n this.container = null;\n }\n\n componentDidMount(): void {\n this.colorize();\n }\n\n container: HTMLDivElement | null;\n\n colorize(): void {\n const { children } = this.props;\n if (this.container && children) {\n monaco.editor.colorizeElement(this.container, {\n theme: 'dh-dark',\n });\n }\n }\n\n render(): ReactElement {\n const { children, language } = this.props;\n return (\n <div>\n <div\n data-lang={language}\n ref={container => {\n this.container = container;\n }}\n // Add pointerEvents: 'none' has huge benefits on performance with Hit Test testing on large colorized elements.\n // You can still select the text event with this set\n style={{ pointerEvents: 'none' }}\n >\n {children}\n </div>\n </div>\n );\n }\n}\n\nexport default Code;\n"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAA0D,OAA1D;AACA,OAAO,KAAKC,MAAZ,MAAwB,eAAxB;;AAOA,MAAMC,IAAN,SAAmBF,SAAnB,CAA+D;EAC7DG,WAAW,CAACC,KAAD,EAAmB;IAC5B,MAAMA,KAAN;;IAD4B;;IAG5B,KAAKC,SAAL,GAAiB,IAAjB;EACD;;EAEDC,iBAAiB,GAAS;IACxB,KAAKC,QAAL;EACD;;EAIDA,QAAQ,GAAS;IACf,IAAM;MAAEC;IAAF,IAAe,KAAKJ,KAA1B;;IACA,IAAI,KAAKC,SAAL,IAAkBG,
|
|
1
|
+
{"version":3,"file":"Code.js","names":["React","Component","monaco","Code","constructor","props","container","componentDidMount","colorize","children","editor","colorizeElement","theme","render","language","pointerEvents"],"sources":["../../src/common/Code.tsx"],"sourcesContent":["import React, { Component, ReactElement, ReactNode } from 'react';\nimport * as monaco from 'monaco-editor';\n\ninterface CodeProps {\n children: ReactNode;\n language: string;\n}\n\nclass Code extends Component<CodeProps, Record<string, never>> {\n constructor(props: CodeProps) {\n super(props);\n\n this.container = null;\n }\n\n componentDidMount(): void {\n this.colorize();\n }\n\n container: HTMLDivElement | null;\n\n colorize(): void {\n const { children } = this.props;\n if (this.container && children != null) {\n monaco.editor.colorizeElement(this.container, {\n theme: 'dh-dark',\n });\n }\n }\n\n render(): ReactElement {\n const { children, language } = this.props;\n return (\n <div>\n <div\n data-lang={language}\n ref={container => {\n this.container = container;\n }}\n // Add pointerEvents: 'none' has huge benefits on performance with Hit Test testing on large colorized elements.\n // You can still select the text event with this set\n style={{ pointerEvents: 'none' }}\n >\n {children}\n </div>\n </div>\n );\n }\n}\n\nexport default Code;\n"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAA0D,OAA1D;AACA,OAAO,KAAKC,MAAZ,MAAwB,eAAxB;;AAOA,MAAMC,IAAN,SAAmBF,SAAnB,CAA+D;EAC7DG,WAAW,CAACC,KAAD,EAAmB;IAC5B,MAAMA,KAAN;;IAD4B;;IAG5B,KAAKC,SAAL,GAAiB,IAAjB;EACD;;EAEDC,iBAAiB,GAAS;IACxB,KAAKC,QAAL;EACD;;EAIDA,QAAQ,GAAS;IACf,IAAM;MAAEC;IAAF,IAAe,KAAKJ,KAA1B;;IACA,IAAI,KAAKC,SAAL,IAAkBG,QAAQ,IAAI,IAAlC,EAAwC;MACtCP,MAAM,CAACQ,MAAP,CAAcC,eAAd,CAA8B,KAAKL,SAAnC,EAA8C;QAC5CM,KAAK,EAAE;MADqC,CAA9C;IAGD;EACF;;EAEDC,MAAM,GAAiB;IACrB,IAAM;MAAEJ,QAAF;MAAYK;IAAZ,IAAyB,KAAKT,KAApC;IACA,oBACE,8CACE;MACE,aAAWS,QADb;MAEE,GAAG,EAAER,SAAS,IAAI;QAChB,KAAKA,SAAL,GAAiBA,SAAjB;MACD,CAJH,CAKE;MACA;MANF;MAOE,KAAK,EAAE;QAAES,aAAa,EAAE;MAAjB;IAPT,GASGN,QATH,CADF,CADF;EAeD;;AAvC4D;;AA0C/D,eAAeN,IAAf"}
|
|
@@ -21,7 +21,7 @@ class ConsoleUtils {
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
static parseArguments(str) {
|
|
24
|
-
if (
|
|
24
|
+
if (str == null || !(typeof str === 'string' || str instanceof String)) {
|
|
25
25
|
return [];
|
|
26
26
|
} // Parse can return an object, not just a string. See the `ParseEntry` type def for all types
|
|
27
27
|
// We must map them all to strings. Filter out comments that will not be needed as well.
|
|
@@ -41,7 +41,7 @@ class ConsoleUtils {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
static formatTimestamp(date) {
|
|
44
|
-
if (
|
|
44
|
+
if (date == null || !(date instanceof Date)) {
|
|
45
45
|
return null;
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleUtils.js","names":["ShellQuote","dh","ConsoleUtils","hasComment","arg","comment","undefined","hasPattern","pattern","hasOp","op","parseArguments","str","String","parse","filter","map","formatTimestamp","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","isTableType","type","VariableType","TABLE","TREETABLE","isWidgetType","FIGURE","OTHERWIDGET","PANDAS","isOpenableType","isFigureType","isPandas"],"sources":["../../src/common/ConsoleUtils.ts"],"sourcesContent":["import ShellQuote, { ParseEntry, ControlOperator } from 'shell-quote';\nimport dh, { VariableTypeUnion } from '@deephaven/jsapi-shim';\n\nclass ConsoleUtils {\n static hasComment(arg: ParseEntry): arg is { comment: string } {\n return (arg as { comment: string }).comment !== undefined;\n }\n\n static hasPattern(arg: ParseEntry): arg is { op: 'glob'; pattern: string } {\n return (arg as { pattern: string }).pattern !== undefined;\n }\n\n static hasOp(arg: ParseEntry): arg is { op: ControlOperator } {\n return (arg as { op: ControlOperator }).op !== undefined;\n }\n\n /**\n * Given the provided text, parse out arguments using shell quoting rules.\n * @param str The text to parse.\n * @returns string[] of the arguments. Empty if no arguments found.\n */\n static parseArguments(str: unknown): string[] {\n if (
|
|
1
|
+
{"version":3,"file":"ConsoleUtils.js","names":["ShellQuote","dh","ConsoleUtils","hasComment","arg","comment","undefined","hasPattern","pattern","hasOp","op","parseArguments","str","String","parse","filter","map","formatTimestamp","date","Date","hours","getHours","padStart","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","isTableType","type","VariableType","TABLE","TREETABLE","isWidgetType","FIGURE","OTHERWIDGET","PANDAS","isOpenableType","isFigureType","isPandas"],"sources":["../../src/common/ConsoleUtils.ts"],"sourcesContent":["import ShellQuote, { ParseEntry, ControlOperator } from 'shell-quote';\nimport dh, { VariableTypeUnion } from '@deephaven/jsapi-shim';\n\nclass ConsoleUtils {\n static hasComment(arg: ParseEntry): arg is { comment: string } {\n return (arg as { comment: string }).comment !== undefined;\n }\n\n static hasPattern(arg: ParseEntry): arg is { op: 'glob'; pattern: string } {\n return (arg as { pattern: string }).pattern !== undefined;\n }\n\n static hasOp(arg: ParseEntry): arg is { op: ControlOperator } {\n return (arg as { op: ControlOperator }).op !== undefined;\n }\n\n /**\n * Given the provided text, parse out arguments using shell quoting rules.\n * @param str The text to parse.\n * @returns string[] of the arguments. Empty if no arguments found.\n */\n static parseArguments(str: unknown): string[] {\n if (str == null || !(typeof str === 'string' || str instanceof String)) {\n return [];\n }\n\n // Parse can return an object, not just a string. See the `ParseEntry` type def for all types\n // We must map them all to strings. Filter out comments that will not be needed as well.\n return ShellQuote.parse(str as string)\n .filter(arg => !this.hasComment(arg))\n .map(arg => {\n if (this.hasPattern(arg)) {\n return arg.pattern;\n }\n if (this.hasOp(arg)) {\n return arg.op;\n }\n return `${arg}`;\n });\n }\n\n static formatTimestamp(date: Date): string | null {\n if (date == null || !(date instanceof Date)) {\n return null;\n }\n\n const hours = `${date.getHours()}`.padStart(2, '0');\n const minutes = `${date.getMinutes()}`.padStart(2, '0');\n const seconds = `${date.getSeconds()}`.padStart(2, '0');\n const milliseconds = `${date.getMilliseconds()}`.padStart(3, '0');\n\n return `${hours}:${minutes}:${seconds}.${milliseconds}`;\n }\n\n static isTableType(type: VariableTypeUnion): boolean {\n return type === dh.VariableType.TABLE || type === dh.VariableType.TREETABLE;\n }\n\n static isWidgetType(type: VariableTypeUnion): boolean {\n return (\n type === dh.VariableType.FIGURE ||\n type === dh.VariableType.OTHERWIDGET ||\n type === dh.VariableType.PANDAS\n );\n }\n\n static isOpenableType(type: VariableTypeUnion): boolean {\n return ConsoleUtils.isTableType(type) || ConsoleUtils.isWidgetType(type);\n }\n\n static isFigureType(type: VariableTypeUnion): boolean {\n return type === dh.VariableType.FIGURE;\n }\n\n static isPandas(type: VariableTypeUnion): boolean {\n return type === dh.VariableType.PANDAS;\n }\n}\n\nexport default ConsoleUtils;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleHistoryItem.d.ts","sourceRoot":"","sources":["../../src/console-history/ConsoleHistoryItem.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAK3D,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAIjE,UAAU,uBAAuB;IAC/B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,cAAM,kBAAmB,SAAQ,aAAa,CAC5C,uBAAuB,EACvB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,uBAAuB;IAO1C,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAOnD,iBAAiB,IAAI,IAAI;IAQzB,MAAM,IAAI,YAAY;
|
|
1
|
+
{"version":3,"file":"ConsoleHistoryItem.d.ts","sourceRoot":"","sources":["../../src/console-history/ConsoleHistoryItem.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAK3D,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAIjE,UAAU,uBAAuB;IAC/B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,cAAM,kBAAmB,SAAQ,aAAa,CAC5C,uBAAuB,EACvB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,uBAAuB;IAO1C,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAOnD,iBAAiB,IAAI,IAAI;IAQzB,MAAM,IAAI,YAAY;CA4FvB;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -33,7 +33,7 @@ class ConsoleHistoryItem extends PureComponent {
|
|
|
33
33
|
item
|
|
34
34
|
} = this.props;
|
|
35
35
|
|
|
36
|
-
if (item && item.cancelResult) {
|
|
36
|
+
if (item != null && item.cancelResult) {
|
|
37
37
|
log.debug("Cancelling command: ".concat(item.command));
|
|
38
38
|
item.cancelResult();
|
|
39
39
|
}
|
|
@@ -51,7 +51,7 @@ class ConsoleHistoryItem extends PureComponent {
|
|
|
51
51
|
} = item;
|
|
52
52
|
var commandElement = null;
|
|
53
53
|
|
|
54
|
-
if (item.command) {
|
|
54
|
+
if (item.command != null && item.command !== '') {
|
|
55
55
|
commandElement = /*#__PURE__*/React.createElement("div", {
|
|
56
56
|
className: "console-history-item-command"
|
|
57
57
|
}, /*#__PURE__*/React.createElement("div", {
|
|
@@ -82,7 +82,7 @@ class ConsoleHistoryItem extends PureComponent {
|
|
|
82
82
|
title
|
|
83
83
|
} = object;
|
|
84
84
|
var key = "".concat(title);
|
|
85
|
-
var btnDisabled = disabled || (disabledObjects !== null && disabledObjects !== void 0 ? disabledObjects : []).indexOf(key) >= 0;
|
|
85
|
+
var btnDisabled = disabled === undefined || disabled || (disabledObjects !== null && disabledObjects !== void 0 ? disabledObjects : []).indexOf(key) >= 0;
|
|
86
86
|
var element = /*#__PURE__*/React.createElement(ButtonOld, {
|
|
87
87
|
key: key,
|
|
88
88
|
onClick: () => this.handleObjectClick(object),
|
|
@@ -96,7 +96,7 @@ class ConsoleHistoryItem extends PureComponent {
|
|
|
96
96
|
} // If the error has an associated command, we'll actually get a separate ERROR item printed out, so only print an error if there isn't an associated command
|
|
97
97
|
|
|
98
98
|
|
|
99
|
-
if (error &&
|
|
99
|
+
if (error != null && item.command == null) {
|
|
100
100
|
var _message;
|
|
101
101
|
|
|
102
102
|
var errorMessage = "".concat((_message = error.message) !== null && _message !== void 0 ? _message : error);
|
|
@@ -112,7 +112,7 @@ class ConsoleHistoryItem extends PureComponent {
|
|
|
112
112
|
resultElements.push(element);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
if (message) {
|
|
115
|
+
if (message !== undefined && message !== '') {
|
|
116
116
|
var _element = /*#__PURE__*/React.createElement("div", {
|
|
117
117
|
key: "log-message",
|
|
118
118
|
className: "log-message"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleHistoryItem.js","names":["React","PureComponent","ButtonOld","Log","Code","ObjectIcon","ConsoleHistoryItemResult","ConsoleHistoryResultInProgress","ConsoleHistoryResultErrorMessage","log","module","ConsoleHistoryItem","constructor","props","handleCancelClick","bind","handleObjectClick","object","debug","openObject","item","cancelResult","command","render","disabled","language","disabledObjects","result","commandElement","resultElements","error","message","changes","created","updated","forEach","title","key","btnDisabled","indexOf","element","type","push","errorMessage","resultElement","length"],"sources":["../../src/console-history/ConsoleHistoryItem.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { PureComponent, ReactElement } from 'react';\nimport { ButtonOld } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { VariableDefinition } from '@deephaven/jsapi-shim';\nimport { Code, ObjectIcon } from '../common';\nimport ConsoleHistoryItemResult from './ConsoleHistoryItemResult';\nimport ConsoleHistoryResultInProgress from './ConsoleHistoryResultInProgress';\nimport ConsoleHistoryResultErrorMessage from './ConsoleHistoryResultErrorMessage';\nimport './ConsoleHistoryItem.scss';\nimport { ConsoleHistoryActionItem } from './ConsoleHistoryTypes';\n\nconst log = Log.module('ConsoleHistoryItem');\n\ninterface ConsoleHistoryItemProps {\n item: ConsoleHistoryActionItem;\n language: string;\n openObject: (object: VariableDefinition) => void;\n disabled?: boolean;\n}\n\nclass ConsoleHistoryItem extends PureComponent<\n ConsoleHistoryItemProps,\n Record<string, never>\n> {\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props: ConsoleHistoryItemProps) {\n super(props);\n\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleObjectClick = this.handleObjectClick.bind(this);\n }\n\n handleObjectClick(object: VariableDefinition): void {\n log.debug('handleObjectClick', object);\n\n const { openObject } = this.props;\n openObject(object);\n }\n\n handleCancelClick(): void {\n const { item } = this.props;\n if (item && item.cancelResult) {\n log.debug(`Cancelling command: ${item.command}`);\n item.cancelResult();\n }\n }\n\n render(): ReactElement {\n const { disabled, item, language } = this.props;\n const { disabledObjects, result } = item;\n\n let commandElement = null;\n if (item.command) {\n commandElement = (\n <div className=\"console-history-item-command\">\n <div className=\"console-history-gutter\">></div>\n <div className=\"console-history-content\">\n <Code language={language}>{item.command}</Code>\n </div>\n </div>\n );\n }\n\n const resultElements = [];\n\n if (result) {\n const { error, message, changes } = result;\n\n if (changes) {\n const { created, updated } = changes;\n [...created, ...updated].forEach(object => {\n const { title } = object;\n const key = `${title}`;\n const btnDisabled =\n disabled
|
|
1
|
+
{"version":3,"file":"ConsoleHistoryItem.js","names":["React","PureComponent","ButtonOld","Log","Code","ObjectIcon","ConsoleHistoryItemResult","ConsoleHistoryResultInProgress","ConsoleHistoryResultErrorMessage","log","module","ConsoleHistoryItem","constructor","props","handleCancelClick","bind","handleObjectClick","object","debug","openObject","item","cancelResult","command","render","disabled","language","disabledObjects","result","commandElement","resultElements","error","message","changes","created","updated","forEach","title","key","btnDisabled","undefined","indexOf","element","type","push","errorMessage","resultElement","length"],"sources":["../../src/console-history/ConsoleHistoryItem.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { PureComponent, ReactElement } from 'react';\nimport { ButtonOld } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { VariableDefinition } from '@deephaven/jsapi-shim';\nimport { Code, ObjectIcon } from '../common';\nimport ConsoleHistoryItemResult from './ConsoleHistoryItemResult';\nimport ConsoleHistoryResultInProgress from './ConsoleHistoryResultInProgress';\nimport ConsoleHistoryResultErrorMessage from './ConsoleHistoryResultErrorMessage';\nimport './ConsoleHistoryItem.scss';\nimport { ConsoleHistoryActionItem } from './ConsoleHistoryTypes';\n\nconst log = Log.module('ConsoleHistoryItem');\n\ninterface ConsoleHistoryItemProps {\n item: ConsoleHistoryActionItem;\n language: string;\n openObject: (object: VariableDefinition) => void;\n disabled?: boolean;\n}\n\nclass ConsoleHistoryItem extends PureComponent<\n ConsoleHistoryItemProps,\n Record<string, never>\n> {\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props: ConsoleHistoryItemProps) {\n super(props);\n\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleObjectClick = this.handleObjectClick.bind(this);\n }\n\n handleObjectClick(object: VariableDefinition): void {\n log.debug('handleObjectClick', object);\n\n const { openObject } = this.props;\n openObject(object);\n }\n\n handleCancelClick(): void {\n const { item } = this.props;\n if (item != null && item.cancelResult) {\n log.debug(`Cancelling command: ${item.command}`);\n item.cancelResult();\n }\n }\n\n render(): ReactElement {\n const { disabled, item, language } = this.props;\n const { disabledObjects, result } = item;\n\n let commandElement = null;\n if (item.command != null && item.command !== '') {\n commandElement = (\n <div className=\"console-history-item-command\">\n <div className=\"console-history-gutter\">></div>\n <div className=\"console-history-content\">\n <Code language={language}>{item.command}</Code>\n </div>\n </div>\n );\n }\n\n const resultElements = [];\n\n if (result) {\n const { error, message, changes } = result;\n\n if (changes) {\n const { created, updated } = changes;\n [...created, ...updated].forEach(object => {\n const { title } = object;\n const key = `${title}`;\n const btnDisabled =\n disabled === undefined ||\n disabled ||\n (disabledObjects ?? []).indexOf(key) >= 0;\n const element = (\n <ButtonOld\n key={key}\n onClick={() => this.handleObjectClick(object)}\n className=\"btn-primary btn-console btn-console-object\"\n disabled={btnDisabled}\n >\n <ObjectIcon type={object.type} /> {title}\n </ButtonOld>\n );\n resultElements.push(element);\n });\n }\n\n // If the error has an associated command, we'll actually get a separate ERROR item printed out, so only print an error if there isn't an associated command\n if (error != null && item.command == null) {\n let errorMessage = `${(error as { message: string }).message ?? error}`;\n if (!errorMessage) {\n errorMessage = error as string;\n }\n const element = (\n <ConsoleHistoryResultErrorMessage\n key=\"result-error\"\n message={errorMessage}\n />\n );\n resultElements.push(element);\n }\n\n if (message !== undefined && message !== '') {\n const element = (\n <div key=\"log-message\" className=\"log-message\">\n {message}\n </div>\n );\n resultElements.push(element);\n }\n } else {\n const element = (\n <ConsoleHistoryResultInProgress\n key=\"in_progress\"\n onCancelClick={this.handleCancelClick}\n disabled={disabled}\n />\n );\n resultElements.push(element);\n }\n\n let resultElement = null;\n if (resultElements.length > 0) {\n resultElement = (\n <ConsoleHistoryItemResult>{resultElements}</ConsoleHistoryItemResult>\n );\n }\n\n return (\n <div className=\"container-fluid\">\n {commandElement}\n {resultElement}\n </div>\n );\n }\n}\n\nexport default ConsoleHistoryItem;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvInputBar.d.ts","sourceRoot":"","sources":["../../src/csv/CsvInputBar.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAS,MAAM,uBAAuB,CAAC;AAI1D,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,oBAAoB,CAAC;AAU5B,UAAU,gBAAgB;IACxB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACnD;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,OAAO,UAAU,CAAC,KAAK,CAAC;IACpC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AACD;;GAEG;AACH,cAAM,WAAY,SAAQ,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACrE,MAAM,CAAC,YAAY;;;;MAIjB;gBAEU,KAAK,EAAE,gBAAgB;IA2BnC,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"CsvInputBar.d.ts","sourceRoot":"","sources":["../../src/csv/CsvInputBar.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAS,MAAM,uBAAuB,CAAC;AAI1D,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,oBAAoB,CAAC;AAU5B,UAAU,gBAAgB;IACxB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACnD;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,OAAO,UAAU,CAAC,KAAK,CAAC;IACpC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AACD;;GAEG;AACH,cAAM,WAAY,SAAQ,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACrE,MAAM,CAAC,YAAY;;;;MAIjB;gBAEU,KAAK,EAAE,gBAAgB;IA2BnC,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IA8CrD,oBAAoB,IAAI,IAAI;IAO5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEtC,YAAY,IAAI,IAAI;IAKpB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAO7B,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAI3D,qBAAqB,IAAI,IAAI;IAK7B,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI;IAmBrD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,KAAK,UAAQ,GAAG,IAAI;IAgDzD,aAAa,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IA2BlC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAY9C,sBAAsB,IAAI,IAAI;IAa9B,SAAS,IAAI,IAAI;IAOjB,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAMlE,MAAM,IAAI,YAAY;CA2FvB;AAED,eAAe,WAAW,CAAC"}
|
package/dist/csv/CsvInputBar.js
CHANGED
|
@@ -60,7 +60,7 @@ class CsvInputBar extends Component {
|
|
|
60
60
|
tableNameSet
|
|
61
61
|
} = this.state; // Set the table name from a file
|
|
62
62
|
|
|
63
|
-
if (!tableNameSet && file && !tableName) {
|
|
63
|
+
if (!tableNameSet && file != null && !tableName) {
|
|
64
64
|
var _this$inputRef$curren;
|
|
65
65
|
|
|
66
66
|
var dotIndex = file.name.lastIndexOf('.');
|
|
@@ -70,7 +70,7 @@ class CsvInputBar extends Component {
|
|
|
70
70
|
tableNameSet: true
|
|
71
71
|
});
|
|
72
72
|
(_this$inputRef$curren = this.inputRef.current) === null || _this$inputRef$curren === void 0 ? void 0 : _this$inputRef$curren.focus();
|
|
73
|
-
} else if (
|
|
73
|
+
} else if (file == null && prevProps.file != null || paste == null && prevProps.paste != null) {
|
|
74
74
|
// The file or paste was unstaged
|
|
75
75
|
this.setState({
|
|
76
76
|
tableName: '',
|
|
@@ -79,16 +79,16 @@ class CsvInputBar extends Component {
|
|
|
79
79
|
} // Focus the name input field on paste
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
if (paste && !tableName && this.inputRef.current) {
|
|
82
|
+
if (paste != null && paste !== '' && !tableName && this.inputRef.current) {
|
|
83
83
|
this.inputRef.current.focus();
|
|
84
84
|
} // Determine parser type by file extension
|
|
85
85
|
|
|
86
86
|
|
|
87
|
-
if (file && file !== prevProps.file) {
|
|
87
|
+
if (file != null && file !== prevProps.file) {
|
|
88
88
|
this.setState({
|
|
89
89
|
type: CsvFormats.fromExtension(file.name)
|
|
90
90
|
});
|
|
91
|
-
} else if (paste &&
|
|
91
|
+
} else if (paste != null && paste !== '' && (prevProps.paste === undefined || prevProps.paste === '')) {
|
|
92
92
|
this.setState({
|
|
93
93
|
type: CsvFormats.AUTO
|
|
94
94
|
});
|
|
@@ -146,13 +146,13 @@ class CsvInputBar extends Component {
|
|
|
146
146
|
paste
|
|
147
147
|
} = this.props;
|
|
148
148
|
|
|
149
|
-
if (file) {
|
|
149
|
+
if (file != null) {
|
|
150
150
|
if (file.name.endsWith('.zip')) {
|
|
151
151
|
this.handleZipFile(file);
|
|
152
152
|
} else {
|
|
153
153
|
this.handleFile(file);
|
|
154
154
|
}
|
|
155
|
-
} else if (paste) {
|
|
155
|
+
} else if (paste !== undefined && paste !== '') {
|
|
156
156
|
this.handleFile(new Blob([paste], {
|
|
157
157
|
type: 'text/plain'
|
|
158
158
|
}));
|
|
@@ -302,7 +302,7 @@ class CsvInputBar extends Component {
|
|
|
302
302
|
type
|
|
303
303
|
} = this.state; // A blank table name is invalid for pasted values
|
|
304
304
|
|
|
305
|
-
var isNameInvalid = paste && !tableName;
|
|
305
|
+
var isNameInvalid = Boolean(paste) && !tableName;
|
|
306
306
|
return /*#__PURE__*/React.createElement("div", {
|
|
307
307
|
className: "csv-input-bar"
|
|
308
308
|
}, !showProgress && /*#__PURE__*/React.createElement("form", {
|
|
@@ -342,7 +342,7 @@ class CsvInputBar extends Component {
|
|
|
342
342
|
}, "Cancel"), /*#__PURE__*/React.createElement(Button, {
|
|
343
343
|
kind: "primary",
|
|
344
344
|
type: "submit",
|
|
345
|
-
disabled: !(file || paste) || !tableName
|
|
345
|
+
disabled: !(file !== null || paste !== undefined && paste !== '') || !tableName
|
|
346
346
|
}, "Upload"))), showProgress && /*#__PURE__*/React.createElement("div", {
|
|
347
347
|
className: "csv-progress-container"
|
|
348
348
|
}, /*#__PURE__*/React.createElement("label", null, "Uploading Table"), /*#__PURE__*/React.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvInputBar.js","names":["React","Component","classNames","Button","Checkbox","Log","DbNameValidator","CsvOverlay","CsvParser","CsvFormats","log","module","TYPE_OPTIONS","Object","entries","TYPES","map","key","value","name","CsvInputBar","constructor","props","handleUpload","bind","handleCancel","handleError","handleTableName","toggleFirstRowHeaders","handleProgress","handleCancelInProgress","handleQueryTypeChange","inputRef","createRef","state","tableName","tableNameSet","isFirstRowHeaders","showProgress","progressValue","type","DEFAULT_TYPE","parser","componentDidUpdate","prevProps","file","paste","dotIndex","lastIndexOf","fileTableName","legalizeTableName","substring","setState","current","focus","fromExtension","AUTO","componentWillUnmount","cancel","onClose","e","onError","error","event","target","stopPropagation","preventDefault","endsWith","handleZipFile","handleFile","Blob","isZip","info","File","size","session","timeZone","onInProgress","handleParseDone","tables","length","bindTableToVariable","then","openTable","catch","mergeTables","table","forEach","t","close","onFileCompleted","readHeaders","onProgress","parse","zipFile","onUpdate","unzip","Error","files","csvFound","i","f","isValidExtension","onOpenTable","render","isNameInvalid","width"],"sources":["../../src/csv/CsvInputBar.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n FormEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport type { JSZipObject } from 'jszip';\nimport { Button, Checkbox } from '@deephaven/components';\nimport { IdeSession, Table } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { DbNameValidator } from '@deephaven/utils';\nimport CsvOverlay from './CsvOverlay';\nimport CsvParser from './CsvParser';\nimport CsvFormats from './CsvFormats';\nimport './CsvInputBar.scss';\n\nconst log = Log.module('CsvInputBar');\n\nconst TYPE_OPTIONS = Object.entries(CsvFormats.TYPES).map(([key, value]) => (\n <option key={key} value={key}>\n {value.name}\n </option>\n));\n\ninterface CsvInputBarProps {\n session: IdeSession;\n onOpenTable: (name: string) => void;\n onClose: () => void;\n onUpdate: (update: string) => void;\n onError: (e: unknown) => void;\n file: File;\n paste?: string;\n onInProgress: (boolean: boolean) => void;\n timeZone: string;\n unzip?: (zipFile: File) => Promise<JSZipObject[]>;\n}\n\ninterface CsvInputBarState {\n tableName: string;\n tableNameSet: boolean;\n isFirstRowHeaders: boolean;\n showProgress: boolean;\n progressValue: number;\n type: keyof typeof CsvFormats.TYPES;\n parser: CsvParser | null;\n}\n/**\n * Input controls for CSV upload.\n */\nclass CsvInputBar extends Component<CsvInputBarProps, CsvInputBarState> {\n static defaultProps = {\n file: null,\n paste: null,\n unzip: null,\n };\n\n constructor(props: CsvInputBarProps) {\n super(props);\n\n this.handleUpload = this.handleUpload.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTableName = this.handleTableName.bind(this);\n this.toggleFirstRowHeaders = this.toggleFirstRowHeaders.bind(this);\n this.handleProgress = this.handleProgress.bind(this);\n this.handleCancelInProgress = this.handleCancelInProgress.bind(this);\n this.handleQueryTypeChange = this.handleQueryTypeChange.bind(this);\n\n this.inputRef = React.createRef();\n\n this.state = {\n tableName: '',\n tableNameSet: false,\n isFirstRowHeaders: true,\n showProgress: false,\n progressValue: 0,\n type: CsvFormats.DEFAULT_TYPE,\n parser: null,\n };\n }\n\n // React documentation says it is fine to update state inside an if statment\n /* eslint-disable react/no-did-update-set-state */\n componentDidUpdate(prevProps: CsvInputBarProps): void {\n const { file, paste } = this.props;\n const { tableName, tableNameSet } = this.state;\n // Set the table name from a file\n if (!tableNameSet && file && !tableName) {\n const dotIndex = file.name.lastIndexOf('.');\n const fileTableName = DbNameValidator.legalizeTableName(\n file.name.substring(0, dotIndex)\n );\n this.setState({\n tableName: fileTableName,\n tableNameSet: true,\n });\n this.inputRef.current?.focus();\n } else if ((!file && prevProps.file) || (!paste && prevProps.paste)) {\n // The file or paste was unstaged\n this.setState({\n tableName: '',\n tableNameSet: false,\n });\n }\n\n // Focus the name input field on paste\n if (paste && !tableName && this.inputRef.current) {\n this.inputRef.current.focus();\n }\n\n // Determine parser type by file extension\n if (file && file !== prevProps.file) {\n this.setState({\n type: CsvFormats.fromExtension(file.name),\n });\n } else if (paste && !prevProps.paste) {\n this.setState({\n type: CsvFormats.AUTO,\n });\n }\n }\n\n componentWillUnmount(): void {\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n handleCancel(): void {\n const { onClose } = this.props;\n onClose();\n }\n\n handleError(e: unknown): void {\n const { onClose, onError } = this.props;\n log.error(e);\n onError(e);\n onClose();\n }\n\n handleTableName(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({ tableName: event.target.value, tableNameSet: true });\n }\n\n toggleFirstRowHeaders(): void {\n const { isFirstRowHeaders } = this.state;\n this.setState({ isFirstRowHeaders: !isFirstRowHeaders });\n }\n\n handleUpload(event: FormEvent<HTMLFormElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { file, paste } = this.props;\n if (file) {\n if (file.name.endsWith('.zip')) {\n this.handleZipFile(file);\n } else {\n this.handleFile(file);\n }\n } else if (paste) {\n this.handleFile(\n new Blob([paste], {\n type: 'text/plain',\n })\n );\n }\n }\n\n handleFile(file: Blob | JSZipObject, isZip = false): void {\n log.info(\n `Starting CSV parser for ${\n file instanceof File ? file.name : 'pasted values'\n } ${isZip ? '' : (file as Blob).size} bytes`\n );\n const { session, timeZone, onInProgress } = this.props;\n const { tableName, isFirstRowHeaders, type } = this.state;\n const handleParseDone = (tables: Table[]) => {\n // Do not bother merging just one table\n if (tables.length === 1) {\n session\n .bindTableToVariable(tables[0], tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n } else {\n session\n .mergeTables(tables)\n .then(table => {\n session\n .bindTableToVariable(table, tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n tables.forEach(t => t.close());\n })\n .catch(e => this.handleError(e));\n }\n };\n const parser = new CsvParser({\n onFileCompleted: handleParseDone,\n session,\n file,\n type: CsvFormats.TYPES[type],\n readHeaders: isFirstRowHeaders,\n onProgress: this.handleProgress,\n onError: this.handleError,\n timeZone,\n isZip,\n });\n parser.parse();\n this.setState({\n showProgress: true,\n parser,\n });\n // Note that calling onClose will set in progress to false\n onInProgress(true);\n }\n\n handleZipFile(zipFile: File): void {\n const { onUpdate, unzip } = this.props;\n if (unzip == null) {\n this.handleError(new Error('No support for zip files available.'));\n return;\n }\n\n unzip(zipFile)\n .then(files => {\n let csvFound = false;\n // Find the first Csv file in the zip and use that\n for (let i = 0; i < files.length; i += 1) {\n const f = files[i];\n if (CsvOverlay.isValidExtension(f.name)) {\n onUpdate(`Loading ${f.name} as csv from ${zipFile.name}`);\n csvFound = true;\n this.handleFile(f, true);\n break;\n }\n }\n if (!csvFound) {\n throw new Error(`No csv file found in ${zipFile.name}`);\n }\n })\n .catch(e => this.handleError(e));\n }\n\n handleProgress(progressValue: number): boolean {\n const { showProgress } = this.state;\n if (showProgress) {\n this.setState({\n progressValue,\n });\n }\n // Indicates to the caller that the upload has been cancelled\n return !showProgress;\n }\n\n // Cancels an in progress upload\n handleCancelInProgress(): void {\n const { onInProgress } = this.props;\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n this.setState({\n showProgress: false,\n progressValue: 0,\n });\n onInProgress(false);\n }\n\n openTable(): void {\n const { onOpenTable, onClose } = this.props;\n const { tableName } = this.state;\n onOpenTable(tableName);\n onClose();\n }\n\n handleQueryTypeChange(event: ChangeEvent<HTMLSelectElement>): void {\n this.setState({\n type: event.target.value as keyof typeof CsvFormats.TYPES,\n });\n }\n\n render(): ReactElement {\n const { file, paste } = this.props;\n const {\n tableName,\n isFirstRowHeaders,\n showProgress,\n progressValue,\n type,\n } = this.state;\n // A blank table name is invalid for pasted values\n const isNameInvalid = paste && !tableName;\n return (\n <div className=\"csv-input-bar\">\n {!showProgress && (\n <form\n onSubmit={this.handleUpload}\n className=\"csv-input-bar-container form-inline\"\n >\n <div className=\"form-group\">\n <label htmlFor=\"tableNameInput\">Table name</label>\n <input\n ref={this.inputRef}\n id=\"tableNameInput\"\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': isNameInvalid,\n })}\n value={tableName}\n onChange={this.handleTableName}\n />\n </div>\n <div className=\"form-group\">\n <label htmlFor=\"formatSelect\">File format</label>\n <select\n id=\"formatSelect\"\n className=\"custom-select\"\n value={type}\n onChange={this.handleQueryTypeChange}\n >\n {TYPE_OPTIONS}\n </select>\n </div>\n <Checkbox\n className=\"firstRowHeaders\"\n checked={isFirstRowHeaders}\n onChange={this.toggleFirstRowHeaders}\n >\n First row is column headers\n </Checkbox>\n <div className=\"csv-input-buttons form-group\">\n <Button kind=\"secondary\" onClick={this.handleCancel}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"submit\"\n disabled={!(file || paste) || !tableName}\n >\n Upload\n </Button>\n </div>\n </form>\n )}\n {showProgress && (\n <div className=\"csv-progress-container\">\n <label>Uploading Table</label>\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-primary\"\n style={{ width: `${progressValue}%` }}\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n />\n </div>\n <label>{progressValue}%</label>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleCancelInProgress}\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvInputBar;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CsvInputBar.js","names":["React","Component","classNames","Button","Checkbox","Log","DbNameValidator","CsvOverlay","CsvParser","CsvFormats","log","module","TYPE_OPTIONS","Object","entries","TYPES","map","key","value","name","CsvInputBar","constructor","props","handleUpload","bind","handleCancel","handleError","handleTableName","toggleFirstRowHeaders","handleProgress","handleCancelInProgress","handleQueryTypeChange","inputRef","createRef","state","tableName","tableNameSet","isFirstRowHeaders","showProgress","progressValue","type","DEFAULT_TYPE","parser","componentDidUpdate","prevProps","file","paste","dotIndex","lastIndexOf","fileTableName","legalizeTableName","substring","setState","current","focus","fromExtension","undefined","AUTO","componentWillUnmount","cancel","onClose","e","onError","error","event","target","stopPropagation","preventDefault","endsWith","handleZipFile","handleFile","Blob","isZip","info","File","size","session","timeZone","onInProgress","handleParseDone","tables","length","bindTableToVariable","then","openTable","catch","mergeTables","table","forEach","t","close","onFileCompleted","readHeaders","onProgress","parse","zipFile","onUpdate","unzip","Error","files","csvFound","i","f","isValidExtension","onOpenTable","render","isNameInvalid","Boolean","width"],"sources":["../../src/csv/CsvInputBar.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n FormEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport type { JSZipObject } from 'jszip';\nimport { Button, Checkbox } from '@deephaven/components';\nimport { IdeSession, Table } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { DbNameValidator } from '@deephaven/utils';\nimport CsvOverlay from './CsvOverlay';\nimport CsvParser from './CsvParser';\nimport CsvFormats from './CsvFormats';\nimport './CsvInputBar.scss';\n\nconst log = Log.module('CsvInputBar');\n\nconst TYPE_OPTIONS = Object.entries(CsvFormats.TYPES).map(([key, value]) => (\n <option key={key} value={key}>\n {value.name}\n </option>\n));\n\ninterface CsvInputBarProps {\n session: IdeSession;\n onOpenTable: (name: string) => void;\n onClose: () => void;\n onUpdate: (update: string) => void;\n onError: (e: unknown) => void;\n file: File;\n paste?: string;\n onInProgress: (boolean: boolean) => void;\n timeZone: string;\n unzip?: (zipFile: File) => Promise<JSZipObject[]>;\n}\n\ninterface CsvInputBarState {\n tableName: string;\n tableNameSet: boolean;\n isFirstRowHeaders: boolean;\n showProgress: boolean;\n progressValue: number;\n type: keyof typeof CsvFormats.TYPES;\n parser: CsvParser | null;\n}\n/**\n * Input controls for CSV upload.\n */\nclass CsvInputBar extends Component<CsvInputBarProps, CsvInputBarState> {\n static defaultProps = {\n file: null,\n paste: null,\n unzip: null,\n };\n\n constructor(props: CsvInputBarProps) {\n super(props);\n\n this.handleUpload = this.handleUpload.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTableName = this.handleTableName.bind(this);\n this.toggleFirstRowHeaders = this.toggleFirstRowHeaders.bind(this);\n this.handleProgress = this.handleProgress.bind(this);\n this.handleCancelInProgress = this.handleCancelInProgress.bind(this);\n this.handleQueryTypeChange = this.handleQueryTypeChange.bind(this);\n\n this.inputRef = React.createRef();\n\n this.state = {\n tableName: '',\n tableNameSet: false,\n isFirstRowHeaders: true,\n showProgress: false,\n progressValue: 0,\n type: CsvFormats.DEFAULT_TYPE,\n parser: null,\n };\n }\n\n // React documentation says it is fine to update state inside an if statment\n /* eslint-disable react/no-did-update-set-state */\n componentDidUpdate(prevProps: CsvInputBarProps): void {\n const { file, paste } = this.props;\n const { tableName, tableNameSet } = this.state;\n // Set the table name from a file\n if (!tableNameSet && file != null && !tableName) {\n const dotIndex = file.name.lastIndexOf('.');\n const fileTableName = DbNameValidator.legalizeTableName(\n file.name.substring(0, dotIndex)\n );\n this.setState({\n tableName: fileTableName,\n tableNameSet: true,\n });\n this.inputRef.current?.focus();\n } else if (\n (file == null && prevProps.file != null) ||\n (paste == null && prevProps.paste != null)\n ) {\n // The file or paste was unstaged\n this.setState({\n tableName: '',\n tableNameSet: false,\n });\n }\n\n // Focus the name input field on paste\n if (paste != null && paste !== '' && !tableName && this.inputRef.current) {\n this.inputRef.current.focus();\n }\n\n // Determine parser type by file extension\n if (file != null && file !== prevProps.file) {\n this.setState({\n type: CsvFormats.fromExtension(file.name),\n });\n } else if (\n paste != null &&\n paste !== '' &&\n (prevProps.paste === undefined || prevProps.paste === '')\n ) {\n this.setState({\n type: CsvFormats.AUTO,\n });\n }\n }\n\n componentWillUnmount(): void {\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n handleCancel(): void {\n const { onClose } = this.props;\n onClose();\n }\n\n handleError(e: unknown): void {\n const { onClose, onError } = this.props;\n log.error(e);\n onError(e);\n onClose();\n }\n\n handleTableName(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({ tableName: event.target.value, tableNameSet: true });\n }\n\n toggleFirstRowHeaders(): void {\n const { isFirstRowHeaders } = this.state;\n this.setState({ isFirstRowHeaders: !isFirstRowHeaders });\n }\n\n handleUpload(event: FormEvent<HTMLFormElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { file, paste } = this.props;\n if (file != null) {\n if (file.name.endsWith('.zip')) {\n this.handleZipFile(file);\n } else {\n this.handleFile(file);\n }\n } else if (paste !== undefined && paste !== '') {\n this.handleFile(\n new Blob([paste], {\n type: 'text/plain',\n })\n );\n }\n }\n\n handleFile(file: Blob | JSZipObject, isZip = false): void {\n log.info(\n `Starting CSV parser for ${\n file instanceof File ? file.name : 'pasted values'\n } ${isZip ? '' : (file as Blob).size} bytes`\n );\n const { session, timeZone, onInProgress } = this.props;\n const { tableName, isFirstRowHeaders, type } = this.state;\n const handleParseDone = (tables: Table[]) => {\n // Do not bother merging just one table\n if (tables.length === 1) {\n session\n .bindTableToVariable(tables[0], tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n } else {\n session\n .mergeTables(tables)\n .then(table => {\n session\n .bindTableToVariable(table, tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n tables.forEach(t => t.close());\n })\n .catch(e => this.handleError(e));\n }\n };\n const parser = new CsvParser({\n onFileCompleted: handleParseDone,\n session,\n file,\n type: CsvFormats.TYPES[type],\n readHeaders: isFirstRowHeaders,\n onProgress: this.handleProgress,\n onError: this.handleError,\n timeZone,\n isZip,\n });\n parser.parse();\n this.setState({\n showProgress: true,\n parser,\n });\n // Note that calling onClose will set in progress to false\n onInProgress(true);\n }\n\n handleZipFile(zipFile: File): void {\n const { onUpdate, unzip } = this.props;\n if (unzip == null) {\n this.handleError(new Error('No support for zip files available.'));\n return;\n }\n\n unzip(zipFile)\n .then(files => {\n let csvFound = false;\n // Find the first Csv file in the zip and use that\n for (let i = 0; i < files.length; i += 1) {\n const f = files[i];\n if (CsvOverlay.isValidExtension(f.name)) {\n onUpdate(`Loading ${f.name} as csv from ${zipFile.name}`);\n csvFound = true;\n this.handleFile(f, true);\n break;\n }\n }\n if (!csvFound) {\n throw new Error(`No csv file found in ${zipFile.name}`);\n }\n })\n .catch(e => this.handleError(e));\n }\n\n handleProgress(progressValue: number): boolean {\n const { showProgress } = this.state;\n if (showProgress) {\n this.setState({\n progressValue,\n });\n }\n // Indicates to the caller that the upload has been cancelled\n return !showProgress;\n }\n\n // Cancels an in progress upload\n handleCancelInProgress(): void {\n const { onInProgress } = this.props;\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n this.setState({\n showProgress: false,\n progressValue: 0,\n });\n onInProgress(false);\n }\n\n openTable(): void {\n const { onOpenTable, onClose } = this.props;\n const { tableName } = this.state;\n onOpenTable(tableName);\n onClose();\n }\n\n handleQueryTypeChange(event: ChangeEvent<HTMLSelectElement>): void {\n this.setState({\n type: event.target.value as keyof typeof CsvFormats.TYPES,\n });\n }\n\n render(): ReactElement {\n const { file, paste } = this.props;\n const {\n tableName,\n isFirstRowHeaders,\n showProgress,\n progressValue,\n type,\n } = this.state;\n // A blank table name is invalid for pasted values\n const isNameInvalid = Boolean(paste) && !tableName;\n return (\n <div className=\"csv-input-bar\">\n {!showProgress && (\n <form\n onSubmit={this.handleUpload}\n className=\"csv-input-bar-container form-inline\"\n >\n <div className=\"form-group\">\n <label htmlFor=\"tableNameInput\">Table name</label>\n <input\n ref={this.inputRef}\n id=\"tableNameInput\"\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': isNameInvalid,\n })}\n value={tableName}\n onChange={this.handleTableName}\n />\n </div>\n <div className=\"form-group\">\n <label htmlFor=\"formatSelect\">File format</label>\n <select\n id=\"formatSelect\"\n className=\"custom-select\"\n value={type}\n onChange={this.handleQueryTypeChange}\n >\n {TYPE_OPTIONS}\n </select>\n </div>\n <Checkbox\n className=\"firstRowHeaders\"\n checked={isFirstRowHeaders}\n onChange={this.toggleFirstRowHeaders}\n >\n First row is column headers\n </Checkbox>\n <div className=\"csv-input-buttons form-group\">\n <Button kind=\"secondary\" onClick={this.handleCancel}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"submit\"\n disabled={\n !(file !== null || (paste !== undefined && paste !== '')) ||\n !tableName\n }\n >\n Upload\n </Button>\n </div>\n </form>\n )}\n {showProgress && (\n <div className=\"csv-progress-container\">\n <label>Uploading Table</label>\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-primary\"\n style={{ width: `${progressValue}%` }}\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n />\n </div>\n <label>{progressValue}%</label>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleCancelInProgress}\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvInputBar;\n"],"mappings":"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"}
|
package/dist/csv/CsvOverlay.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ declare class CsvOverlay extends Component<CsvOverlayProps, CsvOverlayState> {
|
|
|
43
43
|
handleMenuPaste(): void;
|
|
44
44
|
handlePasteEvent(event: ClipboardEvent): void;
|
|
45
45
|
makeContextMenuItems(): ContextAction[];
|
|
46
|
-
getValidExtensions: (
|
|
46
|
+
getValidExtensions: (allowZip: boolean) => string[];
|
|
47
47
|
getAcceptString: (this: any, allowZip: any) => string;
|
|
48
48
|
getFileTypeErrorString: (this: any, allowZip: any) => string;
|
|
49
49
|
render(): ReactElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvOverlay.d.ts","sourceRoot":"","sources":["../../src/csv/CsvOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,aAAa,EAGd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,cAAc,EAKf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,mBAAmB,CAAC;AAG3B,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,eAAe;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;GAEG;AACH,cAAM,UAAW,SAAQ,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAClE,MAAM,CAAC,YAAY;;;MAGjB;IAEF,MAAM,CAAC,mBAAmB,SAAiC;IAE3D,MAAM,CAAC,eAAe,SAA6B;IAEnD,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO;IAQvD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO;IAOhE,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAKzC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;gBAapC,KAAK,EAAE,eAAe;IAkBlC,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEtC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAEnC,gBAAgB,IAAI,IAAI;IAOxB,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IASvD,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"CsvOverlay.d.ts","sourceRoot":"","sources":["../../src/csv/CsvOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,aAAa,EAGd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,cAAc,EAKf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,mBAAmB,CAAC;AAG3B,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,eAAe;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;GAEG;AACH,cAAM,UAAW,SAAQ,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAClE,MAAM,CAAC,YAAY;;;MAGjB;IAEF,MAAM,CAAC,mBAAmB,SAAiC;IAE3D,MAAM,CAAC,eAAe,SAA6B;IAEnD,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO;IAQvD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO;IAOhE,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAKzC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;gBAapC,KAAK,EAAE,eAAe;IAkBlC,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEtC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAEnC,gBAAgB,IAAI,IAAI;IAOxB,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IASvD,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI;IA6B9C,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAWvD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAS5B,eAAe,IAAI,IAAI;IAiBvB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAM7C,oBAAoB,IAAI,aAAa,EAAE;IAavC,kBAAkB,aAAsB,OAAO,cAE7C;IAEF,eAAe,uCAEb;IAEF,sBAAsB,uCAEpB;IAEF,MAAM,IAAI,YAAY;CA+EvB;AAED,eAAe,UAAU,CAAC"}
|
package/dist/csv/CsvOverlay.js
CHANGED
|
@@ -17,7 +17,7 @@ var ZIP_EXTENSIONS = ['.zip'];
|
|
|
17
17
|
|
|
18
18
|
class CsvOverlay extends Component {
|
|
19
19
|
static isValidDropItem(item) {
|
|
20
|
-
return item && item.kind === 'file' && !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type));
|
|
20
|
+
return item != null && item.kind === 'file' && !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type));
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
static isValidExtension(name) {
|
|
@@ -115,12 +115,12 @@ class CsvOverlay extends Component {
|
|
|
115
115
|
e.preventDefault();
|
|
116
116
|
e.stopPropagation();
|
|
117
117
|
|
|
118
|
-
if (dragError) {
|
|
118
|
+
if (dragError != null) {
|
|
119
119
|
clearDragError();
|
|
120
120
|
return;
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
if (
|
|
123
|
+
if (e.dataTransfer == null || e.dataTransfer.items == null || e.dataTransfer.items.length === 0) {
|
|
124
124
|
return;
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -209,7 +209,7 @@ class CsvOverlay extends Component {
|
|
|
209
209
|
selectedFileName,
|
|
210
210
|
dropError
|
|
211
211
|
} = this.state;
|
|
212
|
-
var error = dragError
|
|
212
|
+
var error = dragError !== null && dragError !== void 0 ? dragError : dropError;
|
|
213
213
|
var contextActions = this.makeContextMenuItems();
|
|
214
214
|
return /*#__PURE__*/React.createElement("div", {
|
|
215
215
|
ref: this.divElem,
|
|
@@ -229,7 +229,7 @@ class CsvOverlay extends Component {
|
|
|
229
229
|
},
|
|
230
230
|
onChange: this.handleFiles,
|
|
231
231
|
"data-testid": "fileElem"
|
|
232
|
-
}), !selectedFileName &&
|
|
232
|
+
}), !selectedFileName && (error === undefined || error === '') && /*#__PURE__*/React.createElement("div", {
|
|
233
233
|
className: "message-content"
|
|
234
234
|
}, /*#__PURE__*/React.createElement("div", {
|
|
235
235
|
className: "message-icon"
|
|
@@ -241,7 +241,7 @@ class CsvOverlay extends Component {
|
|
|
241
241
|
type: "button",
|
|
242
242
|
className: "btn btn-primary",
|
|
243
243
|
onClick: this.handleSelectFile
|
|
244
|
-
}, "Select File...")), selectedFileName &&
|
|
244
|
+
}, "Select File...")), selectedFileName && (error === undefined || error === '') && /*#__PURE__*/React.createElement("div", {
|
|
245
245
|
className: "selected-content"
|
|
246
246
|
}, /*#__PURE__*/React.createElement("div", {
|
|
247
247
|
className: "selected-icon"
|
|
@@ -257,7 +257,7 @@ class CsvOverlay extends Component {
|
|
|
257
257
|
onClick: this.unstageFile
|
|
258
258
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
259
259
|
icon: vsTrash
|
|
260
|
-
}))))), error && /*#__PURE__*/React.createElement("div", {
|
|
260
|
+
}))))), Boolean(error) && /*#__PURE__*/React.createElement("div", {
|
|
261
261
|
className: "message-content"
|
|
262
262
|
}, /*#__PURE__*/React.createElement("div", {
|
|
263
263
|
className: "message-icon"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvOverlay.js","names":["React","Component","memoize","FontAwesomeIcon","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","files","target","handleFile","clearDragError","dragError","dataTransfer","items","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","undefined","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","getFileTypeErrorString"],"sources":["../../src/csv/CsvOverlay.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n DragEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n IconDefinition,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { assertNotNull, TextUtils } from '@deephaven/utils';\n\ninterface CsvOverlayProps {\n allowZip: boolean;\n onFileOpened: (file: File) => void;\n onCancel: () => void;\n onPaste: (clipText: string) => void;\n clearDragError: () => void;\n dragError: string | null;\n onError: (e: unknown) => void;\n uploadInProgress: boolean;\n}\n\ninterface CsvOverlayState {\n selectedFileName: string;\n dropError?: string;\n}\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\nconst VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];\n\nconst ZIP_EXTENSIONS = ['.zip'];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component<CsvOverlayProps, CsvOverlayState> {\n static defaultProps = {\n allowZip: false,\n dragError: null,\n };\n\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item: DataTransferItem): boolean {\n return (\n item &&\n item.kind === 'file' &&\n !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type))\n );\n }\n\n static isValidExtension(name: string, allowZip = false): boolean {\n return (\n VALID_EXTENSIONS.some(ext => name.endsWith(ext)) ||\n (allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext)))\n );\n }\n\n static handleDragOver(e: DragEvent): void {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName: string): IconDefinition {\n if (fileName === PASTED_VALUES) {\n return vsClippy;\n }\n if (fileName.endsWith('.csv')) {\n return dhFileCsv;\n }\n if (fileName.endsWith('.zip')) {\n return vsFileZip;\n }\n return dhFileSpreadsheet;\n }\n\n constructor(props: CsvOverlayProps) {\n super(props);\n\n this.handleSelectFile = this.handleSelectFile.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.unstageFile = this.unstageFile.bind(this);\n this.handleMenuPaste = this.handleMenuPaste.bind(this);\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n\n this.fileElem = React.createRef();\n this.divElem = React.createRef();\n\n this.state = {\n selectedFileName: '',\n };\n }\n\n componentDidMount(): void {\n this.divElem.current?.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current?.focus();\n }\n\n componentWillUnmount(): void {\n this.divElem.current?.removeEventListener('paste', this.handlePasteEvent);\n }\n\n fileElem: RefObject<HTMLInputElement>;\n\n divElem: RefObject<HTMLDivElement>;\n\n handleSelectFile(): void {\n if (this.fileElem.current) {\n this.fileElem.current.value = '';\n this.fileElem.current?.click();\n }\n }\n\n handleFiles(event: ChangeEvent<HTMLInputElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { files } = event.target;\n if (files != null) {\n this.handleFile(files[0]);\n }\n }\n\n handleDrop(e: DragEvent<HTMLDivElement>): void {\n const { allowZip, clearDragError, dragError } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (dragError) {\n clearDragError();\n return;\n }\n\n if (!e.dataTransfer || !e.dataTransfer.items) {\n return;\n }\n\n const file = e.dataTransfer.items[0].getAsFile();\n assertNotNull(file);\n if (CsvOverlay.isValidExtension(file.name, allowZip)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event: MouseEvent<HTMLButtonElement>): void {\n const { onCancel } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onCancel();\n this.setState({\n selectedFileName: '',\n dropError: undefined,\n });\n }\n\n handleFile(file: File): void {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: undefined,\n });\n }\n\n handleMenuPaste(): void {\n const { onPaste, onError, uploadInProgress } = this.props;\n if (uploadInProgress) {\n return;\n }\n navigator.clipboard\n .readText()\n .then(clipText => {\n onPaste(clipText);\n this.setState({\n selectedFileName: PASTED_VALUES,\n dropError: undefined,\n });\n })\n .catch((e: unknown) => onError(e));\n }\n\n handlePasteEvent(event: ClipboardEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems(): ContextAction[] {\n const { uploadInProgress } = this.props;\n return [\n {\n title: 'Paste',\n icon: vsClippy,\n action: this.handleMenuPaste,\n shortcut: GLOBAL_SHORTCUTS.PASTE,\n disabled: uploadInProgress,\n },\n ];\n }\n\n getValidExtensions = memoize(allowZip =>\n allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]\n );\n\n getAcceptString = memoize(allowZip =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize(allowZip =>\n TextUtils.join(this.getValidExtensions(allowZip), 'or')\n );\n\n render(): ReactElement {\n const { allowZip, dragError, uploadInProgress } = this.props;\n const { selectedFileName, dropError } = this.state;\n const error = dragError || dropError;\n const contextActions = this.makeContextMenuItems();\n return (\n <div\n ref={this.divElem}\n className=\"csv-overlay fill-parent-absolute\"\n onDragOver={CsvOverlay.handleDragOver}\n onDrop={this.handleDrop}\n tabIndex={-1}\n >\n <ContextActions actions={contextActions} />\n <input\n ref={this.fileElem}\n type=\"file\"\n id=\"fileElem\"\n accept={this.getAcceptString(allowZip)}\n style={{ display: 'none' }}\n onChange={this.handleFiles}\n data-testid=\"fileElem\"\n />\n {!selectedFileName && !error && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={dhFileDownload} />\n </div>\n <label>Drop file (or paste values) here to import</label>\n <div className=\"message-small\">\n <label>or</label>\n </div>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleSelectFile}\n >\n Select File...\n </button>\n </div>\n )}\n {selectedFileName && !error && (\n <div className=\"selected-content\">\n <div className=\"selected-icon\">\n <FontAwesomeIcon icon={CsvOverlay.getIcon(selectedFileName)} />\n </div>\n <div className=\"selected-text\">\n <label>Selected File</label>\n <label className=\"selected-name\">\n {selectedFileName}\n {!uploadInProgress && (\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon ml-2\"\n onClick={this.unstageFile}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n )}\n </label>\n </div>\n </div>\n )}\n {error && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={vsWarning} />\n </div>\n <label>{error}</label>\n {error === CsvOverlay.FILE_TYPE_ERROR && (\n <div className=\"message-small\">\n <label>{this.getFileTypeErrorString(allowZip)}</label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvOverlay;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CsvOverlay.js","names":["React","Component","memoize","FontAwesomeIcon","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","files","target","handleFile","clearDragError","dragError","dataTransfer","items","length","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","undefined","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","Boolean","getFileTypeErrorString"],"sources":["../../src/csv/CsvOverlay.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n DragEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n IconDefinition,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { assertNotNull, TextUtils } from '@deephaven/utils';\n\ninterface CsvOverlayProps {\n allowZip: boolean;\n onFileOpened: (file: File) => void;\n onCancel: () => void;\n onPaste: (clipText: string) => void;\n clearDragError: () => void;\n dragError: string | null;\n onError: (e: unknown) => void;\n uploadInProgress: boolean;\n}\n\ninterface CsvOverlayState {\n selectedFileName: string;\n dropError?: string;\n}\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\nconst VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];\n\nconst ZIP_EXTENSIONS = ['.zip'];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component<CsvOverlayProps, CsvOverlayState> {\n static defaultProps = {\n allowZip: false,\n dragError: null,\n };\n\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item: DataTransferItem): boolean {\n return (\n item != null &&\n item.kind === 'file' &&\n !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type))\n );\n }\n\n static isValidExtension(name: string, allowZip = false): boolean {\n return (\n VALID_EXTENSIONS.some(ext => name.endsWith(ext)) ||\n (allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext)))\n );\n }\n\n static handleDragOver(e: DragEvent): void {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName: string): IconDefinition {\n if (fileName === PASTED_VALUES) {\n return vsClippy;\n }\n if (fileName.endsWith('.csv')) {\n return dhFileCsv;\n }\n if (fileName.endsWith('.zip')) {\n return vsFileZip;\n }\n return dhFileSpreadsheet;\n }\n\n constructor(props: CsvOverlayProps) {\n super(props);\n\n this.handleSelectFile = this.handleSelectFile.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.unstageFile = this.unstageFile.bind(this);\n this.handleMenuPaste = this.handleMenuPaste.bind(this);\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n\n this.fileElem = React.createRef();\n this.divElem = React.createRef();\n\n this.state = {\n selectedFileName: '',\n };\n }\n\n componentDidMount(): void {\n this.divElem.current?.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current?.focus();\n }\n\n componentWillUnmount(): void {\n this.divElem.current?.removeEventListener('paste', this.handlePasteEvent);\n }\n\n fileElem: RefObject<HTMLInputElement>;\n\n divElem: RefObject<HTMLDivElement>;\n\n handleSelectFile(): void {\n if (this.fileElem.current) {\n this.fileElem.current.value = '';\n this.fileElem.current?.click();\n }\n }\n\n handleFiles(event: ChangeEvent<HTMLInputElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { files } = event.target;\n if (files != null) {\n this.handleFile(files[0]);\n }\n }\n\n handleDrop(e: DragEvent<HTMLDivElement>): void {\n const { allowZip, clearDragError, dragError } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (dragError != null) {\n clearDragError();\n return;\n }\n\n if (\n e.dataTransfer == null ||\n e.dataTransfer.items == null ||\n e.dataTransfer.items.length === 0\n ) {\n return;\n }\n\n const file = e.dataTransfer.items[0].getAsFile();\n assertNotNull(file);\n if (CsvOverlay.isValidExtension(file.name, allowZip)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event: MouseEvent<HTMLButtonElement>): void {\n const { onCancel } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onCancel();\n this.setState({\n selectedFileName: '',\n dropError: undefined,\n });\n }\n\n handleFile(file: File): void {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: undefined,\n });\n }\n\n handleMenuPaste(): void {\n const { onPaste, onError, uploadInProgress } = this.props;\n if (uploadInProgress) {\n return;\n }\n navigator.clipboard\n .readText()\n .then(clipText => {\n onPaste(clipText);\n this.setState({\n selectedFileName: PASTED_VALUES,\n dropError: undefined,\n });\n })\n .catch((e: unknown) => onError(e));\n }\n\n handlePasteEvent(event: ClipboardEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems(): ContextAction[] {\n const { uploadInProgress } = this.props;\n return [\n {\n title: 'Paste',\n icon: vsClippy,\n action: this.handleMenuPaste,\n shortcut: GLOBAL_SHORTCUTS.PASTE,\n disabled: uploadInProgress,\n },\n ];\n }\n\n getValidExtensions = memoize((allowZip: boolean) =>\n allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]\n );\n\n getAcceptString = memoize(allowZip =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize(allowZip =>\n TextUtils.join(this.getValidExtensions(allowZip), 'or')\n );\n\n render(): ReactElement {\n const { allowZip, dragError, uploadInProgress } = this.props;\n const { selectedFileName, dropError } = this.state;\n const error = dragError ?? dropError;\n const contextActions = this.makeContextMenuItems();\n return (\n <div\n ref={this.divElem}\n className=\"csv-overlay fill-parent-absolute\"\n onDragOver={CsvOverlay.handleDragOver}\n onDrop={this.handleDrop}\n tabIndex={-1}\n >\n <ContextActions actions={contextActions} />\n <input\n ref={this.fileElem}\n type=\"file\"\n id=\"fileElem\"\n accept={this.getAcceptString(allowZip)}\n style={{ display: 'none' }}\n onChange={this.handleFiles}\n data-testid=\"fileElem\"\n />\n {!selectedFileName && (error === undefined || error === '') && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={dhFileDownload} />\n </div>\n <label>Drop file (or paste values) here to import</label>\n <div className=\"message-small\">\n <label>or</label>\n </div>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleSelectFile}\n >\n Select File...\n </button>\n </div>\n )}\n {selectedFileName && (error === undefined || error === '') && (\n <div className=\"selected-content\">\n <div className=\"selected-icon\">\n <FontAwesomeIcon icon={CsvOverlay.getIcon(selectedFileName)} />\n </div>\n <div className=\"selected-text\">\n <label>Selected File</label>\n <label className=\"selected-name\">\n {selectedFileName}\n {!uploadInProgress && (\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon ml-2\"\n onClick={this.unstageFile}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n )}\n </label>\n </div>\n </div>\n )}\n {Boolean(error) && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={vsWarning} />\n </div>\n <label>{error}</label>\n {error === CsvOverlay.FILE_TYPE_ERROR && (\n <div className=\"message-small\">\n <label>{this.getFileTypeErrorString(allowZip)}</label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvOverlay;\n"],"mappings":"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"}
|
package/dist/csv/CsvParser.js
CHANGED
|
@@ -293,7 +293,7 @@ class CsvParser {
|
|
|
293
293
|
|
|
294
294
|
handleComplete(results) {
|
|
295
295
|
// results is undefined for a succesful parse, but has meta data for an abort
|
|
296
|
-
if (
|
|
296
|
+
if (results == null || results.meta.aborted == null) {
|
|
297
297
|
this.isComplete = true; // Check if there are any consolidated chunks left over from a zip file
|
|
298
298
|
|
|
299
299
|
if (this.consolidatedChunks) {
|