@deephaven/console 0.11.8-beta.2 → 0.11.10-alpha.7

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 CHANGED
@@ -112,6 +112,7 @@ export namespace Console {
112
112
  const historyChildren: PropTypes.Requireable<PropTypes.ReactNodeLike>;
113
113
  const objectMap: PropTypes.Requireable<Map<unknown, unknown>>;
114
114
  const disabled: PropTypes.Requireable<boolean>;
115
+ const unzip: PropTypes.Requireable<(...args: any[]) => any>;
115
116
  }
116
117
  namespace defaultProps {
117
118
  const statusBarChildren_1: null;
@@ -132,6 +133,8 @@ export namespace Console {
132
133
  export { objectMap_1 as objectMap };
133
134
  const disabled_1: boolean;
134
135
  export { disabled_1 as disabled };
136
+ const unzip_1: null;
137
+ export { unzip_1 as unzip };
135
138
  }
136
139
  }
137
140
  export default Console;
@@ -1 +1 @@
1
- {"version":3,"file":"Console.d.ts","sourceRoot":"","sources":["../src/Console.jsx"],"names":[],"mappings":"AA+BA;IACE,4BAA0B;IAE1B;;;;OAIG;IACH;;;;;;;;;SAFa,OAAO,CAQnB;IAED;;;;OAIG;IACH;;;;;;;;;SAFa,OAAO,CAMnB;IAED,wBAmEC;IAyGD,yFAoBC;IArED,uCA+CC;IAybD,wCAwBC;IAvgBD,sCAKC;IAoGD,qCAMC;IAED,qCASC;IA8UD,+BAqCC;IAjMD,+BAUC;IAED,qCAIC;IAED,4CAIC;IAED,gCAIC;IA7LD,+BAgBC;IA+KD,wBAMC;IAED,sBAQC;IAED,qCAEC;IAED,iCAEC;IAED,8BAyBC;IAED,8BAQC;IAED,6BAEC;IAED,oCA+BC;IAgBD,oCAEC;IAED,iCAEC;IAED,oDAEC;IAxhBC,oBAA0B;IAC1B,kCAAoC;IACpC,mCAAqC;IACrC,+CAAiD;IACjD,iBAA4B;IAC5B,yBAA2B;IAiE7B,2BAGC;IAED,6BAKC;IAgFD,uFAyBC;IAqBD,mDAaC;IAoBD,qCAUC;IAED,sCAQC;IAED,wDAeC;IAED,2CAwDC;IAED,wBAGC;IAED;;;;OAIG;IACH,mCAHW,MAAM,wBACN,QAAQ,MAAM,CAAC,QAyBzB;IAED,oDASC;IAoID,yDAYC;IA+ED,4BAWC;IAED,iDAA2D;IAE3D,sDAUG;IAEH,mEASC;IAED,cAEC;IAED,+EAkBC;IAED,yBASC;CA6GF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BmB,2CAAQ"}
1
+ {"version":3,"file":"Console.d.ts","sourceRoot":"","sources":["../src/Console.jsx"],"names":[],"mappings":"AA+BA;IACE,4BAA0B;IAE1B;;;;OAIG;IACH;;;;;;;;;SAFa,OAAO,CAQnB;IAED;;;;OAIG;IACH;;;;;;;;;SAFa,OAAO,CAMnB;IAED,wBAmEC;IAyGD,yFAoBC;IArED,uCA+CC;IAybD,wCAwBC;IAvgBD,sCAKC;IAoGD,qCAMC;IAED,qCASC;IA8UD,+BAqCC;IAjMD,+BAUC;IAED,qCAIC;IAED,4CAIC;IAED,gCAIC;IA7LD,+BAgBC;IA+KD,wBAMC;IAED,sBAQC;IAED,qCAEC;IAED,iCAEC;IAED,8BAyBC;IAED,8BAQC;IAED,6BAEC;IAED,oCA+BC;IAgBD,oCAEC;IAED,iCAEC;IAED,oDAEC;IAxhBC,oBAA0B;IAC1B,kCAAoC;IACpC,mCAAqC;IACrC,+CAAiD;IACjD,iBAA4B;IAC5B,yBAA2B;IAiE7B,2BAGC;IAED,6BAKC;IAgFD,uFAyBC;IAqBD,mDAaC;IAoBD,qCAUC;IAED,sCAQC;IAED,wDAeC;IAED,2CAwDC;IAED,wBAGC;IAED;;;;OAIG;IACH,mCAHW,MAAM,wBACN,QAAQ,MAAM,CAAC,QAyBzB;IAED,oDASC;IAoID,yDAYC;IA+ED,4BAWC;IAED,iDAA2D;IAE3D,sDAUG;IAEH,mEASC;IAED,cAEC;IAED,+EAkBC;IAED,yBASC;CAgHF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkCmB,2CAAQ"}
package/dist/Console.js CHANGED
@@ -823,7 +823,8 @@ export class Console extends PureComponent {
823
823
  scope,
824
824
  commandHistoryStorage,
825
825
  timeZone,
826
- disabled
826
+ disabled,
827
+ unzip
827
828
  } = this.props;
828
829
  var {
829
830
  consoleHeight,
@@ -863,7 +864,8 @@ export class Console extends PureComponent {
863
864
  clearDragError: this.handleClearDragError,
864
865
  dragError: dragError,
865
866
  onError: this.handleCsvError,
866
- uploadInProgress: csvUploadInProgress
867
+ uploadInProgress: csvUploadInProgress,
868
+ allowZip: unzip != null
867
869
  }), /*#__PURE__*/React.createElement("div", {
868
870
  role: "presentation",
869
871
  className: classNames('scroll-pane no-scroll-x', {
@@ -893,7 +895,8 @@ export class Console extends PureComponent {
893
895
  file: csvFile,
894
896
  paste: csvPaste,
895
897
  onInProgress: this.handleCsvInProgress,
896
- timeZone: timeZone
898
+ timeZone: timeZone,
899
+ unzip: unzip
897
900
  })), /*#__PURE__*/React.createElement(ContextActions, {
898
901
  actions: contextActions,
899
902
  ignoreClassNames: [ConsoleInput.INPUT_CLASS_NAME]
@@ -921,7 +924,13 @@ Console.propTypes = {
921
924
  historyChildren: PropTypes.node,
922
925
  // Known object map
923
926
  objectMap: PropTypes.instanceOf(Map),
924
- disabled: PropTypes.bool
927
+ disabled: PropTypes.bool,
928
+
929
+ /**
930
+ * Function to unzip a zip file. If not provided, zip files will not be accepted
931
+ * (file:File) => Promise<File[]>
932
+ */
933
+ unzip: PropTypes.func
925
934
  };
926
935
  Console.defaultProps = {
927
936
  statusBarChildren: null,
@@ -932,7 +941,8 @@ Console.defaultProps = {
932
941
  historyChildren: null,
933
942
  timeZone: 'America/New_York',
934
943
  objectMap: new Map(),
935
- disabled: false
944
+ disabled: false,
945
+ unzip: null
936
946
  };
937
947
  export default Console;
938
948
  //# sourceMappingURL=Console.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Console.jsx"],"names":["React","PureComponent","PropTypes","ContextActions","vsCheck","classNames","memoize","throttle","dh","APIPropTypes","Log","Pending","ConsoleHistory","SHORTCUTS","LogLevel","ConsoleInput","CsvOverlay","CsvInputBar","ConsoleStatusBar","StoragePropTypes","log","module","DEFAULT_SETTINGS","isAutoLaunchPanelsEnabled","isPrintStdOutEnabled","isClosePanelsOnDisconnectEnabled","Console","isErrorLevel","logLevel","STDERR","ERROR","FATAL","isOutputLevel","STDOUT","constructor","props","objectMap","values","actions","action","handleClearShortcut","shortcut","CONSOLE","CLEAR","handleFocusHistory","FOCUS_HISTORY","handleCommandResult","bind","handleCommandStarted","handleCommandSubmit","handleLogMessage","handleOverflowActions","handleScrollPaneScroll","handleToggleAutoLaunchPanels","handleToggleClosePanelsOnDisconnect","handleTogglePrintStdout","processLogMessageQueue","LOG_THROTTLE","handleUploadCsv","handleHideCsv","handleCsvFileOpened","handleCsvPaste","handleDragEnter","handleDragLeave","handleClearDragError","handleOpenCsvTable","handleCsvUpdate","handleCsvError","handleCsvInProgress","cancelListener","consolePane","createRef","consoleInput","consoleHistoryScrollPane","pending","queuedLogMessages","settings","state","consoleHistory","consoleHeight","isScrollDecorationShown","objectHistoryMap","Map","showCsvOverlay","csvFile","csvPaste","dragError","csvUploadInProgress","componentDidMount","initConsoleLogging","session","addEventListener","IdeSession","EVENT_COMMANDSTARTED","updateDimensions","componentDidUpdate","prevProps","prevState","sendSettingsChange","updateObjectMap","componentWillUnmount","removeEventListener","cancel","deinitConsoleLogging","onLogMessage","event","preventDefault","stopPropagation","current","clear","code","result","detail","wrappedResult","add","historyItem","command","disabledObjects","startTime","Date","now","endTime","cancelResult","commandHistoryStorage","language","scope","workspaceItemPromise","addItem","toJSON","catch","err","debug","setState","concat","scrollConsoleHistoryToBottom","then","resolved","error","handleCommandError","historyItemParam","updateHistory","updateKnownObjects","updateWorkspaceHistoryItem","closeRemovedItems","changes","openUpdatedItems","isCanceled","history","index","lastIndexOf","focusCommandHistory","message","queueLogMessage","push","debug2","length","openObject","created","updated","forEach","object","removed","closeObject","itemIndex","disableOldObject","isRemoved","name","oldIndex","get","set","delete","promise","workspaceItem","updatedItem","data","updateItem","warn","force","pane","scrollTop","scrollHeight","offsetHeight","window","requestAnimationFrame","scrollPane","clientHeight","file","value","e","dataTransfer","items","kind","MULTIPLE_FILE_ERROR","item","isValidDropItem","FILE_TYPE_ERROR","currentTarget","contains","relatedTarget","type","VariableType","TABLE","isExistingObject","has","addConsoleHistoryMessage","title","group","groups","high","icon","order","clearConsoleHistory","runCode","keys","map","addCommand","focus","execute","setConsoleText","checkIfChanged","Object","hasChanges","i","key","setting","prevSetting","onSettingsChange","render","historyChildren","statusBarChildren","timeZone","disabled","consoleMenuObjects","getObjects","inputMaxHeight","Math","round","contextActions","getContextActions","handleDragOver","INPUT_CLASS_NAME","propTypes","node","shape","func","isRequired","string","CommandHistoryStorage","arrayOf","instanceOf","bool","defaultProps"],"mappings":"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","sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { ContextActions } from '@deephaven/components';\nimport { vsCheck } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Pending } from '@deephaven/utils';\nimport ConsoleHistory from './console-history/ConsoleHistory';\nimport SHORTCUTS from './ConsoleShortcuts';\nimport LogLevel from './log/LogLevel';\nimport ConsoleInput from './ConsoleInput';\nimport CsvOverlay from './csv/CsvOverlay';\nimport CsvInputBar from './csv/CsvInputBar';\nimport './Console.scss';\nimport ConsoleStatusBar from './ConsoleStatusBar';\nimport StoragePropTypes from './StoragePropTypes';\n\nconst log = Log.module('Console');\n\nconst DEFAULT_SETTINGS = {\n isAutoLaunchPanelsEnabled: true,\n isPrintStdOutEnabled: true,\n isClosePanelsOnDisconnectEnabled: true,\n};\n\nexport class Console extends PureComponent {\n static LOG_THROTTLE = 500;\n\n /**\n * Check if the provided log level is an error type\n * @param {LogLevel} logLevel The LogLevel being checked\n * @returns {boolean} true if the log level is an error level log\n */\n static isErrorLevel(logLevel) {\n return (\n logLevel === LogLevel.STDERR ||\n logLevel === LogLevel.ERROR ||\n logLevel === LogLevel.FATAL\n );\n }\n\n /**\n * Check if the provided log level is output level\n * @param {LogLevel} logLevel The LogLevel being checked\n * @returns {boolean} true if the log level should be output to the console\n */\n static isOutputLevel(logLevel) {\n // We want all errors to be output, in addition to STDOUT.\n // That way the user is more likely to see them.\n return logLevel === LogLevel.STDOUT || Console.isErrorLevel(logLevel);\n }\n\n constructor(props) {\n super(props);\n\n this.handleCommandResult = this.handleCommandResult.bind(this);\n this.handleCommandStarted = this.handleCommandStarted.bind(this);\n this.handleCommandSubmit = this.handleCommandSubmit.bind(this);\n this.handleClearShortcut = this.handleClearShortcut.bind(this);\n this.handleFocusHistory = this.handleFocusHistory.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleOverflowActions = this.handleOverflowActions.bind(this);\n this.handleScrollPaneScroll = this.handleScrollPaneScroll.bind(this);\n this.handleToggleAutoLaunchPanels = this.handleToggleAutoLaunchPanels.bind(\n this\n );\n this.handleToggleClosePanelsOnDisconnect = this.handleToggleClosePanelsOnDisconnect.bind(\n this\n );\n this.handleTogglePrintStdout = this.handleTogglePrintStdout.bind(this);\n this.processLogMessageQueue = throttle(\n this.processLogMessageQueue.bind(this),\n Console.LOG_THROTTLE\n );\n this.handleUploadCsv = this.handleUploadCsv.bind(this);\n this.handleHideCsv = this.handleHideCsv.bind(this);\n this.handleCsvFileOpened = this.handleCsvFileOpened.bind(this);\n this.handleCsvPaste = this.handleCsvPaste.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleClearDragError = this.handleClearDragError.bind(this);\n this.handleOpenCsvTable = this.handleOpenCsvTable.bind(this);\n this.handleCsvUpdate = this.handleCsvUpdate.bind(this);\n this.handleCsvError = this.handleCsvError.bind(this);\n this.handleCsvInProgress = this.handleCsvInProgress.bind(this);\n\n this.cancelListener = null;\n this.consolePane = React.createRef();\n this.consoleInput = React.createRef();\n this.consoleHistoryScrollPane = React.createRef();\n this.pending = new Pending();\n this.queuedLogMessages = [];\n\n const { objectMap, settings } = this.props;\n\n this.state = {\n // Need separate histories as console history has stdout/stderr output\n consoleHistory: [],\n\n // Height of the viewport of the console input and history\n consoleHeight: 0,\n\n isScrollDecorationShown: false,\n\n // Location of objects in the console history\n objectHistoryMap: new Map(),\n\n // The object definitions, name/type\n objectMap: new Map(objectMap),\n\n showCsvOverlay: false,\n csvFile: null,\n csvPaste: null,\n dragError: null,\n csvUploadInProgress: false,\n\n ...DEFAULT_SETTINGS,\n ...settings,\n };\n }\n\n componentDidMount() {\n this.initConsoleLogging();\n\n const { session } = this.props;\n session.addEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n\n this.updateDimensions();\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { props, state } = this;\n this.sendSettingsChange(prevState, state);\n\n if (props.objectMap !== prevProps.objectMap) {\n this.updateObjectMap();\n }\n }\n\n componentWillUnmount() {\n const { session } = this.props;\n\n session.removeEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n\n this.pending.cancel();\n this.processLogMessageQueue.cancel();\n\n this.deinitConsoleLogging();\n }\n\n initConsoleLogging() {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n deinitConsoleLogging() {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = null;\n }\n }\n\n handleClearShortcut(event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.consoleInput.current.clear();\n }\n\n handleCommandStarted(event) {\n const { code, result } = event.detail;\n const wrappedResult = this.pending.add(result);\n const historyItem = {\n command: code,\n result: null,\n disabledObjects: [],\n startTime: Date.now(),\n endTime: null,\n cancelResult: () => {\n result.cancel();\n },\n wrappedResult,\n };\n\n const { commandHistoryStorage, language, scope } = this.props;\n const workspaceItemPromise = commandHistoryStorage.addItem(\n language,\n scope,\n code,\n {\n command: code,\n startTime: new Date().toJSON(),\n endTime: null,\n result: null,\n }\n );\n workspaceItemPromise.catch(err => {\n log.debug('Error adding workspace item', err);\n });\n\n this.setState(\n state => ({\n consoleHistory: state.consoleHistory.concat(historyItem),\n }),\n () => {\n this.scrollConsoleHistoryToBottom(true);\n }\n );\n\n wrappedResult\n .then(resolved => {\n this.handleCommandResult(resolved, historyItem, workspaceItemPromise);\n })\n .catch(error => {\n this.handleCommandError(error, historyItem, workspaceItemPromise);\n });\n }\n\n handleCommandResult(result, historyItemParam, workspaceItemPromise) {\n const historyItem = historyItemParam;\n historyItem.wrappedResult = null;\n historyItem.cancelResult = null;\n\n if (!result) {\n return;\n }\n\n historyItem.result = result;\n\n this.updateHistory(result, historyItem);\n this.updateKnownObjects(historyItem);\n this.updateWorkspaceHistoryItem(\n { error: result.error },\n workspaceItemPromise\n );\n\n this.closeRemovedItems(result.changes);\n this.openUpdatedItems(result.changes);\n }\n\n handleCommandError(error, historyItemParam, workspaceItemPromise) {\n const historyItem = historyItemParam;\n historyItem.wrappedResult = null;\n historyItem.cancelResult = null;\n\n if (error && error.isCanceled) {\n log.debug('Called handleCommandError on a cancelled promise result');\n return;\n }\n\n this.updateWorkspaceHistoryItem(\n { error: `${error}` },\n workspaceItemPromise\n );\n\n this.setState(state => {\n const history = state.consoleHistory.concat();\n const index = history.lastIndexOf(historyItem);\n historyItem.endTime = Date.now();\n historyItem.result = { error };\n history[index] = { ...historyItem };\n return {\n consoleHistory: history,\n };\n });\n }\n\n handleFocusHistory(event) {\n event.preventDefault();\n event.stopPropagation();\n\n const { focusCommandHistory } = this.props;\n focusCommandHistory();\n }\n\n handleLogMessage(message) {\n const { isPrintStdOutEnabled } = this.state;\n if (!isPrintStdOutEnabled) {\n return;\n }\n\n if (Console.isOutputLevel(message.logLevel)) {\n this.queueLogMessage(message.message, message.logLevel);\n }\n }\n\n queueLogMessage(message, logLevel) {\n const result = {};\n if (Console.isErrorLevel(logLevel)) {\n result.error = message;\n } else {\n result.message = message;\n }\n\n const historyItem = { command: null, result };\n\n this.queuedLogMessages.push(historyItem);\n\n this.processLogMessageQueue();\n }\n\n processLogMessageQueue() {\n this.scrollConsoleHistoryToBottom();\n\n this.setState(state => {\n log.debug2(\n 'processLogMessageQueue',\n this.queuedLogMessages.length,\n ' items'\n );\n\n let { consoleHistory } = state;\n consoleHistory = consoleHistory.concat(this.queuedLogMessages);\n this.queuedLogMessages = [];\n\n return { consoleHistory };\n });\n }\n\n openUpdatedItems(changes) {\n const { isAutoLaunchPanelsEnabled } = this.state;\n if (!changes || !isAutoLaunchPanelsEnabled) {\n return;\n }\n\n const { openObject } = this.props;\n [...changes.created, ...changes.updated].forEach(object =>\n openObject(object)\n );\n }\n\n closeRemovedItems(changes) {\n if (!changes || !changes.removed || changes.removed.length === 0) {\n return;\n }\n\n const { closeObject } = this.props;\n const { removed } = changes;\n removed.forEach(object => closeObject(object));\n }\n\n updateHistory(result, historyItemParam) {\n const historyItem = historyItemParam;\n if (!result || !result.changes || !historyItem) {\n return;\n }\n\n historyItem.endTime = Date.now();\n\n this.scrollConsoleHistoryToBottom();\n\n // Update history to re-render items as necessary\n this.setState(state => {\n const consoleHistory = state.consoleHistory.concat();\n return { consoleHistory };\n });\n }\n\n updateKnownObjects(historyItem) {\n const { changes } = historyItem.result;\n if (\n !changes ||\n ((!changes.created || changes.created.length === 0) &&\n (!changes.updated || changes.updated.length === 0) &&\n (!changes.removed || changes.removed.length === 0))\n ) {\n log.debug2('updateKnownObjects no changes');\n return;\n }\n\n this.setState(state => {\n const history = state.consoleHistory.concat();\n const itemIndex = history.lastIndexOf(historyItem);\n if (itemIndex < 0) {\n log.error(`historyItem not found in state.consoleHistory`);\n return null;\n }\n\n const objectHistoryMap = new Map(state.objectHistoryMap);\n const objectMap = new Map(state.objectMap);\n\n const disableOldObject = (object, isRemoved = false) => {\n const { name } = object;\n const oldIndex = objectHistoryMap.get(name);\n // oldIndex can be -1 if a object is active but doesn't have a command in consoleHistory\n // this can happen after clearing the console using 'clear' or 'cls' command\n if (oldIndex >= 0) {\n // disable outdated object variable in the old consoleHistory item\n history[oldIndex].disabledObjects = history[\n oldIndex\n ].disabledObjects.concat(name);\n history[oldIndex] = { ...history[oldIndex] };\n }\n objectHistoryMap.set(name, itemIndex);\n if (isRemoved) {\n objectMap.delete(name);\n } else {\n objectMap.set(name, object);\n }\n };\n\n changes.updated.forEach(object => disableOldObject(object));\n changes.removed.forEach(object => disableOldObject(object, true));\n\n // Created objects have to be processed after removed\n // in case the same object name is present in both removed and created\n changes.created.forEach(object => {\n const { name } = object;\n objectHistoryMap.set(name, itemIndex);\n objectMap.set(name, object);\n });\n\n return { objectHistoryMap, objectMap, consoleHistory: history };\n });\n }\n\n updateObjectMap() {\n const { objectMap } = this.props;\n this.setState({ objectMap });\n }\n\n /**\n * Updates an existing workspace CommandHistoryItem\n * @param {object} result The result to store with the history item. Could be empty object for success\n * @param {Promise<object>} workspaceItemPromise The workspace data row promise for the workspace item to be updated\n */\n updateWorkspaceHistoryItem(result, workspaceItemPromise) {\n const promise = this.pending.add(workspaceItemPromise);\n\n const endTime = new Date().toJSON();\n promise\n .then(workspaceItem => {\n const updatedItem = {\n ...workspaceItem,\n data: {\n ...workspaceItem.data,\n endTime,\n result,\n },\n };\n\n const { commandHistoryStorage, language } = this.props;\n commandHistoryStorage.updateItem(language, updatedItem).catch(err => {\n log.warn('Error updating command history storage', err);\n });\n })\n .catch(err => {\n log.debug('Error updating workspace history item', err);\n });\n }\n\n scrollConsoleHistoryToBottom(force = false) {\n const pane = this.consoleHistoryScrollPane.current;\n if (!force && pane.scrollTop < pane.scrollHeight - pane.offsetHeight) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n pane.scrollTop = pane.scrollHeight;\n });\n }\n\n handleScrollPaneScroll() {\n const scrollPane = this.consoleHistoryScrollPane.current;\n if (\n scrollPane.scrollTop > 0 &&\n scrollPane.scrollHeight > scrollPane.clientHeight\n ) {\n this.setState({ isScrollDecorationShown: true });\n } else {\n this.setState({ isScrollDecorationShown: false });\n }\n }\n\n handleToggleAutoLaunchPanels() {\n this.setState(state => ({\n isAutoLaunchPanelsEnabled: !state.isAutoLaunchPanelsEnabled,\n }));\n }\n\n handleToggleClosePanelsOnDisconnect() {\n this.setState(state => ({\n isClosePanelsOnDisconnectEnabled: !state.isClosePanelsOnDisconnectEnabled,\n }));\n }\n\n handleTogglePrintStdout() {\n this.setState(state => ({\n isPrintStdOutEnabled: !state.isPrintStdOutEnabled,\n }));\n }\n\n handleUploadCsv() {\n this.setState({\n showCsvOverlay: true,\n dragError: null,\n csvUploadInProgress: false,\n });\n }\n\n handleHideCsv() {\n this.setState({\n showCsvOverlay: false,\n csvFile: null,\n csvPaste: null,\n dragError: null,\n csvUploadInProgress: false,\n });\n }\n\n handleCsvFileOpened(file) {\n this.setState({ csvFile: file, csvPaste: null });\n }\n\n handleCsvPaste(value) {\n this.setState({ csvFile: null, csvPaste: value });\n }\n\n handleDragEnter(e) {\n if (\n !e.dataTransfer ||\n !e.dataTransfer.items ||\n e.dataTransfer.items.length === 0 ||\n e.dataTransfer.items[0].kind === 'string'\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.setState({ showCsvOverlay: true });\n\n const { items } = e.dataTransfer;\n if (items.length > 1) {\n this.setState({ dragError: CsvOverlay.MULTIPLE_FILE_ERROR });\n return;\n }\n\n const item = items[0];\n if (CsvOverlay.isValidDropItem(item)) {\n this.setState({ dragError: null });\n } else {\n this.setState({ dragError: CsvOverlay.FILE_TYPE_ERROR });\n }\n }\n\n handleDragLeave(e) {\n // DragLeave gets fired for every child element, so make sure we're actually leaving the drop zone\n if (!e.currentTarget || e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.setState({ showCsvOverlay: false, dragError: null });\n }\n\n handleClearDragError() {\n this.setState({ dragError: null });\n }\n\n handleOpenCsvTable(name) {\n const { openObject, commandHistoryStorage, language, scope } = this.props;\n const { consoleHistory, objectMap } = this.state;\n const object = { name, type: dh.VariableType.TABLE };\n const isExistingObject = objectMap.has(name);\n const historyItem = {\n startTime: Date.now(),\n endTime: Date.now(),\n disabledObjects: [],\n result: {\n changes: {\n created: [],\n updated: [],\n removed: [],\n [isExistingObject ? 'updated' : 'created']: [object],\n },\n },\n };\n const history = consoleHistory.concat(historyItem);\n this.setState({\n consoleHistory: history,\n });\n this.scrollConsoleHistoryToBottom(true);\n this.updateKnownObjects(historyItem);\n openObject({ name, type: dh.VariableType.TABLE });\n commandHistoryStorage.addItem(language, scope, name, {\n command: name,\n startTime: new Date().toJSON(),\n endTime: new Date().toJSON(),\n result: null,\n });\n }\n\n addConsoleHistoryMessage(message, error) {\n const { consoleHistory } = this.state;\n const historyItem = {\n command: '',\n startTime: Date.now(),\n endTime: Date.now(),\n result: { message, error },\n };\n const history = consoleHistory.concat(historyItem);\n this.setState({\n consoleHistory: history,\n });\n }\n\n handleCsvUpdate(message) {\n this.addConsoleHistoryMessage(message);\n }\n\n handleCsvError(error) {\n this.addConsoleHistoryMessage(null, error);\n }\n\n handleCsvInProgress(csvUploadInProgress) {\n this.setState({ csvUploadInProgress });\n }\n\n handleOverflowActions() {\n const {\n isAutoLaunchPanelsEnabled,\n isClosePanelsOnDisconnectEnabled,\n isPrintStdOutEnabled,\n } = this.state;\n const { actions } = this.props;\n return [\n ...actions,\n {\n title: 'Print Stdout',\n action: this.handleTogglePrintStdout,\n group: ContextActions.groups.high,\n icon: isPrintStdOutEnabled ? vsCheck : null,\n order: 10,\n },\n {\n title: 'Auto Launch Panels',\n action: this.handleToggleAutoLaunchPanels,\n group: ContextActions.groups.high,\n icon: isAutoLaunchPanelsEnabled ? vsCheck : null,\n order: 20,\n },\n {\n title: 'Close Panels on Disconnect',\n action: this.handleToggleClosePanelsOnDisconnect,\n group: ContextActions.groups.high,\n icon: isClosePanelsOnDisconnectEnabled ? vsCheck : null,\n order: 30,\n },\n {\n title: 'Upload Table from File',\n action: this.handleUploadCsv,\n group: ContextActions.groups.high + 10,\n order: 40,\n },\n ];\n }\n\n handleCommandSubmit(command) {\n if (command === 'clear' || command === 'cls') {\n this.clearConsoleHistory();\n } else if (command.length > 0) {\n // Result is handled in this.handleCommandStarted\n const { session } = this.props;\n session.runCode(command).catch(error => {\n log.error('There was an error initiating the command', error);\n });\n } else {\n // Empty command, just pump a blank line out to history\n const historyItem = {\n command: ' ',\n result: {},\n startTime: Date.now(),\n endTime: Date.now(),\n };\n\n this.scrollConsoleHistoryToBottom(true);\n\n this.setState(state => ({\n consoleHistory: state.consoleHistory.concat(historyItem),\n }));\n }\n }\n\n clearConsoleHistory() {\n this.pending.cancel();\n\n this.setState(state => {\n // Replace all values with -1 to indicate that table references are still active\n // but don't have corresponding command indexes in consoleHistory\n const objectHistoryMap = new Map(\n [...state.objectHistoryMap.keys()].map(name => [name, -1])\n );\n return { consoleHistory: [], objectHistoryMap };\n });\n }\n\n getObjects = memoize(objectMap => [...objectMap.values()]);\n\n getContextActions = memoize(actions => [\n ...actions,\n {\n action: this.handleClearShortcut,\n shortcut: SHORTCUTS.CONSOLE.CLEAR,\n },\n {\n action: this.handleFocusHistory,\n shortcut: SHORTCUTS.CONSOLE.FOCUS_HISTORY,\n },\n ]);\n\n addCommand(command, focus = true, execute = false) {\n if (!this.consoleInput.current) {\n return;\n }\n this.consoleInput.current.setConsoleText(command, focus, execute);\n\n if (focus) {\n this.scrollConsoleHistoryToBottom(true);\n }\n }\n\n focus() {\n this.consoleInput.current?.focus();\n }\n\n sendSettingsChange(prevState, state, checkIfChanged = true) {\n const keys = Object.keys(DEFAULT_SETTINGS);\n const settings = {};\n let hasChanges = false;\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const { [key]: setting } = state;\n const { [key]: prevSetting } = prevState;\n if (setting !== prevSetting) {\n hasChanges = true;\n }\n settings[key] = setting;\n }\n if (checkIfChanged && !hasChanges) {\n return;\n }\n const { onSettingsChange } = this.props;\n onSettingsChange(settings);\n }\n\n updateDimensions() {\n if (this.consolePane.current) {\n this.setState({\n consoleHeight: this.consolePane.current.clientHeight,\n });\n }\n if (this.consoleInput.current) {\n this.consoleInput.current.updateDimensions();\n }\n }\n\n render() {\n const {\n actions,\n historyChildren,\n language,\n statusBarChildren,\n openObject,\n session,\n scope,\n commandHistoryStorage,\n timeZone,\n disabled,\n } = this.props;\n const {\n consoleHeight,\n consoleHistory,\n isScrollDecorationShown,\n objectMap,\n showCsvOverlay,\n csvFile,\n csvPaste,\n dragError,\n csvUploadInProgress,\n } = this.state;\n const consoleMenuObjects = this.getObjects(objectMap);\n const inputMaxHeight = Math.round(consoleHeight * 0.7);\n const contextActions = this.getContextActions(actions);\n\n return (\n <div\n role=\"presentation\"\n className={classNames('iris-console', 'h-100', 'w-100', { disabled })}\n >\n <div className=\"console-pane\" ref={this.consolePane}>\n <ConsoleStatusBar\n session={session}\n overflowActions={this.handleOverflowActions}\n openObject={openObject}\n objects={consoleMenuObjects}\n >\n {statusBarChildren}\n </ConsoleStatusBar>\n <div\n className=\"console-csv-container\"\n onDragOver={CsvOverlay.handleDragOver}\n onDragEnter={this.handleDragEnter}\n onDragLeave={this.handleDragLeave}\n >\n {showCsvOverlay && (\n <CsvOverlay\n onFileOpened={this.handleCsvFileOpened}\n onPaste={this.handleCsvPaste}\n clearDragError={this.handleClearDragError}\n dragError={dragError}\n onError={this.handleCsvError}\n uploadInProgress={csvUploadInProgress}\n />\n )}\n <div\n role=\"presentation\"\n className={classNames('scroll-pane no-scroll-x', {\n 'scroll-decoration': isScrollDecorationShown,\n })}\n onScroll={this.handleScrollPaneScroll}\n ref={this.consoleHistoryScrollPane}\n >\n <ConsoleHistory\n items={consoleHistory}\n openObject={openObject}\n language={language}\n disabled={disabled}\n />\n {historyChildren}\n </div>\n </div>\n {!showCsvOverlay && (\n <ConsoleInput\n ref={this.consoleInput}\n session={session}\n language={language}\n scope={scope}\n onSubmit={this.handleCommandSubmit}\n maxHeight={inputMaxHeight}\n commandHistoryStorage={commandHistoryStorage}\n />\n )}\n {showCsvOverlay && (\n <CsvInputBar\n session={session}\n onOpenTable={this.handleOpenCsvTable}\n onClose={this.handleHideCsv}\n onUpdate={this.handleCsvUpdate}\n onError={this.handleCsvError}\n file={csvFile}\n paste={csvPaste}\n onInProgress={this.handleCsvInProgress}\n timeZone={timeZone}\n />\n )}\n </div>\n <ContextActions\n actions={contextActions}\n ignoreClassNames={[ConsoleInput.INPUT_CLASS_NAME]}\n />\n </div>\n );\n }\n}\n\nConsole.propTypes = {\n statusBarChildren: PropTypes.node,\n settings: PropTypes.shape({}),\n focusCommandHistory: PropTypes.func.isRequired,\n openObject: PropTypes.func.isRequired,\n closeObject: PropTypes.func.isRequired,\n session: APIPropTypes.IdeSession.isRequired,\n language: PropTypes.string.isRequired,\n commandHistoryStorage: StoragePropTypes.CommandHistoryStorage.isRequired,\n onSettingsChange: PropTypes.func,\n scope: PropTypes.string,\n actions: PropTypes.arrayOf(PropTypes.shape({})),\n timeZone: PropTypes.string,\n\n // Children shown at the bottom of the console history\n historyChildren: PropTypes.node,\n\n // Known object map\n objectMap: PropTypes.instanceOf(Map),\n\n disabled: PropTypes.bool,\n};\n\nConsole.defaultProps = {\n statusBarChildren: null,\n settings: {},\n onSettingsChange: () => {},\n scope: null,\n actions: [],\n historyChildren: null,\n timeZone: 'America/New_York',\n objectMap: new Map(),\n disabled: false,\n};\n\nexport default Console;\n"],"file":"Console.js"}
1
+ {"version":3,"sources":["../src/Console.jsx"],"names":["React","PureComponent","PropTypes","ContextActions","vsCheck","classNames","memoize","throttle","dh","APIPropTypes","Log","Pending","ConsoleHistory","SHORTCUTS","LogLevel","ConsoleInput","CsvOverlay","CsvInputBar","ConsoleStatusBar","StoragePropTypes","log","module","DEFAULT_SETTINGS","isAutoLaunchPanelsEnabled","isPrintStdOutEnabled","isClosePanelsOnDisconnectEnabled","Console","isErrorLevel","logLevel","STDERR","ERROR","FATAL","isOutputLevel","STDOUT","constructor","props","objectMap","values","actions","action","handleClearShortcut","shortcut","CONSOLE","CLEAR","handleFocusHistory","FOCUS_HISTORY","handleCommandResult","bind","handleCommandStarted","handleCommandSubmit","handleLogMessage","handleOverflowActions","handleScrollPaneScroll","handleToggleAutoLaunchPanels","handleToggleClosePanelsOnDisconnect","handleTogglePrintStdout","processLogMessageQueue","LOG_THROTTLE","handleUploadCsv","handleHideCsv","handleCsvFileOpened","handleCsvPaste","handleDragEnter","handleDragLeave","handleClearDragError","handleOpenCsvTable","handleCsvUpdate","handleCsvError","handleCsvInProgress","cancelListener","consolePane","createRef","consoleInput","consoleHistoryScrollPane","pending","queuedLogMessages","settings","state","consoleHistory","consoleHeight","isScrollDecorationShown","objectHistoryMap","Map","showCsvOverlay","csvFile","csvPaste","dragError","csvUploadInProgress","componentDidMount","initConsoleLogging","session","addEventListener","IdeSession","EVENT_COMMANDSTARTED","updateDimensions","componentDidUpdate","prevProps","prevState","sendSettingsChange","updateObjectMap","componentWillUnmount","removeEventListener","cancel","deinitConsoleLogging","onLogMessage","event","preventDefault","stopPropagation","current","clear","code","result","detail","wrappedResult","add","historyItem","command","disabledObjects","startTime","Date","now","endTime","cancelResult","commandHistoryStorage","language","scope","workspaceItemPromise","addItem","toJSON","catch","err","debug","setState","concat","scrollConsoleHistoryToBottom","then","resolved","error","handleCommandError","historyItemParam","updateHistory","updateKnownObjects","updateWorkspaceHistoryItem","closeRemovedItems","changes","openUpdatedItems","isCanceled","history","index","lastIndexOf","focusCommandHistory","message","queueLogMessage","push","debug2","length","openObject","created","updated","forEach","object","removed","closeObject","itemIndex","disableOldObject","isRemoved","name","oldIndex","get","set","delete","promise","workspaceItem","updatedItem","data","updateItem","warn","force","pane","scrollTop","scrollHeight","offsetHeight","window","requestAnimationFrame","scrollPane","clientHeight","file","value","e","dataTransfer","items","kind","MULTIPLE_FILE_ERROR","item","isValidDropItem","FILE_TYPE_ERROR","currentTarget","contains","relatedTarget","type","VariableType","TABLE","isExistingObject","has","addConsoleHistoryMessage","title","group","groups","high","icon","order","clearConsoleHistory","runCode","keys","map","addCommand","focus","execute","setConsoleText","checkIfChanged","Object","hasChanges","i","key","setting","prevSetting","onSettingsChange","render","historyChildren","statusBarChildren","timeZone","disabled","unzip","consoleMenuObjects","getObjects","inputMaxHeight","Math","round","contextActions","getContextActions","handleDragOver","INPUT_CLASS_NAME","propTypes","node","shape","func","isRequired","string","CommandHistoryStorage","arrayOf","instanceOf","bool","defaultProps"],"mappings":"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","sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { ContextActions } from '@deephaven/components';\nimport { vsCheck } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Pending } from '@deephaven/utils';\nimport ConsoleHistory from './console-history/ConsoleHistory';\nimport SHORTCUTS from './ConsoleShortcuts';\nimport LogLevel from './log/LogLevel';\nimport ConsoleInput from './ConsoleInput';\nimport CsvOverlay from './csv/CsvOverlay';\nimport CsvInputBar from './csv/CsvInputBar';\nimport './Console.scss';\nimport ConsoleStatusBar from './ConsoleStatusBar';\nimport StoragePropTypes from './StoragePropTypes';\n\nconst log = Log.module('Console');\n\nconst DEFAULT_SETTINGS = {\n isAutoLaunchPanelsEnabled: true,\n isPrintStdOutEnabled: true,\n isClosePanelsOnDisconnectEnabled: true,\n};\n\nexport class Console extends PureComponent {\n static LOG_THROTTLE = 500;\n\n /**\n * Check if the provided log level is an error type\n * @param {LogLevel} logLevel The LogLevel being checked\n * @returns {boolean} true if the log level is an error level log\n */\n static isErrorLevel(logLevel) {\n return (\n logLevel === LogLevel.STDERR ||\n logLevel === LogLevel.ERROR ||\n logLevel === LogLevel.FATAL\n );\n }\n\n /**\n * Check if the provided log level is output level\n * @param {LogLevel} logLevel The LogLevel being checked\n * @returns {boolean} true if the log level should be output to the console\n */\n static isOutputLevel(logLevel) {\n // We want all errors to be output, in addition to STDOUT.\n // That way the user is more likely to see them.\n return logLevel === LogLevel.STDOUT || Console.isErrorLevel(logLevel);\n }\n\n constructor(props) {\n super(props);\n\n this.handleCommandResult = this.handleCommandResult.bind(this);\n this.handleCommandStarted = this.handleCommandStarted.bind(this);\n this.handleCommandSubmit = this.handleCommandSubmit.bind(this);\n this.handleClearShortcut = this.handleClearShortcut.bind(this);\n this.handleFocusHistory = this.handleFocusHistory.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleOverflowActions = this.handleOverflowActions.bind(this);\n this.handleScrollPaneScroll = this.handleScrollPaneScroll.bind(this);\n this.handleToggleAutoLaunchPanels = this.handleToggleAutoLaunchPanels.bind(\n this\n );\n this.handleToggleClosePanelsOnDisconnect = this.handleToggleClosePanelsOnDisconnect.bind(\n this\n );\n this.handleTogglePrintStdout = this.handleTogglePrintStdout.bind(this);\n this.processLogMessageQueue = throttle(\n this.processLogMessageQueue.bind(this),\n Console.LOG_THROTTLE\n );\n this.handleUploadCsv = this.handleUploadCsv.bind(this);\n this.handleHideCsv = this.handleHideCsv.bind(this);\n this.handleCsvFileOpened = this.handleCsvFileOpened.bind(this);\n this.handleCsvPaste = this.handleCsvPaste.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleClearDragError = this.handleClearDragError.bind(this);\n this.handleOpenCsvTable = this.handleOpenCsvTable.bind(this);\n this.handleCsvUpdate = this.handleCsvUpdate.bind(this);\n this.handleCsvError = this.handleCsvError.bind(this);\n this.handleCsvInProgress = this.handleCsvInProgress.bind(this);\n\n this.cancelListener = null;\n this.consolePane = React.createRef();\n this.consoleInput = React.createRef();\n this.consoleHistoryScrollPane = React.createRef();\n this.pending = new Pending();\n this.queuedLogMessages = [];\n\n const { objectMap, settings } = this.props;\n\n this.state = {\n // Need separate histories as console history has stdout/stderr output\n consoleHistory: [],\n\n // Height of the viewport of the console input and history\n consoleHeight: 0,\n\n isScrollDecorationShown: false,\n\n // Location of objects in the console history\n objectHistoryMap: new Map(),\n\n // The object definitions, name/type\n objectMap: new Map(objectMap),\n\n showCsvOverlay: false,\n csvFile: null,\n csvPaste: null,\n dragError: null,\n csvUploadInProgress: false,\n\n ...DEFAULT_SETTINGS,\n ...settings,\n };\n }\n\n componentDidMount() {\n this.initConsoleLogging();\n\n const { session } = this.props;\n session.addEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n\n this.updateDimensions();\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { props, state } = this;\n this.sendSettingsChange(prevState, state);\n\n if (props.objectMap !== prevProps.objectMap) {\n this.updateObjectMap();\n }\n }\n\n componentWillUnmount() {\n const { session } = this.props;\n\n session.removeEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n\n this.pending.cancel();\n this.processLogMessageQueue.cancel();\n\n this.deinitConsoleLogging();\n }\n\n initConsoleLogging() {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n deinitConsoleLogging() {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = null;\n }\n }\n\n handleClearShortcut(event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.consoleInput.current.clear();\n }\n\n handleCommandStarted(event) {\n const { code, result } = event.detail;\n const wrappedResult = this.pending.add(result);\n const historyItem = {\n command: code,\n result: null,\n disabledObjects: [],\n startTime: Date.now(),\n endTime: null,\n cancelResult: () => {\n result.cancel();\n },\n wrappedResult,\n };\n\n const { commandHistoryStorage, language, scope } = this.props;\n const workspaceItemPromise = commandHistoryStorage.addItem(\n language,\n scope,\n code,\n {\n command: code,\n startTime: new Date().toJSON(),\n endTime: null,\n result: null,\n }\n );\n workspaceItemPromise.catch(err => {\n log.debug('Error adding workspace item', err);\n });\n\n this.setState(\n state => ({\n consoleHistory: state.consoleHistory.concat(historyItem),\n }),\n () => {\n this.scrollConsoleHistoryToBottom(true);\n }\n );\n\n wrappedResult\n .then(resolved => {\n this.handleCommandResult(resolved, historyItem, workspaceItemPromise);\n })\n .catch(error => {\n this.handleCommandError(error, historyItem, workspaceItemPromise);\n });\n }\n\n handleCommandResult(result, historyItemParam, workspaceItemPromise) {\n const historyItem = historyItemParam;\n historyItem.wrappedResult = null;\n historyItem.cancelResult = null;\n\n if (!result) {\n return;\n }\n\n historyItem.result = result;\n\n this.updateHistory(result, historyItem);\n this.updateKnownObjects(historyItem);\n this.updateWorkspaceHistoryItem(\n { error: result.error },\n workspaceItemPromise\n );\n\n this.closeRemovedItems(result.changes);\n this.openUpdatedItems(result.changes);\n }\n\n handleCommandError(error, historyItemParam, workspaceItemPromise) {\n const historyItem = historyItemParam;\n historyItem.wrappedResult = null;\n historyItem.cancelResult = null;\n\n if (error && error.isCanceled) {\n log.debug('Called handleCommandError on a cancelled promise result');\n return;\n }\n\n this.updateWorkspaceHistoryItem(\n { error: `${error}` },\n workspaceItemPromise\n );\n\n this.setState(state => {\n const history = state.consoleHistory.concat();\n const index = history.lastIndexOf(historyItem);\n historyItem.endTime = Date.now();\n historyItem.result = { error };\n history[index] = { ...historyItem };\n return {\n consoleHistory: history,\n };\n });\n }\n\n handleFocusHistory(event) {\n event.preventDefault();\n event.stopPropagation();\n\n const { focusCommandHistory } = this.props;\n focusCommandHistory();\n }\n\n handleLogMessage(message) {\n const { isPrintStdOutEnabled } = this.state;\n if (!isPrintStdOutEnabled) {\n return;\n }\n\n if (Console.isOutputLevel(message.logLevel)) {\n this.queueLogMessage(message.message, message.logLevel);\n }\n }\n\n queueLogMessage(message, logLevel) {\n const result = {};\n if (Console.isErrorLevel(logLevel)) {\n result.error = message;\n } else {\n result.message = message;\n }\n\n const historyItem = { command: null, result };\n\n this.queuedLogMessages.push(historyItem);\n\n this.processLogMessageQueue();\n }\n\n processLogMessageQueue() {\n this.scrollConsoleHistoryToBottom();\n\n this.setState(state => {\n log.debug2(\n 'processLogMessageQueue',\n this.queuedLogMessages.length,\n ' items'\n );\n\n let { consoleHistory } = state;\n consoleHistory = consoleHistory.concat(this.queuedLogMessages);\n this.queuedLogMessages = [];\n\n return { consoleHistory };\n });\n }\n\n openUpdatedItems(changes) {\n const { isAutoLaunchPanelsEnabled } = this.state;\n if (!changes || !isAutoLaunchPanelsEnabled) {\n return;\n }\n\n const { openObject } = this.props;\n [...changes.created, ...changes.updated].forEach(object =>\n openObject(object)\n );\n }\n\n closeRemovedItems(changes) {\n if (!changes || !changes.removed || changes.removed.length === 0) {\n return;\n }\n\n const { closeObject } = this.props;\n const { removed } = changes;\n removed.forEach(object => closeObject(object));\n }\n\n updateHistory(result, historyItemParam) {\n const historyItem = historyItemParam;\n if (!result || !result.changes || !historyItem) {\n return;\n }\n\n historyItem.endTime = Date.now();\n\n this.scrollConsoleHistoryToBottom();\n\n // Update history to re-render items as necessary\n this.setState(state => {\n const consoleHistory = state.consoleHistory.concat();\n return { consoleHistory };\n });\n }\n\n updateKnownObjects(historyItem) {\n const { changes } = historyItem.result;\n if (\n !changes ||\n ((!changes.created || changes.created.length === 0) &&\n (!changes.updated || changes.updated.length === 0) &&\n (!changes.removed || changes.removed.length === 0))\n ) {\n log.debug2('updateKnownObjects no changes');\n return;\n }\n\n this.setState(state => {\n const history = state.consoleHistory.concat();\n const itemIndex = history.lastIndexOf(historyItem);\n if (itemIndex < 0) {\n log.error(`historyItem not found in state.consoleHistory`);\n return null;\n }\n\n const objectHistoryMap = new Map(state.objectHistoryMap);\n const objectMap = new Map(state.objectMap);\n\n const disableOldObject = (object, isRemoved = false) => {\n const { name } = object;\n const oldIndex = objectHistoryMap.get(name);\n // oldIndex can be -1 if a object is active but doesn't have a command in consoleHistory\n // this can happen after clearing the console using 'clear' or 'cls' command\n if (oldIndex >= 0) {\n // disable outdated object variable in the old consoleHistory item\n history[oldIndex].disabledObjects = history[\n oldIndex\n ].disabledObjects.concat(name);\n history[oldIndex] = { ...history[oldIndex] };\n }\n objectHistoryMap.set(name, itemIndex);\n if (isRemoved) {\n objectMap.delete(name);\n } else {\n objectMap.set(name, object);\n }\n };\n\n changes.updated.forEach(object => disableOldObject(object));\n changes.removed.forEach(object => disableOldObject(object, true));\n\n // Created objects have to be processed after removed\n // in case the same object name is present in both removed and created\n changes.created.forEach(object => {\n const { name } = object;\n objectHistoryMap.set(name, itemIndex);\n objectMap.set(name, object);\n });\n\n return { objectHistoryMap, objectMap, consoleHistory: history };\n });\n }\n\n updateObjectMap() {\n const { objectMap } = this.props;\n this.setState({ objectMap });\n }\n\n /**\n * Updates an existing workspace CommandHistoryItem\n * @param {object} result The result to store with the history item. Could be empty object for success\n * @param {Promise<object>} workspaceItemPromise The workspace data row promise for the workspace item to be updated\n */\n updateWorkspaceHistoryItem(result, workspaceItemPromise) {\n const promise = this.pending.add(workspaceItemPromise);\n\n const endTime = new Date().toJSON();\n promise\n .then(workspaceItem => {\n const updatedItem = {\n ...workspaceItem,\n data: {\n ...workspaceItem.data,\n endTime,\n result,\n },\n };\n\n const { commandHistoryStorage, language } = this.props;\n commandHistoryStorage.updateItem(language, updatedItem).catch(err => {\n log.warn('Error updating command history storage', err);\n });\n })\n .catch(err => {\n log.debug('Error updating workspace history item', err);\n });\n }\n\n scrollConsoleHistoryToBottom(force = false) {\n const pane = this.consoleHistoryScrollPane.current;\n if (!force && pane.scrollTop < pane.scrollHeight - pane.offsetHeight) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n pane.scrollTop = pane.scrollHeight;\n });\n }\n\n handleScrollPaneScroll() {\n const scrollPane = this.consoleHistoryScrollPane.current;\n if (\n scrollPane.scrollTop > 0 &&\n scrollPane.scrollHeight > scrollPane.clientHeight\n ) {\n this.setState({ isScrollDecorationShown: true });\n } else {\n this.setState({ isScrollDecorationShown: false });\n }\n }\n\n handleToggleAutoLaunchPanels() {\n this.setState(state => ({\n isAutoLaunchPanelsEnabled: !state.isAutoLaunchPanelsEnabled,\n }));\n }\n\n handleToggleClosePanelsOnDisconnect() {\n this.setState(state => ({\n isClosePanelsOnDisconnectEnabled: !state.isClosePanelsOnDisconnectEnabled,\n }));\n }\n\n handleTogglePrintStdout() {\n this.setState(state => ({\n isPrintStdOutEnabled: !state.isPrintStdOutEnabled,\n }));\n }\n\n handleUploadCsv() {\n this.setState({\n showCsvOverlay: true,\n dragError: null,\n csvUploadInProgress: false,\n });\n }\n\n handleHideCsv() {\n this.setState({\n showCsvOverlay: false,\n csvFile: null,\n csvPaste: null,\n dragError: null,\n csvUploadInProgress: false,\n });\n }\n\n handleCsvFileOpened(file) {\n this.setState({ csvFile: file, csvPaste: null });\n }\n\n handleCsvPaste(value) {\n this.setState({ csvFile: null, csvPaste: value });\n }\n\n handleDragEnter(e) {\n if (\n !e.dataTransfer ||\n !e.dataTransfer.items ||\n e.dataTransfer.items.length === 0 ||\n e.dataTransfer.items[0].kind === 'string'\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.setState({ showCsvOverlay: true });\n\n const { items } = e.dataTransfer;\n if (items.length > 1) {\n this.setState({ dragError: CsvOverlay.MULTIPLE_FILE_ERROR });\n return;\n }\n\n const item = items[0];\n if (CsvOverlay.isValidDropItem(item)) {\n this.setState({ dragError: null });\n } else {\n this.setState({ dragError: CsvOverlay.FILE_TYPE_ERROR });\n }\n }\n\n handleDragLeave(e) {\n // DragLeave gets fired for every child element, so make sure we're actually leaving the drop zone\n if (!e.currentTarget || e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.setState({ showCsvOverlay: false, dragError: null });\n }\n\n handleClearDragError() {\n this.setState({ dragError: null });\n }\n\n handleOpenCsvTable(name) {\n const { openObject, commandHistoryStorage, language, scope } = this.props;\n const { consoleHistory, objectMap } = this.state;\n const object = { name, type: dh.VariableType.TABLE };\n const isExistingObject = objectMap.has(name);\n const historyItem = {\n startTime: Date.now(),\n endTime: Date.now(),\n disabledObjects: [],\n result: {\n changes: {\n created: [],\n updated: [],\n removed: [],\n [isExistingObject ? 'updated' : 'created']: [object],\n },\n },\n };\n const history = consoleHistory.concat(historyItem);\n this.setState({\n consoleHistory: history,\n });\n this.scrollConsoleHistoryToBottom(true);\n this.updateKnownObjects(historyItem);\n openObject({ name, type: dh.VariableType.TABLE });\n commandHistoryStorage.addItem(language, scope, name, {\n command: name,\n startTime: new Date().toJSON(),\n endTime: new Date().toJSON(),\n result: null,\n });\n }\n\n addConsoleHistoryMessage(message, error) {\n const { consoleHistory } = this.state;\n const historyItem = {\n command: '',\n startTime: Date.now(),\n endTime: Date.now(),\n result: { message, error },\n };\n const history = consoleHistory.concat(historyItem);\n this.setState({\n consoleHistory: history,\n });\n }\n\n handleCsvUpdate(message) {\n this.addConsoleHistoryMessage(message);\n }\n\n handleCsvError(error) {\n this.addConsoleHistoryMessage(null, error);\n }\n\n handleCsvInProgress(csvUploadInProgress) {\n this.setState({ csvUploadInProgress });\n }\n\n handleOverflowActions() {\n const {\n isAutoLaunchPanelsEnabled,\n isClosePanelsOnDisconnectEnabled,\n isPrintStdOutEnabled,\n } = this.state;\n const { actions } = this.props;\n return [\n ...actions,\n {\n title: 'Print Stdout',\n action: this.handleTogglePrintStdout,\n group: ContextActions.groups.high,\n icon: isPrintStdOutEnabled ? vsCheck : null,\n order: 10,\n },\n {\n title: 'Auto Launch Panels',\n action: this.handleToggleAutoLaunchPanels,\n group: ContextActions.groups.high,\n icon: isAutoLaunchPanelsEnabled ? vsCheck : null,\n order: 20,\n },\n {\n title: 'Close Panels on Disconnect',\n action: this.handleToggleClosePanelsOnDisconnect,\n group: ContextActions.groups.high,\n icon: isClosePanelsOnDisconnectEnabled ? vsCheck : null,\n order: 30,\n },\n {\n title: 'Upload Table from File',\n action: this.handleUploadCsv,\n group: ContextActions.groups.high + 10,\n order: 40,\n },\n ];\n }\n\n handleCommandSubmit(command) {\n if (command === 'clear' || command === 'cls') {\n this.clearConsoleHistory();\n } else if (command.length > 0) {\n // Result is handled in this.handleCommandStarted\n const { session } = this.props;\n session.runCode(command).catch(error => {\n log.error('There was an error initiating the command', error);\n });\n } else {\n // Empty command, just pump a blank line out to history\n const historyItem = {\n command: ' ',\n result: {},\n startTime: Date.now(),\n endTime: Date.now(),\n };\n\n this.scrollConsoleHistoryToBottom(true);\n\n this.setState(state => ({\n consoleHistory: state.consoleHistory.concat(historyItem),\n }));\n }\n }\n\n clearConsoleHistory() {\n this.pending.cancel();\n\n this.setState(state => {\n // Replace all values with -1 to indicate that table references are still active\n // but don't have corresponding command indexes in consoleHistory\n const objectHistoryMap = new Map(\n [...state.objectHistoryMap.keys()].map(name => [name, -1])\n );\n return { consoleHistory: [], objectHistoryMap };\n });\n }\n\n getObjects = memoize(objectMap => [...objectMap.values()]);\n\n getContextActions = memoize(actions => [\n ...actions,\n {\n action: this.handleClearShortcut,\n shortcut: SHORTCUTS.CONSOLE.CLEAR,\n },\n {\n action: this.handleFocusHistory,\n shortcut: SHORTCUTS.CONSOLE.FOCUS_HISTORY,\n },\n ]);\n\n addCommand(command, focus = true, execute = false) {\n if (!this.consoleInput.current) {\n return;\n }\n this.consoleInput.current.setConsoleText(command, focus, execute);\n\n if (focus) {\n this.scrollConsoleHistoryToBottom(true);\n }\n }\n\n focus() {\n this.consoleInput.current?.focus();\n }\n\n sendSettingsChange(prevState, state, checkIfChanged = true) {\n const keys = Object.keys(DEFAULT_SETTINGS);\n const settings = {};\n let hasChanges = false;\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const { [key]: setting } = state;\n const { [key]: prevSetting } = prevState;\n if (setting !== prevSetting) {\n hasChanges = true;\n }\n settings[key] = setting;\n }\n if (checkIfChanged && !hasChanges) {\n return;\n }\n const { onSettingsChange } = this.props;\n onSettingsChange(settings);\n }\n\n updateDimensions() {\n if (this.consolePane.current) {\n this.setState({\n consoleHeight: this.consolePane.current.clientHeight,\n });\n }\n if (this.consoleInput.current) {\n this.consoleInput.current.updateDimensions();\n }\n }\n\n render() {\n const {\n actions,\n historyChildren,\n language,\n statusBarChildren,\n openObject,\n session,\n scope,\n commandHistoryStorage,\n timeZone,\n disabled,\n unzip,\n } = this.props;\n const {\n consoleHeight,\n consoleHistory,\n isScrollDecorationShown,\n objectMap,\n showCsvOverlay,\n csvFile,\n csvPaste,\n dragError,\n csvUploadInProgress,\n } = this.state;\n const consoleMenuObjects = this.getObjects(objectMap);\n const inputMaxHeight = Math.round(consoleHeight * 0.7);\n const contextActions = this.getContextActions(actions);\n\n return (\n <div\n role=\"presentation\"\n className={classNames('iris-console', 'h-100', 'w-100', { disabled })}\n >\n <div className=\"console-pane\" ref={this.consolePane}>\n <ConsoleStatusBar\n session={session}\n overflowActions={this.handleOverflowActions}\n openObject={openObject}\n objects={consoleMenuObjects}\n >\n {statusBarChildren}\n </ConsoleStatusBar>\n <div\n className=\"console-csv-container\"\n onDragOver={CsvOverlay.handleDragOver}\n onDragEnter={this.handleDragEnter}\n onDragLeave={this.handleDragLeave}\n >\n {showCsvOverlay && (\n <CsvOverlay\n onFileOpened={this.handleCsvFileOpened}\n onPaste={this.handleCsvPaste}\n clearDragError={this.handleClearDragError}\n dragError={dragError}\n onError={this.handleCsvError}\n uploadInProgress={csvUploadInProgress}\n allowZip={unzip != null}\n />\n )}\n <div\n role=\"presentation\"\n className={classNames('scroll-pane no-scroll-x', {\n 'scroll-decoration': isScrollDecorationShown,\n })}\n onScroll={this.handleScrollPaneScroll}\n ref={this.consoleHistoryScrollPane}\n >\n <ConsoleHistory\n items={consoleHistory}\n openObject={openObject}\n language={language}\n disabled={disabled}\n />\n {historyChildren}\n </div>\n </div>\n {!showCsvOverlay && (\n <ConsoleInput\n ref={this.consoleInput}\n session={session}\n language={language}\n scope={scope}\n onSubmit={this.handleCommandSubmit}\n maxHeight={inputMaxHeight}\n commandHistoryStorage={commandHistoryStorage}\n />\n )}\n {showCsvOverlay && (\n <CsvInputBar\n session={session}\n onOpenTable={this.handleOpenCsvTable}\n onClose={this.handleHideCsv}\n onUpdate={this.handleCsvUpdate}\n onError={this.handleCsvError}\n file={csvFile}\n paste={csvPaste}\n onInProgress={this.handleCsvInProgress}\n timeZone={timeZone}\n unzip={unzip}\n />\n )}\n </div>\n <ContextActions\n actions={contextActions}\n ignoreClassNames={[ConsoleInput.INPUT_CLASS_NAME]}\n />\n </div>\n );\n }\n}\n\nConsole.propTypes = {\n statusBarChildren: PropTypes.node,\n settings: PropTypes.shape({}),\n focusCommandHistory: PropTypes.func.isRequired,\n openObject: PropTypes.func.isRequired,\n closeObject: PropTypes.func.isRequired,\n session: APIPropTypes.IdeSession.isRequired,\n language: PropTypes.string.isRequired,\n commandHistoryStorage: StoragePropTypes.CommandHistoryStorage.isRequired,\n onSettingsChange: PropTypes.func,\n scope: PropTypes.string,\n actions: PropTypes.arrayOf(PropTypes.shape({})),\n timeZone: PropTypes.string,\n\n // Children shown at the bottom of the console history\n historyChildren: PropTypes.node,\n\n // Known object map\n objectMap: PropTypes.instanceOf(Map),\n\n disabled: PropTypes.bool,\n\n /**\n * Function to unzip a zip file. If not provided, zip files will not be accepted\n * (file:File) => Promise<File[]>\n */\n unzip: PropTypes.func,\n};\n\nConsole.defaultProps = {\n statusBarChildren: null,\n settings: {},\n onSettingsChange: () => {},\n scope: null,\n actions: [],\n historyChildren: null,\n timeZone: 'America/New_York',\n objectMap: new Map(),\n disabled: false,\n unzip: null,\n};\n\nexport default Console;\n"],"file":"Console.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"CommandHistoryViewportUpdater.d.ts","sourceRoot":"","sources":["../../src/command-history/CommandHistoryViewportUpdater.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAEjC,oBAAY,kCAAkC,GAAG;IAC/C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;CAC7D,CAAC;AAQF,iBAAS,6BAA6B,CAAC,EACrC,KAAK,EACL,OAAO,EACP,GAAO,EACP,MAAU,EACV,MAAM,EACN,UAAkB,EAClB,QAAQ,GACT,EAAE,kCAAkC,GAAG,IAAI,CAyD3C;AAED,eAAe,6BAA6B,CAAC"}
1
+ {"version":3,"file":"CommandHistoryViewportUpdater.d.ts","sourceRoot":"","sources":["../../src/command-history/CommandHistoryViewportUpdater.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAEjC,oBAAY,kCAAkC,GAAG;IAC/C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;CAC7D,CAAC;AAQF,iBAAS,6BAA6B,CAAC,EACrC,KAAK,EACL,OAAO,EACP,GAAO,EACP,MAAU,EACV,MAAM,EACN,UAAkB,EAClB,QAAQ,GACT,EAAE,kCAAkC,GAAG,IAAI,CAgE3C;AAED,eAAe,6BAA6B,CAAC"}
@@ -25,7 +25,7 @@ function CommandHistoryViewportUpdater(_ref) {
25
25
  columns: viewport.columns
26
26
  });
27
27
  }, UPDATE_DELAY), [table]);
28
- useEffect(() => {
28
+ useEffect(function updateTableAndReturnCleanup() {
29
29
  var cleanup = table.onUpdate(viewportData => {
30
30
  var _viewportData$items, _viewportData$offset;
31
31
 
@@ -39,10 +39,10 @@ function CommandHistoryViewportUpdater(_ref) {
39
39
  cleanup();
40
40
  };
41
41
  }, [table, onUpdate]);
42
- useEffect(() => {
42
+ useEffect(function setSearchText() {
43
43
  table.setSearch(search !== null && search !== void 0 ? search : '');
44
44
  }, [table, search]);
45
- useEffect(() => {
45
+ useEffect(function updateViewport() {
46
46
  throttledUpdateViewport({
47
47
  top,
48
48
  bottom,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/command-history/CommandHistoryViewportUpdater.tsx"],"names":["useEffect","useMemo","throttle","Log","UPDATE_DELAY","ROW_BUFFER_PAGES","log","module","CommandHistoryViewportUpdater","table","columns","top","bottom","search","isReversed","onUpdate","throttledUpdateViewport","viewport","viewHeight","bufferedTop","Math","max","bufferedBottom","setViewport","cleanup","viewportData","items","offset","debug","setSearch","debug2","cancel"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,OAApB,QAAmC,OAAnC;AACA,OAAOC,QAAP,MAAqB,iBAArB;AAMA,OAAOC,GAAP,MAAgB,gBAAhB;AAgBA,IAAMC,YAAY,GAAG,GAArB;AAEA,IAAMC,gBAAgB,GAAG,CAAzB;AAEA,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAJ,CAAW,+BAAX,CAAZ;;AAEA,SAASC,6BAAT,OAQ6C;AAAA,MARN;AACrCC,IAAAA,KADqC;AAErCC,IAAAA,OAFqC;AAGrCC,IAAAA,GAAG,GAAG,CAH+B;AAIrCC,IAAAA,MAAM,GAAG,CAJ4B;AAKrCC,IAAAA,MALqC;AAMrCC,IAAAA,UAAU,GAAG,KANwB;AAOrCC,IAAAA;AAPqC,GAQM;AAC3C,MAAMC,uBAAuB,GAAGf,OAAO,CACrC,MACEC,QAAQ,CAAEe,QAAD,IAAoC;AAC3C,QAAMC,UAAU,GAAGD,QAAQ,CAACL,MAAT,GAAkBK,QAAQ,CAACN,GAA9C;AACA,QAAMQ,WAAW,GAAGC,IAAI,CAACC,GAAL,CAClB,CADkB,EAElBJ,QAAQ,CAACN,GAAT,GAAeO,UAAU,GAAGb,gBAFV,CAApB;AAIA,QAAMiB,cAAc,GAAGL,QAAQ,CAACL,MAAT,GAAkBM,UAAU,GAAGb,gBAAtD;AAEAI,IAAAA,KAAK,CAACc,WAAN,CAAkB;AAChBZ,MAAAA,GAAG,EAAEQ,WADW;AAEhBP,MAAAA,MAAM,EAAEU,cAFQ;AAGhBZ,MAAAA,OAAO,EAAEO,QAAQ,CAACP;AAHF,KAAlB;AAKD,GAbO,EAaLN,YAbK,CAF2B,EAgBrC,CAACK,KAAD,CAhBqC,CAAvC;AAmBAT,EAAAA,SAAS,CAAC,MAAM;AACd,QAAMwB,OAAO,GAAGf,KAAK,CAACM,QAAN,CACbU,YAAD,IAA2D;AAAA;;AACzDV,MAAAA,QAAQ,CAAC;AACPW,QAAAA,KAAK,yBAAED,YAAY,CAACC,KAAf,qEAAwB,EADtB;AAEPC,QAAAA,MAAM,0BAAEF,YAAY,CAACE,MAAf,uEAAyB;AAFxB,OAAD,CAAR;AAID,KANa,CAAhB;AASA,WAAO,MAAM;AACXrB,MAAAA,GAAG,CAACsB,KAAJ,CAAU,kBAAV;AACAJ,MAAAA,OAAO;AACR,KAHD;AAID,GAdQ,EAcN,CAACf,KAAD,EAAQM,QAAR,CAdM,CAAT;AAgBAf,EAAAA,SAAS,CAAC,MAAM;AACdS,IAAAA,KAAK,CAACoB,SAAN,CAAgBhB,MAAhB,aAAgBA,MAAhB,cAAgBA,MAAhB,GAA0B,EAA1B;AACD,GAFQ,EAEN,CAACJ,KAAD,EAAQI,MAAR,CAFM,CAAT;AAIAb,EAAAA,SAAS,CAAC,MAAM;AACdgB,IAAAA,uBAAuB,CAAC;AACtBL,MAAAA,GADsB;AAEtBC,MAAAA,MAFsB;AAGtBF,MAAAA;AAHsB,KAAD,CAAvB;AAKD,GANQ,EAMN,CAACM,uBAAD,EAA0BL,GAA1B,EAA+BC,MAA/B,EAAuCF,OAAvC,EAAgDG,MAAhD,EAAwDC,UAAxD,CANM,CAAT;AAQAd,EAAAA,SAAS,CACP,MAAM,MAAM;AACVM,IAAAA,GAAG,CAACwB,MAAJ,CAAW,gCAAX;AACAd,IAAAA,uBAAuB,CAACe,MAAxB;AACD,GAJM,EAKP,CAACf,uBAAD,CALO,CAAT;AAQA,SAAO,IAAP;AACD;;AAED,eAAeR,6BAAf","sourcesContent":["import { useEffect, useMemo } from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n StorageTableViewport,\n ViewportData,\n ViewportUpdateCallback,\n} from '@deephaven/storage';\nimport Log from '@deephaven/log';\nimport {\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './CommandHistoryStorage';\n\nexport type CommandHistoryViewportUpdaterProps = {\n table: CommandHistoryTable;\n columns?: string[];\n top?: number;\n bottom?: number;\n search?: string;\n isReversed?: boolean;\n onUpdate: ViewportUpdateCallback<CommandHistoryStorageItem>;\n};\n\nconst UPDATE_DELAY = 150;\n\nconst ROW_BUFFER_PAGES = 3;\n\nconst log = Log.module('CommandHistoryViewportUpdater');\n\nfunction CommandHistoryViewportUpdater({\n table,\n columns,\n top = 0,\n bottom = 0,\n search,\n isReversed = false,\n onUpdate,\n}: CommandHistoryViewportUpdaterProps): null {\n const throttledUpdateViewport = useMemo(\n () =>\n throttle((viewport: StorageTableViewport) => {\n const viewHeight = viewport.bottom - viewport.top;\n const bufferedTop = Math.max(\n 0,\n viewport.top - viewHeight * ROW_BUFFER_PAGES\n );\n const bufferedBottom = viewport.bottom + viewHeight * ROW_BUFFER_PAGES;\n\n table.setViewport({\n top: bufferedTop,\n bottom: bufferedBottom,\n columns: viewport.columns,\n });\n }, UPDATE_DELAY),\n [table]\n );\n\n useEffect(() => {\n const cleanup = table.onUpdate(\n (viewportData: ViewportData<CommandHistoryStorageItem>) => {\n onUpdate({\n items: viewportData.items ?? [],\n offset: viewportData.offset ?? 0,\n });\n }\n );\n\n return () => {\n log.debug('onUpdate cleanup');\n cleanup();\n };\n }, [table, onUpdate]);\n\n useEffect(() => {\n table.setSearch(search ?? '');\n }, [table, search]);\n\n useEffect(() => {\n throttledUpdateViewport({\n top,\n bottom,\n columns,\n });\n }, [throttledUpdateViewport, top, bottom, columns, search, isReversed]);\n\n useEffect(\n () => () => {\n log.debug2('Cancel throttledUpdateViewport');\n throttledUpdateViewport.cancel();\n },\n [throttledUpdateViewport]\n );\n\n return null;\n}\n\nexport default CommandHistoryViewportUpdater;\n"],"file":"CommandHistoryViewportUpdater.js"}
1
+ {"version":3,"sources":["../../src/command-history/CommandHistoryViewportUpdater.tsx"],"names":["useEffect","useMemo","throttle","Log","UPDATE_DELAY","ROW_BUFFER_PAGES","log","module","CommandHistoryViewportUpdater","table","columns","top","bottom","search","isReversed","onUpdate","throttledUpdateViewport","viewport","viewHeight","bufferedTop","Math","max","bufferedBottom","setViewport","updateTableAndReturnCleanup","cleanup","viewportData","items","offset","debug","setSearchText","setSearch","updateViewport","debug2","cancel"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,OAApB,QAAmC,OAAnC;AACA,OAAOC,QAAP,MAAqB,iBAArB;AAMA,OAAOC,GAAP,MAAgB,gBAAhB;AAgBA,IAAMC,YAAY,GAAG,GAArB;AAEA,IAAMC,gBAAgB,GAAG,CAAzB;AAEA,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAJ,CAAW,+BAAX,CAAZ;;AAEA,SAASC,6BAAT,OAQ6C;AAAA,MARN;AACrCC,IAAAA,KADqC;AAErCC,IAAAA,OAFqC;AAGrCC,IAAAA,GAAG,GAAG,CAH+B;AAIrCC,IAAAA,MAAM,GAAG,CAJ4B;AAKrCC,IAAAA,MALqC;AAMrCC,IAAAA,UAAU,GAAG,KANwB;AAOrCC,IAAAA;AAPqC,GAQM;AAC3C,MAAMC,uBAAuB,GAAGf,OAAO,CACrC,MACEC,QAAQ,CAAEe,QAAD,IAAoC;AAC3C,QAAMC,UAAU,GAAGD,QAAQ,CAACL,MAAT,GAAkBK,QAAQ,CAACN,GAA9C;AACA,QAAMQ,WAAW,GAAGC,IAAI,CAACC,GAAL,CAClB,CADkB,EAElBJ,QAAQ,CAACN,GAAT,GAAeO,UAAU,GAAGb,gBAFV,CAApB;AAIA,QAAMiB,cAAc,GAAGL,QAAQ,CAACL,MAAT,GAAkBM,UAAU,GAAGb,gBAAtD;AAEAI,IAAAA,KAAK,CAACc,WAAN,CAAkB;AAChBZ,MAAAA,GAAG,EAAEQ,WADW;AAEhBP,MAAAA,MAAM,EAAEU,cAFQ;AAGhBZ,MAAAA,OAAO,EAAEO,QAAQ,CAACP;AAHF,KAAlB;AAKD,GAbO,EAaLN,YAbK,CAF2B,EAgBrC,CAACK,KAAD,CAhBqC,CAAvC;AAmBAT,EAAAA,SAAS,CACP,SAASwB,2BAAT,GAAuC;AACrC,QAAMC,OAAO,GAAGhB,KAAK,CAACM,QAAN,CACbW,YAAD,IAA2D;AAAA;;AACzDX,MAAAA,QAAQ,CAAC;AACPY,QAAAA,KAAK,yBAAED,YAAY,CAACC,KAAf,qEAAwB,EADtB;AAEPC,QAAAA,MAAM,0BAAEF,YAAY,CAACE,MAAf,uEAAyB;AAFxB,OAAD,CAAR;AAID,KANa,CAAhB;AASA,WAAO,MAAM;AACXtB,MAAAA,GAAG,CAACuB,KAAJ,CAAU,kBAAV;AACAJ,MAAAA,OAAO;AACR,KAHD;AAID,GAfM,EAgBP,CAAChB,KAAD,EAAQM,QAAR,CAhBO,CAAT;AAmBAf,EAAAA,SAAS,CACP,SAAS8B,aAAT,GAAyB;AACvBrB,IAAAA,KAAK,CAACsB,SAAN,CAAgBlB,MAAhB,aAAgBA,MAAhB,cAAgBA,MAAhB,GAA0B,EAA1B;AACD,GAHM,EAIP,CAACJ,KAAD,EAAQI,MAAR,CAJO,CAAT;AAMAb,EAAAA,SAAS,CACP,SAASgC,cAAT,GAA0B;AACxBhB,IAAAA,uBAAuB,CAAC;AACtBL,MAAAA,GADsB;AAEtBC,MAAAA,MAFsB;AAGtBF,MAAAA;AAHsB,KAAD,CAAvB;AAKD,GAPM,EAQP,CAACM,uBAAD,EAA0BL,GAA1B,EAA+BC,MAA/B,EAAuCF,OAAvC,EAAgDG,MAAhD,EAAwDC,UAAxD,CARO,CAAT;AAUAd,EAAAA,SAAS,CACP,MAAM,MAAM;AACVM,IAAAA,GAAG,CAAC2B,MAAJ,CAAW,gCAAX;AACAjB,IAAAA,uBAAuB,CAACkB,MAAxB;AACD,GAJM,EAKP,CAAClB,uBAAD,CALO,CAAT;AAQA,SAAO,IAAP;AACD;;AAED,eAAeR,6BAAf","sourcesContent":["import { useEffect, useMemo } from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n StorageTableViewport,\n ViewportData,\n ViewportUpdateCallback,\n} from '@deephaven/storage';\nimport Log from '@deephaven/log';\nimport {\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './CommandHistoryStorage';\n\nexport type CommandHistoryViewportUpdaterProps = {\n table: CommandHistoryTable;\n columns?: string[];\n top?: number;\n bottom?: number;\n search?: string;\n isReversed?: boolean;\n onUpdate: ViewportUpdateCallback<CommandHistoryStorageItem>;\n};\n\nconst UPDATE_DELAY = 150;\n\nconst ROW_BUFFER_PAGES = 3;\n\nconst log = Log.module('CommandHistoryViewportUpdater');\n\nfunction CommandHistoryViewportUpdater({\n table,\n columns,\n top = 0,\n bottom = 0,\n search,\n isReversed = false,\n onUpdate,\n}: CommandHistoryViewportUpdaterProps): null {\n const throttledUpdateViewport = useMemo(\n () =>\n throttle((viewport: StorageTableViewport) => {\n const viewHeight = viewport.bottom - viewport.top;\n const bufferedTop = Math.max(\n 0,\n viewport.top - viewHeight * ROW_BUFFER_PAGES\n );\n const bufferedBottom = viewport.bottom + viewHeight * ROW_BUFFER_PAGES;\n\n table.setViewport({\n top: bufferedTop,\n bottom: bufferedBottom,\n columns: viewport.columns,\n });\n }, UPDATE_DELAY),\n [table]\n );\n\n useEffect(\n function updateTableAndReturnCleanup() {\n const cleanup = table.onUpdate(\n (viewportData: ViewportData<CommandHistoryStorageItem>) => {\n onUpdate({\n items: viewportData.items ?? [],\n offset: viewportData.offset ?? 0,\n });\n }\n );\n\n return () => {\n log.debug('onUpdate cleanup');\n cleanup();\n };\n },\n [table, onUpdate]\n );\n\n useEffect(\n function setSearchText() {\n table.setSearch(search ?? '');\n },\n [table, search]\n );\n useEffect(\n function updateViewport() {\n throttledUpdateViewport({\n top,\n bottom,\n columns,\n });\n },\n [throttledUpdateViewport, top, bottom, columns, search, isReversed]\n );\n useEffect(\n () => () => {\n log.debug2('Cancel throttledUpdateViewport');\n throttledUpdateViewport.cancel();\n },\n [throttledUpdateViewport]\n );\n\n return null;\n}\n\nexport default CommandHistoryViewportUpdater;\n"],"file":"CommandHistoryViewportUpdater.js"}
@@ -14,6 +14,7 @@ declare class CsvInputBar extends React.Component<any, any, any> {
14
14
  handleQueryTypeChange(event: any): void;
15
15
  inputRef: React.RefObject<any>;
16
16
  handleFile(file: any, isZip?: boolean): void;
17
+ handleZipFile(zipFile: any): void;
17
18
  openTable(): void;
18
19
  }
19
20
  declare namespace CsvInputBar {
@@ -30,12 +31,15 @@ declare namespace CsvInputBar {
30
31
  const paste: PropTypes.Requireable<string>;
31
32
  const onInProgress: PropTypes.Validator<(...args: any[]) => any>;
32
33
  const timeZone: PropTypes.Validator<string>;
34
+ const unzip: PropTypes.Requireable<(...args: any[]) => any>;
33
35
  }
34
36
  namespace defaultProps {
35
37
  const file_1: null;
36
38
  export { file_1 as file };
37
39
  const paste_1: null;
38
40
  export { paste_1 as paste };
41
+ const unzip_1: null;
42
+ export { unzip_1 as unzip };
39
43
  }
40
44
  }
41
45
  import React from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"CsvInputBar.d.ts","sourceRoot":"","sources":["../../src/csv/CsvInputBar.jsx"],"names":[],"mappings":";AAoBA;;GAEG;AACH;IACE,wBAuBC;IAuED,+BAoCC;IAzDD,qBAGC;IAED,0BAKC;IAED,kCAEC;IAED,8BAGC;IAwFD,4CASC;IAGD,+BAWC;IASD,wCAIC;IA5MC,+BAAiC;IAwHnC,6CA8CC;IA2BD,kBAKC;CAgGF"}
1
+ {"version":3,"file":"CsvInputBar.d.ts","sourceRoot":"","sources":["../../src/csv/CsvInputBar.jsx"],"names":[],"mappings":";AAmBA;;GAEG;AACH;IACE,wBAuBC;IAuED,+BAiBC;IAtCD,qBAGC;IAED,0BAKC;IAED,kCAEC;IAED,8BAGC;IAgGD,4CASC;IAGD,+BAWC;IASD,wCAIC;IApNC,+BAAiC;IAqGnC,6CA8CC;IAED,kCAyBC;IA2BD,kBAKC;CAgGF"}
@@ -1,7 +1,6 @@
1
1
  import React, { Component } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import classNames from 'classnames';
4
- import JSZip from 'jszip';
5
4
  import { Button, Checkbox } from '@deephaven/components';
6
5
  import Log from '@deephaven/log';
7
6
  import { DbNameValidator } from '@deephaven/utils';
@@ -138,35 +137,12 @@ class CsvInputBar extends Component {
138
137
  event.preventDefault();
139
138
  var {
140
139
  file,
141
- paste,
142
- onUpdate
140
+ paste
143
141
  } = this.props;
144
142
 
145
143
  if (file) {
146
144
  if (file.name.endsWith('.zip')) {
147
- JSZip.loadAsync(file).then(zip => {
148
- var {
149
- files
150
- } = zip;
151
- var csvFound = false; // Using a for loop instead of forEach in order to break
152
-
153
- var values = Object.values(files);
154
-
155
- for (var i = 0; i < values.length; i += 1) {
156
- var f = values[i];
157
-
158
- if (CsvOverlay.isValidExtension(f.name)) {
159
- onUpdate("Loading ".concat(f.name, " as csv from ").concat(file.name));
160
- csvFound = true;
161
- this.handleFile(f, true);
162
- break;
163
- }
164
- }
165
-
166
- if (!csvFound) {
167
- throw new Error("No csv file found in ".concat(file.name));
168
- }
169
- }).catch(e => this.handleError(e));
145
+ this.handleZipFile(file);
170
146
  } else {
171
147
  this.handleFile(file);
172
148
  }
@@ -223,6 +199,37 @@ class CsvInputBar extends Component {
223
199
  onInProgress(true);
224
200
  }
225
201
 
202
+ handleZipFile(zipFile) {
203
+ var {
204
+ onUpdate,
205
+ unzip
206
+ } = this.props;
207
+
208
+ if (unzip == null) {
209
+ this.handleError(new Error('No support for zip files available.'));
210
+ return;
211
+ }
212
+
213
+ unzip(zipFile).then(files => {
214
+ var csvFound = false; // Find the first Csv file in the zip and use that
215
+
216
+ for (var i = 0; i < files.length; i += 1) {
217
+ var f = files[i];
218
+
219
+ if (CsvOverlay.isValidExtension(f.name)) {
220
+ onUpdate("Loading ".concat(f.name, " as csv from ").concat(zipFile.name));
221
+ csvFound = true;
222
+ this.handleFile(f, true);
223
+ break;
224
+ }
225
+ }
226
+
227
+ if (!csvFound) {
228
+ throw new Error("No csv file found in ".concat(zipFile.name));
229
+ }
230
+ }).catch(e => this.handleError(e));
231
+ }
232
+
226
233
  handleProgress(progressValue) {
227
234
  var {
228
235
  showProgress
@@ -363,11 +370,13 @@ CsvInputBar.propTypes = {
363
370
  file: PropTypes.instanceOf(File),
364
371
  paste: PropTypes.string,
365
372
  onInProgress: PropTypes.func.isRequired,
366
- timeZone: PropTypes.string.isRequired
373
+ timeZone: PropTypes.string.isRequired,
374
+ unzip: PropTypes.func
367
375
  };
368
376
  CsvInputBar.defaultProps = {
369
377
  file: null,
370
- paste: null
378
+ paste: null,
379
+ unzip: null
371
380
  };
372
381
  export default CsvInputBar;
373
382
  //# sourceMappingURL=CsvInputBar.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/csv/CsvInputBar.jsx"],"names":["React","Component","PropTypes","classNames","JSZip","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","onUpdate","endsWith","loadAsync","then","zip","files","csvFound","values","i","length","f","isValidExtension","handleFile","Error","catch","Blob","isZip","info","size","session","timeZone","onInProgress","handleParseDone","tables","bindTableToVariable","openTable","mergeTables","table","forEach","t","close","onFileCompleted","readHeaders","onProgress","parse","onOpenTable","render","isNameInvalid","width","propTypes","shape","func","isRequired","instanceOf","File","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport JSZip from 'jszip';\nimport { Button, Checkbox } from '@deephaven/components';\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\n/**\n * Input controls for CSV upload.\n */\nclass CsvInputBar extends Component {\n constructor(props) {\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) {\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() {\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n }\n\n handleCancel() {\n const { onClose } = this.props;\n onClose();\n }\n\n handleError(e) {\n const { onClose, onError } = this.props;\n log.error(e);\n onError(e);\n onClose();\n }\n\n handleTableName(event) {\n this.setState({ tableName: event.target.value, tableNameSet: true });\n }\n\n toggleFirstRowHeaders() {\n const { isFirstRowHeaders } = this.state;\n this.setState({ isFirstRowHeaders: !isFirstRowHeaders });\n }\n\n handleUpload(event) {\n event.stopPropagation();\n event.preventDefault();\n const { file, paste, onUpdate } = this.props;\n if (file) {\n if (file.name.endsWith('.zip')) {\n JSZip.loadAsync(file)\n .then(zip => {\n const { files } = zip;\n let csvFound = false;\n // Using a for loop instead of forEach in order to break\n const values = Object.values(files);\n for (let i = 0; i < values.length; i += 1) {\n const f = values[i];\n if (CsvOverlay.isValidExtension(f.name)) {\n onUpdate(`Loading ${f.name} as csv from ${file.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 ${file.name}`);\n }\n })\n .catch(e => this.handleError(e));\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, isZip = false) {\n log.info(\n `Starting CSV parser for ${file.name} ${\n isZip ? '' : `${file.size} bytes`\n }`\n );\n const { session, timeZone, onInProgress } = this.props;\n const { tableName, isFirstRowHeaders, type } = this.state;\n const handleParseDone = tables => {\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 handleProgress(progressValue) {\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() {\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() {\n const { onOpenTable, onClose } = this.props;\n const { tableName } = this.state;\n onOpenTable(tableName);\n onClose();\n }\n\n handleQueryTypeChange(event) {\n this.setState({\n type: event.target.value,\n });\n }\n\n render() {\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\nCsvInputBar.propTypes = {\n session: PropTypes.shape({\n bindTableToVariable: PropTypes.func.isRequired,\n mergeTables: PropTypes.func.isRequired,\n }).isRequired,\n onOpenTable: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n onUpdate: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n file: PropTypes.instanceOf(File),\n paste: PropTypes.string,\n onInProgress: PropTypes.func.isRequired,\n timeZone: PropTypes.string.isRequired,\n};\n\nCsvInputBar.defaultProps = {\n file: null,\n paste: null,\n};\n\nexport default CsvInputBar;\n"],"file":"CsvInputBar.js"}
1
+ {"version":3,"sources":["../../src/csv/CsvInputBar.jsx"],"names":["React","Component","PropTypes","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","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","propTypes","shape","func","isRequired","instanceOf","File","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Button, Checkbox } from '@deephaven/components';\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\n/**\n * Input controls for CSV upload.\n */\nclass CsvInputBar extends Component {\n constructor(props) {\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) {\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() {\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n }\n\n handleCancel() {\n const { onClose } = this.props;\n onClose();\n }\n\n handleError(e) {\n const { onClose, onError } = this.props;\n log.error(e);\n onError(e);\n onClose();\n }\n\n handleTableName(event) {\n this.setState({ tableName: event.target.value, tableNameSet: true });\n }\n\n toggleFirstRowHeaders() {\n const { isFirstRowHeaders } = this.state;\n this.setState({ isFirstRowHeaders: !isFirstRowHeaders });\n }\n\n handleUpload(event) {\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, isZip = false) {\n log.info(\n `Starting CSV parser for ${file.name} ${\n isZip ? '' : `${file.size} bytes`\n }`\n );\n const { session, timeZone, onInProgress } = this.props;\n const { tableName, isFirstRowHeaders, type } = this.state;\n const handleParseDone = tables => {\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) {\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) {\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() {\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() {\n const { onOpenTable, onClose } = this.props;\n const { tableName } = this.state;\n onOpenTable(tableName);\n onClose();\n }\n\n handleQueryTypeChange(event) {\n this.setState({\n type: event.target.value,\n });\n }\n\n render() {\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\nCsvInputBar.propTypes = {\n session: PropTypes.shape({\n bindTableToVariable: PropTypes.func.isRequired,\n mergeTables: PropTypes.func.isRequired,\n }).isRequired,\n onOpenTable: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n onUpdate: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n file: PropTypes.instanceOf(File),\n paste: PropTypes.string,\n onInProgress: PropTypes.func.isRequired,\n timeZone: PropTypes.string.isRequired,\n unzip: PropTypes.func,\n};\n\nCsvInputBar.defaultProps = {\n file: null,\n paste: null,\n unzip: null,\n};\n\nexport default CsvInputBar;\n"],"file":"CsvInputBar.js"}
@@ -6,7 +6,7 @@ declare class CsvOverlay extends React.Component<any, any, any> {
6
6
  static MULTIPLE_FILE_ERROR: string;
7
7
  static FILE_TYPE_ERROR: string;
8
8
  static isValidDropItem(item: any): any;
9
- static isValidExtension(name: any): any;
9
+ static isValidExtension(name: any, allowZip?: boolean): boolean;
10
10
  static handleDragOver(e: any): void;
11
11
  static getIcon(fileName: any): import("@fortawesome/fontawesome-common-types").IconDefinition;
12
12
  constructor(props: any);
@@ -26,9 +26,13 @@ declare class CsvOverlay extends React.Component<any, any, any> {
26
26
  shortcut: import("@deephaven/components").Shortcut;
27
27
  disabled: any;
28
28
  }[];
29
+ getValidExtensions: (this: any, allowZip: any) => string[];
30
+ getAcceptString: (this: any, allowZip: any) => string;
31
+ getFileTypeErrorString: (this: any, allowZip: any) => string;
29
32
  }
30
33
  declare namespace CsvOverlay {
31
34
  namespace propTypes {
35
+ const allowZip: PropTypes.Requireable<boolean>;
32
36
  const onFileOpened: PropTypes.Validator<(...args: any[]) => any>;
33
37
  const onPaste: PropTypes.Validator<(...args: any[]) => any>;
34
38
  const clearDragError: PropTypes.Validator<(...args: any[]) => any>;
@@ -37,6 +41,8 @@ declare namespace CsvOverlay {
37
41
  const uploadInProgress: PropTypes.Validator<boolean>;
38
42
  }
39
43
  namespace defaultProps {
44
+ const allowZip_1: boolean;
45
+ export { allowZip_1 as allowZip };
40
46
  const dragError_1: null;
41
47
  export { dragError_1 as dragError };
42
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CsvOverlay.d.ts","sourceRoot":"","sources":["../../src/csv/CsvOverlay.jsx"],"names":[],"mappings":";AAmBA;;GAEG;AACH;IACE,mCAA2D;IAE3D,+BAAmD;IAEnD,uCAMC;IAED,wCAUC;IAED,oCAGC;IAED,8FAWC;IAED,wBAiBC;IAWD,yBAGC;IAED,8BAIC;IAED,yBAsBC;IAED,8BASC;IAWD,wBAeC;IAED,mCAIC;IA9FC,+BAAiC;IACjC,8BAAgC;IA+DlC,4BAOC;IAyBD;;;;;;QAWC;CAkFF"}
1
+ {"version":3,"file":"CsvOverlay.d.ts","sourceRoot":"","sources":["../../src/csv/CsvOverlay.jsx"],"names":[],"mappings":";AAyBA;;GAEG;AACH;IACE,mCAA2D;IAE3D,+BAAmD;IAEnD,uCAMC;IAED,gEAKC;IAED,oCAGC;IAED,8FAWC;IAED,wBAiBC;IAWD,yBAGC;IAED,8BAIC;IAED,yBAsBC;IAED,8BASC;IAWD,wBAeC;IAED,mCAIC;IA9FC,+BAAiC;IACjC,8BAAgC;IA+DlC,4BAOC;IAyBD;;;;;;QAWC;IAED,2DAEE;IAEF,sDAEE;IAEF,6DAEE;CAiFH"}
@@ -2,12 +2,16 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2
2
 
3
3
  import React, { Component } from 'react';
4
4
  import PropTypes from 'prop-types';
5
+ import memoize from 'memoize-one';
5
6
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
6
7
  import { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';
7
8
  import { dhFileCsv, dhFileDownload, dhFileSpreadsheet, vsClippy, vsFileZip, vsTrash, vsWarning } from '@deephaven/icons';
8
9
  import "./CsvOverlay.css";
10
+ import { TextUtils } from '@deephaven/utils';
9
11
  var PASTED_VALUES = 'pasted values';
10
12
  var INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];
13
+ var VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];
14
+ var ZIP_EXTENSIONS = ['.zip'];
11
15
  /**
12
16
  * Overlay that is displayed when uploading a CSV file.
13
17
  */
@@ -18,7 +22,8 @@ class CsvOverlay extends Component {
18
22
  }
19
23
 
20
24
  static isValidExtension(name) {
21
- return name.endsWith('.csv') || name.endsWith('.zip') || name.endsWith('.tsv') || name.endsWith('.tab') || name.endsWith('.psv') || name.endsWith('.dsv') || name.endsWith('.txt');
25
+ var allowZip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
26
+ return VALID_EXTENSIONS.some(ext => name.endsWith(ext)) || allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext));
22
27
  }
23
28
 
24
29
  static handleDragOver(e) {
@@ -44,6 +49,13 @@ class CsvOverlay extends Component {
44
49
 
45
50
  constructor(props) {
46
51
  super(props);
52
+
53
+ _defineProperty(this, "getValidExtensions", memoize(allowZip => allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]));
54
+
55
+ _defineProperty(this, "getAcceptString", memoize(allowZip => this.getValidExtensions(allowZip).join(', ')));
56
+
57
+ _defineProperty(this, "getFileTypeErrorString", memoize(allowZip => TextUtils.join(this.getValidExtensions(allowZip), 'or')));
58
+
47
59
  this.handleSelectFile = this.handleSelectFile.bind(this);
48
60
  this.handleFiles = this.handleFiles.bind(this);
49
61
  this.handleDrop = this.handleDrop.bind(this);
@@ -80,6 +92,7 @@ class CsvOverlay extends Component {
80
92
 
81
93
  handleDrop(e) {
82
94
  var {
95
+ allowZip,
83
96
  clearDragError,
84
97
  dragError
85
98
  } = this.props;
@@ -97,7 +110,7 @@ class CsvOverlay extends Component {
97
110
 
98
111
  var file = e.dataTransfer.items[0].getAsFile();
99
112
 
100
- if (CsvOverlay.isValidExtension(file.name)) {
113
+ if (CsvOverlay.isValidExtension(file.name, allowZip)) {
101
114
  this.handleFile(file);
102
115
  } else {
103
116
  this.setState({
@@ -171,6 +184,7 @@ class CsvOverlay extends Component {
171
184
 
172
185
  render() {
173
186
  var {
187
+ allowZip,
174
188
  dragError,
175
189
  uploadInProgress
176
190
  } = this.props;
@@ -192,11 +206,12 @@ class CsvOverlay extends Component {
192
206
  ref: this.fileElem,
193
207
  type: "file",
194
208
  id: "fileElem",
195
- accept: ".csv, .tsv, .tab, .zip, .psv, .dsv, .txt",
209
+ accept: this.getAcceptString(allowZip),
196
210
  style: {
197
211
  display: 'none'
198
212
  },
199
- onChange: this.handleFiles
213
+ onChange: this.handleFiles,
214
+ "data-testid": "fileElem"
200
215
  }), !selectedFileName && !error && /*#__PURE__*/React.createElement("div", {
201
216
  className: "message-content"
202
217
  }, /*#__PURE__*/React.createElement("div", {
@@ -233,7 +248,7 @@ class CsvOverlay extends Component {
233
248
  icon: vsWarning
234
249
  })), /*#__PURE__*/React.createElement("label", null, error), error === CsvOverlay.FILE_TYPE_ERROR && /*#__PURE__*/React.createElement("div", {
235
250
  className: "message-small"
236
- }, /*#__PURE__*/React.createElement("label", null, "Please select a .csv, .tsv, .tab, .psv, .dsv, .txt or .zip"))));
251
+ }, /*#__PURE__*/React.createElement("label", null, this.getFileTypeErrorString(allowZip)))));
237
252
  }
238
253
 
239
254
  }
@@ -243,6 +258,7 @@ _defineProperty(CsvOverlay, "MULTIPLE_FILE_ERROR", 'Please select only one file'
243
258
  _defineProperty(CsvOverlay, "FILE_TYPE_ERROR", 'Filetype not supported.');
244
259
 
245
260
  CsvOverlay.propTypes = {
261
+ allowZip: PropTypes.bool,
246
262
  onFileOpened: PropTypes.func.isRequired,
247
263
  onPaste: PropTypes.func.isRequired,
248
264
  clearDragError: PropTypes.func.isRequired,
@@ -251,6 +267,7 @@ CsvOverlay.propTypes = {
251
267
  uploadInProgress: PropTypes.bool.isRequired
252
268
  };
253
269
  CsvOverlay.defaultProps = {
270
+ allowZip: false,
254
271
  dragError: null
255
272
  };
256
273
  export default CsvOverlay;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/csv/CsvOverlay.jsx"],"names":["React","Component","PropTypes","FontAwesomeIcon","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","PASTED_VALUES","INVALID_MIME_TYPES","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","dropError","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","handleFile","target","files","clearDragError","dragError","dataTransfer","items","file","getAsFile","setState","FILE_TYPE_ERROR","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","display","propTypes","func","isRequired","string","bool","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component {\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item) {\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) {\n return (\n name.endsWith('.csv') ||\n name.endsWith('.zip') ||\n name.endsWith('.tsv') ||\n name.endsWith('.tab') ||\n name.endsWith('.psv') ||\n name.endsWith('.dsv') ||\n name.endsWith('.txt')\n );\n }\n\n static handleDragOver(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName) {\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) {\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 dropError: null,\n };\n }\n\n componentDidMount() {\n this.divElem.current.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current.focus();\n }\n\n componentWillUnmount() {\n this.divElem.current.removeEventListener('paste', this.handlePasteEvent);\n }\n\n handleSelectFile() {\n this.fileElem.current.value = null;\n this.fileElem.current.click();\n }\n\n handleFiles(event) {\n event.stopPropagation();\n event.preventDefault();\n this.handleFile(event.target.files[0]);\n }\n\n handleDrop(e) {\n const { 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 if (CsvOverlay.isValidExtension(file.name)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event) {\n const { onFileOpened } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onFileOpened(null);\n this.setState({\n selectedFileName: '',\n dropError: null,\n });\n }\n\n handleFile(file) {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: null,\n });\n }\n\n handleMenuPaste() {\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: null,\n });\n })\n .catch(e => onError(e));\n }\n\n handlePasteEvent(event) {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems() {\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 render() {\n const { 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=\".csv, .tsv, .tab, .zip, .psv, .dsv, .txt\"\n style={{ display: 'none' }}\n onChange={this.handleFiles}\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>\n Please select a .csv, .tsv, .tab, .psv, .dsv, .txt or .zip\n </label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nCsvOverlay.propTypes = {\n onFileOpened: PropTypes.func.isRequired,\n onPaste: PropTypes.func.isRequired,\n clearDragError: PropTypes.func.isRequired,\n dragError: PropTypes.string,\n onError: PropTypes.func.isRequired,\n uploadInProgress: PropTypes.bool.isRequired,\n};\n\nCsvOverlay.defaultProps = {\n dragError: null,\n};\n\nexport default CsvOverlay;\n"],"file":"CsvOverlay.js"}
1
+ {"version":3,"sources":["../../src/csv/CsvOverlay.jsx"],"names":["React","Component","PropTypes","memoize","FontAwesomeIcon","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","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","dropError","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","handleFile","target","files","clearDragError","dragError","dataTransfer","items","file","getAsFile","setState","FILE_TYPE_ERROR","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","getFileTypeErrorString","propTypes","bool","func","isRequired","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { TextUtils } from '@deephaven/utils';\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 {\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item) {\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, allowZip = false) {\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) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName) {\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) {\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 dropError: null,\n };\n }\n\n componentDidMount() {\n this.divElem.current.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current.focus();\n }\n\n componentWillUnmount() {\n this.divElem.current.removeEventListener('paste', this.handlePasteEvent);\n }\n\n handleSelectFile() {\n this.fileElem.current.value = null;\n this.fileElem.current.click();\n }\n\n handleFiles(event) {\n event.stopPropagation();\n event.preventDefault();\n this.handleFile(event.target.files[0]);\n }\n\n handleDrop(e) {\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 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) {\n const { onFileOpened } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onFileOpened(null);\n this.setState({\n selectedFileName: '',\n dropError: null,\n });\n }\n\n handleFile(file) {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: null,\n });\n }\n\n handleMenuPaste() {\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: null,\n });\n })\n .catch(e => onError(e));\n }\n\n handlePasteEvent(event) {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems() {\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() {\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\nCsvOverlay.propTypes = {\n allowZip: PropTypes.bool,\n onFileOpened: PropTypes.func.isRequired,\n onPaste: PropTypes.func.isRequired,\n clearDragError: PropTypes.func.isRequired,\n dragError: PropTypes.string,\n onError: PropTypes.func.isRequired,\n uploadInProgress: PropTypes.bool.isRequired,\n};\n\nCsvOverlay.defaultProps = {\n allowZip: false,\n dragError: null,\n};\n\nexport default CsvOverlay;\n"],"file":"CsvOverlay.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/console",
3
- "version": "0.11.8-beta.2+b24ade4",
3
+ "version": "0.11.10-alpha.7+17f5a1c",
4
4
  "description": "Deephaven Console",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,13 +30,12 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/icons": "^0.11.8-beta.2+b24ade4",
34
- "@deephaven/jsapi-shim": "^0.11.8-beta.2+b24ade4",
35
- "@deephaven/storage": "^0.11.8-beta.2+b24ade4",
36
- "@deephaven/utils": "^0.11.8-beta.2+b24ade4",
33
+ "@deephaven/icons": "^0.11.10-alpha.7+17f5a1c",
34
+ "@deephaven/jsapi-shim": "^0.11.10-alpha.7+17f5a1c",
35
+ "@deephaven/storage": "^0.11.10-alpha.7+17f5a1c",
36
+ "@deephaven/utils": "^0.11.10-alpha.7+17f5a1c",
37
37
  "@fortawesome/react-fontawesome": "^0.1.15",
38
38
  "classnames": "^2.3.1",
39
- "jszip": "3.2.2",
40
39
  "lodash.debounce": "^4.0.8",
41
40
  "lodash.throttle": "^4.1.1",
42
41
  "memoize-one": "^5.1.1",
@@ -47,15 +46,15 @@
47
46
  "shell-quote": "^1.7.2"
48
47
  },
49
48
  "peerDependencies": {
50
- "@deephaven/components": "^0.11.2",
51
- "@deephaven/log": "^0.11.2",
49
+ "@deephaven/components": "file:../components",
50
+ "@deephaven/log": "file:../log",
52
51
  "react": "^17.x",
53
52
  "react-dom": "^17.x"
54
53
  },
55
54
  "devDependencies": {
56
- "@deephaven/log": "^0.11.8-beta.2+b24ade4",
57
- "@deephaven/mocks": "^0.11.8-beta.2+b24ade4",
58
- "@deephaven/tsconfig": "^0.11.8-beta.2+b24ade4"
55
+ "@deephaven/log": "^0.11.10-alpha.7+17f5a1c",
56
+ "@deephaven/mocks": "^0.11.10-alpha.7+17f5a1c",
57
+ "@deephaven/tsconfig": "^0.11.10-alpha.7+17f5a1c"
59
58
  },
60
59
  "files": [
61
60
  "dist"
@@ -66,5 +65,5 @@
66
65
  "publishConfig": {
67
66
  "access": "public"
68
67
  },
69
- "gitHead": "b24ade4cbf8428e8d78a6f668948bc03ec5f5a5f"
68
+ "gitHead": "17f5a1ca6877549e2beba00e749552a75735c3c5"
70
69
  }