@deephaven/console 0.26.1 → 0.26.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Console.js +3 -1
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleInput.js +3 -1
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/ConsoleMenu.js +3 -1
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/ConsoleStatusBar.js +3 -1
- package/dist/ConsoleStatusBar.js.map +1 -1
- package/dist/HeapUsage.js.map +1 -1
- package/dist/command-history/CommandHistory.js +3 -1
- package/dist/command-history/CommandHistory.js.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.js +3 -1
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
- package/dist/common/Code.js +3 -1
- package/dist/common/Code.js.map +1 -1
- package/dist/console-history/ConsoleHistory.js +3 -1
- package/dist/console-history/ConsoleHistory.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js +3 -1
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js +3 -1
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultInProgress.js +3 -1
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
- package/dist/csv/CsvFormats.js +3 -1
- package/dist/csv/CsvFormats.js.map +1 -1
- package/dist/csv/CsvInputBar.js +3 -1
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.js +3 -1
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/csv/CsvParser.js +3 -1
- package/dist/csv/CsvParser.js.map +1 -1
- package/dist/csv/CsvTypeParser.js +3 -1
- package/dist/csv/CsvTypeParser.js.map +1 -1
- package/dist/csv/NewTableColumnTypes.js +3 -1
- package/dist/csv/NewTableColumnTypes.js.map +1 -1
- package/dist/log/LogView.js +7 -5
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoCompletionProvider.js +3 -1
- package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
- package/dist/monaco/MonacoUtils.js +3 -1
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/notebook/Editor.js +3 -1
- package/dist/notebook/Editor.js.map +1 -1
- package/dist/notebook/ScriptEditor.js +3 -1
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleStatusBar.js","names":["React","PureComponent","classNames","dh","Tooltip","CanceledPromiseError","Pending","ConsoleMenu","ConsoleStatusBar","constructor","props","handleCommandStarted","bind","handleCommandCompleted","pending","state","isDisconnected","isCommandRunning","componentDidMount","startListening","componentWillUnmount","stopListening","cancelPendingPromises","session","addEventListener","IdeSession","EVENT_COMMANDSTARTED","removeEventListener","cancel","event","result","detail","add","then","catch","error","setState","length","render","children","openObject","overflowActions","objects","statusIconClass","tooltipText"],"sources":["../src/ConsoleStatusBar.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement, ReactNode } from 'react';\nimport classNames from 'classnames';\nimport dh, { IdeSession, VariableDefinition } from '@deephaven/jsapi-shim';\nimport { DropdownAction, Tooltip } from '@deephaven/components';\nimport { CanceledPromiseError, Pending } from '@deephaven/utils';\nimport ConsoleMenu from './ConsoleMenu';\nimport './ConsoleStatusBar.scss';\n\ninterface ConsoleStatusBarProps {\n children: ReactNode;\n session: IdeSession;\n openObject: (object: VariableDefinition) => void;\n objects: VariableDefinition[];\n overflowActions: () => DropdownAction[];\n}\n\ninterface ConsoleStatusBarState {\n isDisconnected: boolean;\n isCommandRunning: boolean;\n}\n\nexport class ConsoleStatusBar extends PureComponent<\n ConsoleStatusBarProps,\n ConsoleStatusBarState\n> {\n static defaultProps = {\n children: null,\n };\n\n constructor(props: ConsoleStatusBarProps) {\n super(props);\n\n this.handleCommandStarted = this.handleCommandStarted.bind(this);\n this.handleCommandCompleted = this.handleCommandCompleted.bind(this);\n\n this.pending = new Pending();\n\n this.state = {\n isDisconnected: false,\n isCommandRunning: false,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n this.cancelPendingPromises();\n }\n\n pending: Pending;\n\n startListening(): void {\n const { session } = this.props;\n session.addEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n }\n\n stopListening(): void {\n const { session } = this.props;\n session.removeEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n }\n\n cancelPendingPromises(): void {\n this.pending.cancel();\n }\n\n handleCommandStarted(event: CustomEvent): void {\n const { result } = event.detail;\n\n this.pending\n .add(result)\n .then(() => this.handleCommandCompleted(null))\n .catch(error => this.handleCommandCompleted(error));\n\n this.setState({\n isCommandRunning: true,\n });\n }\n\n handleCommandCompleted(error: unknown): void {\n // Don't update state if the promise was canceled\n if (!(error instanceof CanceledPromiseError)) {\n this.setState({\n isCommandRunning: this.pending.pending.length > 0,\n });\n }\n }\n\n render(): ReactElement {\n const { children, openObject, overflowActions, objects } = this.props;\n const { isDisconnected, isCommandRunning } = this.state;\n\n let statusIconClass = null;\n let tooltipText = null;\n\n if (isDisconnected) {\n statusIconClass = 'console-status-icon-disconnected';\n tooltipText = 'Worker is disconnected';\n } else if (isCommandRunning) {\n // Connected, Pending\n statusIconClass = 'console-status-icon-pending';\n tooltipText = 'Worker is busy';\n } else {\n // Connected, Idle\n statusIconClass = 'console-status-icon-idle';\n tooltipText = 'Worker is idle';\n }\n\n return (\n <div className=\"console-pane-status-bar\">\n <div>\n <div className={classNames('console-status-icon', statusIconClass)} />\n <Tooltip>{tooltipText}</Tooltip>\n </div>\n {children}\n <ConsoleMenu\n overflowActions={overflowActions}\n openObject={openObject}\n objects={objects}\n />\n </div>\n );\n }\n}\n\nexport default ConsoleStatusBar;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConsoleStatusBar.js","names":["React","PureComponent","classNames","dh","Tooltip","CanceledPromiseError","Pending","ConsoleMenu","ConsoleStatusBar","constructor","props","handleCommandStarted","bind","handleCommandCompleted","pending","state","isDisconnected","isCommandRunning","componentDidMount","startListening","componentWillUnmount","stopListening","cancelPendingPromises","session","addEventListener","IdeSession","EVENT_COMMANDSTARTED","removeEventListener","cancel","event","result","detail","add","then","catch","error","setState","length","render","children","openObject","overflowActions","objects","statusIconClass","tooltipText"],"sources":["../src/ConsoleStatusBar.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement, ReactNode } from 'react';\nimport classNames from 'classnames';\nimport dh, { IdeSession, VariableDefinition } from '@deephaven/jsapi-shim';\nimport { DropdownAction, Tooltip } from '@deephaven/components';\nimport { CanceledPromiseError, Pending } from '@deephaven/utils';\nimport ConsoleMenu from './ConsoleMenu';\nimport './ConsoleStatusBar.scss';\n\ninterface ConsoleStatusBarProps {\n children: ReactNode;\n session: IdeSession;\n openObject: (object: VariableDefinition) => void;\n objects: VariableDefinition[];\n overflowActions: () => DropdownAction[];\n}\n\ninterface ConsoleStatusBarState {\n isDisconnected: boolean;\n isCommandRunning: boolean;\n}\n\nexport class ConsoleStatusBar extends PureComponent<\n ConsoleStatusBarProps,\n ConsoleStatusBarState\n> {\n static defaultProps = {\n children: null,\n };\n\n constructor(props: ConsoleStatusBarProps) {\n super(props);\n\n this.handleCommandStarted = this.handleCommandStarted.bind(this);\n this.handleCommandCompleted = this.handleCommandCompleted.bind(this);\n\n this.pending = new Pending();\n\n this.state = {\n isDisconnected: false,\n isCommandRunning: false,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n this.cancelPendingPromises();\n }\n\n pending: Pending;\n\n startListening(): void {\n const { session } = this.props;\n session.addEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n }\n\n stopListening(): void {\n const { session } = this.props;\n session.removeEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n this.handleCommandStarted\n );\n }\n\n cancelPendingPromises(): void {\n this.pending.cancel();\n }\n\n handleCommandStarted(event: CustomEvent): void {\n const { result } = event.detail;\n\n this.pending\n .add(result)\n .then(() => this.handleCommandCompleted(null))\n .catch(error => this.handleCommandCompleted(error));\n\n this.setState({\n isCommandRunning: true,\n });\n }\n\n handleCommandCompleted(error: unknown): void {\n // Don't update state if the promise was canceled\n if (!(error instanceof CanceledPromiseError)) {\n this.setState({\n isCommandRunning: this.pending.pending.length > 0,\n });\n }\n }\n\n render(): ReactElement {\n const { children, openObject, overflowActions, objects } = this.props;\n const { isDisconnected, isCommandRunning } = this.state;\n\n let statusIconClass = null;\n let tooltipText = null;\n\n if (isDisconnected) {\n statusIconClass = 'console-status-icon-disconnected';\n tooltipText = 'Worker is disconnected';\n } else if (isCommandRunning) {\n // Connected, Pending\n statusIconClass = 'console-status-icon-pending';\n tooltipText = 'Worker is busy';\n } else {\n // Connected, Idle\n statusIconClass = 'console-status-icon-idle';\n tooltipText = 'Worker is idle';\n }\n\n return (\n <div className=\"console-pane-status-bar\">\n <div>\n <div className={classNames('console-status-icon', statusIconClass)} />\n <Tooltip>{tooltipText}</Tooltip>\n </div>\n {children}\n <ConsoleMenu\n overflowActions={overflowActions}\n openObject={openObject}\n objects={objects}\n />\n </div>\n );\n }\n}\n\nexport default ConsoleStatusBar;\n"],"mappings":"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"}
|
package/dist/HeapUsage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeapUsage.js","names":["Tooltip","React","useEffect","useState","useRef","Plot","ChartTheme","classNames","HeapUsage","connection","defaultUpdateInterval","hoverUpdateInterval","bgMonitoring","monitorDuration","memoryUsage","setMemoryUsage","freeMemory","maximumHeapSize","totalHeapSize","isOpen","setIsOpen","historyUsage","timestamps","usages","setUsageUpdateInterval","fetchAndUpdate","newUsage","getWorkerHeapInfo","currentUsage","currentTime","Date","now","current","length","shift","push","updateUsage","setInterval","clearInterval","toDecimalPlace","num","dec","Math","round","decimalPlace","GbToByte","freeMemoryGB","totalHeapGB","maxHeapGB","inUseGB","getRow","text","size","bottomBorder","lastTimestamp","totalPercentage","usedPercentage","width","toFixed","x","y","type","mode","staticPlot","responsive","height","legend","margin","l","t","r","b","plot_bgcolor","paper_bgcolor","colorway","xaxis","dtick","gridcolor","linecolor","range","linewidth","mirror","yaxis"],"sources":["../src/HeapUsage.tsx"],"sourcesContent":["import { Tooltip } from '@deephaven/components';\nimport { QueryConnectable } from '@deephaven/jsapi-shim';\nimport React, { useEffect, useState, ReactElement, useRef } from 'react';\nimport { Plot, ChartTheme } from '@deephaven/chart';\nimport './HeapUsage.scss';\nimport classNames from 'classnames';\n\ninterface HeapUsageProps {\n connection: QueryConnectable;\n defaultUpdateInterval: number;\n hoverUpdateInterval: number;\n bgMonitoring?: boolean;\n\n // in millis\n monitorDuration: number;\n}\n\nfunction HeapUsage({\n connection,\n defaultUpdateInterval,\n hoverUpdateInterval,\n bgMonitoring = true,\n monitorDuration,\n}: HeapUsageProps): ReactElement {\n const [memoryUsage, setMemoryUsage] = useState({\n freeMemory: 0,\n maximumHeapSize: 999,\n totalHeapSize: 0,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const historyUsage = useRef<{ timestamps: number[]; usages: number[] }>({\n timestamps: [],\n usages: [],\n });\n\n useEffect(\n function setUsageUpdateInterval() {\n const fetchAndUpdate = async () => {\n const newUsage = await connection.getWorkerHeapInfo();\n setMemoryUsage(newUsage);\n\n if (bgMonitoring || isOpen) {\n const currentUsage =\n (newUsage.totalHeapSize - newUsage.freeMemory) /\n newUsage.maximumHeapSize;\n const currentTime = Date.now();\n\n const { timestamps, usages } = historyUsage.current;\n while (\n timestamps.length !== 0 &&\n currentTime - timestamps[0] > monitorDuration * 1.5\n ) {\n timestamps.shift();\n usages.shift();\n }\n\n timestamps.push(currentTime);\n usages.push(currentUsage);\n } else {\n historyUsage.current = { timestamps: [], usages: [] };\n }\n };\n fetchAndUpdate();\n\n const updateUsage = setInterval(\n fetchAndUpdate,\n isOpen ? hoverUpdateInterval : defaultUpdateInterval\n );\n return () => {\n clearInterval(updateUsage);\n };\n },\n [\n isOpen,\n hoverUpdateInterval,\n connection,\n defaultUpdateInterval,\n monitorDuration,\n bgMonitoring,\n ]\n );\n\n const toDecimalPlace = (num: number, dec: number) =>\n Math.round(num * 10 ** dec) / 10 ** dec;\n\n const decimalPlace = 2;\n const GbToByte = 1024 ** 3;\n\n const { freeMemory, totalHeapSize, maximumHeapSize } = memoryUsage;\n\n const freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);\n const totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);\n const maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);\n const inUseGB = totalHeapGB - freeMemoryGB;\n\n const getRow = (text: string, size: string, bottomBorder = false) => (\n <div\n className={classNames(`heap-usage-info-row`, {\n 'heading-bottom-border': bottomBorder,\n })}\n >\n <div className=\"font-weight-bold\">{text}</div>\n <div>{size}</div>\n </div>\n );\n\n const { timestamps, usages } = historyUsage.current;\n\n const lastTimestamp = timestamps[timestamps.length - 1] ?? 0;\n\n const totalPercentage = totalHeapSize / maximumHeapSize;\n const usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;\n\n return (\n <>\n <div className=\"max-memory\">\n <div\n className=\"total-memory\"\n style={{\n width: `calc(${totalPercentage * 100}% - ${totalPercentage * 2}px`,\n }}\n />\n <div\n className={classNames('used-memory', {\n 'heap-overflow':\n (totalHeapSize - freeMemory) / maximumHeapSize > 0.95,\n })}\n style={{\n width: `calc(${usedPercentage * 100}% - ${usedPercentage * 2}px`,\n }}\n />\n <div className=\"memory-text\">{maxHeapGB.toFixed(1)} GB</div>\n </div>\n\n <Tooltip\n onEntered={() => setIsOpen(true)}\n onExited={() => setIsOpen(false)}\n interactive\n >\n <div className=\"heap-tooltip\">\n {getRow(\n 'In use:',\n `${inUseGB.toFixed(decimalPlace)} of ${maxHeapGB.toFixed(\n decimalPlace\n )} GB`,\n true\n )}\n {getRow('Free:', `${freeMemoryGB.toFixed(decimalPlace)} GB`)}\n {getRow('Total:', `${totalHeapGB.toFixed(decimalPlace)} GB`)}\n {getRow('Max:', `${maxHeapGB.toFixed(decimalPlace)} GB`)}\n <div className=\"heap-plot\">\n <Plot\n data={[\n {\n x: [...timestamps],\n y: [...usages],\n type: 'scatter',\n mode: 'lines',\n },\n ]}\n config={{ staticPlot: true, responsive: true }}\n style={{\n width: '196px',\n height: '100px',\n }}\n layout={{\n legend: false,\n margin: { l: 2, t: 2, r: 2, b: 2 },\n plot_bgcolor: 'transparent',\n paper_bgcolor: 'transparent',\n colorway: ['#4878ea'],\n xaxis: {\n dtick: Math.round(monitorDuration / 6),\n gridcolor: ChartTheme.linecolor,\n range: [lastTimestamp - monitorDuration, lastTimestamp],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n yaxis: {\n dtick: 0.2,\n gridcolor: ChartTheme.linecolor,\n range: [0, 1],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n }}\n />\n </div>\n <div className=\"heap-utilisation-text\">\n % utilization over {Math.round(monitorDuration / 1000 / 60)} min.\n </div>\n </div>\n </Tooltip>\n </>\n );\n}\n\nexport default HeapUsage;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeapUsage.js","names":["Tooltip","React","useEffect","useState","useRef","Plot","ChartTheme","classNames","HeapUsage","connection","defaultUpdateInterval","hoverUpdateInterval","bgMonitoring","monitorDuration","memoryUsage","setMemoryUsage","freeMemory","maximumHeapSize","totalHeapSize","isOpen","setIsOpen","historyUsage","timestamps","usages","setUsageUpdateInterval","fetchAndUpdate","newUsage","getWorkerHeapInfo","currentUsage","currentTime","Date","now","current","length","shift","push","updateUsage","setInterval","clearInterval","toDecimalPlace","num","dec","Math","round","decimalPlace","GbToByte","freeMemoryGB","totalHeapGB","maxHeapGB","inUseGB","getRow","text","size","bottomBorder","lastTimestamp","totalPercentage","usedPercentage","width","toFixed","x","y","type","mode","staticPlot","responsive","height","legend","margin","l","t","r","b","plot_bgcolor","paper_bgcolor","colorway","xaxis","dtick","gridcolor","linecolor","range","linewidth","mirror","yaxis"],"sources":["../src/HeapUsage.tsx"],"sourcesContent":["import { Tooltip } from '@deephaven/components';\nimport { QueryConnectable } from '@deephaven/jsapi-shim';\nimport React, { useEffect, useState, ReactElement, useRef } from 'react';\nimport { Plot, ChartTheme } from '@deephaven/chart';\nimport './HeapUsage.scss';\nimport classNames from 'classnames';\n\ninterface HeapUsageProps {\n connection: QueryConnectable;\n defaultUpdateInterval: number;\n hoverUpdateInterval: number;\n bgMonitoring?: boolean;\n\n // in millis\n monitorDuration: number;\n}\n\nfunction HeapUsage({\n connection,\n defaultUpdateInterval,\n hoverUpdateInterval,\n bgMonitoring = true,\n monitorDuration,\n}: HeapUsageProps): ReactElement {\n const [memoryUsage, setMemoryUsage] = useState({\n freeMemory: 0,\n maximumHeapSize: 999,\n totalHeapSize: 0,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const historyUsage = useRef<{ timestamps: number[]; usages: number[] }>({\n timestamps: [],\n usages: [],\n });\n\n useEffect(\n function setUsageUpdateInterval() {\n const fetchAndUpdate = async () => {\n const newUsage = await connection.getWorkerHeapInfo();\n setMemoryUsage(newUsage);\n\n if (bgMonitoring || isOpen) {\n const currentUsage =\n (newUsage.totalHeapSize - newUsage.freeMemory) /\n newUsage.maximumHeapSize;\n const currentTime = Date.now();\n\n const { timestamps, usages } = historyUsage.current;\n while (\n timestamps.length !== 0 &&\n currentTime - timestamps[0] > monitorDuration * 1.5\n ) {\n timestamps.shift();\n usages.shift();\n }\n\n timestamps.push(currentTime);\n usages.push(currentUsage);\n } else {\n historyUsage.current = { timestamps: [], usages: [] };\n }\n };\n fetchAndUpdate();\n\n const updateUsage = setInterval(\n fetchAndUpdate,\n isOpen ? hoverUpdateInterval : defaultUpdateInterval\n );\n return () => {\n clearInterval(updateUsage);\n };\n },\n [\n isOpen,\n hoverUpdateInterval,\n connection,\n defaultUpdateInterval,\n monitorDuration,\n bgMonitoring,\n ]\n );\n\n const toDecimalPlace = (num: number, dec: number) =>\n Math.round(num * 10 ** dec) / 10 ** dec;\n\n const decimalPlace = 2;\n const GbToByte = 1024 ** 3;\n\n const { freeMemory, totalHeapSize, maximumHeapSize } = memoryUsage;\n\n const freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);\n const totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);\n const maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);\n const inUseGB = totalHeapGB - freeMemoryGB;\n\n const getRow = (text: string, size: string, bottomBorder = false) => (\n <div\n className={classNames(`heap-usage-info-row`, {\n 'heading-bottom-border': bottomBorder,\n })}\n >\n <div className=\"font-weight-bold\">{text}</div>\n <div>{size}</div>\n </div>\n );\n\n const { timestamps, usages } = historyUsage.current;\n\n const lastTimestamp = timestamps[timestamps.length - 1] ?? 0;\n\n const totalPercentage = totalHeapSize / maximumHeapSize;\n const usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;\n\n return (\n <>\n <div className=\"max-memory\">\n <div\n className=\"total-memory\"\n style={{\n width: `calc(${totalPercentage * 100}% - ${totalPercentage * 2}px`,\n }}\n />\n <div\n className={classNames('used-memory', {\n 'heap-overflow':\n (totalHeapSize - freeMemory) / maximumHeapSize > 0.95,\n })}\n style={{\n width: `calc(${usedPercentage * 100}% - ${usedPercentage * 2}px`,\n }}\n />\n <div className=\"memory-text\">{maxHeapGB.toFixed(1)} GB</div>\n </div>\n\n <Tooltip\n onEntered={() => setIsOpen(true)}\n onExited={() => setIsOpen(false)}\n interactive\n >\n <div className=\"heap-tooltip\">\n {getRow(\n 'In use:',\n `${inUseGB.toFixed(decimalPlace)} of ${maxHeapGB.toFixed(\n decimalPlace\n )} GB`,\n true\n )}\n {getRow('Free:', `${freeMemoryGB.toFixed(decimalPlace)} GB`)}\n {getRow('Total:', `${totalHeapGB.toFixed(decimalPlace)} GB`)}\n {getRow('Max:', `${maxHeapGB.toFixed(decimalPlace)} GB`)}\n <div className=\"heap-plot\">\n <Plot\n data={[\n {\n x: [...timestamps],\n y: [...usages],\n type: 'scatter',\n mode: 'lines',\n },\n ]}\n config={{ staticPlot: true, responsive: true }}\n style={{\n width: '196px',\n height: '100px',\n }}\n layout={{\n legend: false,\n margin: { l: 2, t: 2, r: 2, b: 2 },\n plot_bgcolor: 'transparent',\n paper_bgcolor: 'transparent',\n colorway: ['#4878ea'],\n xaxis: {\n dtick: Math.round(monitorDuration / 6),\n gridcolor: ChartTheme.linecolor,\n range: [lastTimestamp - monitorDuration, lastTimestamp],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n yaxis: {\n dtick: 0.2,\n gridcolor: ChartTheme.linecolor,\n range: [0, 1],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n }}\n />\n </div>\n <div className=\"heap-utilisation-text\">\n % utilization over {Math.round(monitorDuration / 1000 / 60)} min.\n </div>\n </div>\n </Tooltip>\n </>\n );\n}\n\nexport default HeapUsage;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
2
2
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
3
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
3
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
4
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
5
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
4
6
|
import React, { Component } from 'react';
|
|
5
7
|
import { ContextActions, ItemList, SearchInput, GLOBAL_SHORTCUTS } from '@deephaven/components';
|
|
6
8
|
import { vsFileCode, vsFiles, vsNewFile, vsPlay, vsTerminal } from '@deephaven/icons';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandHistory.js","names":["React","Component","ContextActions","ItemList","SearchInput","GLOBAL_SHORTCUTS","vsFileCode","vsFiles","vsNewFile","vsPlay","vsTerminal","copyToClipboard","Pending","Log","CommandHistoryItem","CommandHistoryActions","ConsoleConstants","CommandHistoryViewportUpdater","SHORTCUTS","log","module","CommandHistory","getCommandsFromViewport","items","offset","sortedRanges","commands","i","length","range","j","name","push","getCommandsFromSnapshot","table","getSnapshot","values","map","item","constructor","props","copySelectedCommands","bind","createNotebook","sendToConsole","renderItem","runInConsole","sendToNotebook","handleSelect","handleSelectionChange","handleSearchChange","handleViewportChange","handleViewportUpdate","itemActions","title","description","icon","shortcut","COPY","action","group","groups","edit","COMMAND_HISTORY","SEND_TO_CONSOLE","menuGroups","send","order","RUN","SEND_TO_NOTEBOOK","historyActions","selectionRequired","pending","searchInputRef","createRef","itemListRef","state","actions","top","bottom","itemCount","size","selectedRanges","searchText","componentWillUnmount","cancel","getSelectedCommands","ranges","slice","sort","a","b","add","getSelectedCommandText","then","join","updateActions","setState","selectedRowCount","reduce","count","MAX_SELECTION_COUNT","debug","catch","error","commandText","language","value","index","e","target","itemIndex","isSelected","commandHistoryStorage","focus","current","restoreScrollPosition","render","languageDisplayString","LANGUAGE_MAP","get","ITEM_HEIGHT","medium"],"sources":["../../src/command-history/CommandHistory.tsx"],"sourcesContent":["import React, { ChangeEvent, Component, ReactElement, RefObject } from 'react';\nimport {\n ContextActions,\n ItemList,\n SearchInput,\n GLOBAL_SHORTCUTS,\n RenderItemProps,\n} from '@deephaven/components';\nimport { ViewportData } from '@deephaven/storage';\nimport {\n vsFileCode,\n vsFiles,\n vsNewFile,\n vsPlay,\n vsTerminal,\n} from '@deephaven/icons';\nimport { copyToClipboard, Pending, Range } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport CommandHistoryItem from './CommandHistoryItem';\nimport CommandHistoryActions from './CommandHistoryActions';\nimport ConsoleConstants from '../common/ConsoleConstants';\n\nimport './CommandHistory.scss';\nimport CommandHistoryViewportUpdater from './CommandHistoryViewportUpdater';\nimport SHORTCUTS from '../ConsoleShortcuts';\nimport CommandHistoryStorage, {\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './CommandHistoryStorage';\nimport { ItemAction, HistoryAction } from './CommandHistoryTypes';\n\nconst log = Log.module('CommandHistory');\n\nexport type CommandHistorySettings = {\n value: string;\n language: string;\n};\ninterface CommandHistoryProps {\n language: string;\n sendToConsole: (command: string, focus?: boolean, execute?: boolean) => void;\n sendToNotebook: (\n settings: CommandHistorySettings,\n forceNewNotebook?: boolean\n ) => void;\n table: CommandHistoryTable;\n commandHistoryStorage: CommandHistoryStorage;\n}\ninterface CommandHistoryState {\n actions: ItemAction[];\n historyActions: HistoryAction[];\n top: number;\n bottom: number;\n itemCount: number;\n items: CommandHistoryStorageItem[];\n offset: number;\n selectedRanges: Range[];\n searchText: string;\n}\n\nclass CommandHistory extends Component<\n CommandHistoryProps,\n CommandHistoryState\n> {\n static ITEM_HEIGHT = 29;\n\n static MAX_SELECTION_COUNT = 10000;\n\n static menuGroups = {\n send: ContextActions.groups.medium + 100,\n };\n\n static getCommandsFromViewport(\n items: CommandHistoryStorageItem[],\n offset: number,\n sortedRanges: Range[]\n ): string[] {\n const commands = [];\n for (let i = 0; i < sortedRanges.length; i += 1) {\n const range = sortedRanges[i];\n for (let j = range[0]; j <= range[1]; j += 1) {\n if (j >= offset && j < offset + items.length) {\n const { name } = items[j - offset];\n commands.push(name);\n }\n }\n }\n return commands;\n }\n\n static async getCommandsFromSnapshot(\n table: CommandHistoryTable,\n sortedRanges: Range[]\n ): Promise<string[]> {\n const items = await table.getSnapshot(sortedRanges);\n return [...items.values()].map(item => item.name);\n }\n\n constructor(props: CommandHistoryProps) {\n super(props);\n\n this.copySelectedCommands = this.copySelectedCommands.bind(this);\n this.createNotebook = this.createNotebook.bind(this);\n this.sendToConsole = this.sendToConsole.bind(this);\n this.renderItem = this.renderItem.bind(this);\n this.runInConsole = this.runInConsole.bind(this);\n this.sendToNotebook = this.sendToNotebook.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleViewportUpdate = this.handleViewportUpdate.bind(this);\n\n this.itemActions = [\n {\n title: 'Copy Selection',\n description: 'Copy selected commands to clipboard',\n icon: vsFiles,\n shortcut: GLOBAL_SHORTCUTS.COPY,\n action: this.copySelectedCommands,\n group: ContextActions.groups.edit,\n },\n {\n title: 'Send to Console',\n description: 'Open selected commands in the console',\n icon: vsTerminal,\n shortcut: SHORTCUTS.COMMAND_HISTORY.SEND_TO_CONSOLE,\n action: this.sendToConsole,\n group: CommandHistory.menuGroups.send,\n order: 10,\n },\n {\n title: 'Run in Console',\n description: 'Run selected commands in the console',\n icon: vsPlay,\n shortcut: SHORTCUTS.COMMAND_HISTORY.RUN,\n action: this.runInConsole,\n group: CommandHistory.menuGroups.send,\n order: 10,\n },\n {\n title: 'Send to Active Notebook',\n description: 'Open selected commands in a notebook',\n icon: vsFileCode,\n shortcut: SHORTCUTS.COMMAND_HISTORY.SEND_TO_NOTEBOOK,\n action: this.sendToNotebook,\n group: CommandHistory.menuGroups.send,\n order: 20,\n },\n {\n title: 'Send to New Notebook',\n description: 'Open selected commands in a new notebook',\n icon: vsNewFile,\n action: this.createNotebook,\n group: CommandHistory.menuGroups.send,\n order: 30,\n },\n ];\n\n this.historyActions = [\n {\n title: 'Send to Console',\n icon: vsTerminal,\n selectionRequired: true,\n description: 'Open selected commands in the console',\n action: this.sendToConsole,\n },\n {\n title: 'Send to Notebook',\n icon: vsFileCode,\n selectionRequired: true,\n description: 'Open selected commands in a notebook',\n action: this.sendToNotebook,\n },\n ];\n\n this.pending = new Pending();\n this.searchInputRef = React.createRef();\n this.itemListRef = React.createRef();\n\n const { table } = props;\n\n this.state = {\n actions: [],\n historyActions: this.historyActions,\n top: 0,\n bottom: 0,\n itemCount: table.size,\n items: [],\n offset: 0,\n selectedRanges: [],\n searchText: '',\n };\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n }\n\n itemActions: ItemAction[];\n\n historyActions: HistoryAction[];\n\n pending: Pending;\n\n searchInputRef: RefObject<SearchInput>;\n\n itemListRef: React.RefObject<ItemList<CommandHistoryStorageItem>>;\n\n /**\n * Retrieves the selected commands as an array.\n * If they're not within the current viewport, will fetch them from the table\n * @returns Array of selected commands\n */\n async getSelectedCommands(): Promise<string[]> {\n const { items, offset, selectedRanges } = this.state;\n const ranges = selectedRanges.slice().sort((a, b) => a[0] - b[0]);\n\n if (ranges.length === 0) {\n return [];\n }\n if (\n ranges[0][0] >= offset &&\n ranges[ranges.length - 1][1] < offset + items.length\n ) {\n // All ranges are in the current viewport, just copy the data we've already got\n return CommandHistory.getCommandsFromViewport(items, offset, ranges);\n }\n const { table } = this.props;\n return this.pending.add(\n CommandHistory.getCommandsFromSnapshot(table, ranges)\n );\n }\n\n /**\n * Retrieves the text of all the currently selected commands, joined by a new line char\n * @returns The commands joined by \\n char\n */\n getSelectedCommandText(): Promise<string> {\n return this.getSelectedCommands().then(commands => commands.join('\\n'));\n }\n\n updateActions(): void {\n this.setState(state => {\n const { selectedRanges } = state;\n const selectedRowCount = selectedRanges.reduce(\n (count, range) => count + range[1] - range[0] + 1,\n 0\n );\n if (\n selectedRowCount > 0 &&\n selectedRowCount < CommandHistory.MAX_SELECTION_COUNT\n ) {\n log.debug('Updating actions', this.itemActions);\n return { actions: this.itemActions };\n }\n log.debug('Disabling actions', selectedRowCount);\n return { actions: [] };\n });\n }\n\n copySelectedCommands(): void {\n this.getSelectedCommandText().then(copyToClipboard).catch(log.error);\n }\n\n createNotebook(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { language, sendToNotebook } = this.props;\n sendToNotebook({ value: commandText, language }, true);\n })\n .catch(log.error);\n }\n\n sendToNotebook(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { language, sendToNotebook } = this.props;\n sendToNotebook({ value: commandText, language });\n })\n .catch(log.error);\n }\n\n sendToConsole(): void {\n const { sendToConsole } = this.props;\n this.getSelectedCommandText().then(sendToConsole).catch(log.error);\n }\n\n runInConsole(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { sendToConsole } = this.props;\n sendToConsole(commandText, true, true);\n })\n .catch(log.error);\n }\n\n handleSelect(index: number): void {\n const { sendToConsole } = this.props;\n const { items, offset } = this.state;\n if (index < offset || index >= offset + items.length) {\n log.error('Invalid index!', index);\n return;\n }\n\n const { name } = items[index - offset];\n sendToConsole(name);\n }\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedRanges });\n this.updateActions();\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.setState({ top, bottom });\n }\n\n handleSearchChange(e: ChangeEvent<HTMLInputElement>): void {\n // clear selected range, as old selection could be filtered from list\n this.setState({ searchText: e.target.value, selectedRanges: [] });\n }\n\n handleViewportUpdate({\n items,\n offset,\n }: ViewportData<CommandHistoryStorageItem>): void {\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ items, itemCount, offset });\n }\n\n renderItem({\n item,\n itemIndex,\n isSelected,\n }: RenderItemProps<CommandHistoryStorageItem>): ReactElement {\n const { language, commandHistoryStorage } = this.props;\n return (\n <CommandHistoryItem\n isSelected={isSelected}\n item={item}\n language={language}\n commandHistoryStorage={commandHistoryStorage}\n />\n );\n }\n\n focus(): void {\n if (this.searchInputRef.current) {\n this.searchInputRef.current.focus();\n }\n }\n\n restoreScrollPosition(): void {\n this.itemListRef.current?.restoreScrollPosition();\n }\n\n render(): ReactElement {\n const { language, table } = this.props;\n const {\n actions,\n historyActions,\n searchText,\n top,\n bottom,\n items,\n itemCount,\n offset,\n selectedRanges,\n } = this.state;\n const languageDisplayString =\n ConsoleConstants.LANGUAGE_MAP.get(language) ?? '';\n return (\n <div className=\"command-history\">\n <div className=\"command-history-search-bar\">\n <SearchInput\n ref={this.searchInputRef}\n value={searchText}\n placeholder={`${languageDisplayString} Command History`}\n onChange={this.handleSearchChange}\n />\n <CommandHistoryActions\n actions={historyActions}\n hasSelection={selectedRanges.length > 0}\n />\n </div>\n <div className=\"command-history-list\">\n <ItemList\n ref={this.itemListRef}\n itemCount={itemCount}\n items={items}\n offset={offset}\n selectedRanges={selectedRanges}\n onSelect={this.handleSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={this.handleViewportChange}\n renderItem={this.renderItem}\n rowHeight={CommandHistory.ITEM_HEIGHT}\n isDoubleClickSelect\n isMultiSelect\n isStickyBottom\n />\n <CommandHistoryViewportUpdater\n table={table}\n top={top}\n bottom={bottom}\n search={searchText}\n onUpdate={this.handleViewportUpdate}\n />\n <ContextActions actions={actions} />\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistory;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAiBC,SAAS,QAAiC,OAAO;AAC9E,SACEC,cAAc,EACdC,QAAQ,EACRC,WAAW,EACXC,gBAAgB,QAEX,uBAAuB;AAE9B,SACEC,UAAU,EACVC,OAAO,EACPC,SAAS,EACTC,MAAM,EACNC,UAAU,QACL,kBAAkB;AACzB,SAASC,eAAe,EAAEC,OAAO,QAAe,kBAAkB;AAClE,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,kBAAkB;AAAA,OAClBC,qBAAqB;AAAA,OACrBC,gBAAgB;AAAA;AAAA,OAGhBC,6BAA6B;AAAA,OAC7BC,SAAS;AAOhB,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAM,CAAC,gBAAgB,CAAC;AA4BxC,MAAMC,cAAc,SAASpB,SAAS,CAGpC;EASA,OAAOqB,uBAAuB,CAC5BC,KAAkC,EAClCC,MAAc,EACdC,YAAqB,EACX;IACV,IAAMC,QAAQ,GAAG,EAAE;IACnB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,YAAY,CAACG,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MAC/C,IAAME,KAAK,GAAGJ,YAAY,CAACE,CAAC,CAAC;MAC7B,KAAK,IAAIG,CAAC,GAAGD,KAAK,CAAC,CAAC,CAAC,EAAEC,CAAC,IAAID,KAAK,CAAC,CAAC,CAAC,EAAEC,CAAC,IAAI,CAAC,EAAE;QAC5C,IAAIA,CAAC,IAAIN,MAAM,IAAIM,CAAC,GAAGN,MAAM,GAAGD,KAAK,CAACK,MAAM,EAAE;UAC5C,IAAM;YAAEG;UAAK,CAAC,GAAGR,KAAK,CAACO,CAAC,GAAGN,MAAM,CAAC;UAClCE,QAAQ,CAACM,IAAI,CAACD,IAAI,CAAC;QACrB;MACF;IACF;IACA,OAAOL,QAAQ;EACjB;EAEA,OAAaO,uBAAuB,CAClCC,KAA0B,EAC1BT,YAAqB,EACF;IAAA;MACnB,IAAMF,KAAK,SAASW,KAAK,CAACC,WAAW,CAACV,YAAY,CAAC;MACnD,OAAO,CAAC,GAAGF,KAAK,CAACa,MAAM,EAAE,CAAC,CAACC,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACP,IAAI,CAAC;IAAC;EACpD;EAEAQ,WAAW,CAACC,KAA0B,EAAE;IACtC,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA;IAAA;IAAA;IAEb,IAAI,CAACC,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACC,cAAc,GAAG,IAAI,CAACA,cAAc,CAACD,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACE,aAAa,GAAG,IAAI,CAACA,aAAa,CAACF,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACG,UAAU,GAAG,IAAI,CAACA,UAAU,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACI,YAAY,GAAG,IAAI,CAACA,YAAY,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACK,cAAc,GAAG,IAAI,CAACA,cAAc,CAACL,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACM,YAAY,GAAG,IAAI,CAACA,YAAY,CAACN,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACO,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACP,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACQ,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACR,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACS,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACT,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACU,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACV,IAAI,CAAC,IAAI,CAAC;IAEhE,IAAI,CAACW,WAAW,GAAG,CACjB;MACEC,KAAK,EAAE,gBAAgB;MACvBC,WAAW,EAAE,qCAAqC;MAClDC,IAAI,EAAEjD,OAAO;MACbkD,QAAQ,EAAEpD,gBAAgB,CAACqD,IAAI;MAC/BC,MAAM,EAAE,IAAI,CAAClB,oBAAoB;MACjCmB,KAAK,EAAE1D,cAAc,CAAC2D,MAAM,CAACC;IAC/B,CAAC,EACD;MACER,KAAK,EAAE,iBAAiB;MACxBC,WAAW,EAAE,uCAAuC;MACpDC,IAAI,EAAE9C,UAAU;MAChB+C,QAAQ,EAAEvC,SAAS,CAAC6C,eAAe,CAACC,eAAe;MACnDL,MAAM,EAAE,IAAI,CAACf,aAAa;MAC1BgB,KAAK,EAAEvC,cAAc,CAAC4C,UAAU,CAACC,IAAI;MACrCC,KAAK,EAAE;IACT,CAAC,EACD;MACEb,KAAK,EAAE,gBAAgB;MACvBC,WAAW,EAAE,sCAAsC;MACnDC,IAAI,EAAE/C,MAAM;MACZgD,QAAQ,EAAEvC,SAAS,CAAC6C,eAAe,CAACK,GAAG;MACvCT,MAAM,EAAE,IAAI,CAACb,YAAY;MACzBc,KAAK,EAAEvC,cAAc,CAAC4C,UAAU,CAACC,IAAI;MACrCC,KAAK,EAAE;IACT,CAAC,EACD;MACEb,KAAK,EAAE,yBAAyB;MAChCC,WAAW,EAAE,sCAAsC;MACnDC,IAAI,EAAElD,UAAU;MAChBmD,QAAQ,EAAEvC,SAAS,CAAC6C,eAAe,CAACM,gBAAgB;MACpDV,MAAM,EAAE,IAAI,CAACZ,cAAc;MAC3Ba,KAAK,EAAEvC,cAAc,CAAC4C,UAAU,CAACC,IAAI;MACrCC,KAAK,EAAE;IACT,CAAC,EACD;MACEb,KAAK,EAAE,sBAAsB;MAC7BC,WAAW,EAAE,0CAA0C;MACvDC,IAAI,EAAEhD,SAAS;MACfmD,MAAM,EAAE,IAAI,CAAChB,cAAc;MAC3BiB,KAAK,EAAEvC,cAAc,CAAC4C,UAAU,CAACC,IAAI;MACrCC,KAAK,EAAE;IACT,CAAC,CACF;IAED,IAAI,CAACG,cAAc,GAAG,CACpB;MACEhB,KAAK,EAAE,iBAAiB;MACxBE,IAAI,EAAE9C,UAAU;MAChB6D,iBAAiB,EAAE,IAAI;MACvBhB,WAAW,EAAE,uCAAuC;MACpDI,MAAM,EAAE,IAAI,CAACf;IACf,CAAC,EACD;MACEU,KAAK,EAAE,kBAAkB;MACzBE,IAAI,EAAElD,UAAU;MAChBiE,iBAAiB,EAAE,IAAI;MACvBhB,WAAW,EAAE,sCAAsC;MACnDI,MAAM,EAAE,IAAI,CAACZ;IACf,CAAC,CACF;IAED,IAAI,CAACyB,OAAO,GAAG,IAAI5D,OAAO,EAAE;IAC5B,IAAI,CAAC6D,cAAc,gBAAGzE,KAAK,CAAC0E,SAAS,EAAE;IACvC,IAAI,CAACC,WAAW,gBAAG3E,KAAK,CAAC0E,SAAS,EAAE;IAEpC,IAAM;MAAExC;IAAM,CAAC,GAAGM,KAAK;IAEvB,IAAI,CAACoC,KAAK,GAAG;MACXC,OAAO,EAAE,EAAE;MACXP,cAAc,EAAE,IAAI,CAACA,cAAc;MACnCQ,GAAG,EAAE,CAAC;MACNC,MAAM,EAAE,CAAC;MACTC,SAAS,EAAE9C,KAAK,CAAC+C,IAAI;MACrB1D,KAAK,EAAE,EAAE;MACTC,MAAM,EAAE,CAAC;MACT0D,cAAc,EAAE,EAAE;MAClBC,UAAU,EAAE;IACd,CAAC;EACH;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACZ,OAAO,CAACa,MAAM,EAAE;EACvB;EAYA;AACF;AACA;AACA;AACA;EACQC,mBAAmB,GAAsB;IAAA;IAAA;MAC7C,IAAM;QAAE/D,KAAK;QAAEC,MAAM;QAAE0D;MAAe,CAAC,GAAG,KAAI,CAACN,KAAK;MACpD,IAAMW,MAAM,GAAGL,cAAc,CAACM,KAAK,EAAE,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;MAEjE,IAAIJ,MAAM,CAAC3D,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,EAAE;MACX;MACA,IACE2D,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI/D,MAAM,IACtB+D,MAAM,CAACA,MAAM,CAAC3D,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGJ,MAAM,GAAGD,KAAK,CAACK,MAAM,EACpD;QACA;QACA,OAAOP,cAAc,CAACC,uBAAuB,CAACC,KAAK,EAAEC,MAAM,EAAE+D,MAAM,CAAC;MACtE;MACA,IAAM;QAAErD;MAAM,CAAC,GAAG,KAAI,CAACM,KAAK;MAC5B,OAAO,KAAI,CAACgC,OAAO,CAACoB,GAAG,CACrBvE,cAAc,CAACY,uBAAuB,CAACC,KAAK,EAAEqD,MAAM,CAAC,CACtD;IAAC;EACJ;;EAEA;AACF;AACA;AACA;EACEM,sBAAsB,GAAoB;IACxC,OAAO,IAAI,CAACP,mBAAmB,EAAE,CAACQ,IAAI,CAACpE,QAAQ,IAAIA,QAAQ,CAACqE,IAAI,CAAC,IAAI,CAAC,CAAC;EACzE;EAEAC,aAAa,GAAS;IACpB,IAAI,CAACC,QAAQ,CAACrB,KAAK,IAAI;MACrB,IAAM;QAAEM;MAAe,CAAC,GAAGN,KAAK;MAChC,IAAMsB,gBAAgB,GAAGhB,cAAc,CAACiB,MAAM,CAC5C,CAACC,KAAK,EAAEvE,KAAK,KAAKuE,KAAK,GAAGvE,KAAK,CAAC,CAAC,CAAC,GAAGA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EACjD,CAAC,CACF;MACD,IACEqE,gBAAgB,GAAG,CAAC,IACpBA,gBAAgB,GAAG7E,cAAc,CAACgF,mBAAmB,EACrD;QACAlF,GAAG,CAACmF,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAACjD,WAAW,CAAC;QAC/C,OAAO;UAAEwB,OAAO,EAAE,IAAI,CAACxB;QAAY,CAAC;MACtC;MACAlC,GAAG,CAACmF,KAAK,CAAC,mBAAmB,EAAEJ,gBAAgB,CAAC;MAChD,OAAO;QAAErB,OAAO,EAAE;MAAG,CAAC;IACxB,CAAC,CAAC;EACJ;EAEApC,oBAAoB,GAAS;IAC3B,IAAI,CAACoD,sBAAsB,EAAE,CAACC,IAAI,CAACnF,eAAe,CAAC,CAAC4F,KAAK,CAACpF,GAAG,CAACqF,KAAK,CAAC;EACtE;EAEA7D,cAAc,GAAS;IACrB,IAAI,CAACkD,sBAAsB,EAAE,CAC1BC,IAAI,CAACW,WAAW,IAAI;MACnB,IAAM;QAAEC,QAAQ;QAAE3D;MAAe,CAAC,GAAG,IAAI,CAACP,KAAK;MAC/CO,cAAc,CAAC;QAAE4D,KAAK,EAAEF,WAAW;QAAEC;MAAS,CAAC,EAAE,IAAI,CAAC;IACxD,CAAC,CAAC,CACDH,KAAK,CAACpF,GAAG,CAACqF,KAAK,CAAC;EACrB;EAEAzD,cAAc,GAAS;IACrB,IAAI,CAAC8C,sBAAsB,EAAE,CAC1BC,IAAI,CAACW,WAAW,IAAI;MACnB,IAAM;QAAEC,QAAQ;QAAE3D;MAAe,CAAC,GAAG,IAAI,CAACP,KAAK;MAC/CO,cAAc,CAAC;QAAE4D,KAAK,EAAEF,WAAW;QAAEC;MAAS,CAAC,CAAC;IAClD,CAAC,CAAC,CACDH,KAAK,CAACpF,GAAG,CAACqF,KAAK,CAAC;EACrB;EAEA5D,aAAa,GAAS;IACpB,IAAM;MAAEA;IAAc,CAAC,GAAG,IAAI,CAACJ,KAAK;IACpC,IAAI,CAACqD,sBAAsB,EAAE,CAACC,IAAI,CAAClD,aAAa,CAAC,CAAC2D,KAAK,CAACpF,GAAG,CAACqF,KAAK,CAAC;EACpE;EAEA1D,YAAY,GAAS;IACnB,IAAI,CAAC+C,sBAAsB,EAAE,CAC1BC,IAAI,CAACW,WAAW,IAAI;MACnB,IAAM;QAAE7D;MAAc,CAAC,GAAG,IAAI,CAACJ,KAAK;MACpCI,aAAa,CAAC6D,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC;IACxC,CAAC,CAAC,CACDF,KAAK,CAACpF,GAAG,CAACqF,KAAK,CAAC;EACrB;EAEAxD,YAAY,CAAC4D,KAAa,EAAQ;IAChC,IAAM;MAAEhE;IAAc,CAAC,GAAG,IAAI,CAACJ,KAAK;IACpC,IAAM;MAAEjB,KAAK;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACoD,KAAK;IACpC,IAAIgC,KAAK,GAAGpF,MAAM,IAAIoF,KAAK,IAAIpF,MAAM,GAAGD,KAAK,CAACK,MAAM,EAAE;MACpDT,GAAG,CAACqF,KAAK,CAAC,gBAAgB,EAAEI,KAAK,CAAC;MAClC;IACF;IAEA,IAAM;MAAE7E;IAAK,CAAC,GAAGR,KAAK,CAACqF,KAAK,GAAGpF,MAAM,CAAC;IACtCoB,aAAa,CAACb,IAAI,CAAC;EACrB;EAEAkB,qBAAqB,CAACiC,cAAuB,EAAQ;IACnD,IAAI,CAACe,QAAQ,CAAC;MAAEf;IAAe,CAAC,CAAC;IACjC,IAAI,CAACc,aAAa,EAAE;EACtB;EAEA7C,oBAAoB,CAAC2B,GAAW,EAAEC,MAAc,EAAQ;IACtD,IAAI,CAACkB,QAAQ,CAAC;MAAEnB,GAAG;MAAEC;IAAO,CAAC,CAAC;EAChC;EAEA7B,kBAAkB,CAAC2D,CAAgC,EAAQ;IACzD;IACA,IAAI,CAACZ,QAAQ,CAAC;MAAEd,UAAU,EAAE0B,CAAC,CAACC,MAAM,CAACH,KAAK;MAAEzB,cAAc,EAAE;IAAG,CAAC,CAAC;EACnE;EAEA9B,oBAAoB,OAG8B;IAAA,IAH7B;MACnB7B,KAAK;MACLC;IACuC,CAAC;IACxC,IAAM;MAAEU;IAAM,CAAC,GAAG,IAAI,CAACM,KAAK;IAC5B,IAAMwC,SAAS,GAAG9C,KAAK,CAAC+C,IAAI;IAC5B,IAAI,CAACgB,QAAQ,CAAC;MAAE1E,KAAK;MAAEyD,SAAS;MAAExD;IAAO,CAAC,CAAC;EAC7C;EAEAqB,UAAU,QAImD;IAAA,IAJlD;MACTP,IAAI;MACJyE,SAAS;MACTC;IAC0C,CAAC;IAC3C,IAAM;MAAEN,QAAQ;MAAEO;IAAsB,CAAC,GAAG,IAAI,CAACzE,KAAK;IACtD,oBACE,oBAAC,kBAAkB;MACjB,UAAU,EAAEwE,UAAW;MACvB,IAAI,EAAE1E,IAAK;MACX,QAAQ,EAAEoE,QAAS;MACnB,qBAAqB,EAAEO;IAAsB,EAC7C;EAEN;EAEAC,KAAK,GAAS;IACZ,IAAI,IAAI,CAACzC,cAAc,CAAC0C,OAAO,EAAE;MAC/B,IAAI,CAAC1C,cAAc,CAAC0C,OAAO,CAACD,KAAK,EAAE;IACrC;EACF;EAEAE,qBAAqB,GAAS;IAAA;IAC5B,6BAAI,CAACzC,WAAW,CAACwC,OAAO,0DAAxB,sBAA0BC,qBAAqB,EAAE;EACnD;EAEAC,MAAM,GAAiB;IAAA;IACrB,IAAM;MAAEX,QAAQ;MAAExE;IAAM,CAAC,GAAG,IAAI,CAACM,KAAK;IACtC,IAAM;MACJqC,OAAO;MACPP,cAAc;MACda,UAAU;MACVL,GAAG;MACHC,MAAM;MACNxD,KAAK;MACLyD,SAAS;MACTxD,MAAM;MACN0D;IACF,CAAC,GAAG,IAAI,CAACN,KAAK;IACd,IAAM0C,qBAAqB,4BACzBtG,gBAAgB,CAACuG,YAAY,CAACC,GAAG,CAACd,QAAQ,CAAC,yEAAI,EAAE;IACnD,oBACE;MAAK,SAAS,EAAC;IAAiB,gBAC9B;MAAK,SAAS,EAAC;IAA4B,gBACzC,oBAAC,WAAW;MACV,GAAG,EAAE,IAAI,CAACjC,cAAe;MACzB,KAAK,EAAEU,UAAW;MAClB,WAAW,YAAKmC,qBAAqB,qBAAmB;MACxD,QAAQ,EAAE,IAAI,CAACpE;IAAmB,EAClC,eACF,oBAAC,qBAAqB;MACpB,OAAO,EAAEoB,cAAe;MACxB,YAAY,EAAEY,cAAc,CAACtD,MAAM,GAAG;IAAE,EACxC,CACE,eACN;MAAK,SAAS,EAAC;IAAsB,gBACnC,oBAAC,QAAQ;MACP,GAAG,EAAE,IAAI,CAAC+C,WAAY;MACtB,SAAS,EAAEK,SAAU;MACrB,KAAK,EAAEzD,KAAM;MACb,MAAM,EAAEC,MAAO;MACf,cAAc,EAAE0D,cAAe;MAC/B,QAAQ,EAAE,IAAI,CAAClC,YAAa;MAC5B,iBAAiB,EAAE,IAAI,CAACC,qBAAsB;MAC9C,gBAAgB,EAAE,IAAI,CAACE,oBAAqB;MAC5C,UAAU,EAAE,IAAI,CAACN,UAAW;MAC5B,SAAS,EAAExB,cAAc,CAACoG,WAAY;MACtC,mBAAmB;MACnB,aAAa;MACb,cAAc;IAAA,EACd,eACF,oBAAC,6BAA6B;MAC5B,KAAK,EAAEvF,KAAM;MACb,GAAG,EAAE4C,GAAI;MACT,MAAM,EAAEC,MAAO;MACf,MAAM,EAAEI,UAAW;MACnB,QAAQ,EAAE,IAAI,CAAC/B;IAAqB,EACpC,eACF,oBAAC,cAAc;MAAC,OAAO,EAAEyB;IAAQ,EAAG,CAChC,CACF;EAEV;AACF;AAAC,gBAnWKxD,cAAc,iBAIG,EAAE;AAAA,gBAJnBA,cAAc,yBAMW,KAAK;AAAA,gBAN9BA,cAAc,gBAQE;EAClB6C,IAAI,EAAEhE,cAAc,CAAC2D,MAAM,CAAC6D,MAAM,GAAG;AACvC,CAAC;AA2VH,eAAerG,cAAc"}
|
|
1
|
+
{"version":3,"file":"CommandHistory.js","names":["React","Component","ContextActions","ItemList","SearchInput","GLOBAL_SHORTCUTS","vsFileCode","vsFiles","vsNewFile","vsPlay","vsTerminal","copyToClipboard","Pending","Log","CommandHistoryItem","CommandHistoryActions","ConsoleConstants","CommandHistoryViewportUpdater","SHORTCUTS","log","module","CommandHistory","getCommandsFromViewport","items","offset","sortedRanges","commands","i","length","range","j","name","push","getCommandsFromSnapshot","table","getSnapshot","values","map","item","constructor","props","copySelectedCommands","bind","createNotebook","sendToConsole","renderItem","runInConsole","sendToNotebook","handleSelect","handleSelectionChange","handleSearchChange","handleViewportChange","handleViewportUpdate","itemActions","title","description","icon","shortcut","COPY","action","group","groups","edit","COMMAND_HISTORY","SEND_TO_CONSOLE","menuGroups","send","order","RUN","SEND_TO_NOTEBOOK","historyActions","selectionRequired","pending","searchInputRef","createRef","itemListRef","state","actions","top","bottom","itemCount","size","selectedRanges","searchText","componentWillUnmount","cancel","getSelectedCommands","ranges","slice","sort","a","b","add","getSelectedCommandText","then","join","updateActions","setState","selectedRowCount","reduce","count","MAX_SELECTION_COUNT","debug","catch","error","commandText","language","value","index","e","target","itemIndex","isSelected","commandHistoryStorage","focus","current","restoreScrollPosition","render","languageDisplayString","LANGUAGE_MAP","get","ITEM_HEIGHT","medium"],"sources":["../../src/command-history/CommandHistory.tsx"],"sourcesContent":["import React, { ChangeEvent, Component, ReactElement, RefObject } from 'react';\nimport {\n ContextActions,\n ItemList,\n SearchInput,\n GLOBAL_SHORTCUTS,\n RenderItemProps,\n} from '@deephaven/components';\nimport { ViewportData } from '@deephaven/storage';\nimport {\n vsFileCode,\n vsFiles,\n vsNewFile,\n vsPlay,\n vsTerminal,\n} from '@deephaven/icons';\nimport { copyToClipboard, Pending, Range } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport CommandHistoryItem from './CommandHistoryItem';\nimport CommandHistoryActions from './CommandHistoryActions';\nimport ConsoleConstants from '../common/ConsoleConstants';\n\nimport './CommandHistory.scss';\nimport CommandHistoryViewportUpdater from './CommandHistoryViewportUpdater';\nimport SHORTCUTS from '../ConsoleShortcuts';\nimport CommandHistoryStorage, {\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './CommandHistoryStorage';\nimport { ItemAction, HistoryAction } from './CommandHistoryTypes';\n\nconst log = Log.module('CommandHistory');\n\nexport type CommandHistorySettings = {\n value: string;\n language: string;\n};\ninterface CommandHistoryProps {\n language: string;\n sendToConsole: (command: string, focus?: boolean, execute?: boolean) => void;\n sendToNotebook: (\n settings: CommandHistorySettings,\n forceNewNotebook?: boolean\n ) => void;\n table: CommandHistoryTable;\n commandHistoryStorage: CommandHistoryStorage;\n}\ninterface CommandHistoryState {\n actions: ItemAction[];\n historyActions: HistoryAction[];\n top: number;\n bottom: number;\n itemCount: number;\n items: CommandHistoryStorageItem[];\n offset: number;\n selectedRanges: Range[];\n searchText: string;\n}\n\nclass CommandHistory extends Component<\n CommandHistoryProps,\n CommandHistoryState\n> {\n static ITEM_HEIGHT = 29;\n\n static MAX_SELECTION_COUNT = 10000;\n\n static menuGroups = {\n send: ContextActions.groups.medium + 100,\n };\n\n static getCommandsFromViewport(\n items: CommandHistoryStorageItem[],\n offset: number,\n sortedRanges: Range[]\n ): string[] {\n const commands = [];\n for (let i = 0; i < sortedRanges.length; i += 1) {\n const range = sortedRanges[i];\n for (let j = range[0]; j <= range[1]; j += 1) {\n if (j >= offset && j < offset + items.length) {\n const { name } = items[j - offset];\n commands.push(name);\n }\n }\n }\n return commands;\n }\n\n static async getCommandsFromSnapshot(\n table: CommandHistoryTable,\n sortedRanges: Range[]\n ): Promise<string[]> {\n const items = await table.getSnapshot(sortedRanges);\n return [...items.values()].map(item => item.name);\n }\n\n constructor(props: CommandHistoryProps) {\n super(props);\n\n this.copySelectedCommands = this.copySelectedCommands.bind(this);\n this.createNotebook = this.createNotebook.bind(this);\n this.sendToConsole = this.sendToConsole.bind(this);\n this.renderItem = this.renderItem.bind(this);\n this.runInConsole = this.runInConsole.bind(this);\n this.sendToNotebook = this.sendToNotebook.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleViewportUpdate = this.handleViewportUpdate.bind(this);\n\n this.itemActions = [\n {\n title: 'Copy Selection',\n description: 'Copy selected commands to clipboard',\n icon: vsFiles,\n shortcut: GLOBAL_SHORTCUTS.COPY,\n action: this.copySelectedCommands,\n group: ContextActions.groups.edit,\n },\n {\n title: 'Send to Console',\n description: 'Open selected commands in the console',\n icon: vsTerminal,\n shortcut: SHORTCUTS.COMMAND_HISTORY.SEND_TO_CONSOLE,\n action: this.sendToConsole,\n group: CommandHistory.menuGroups.send,\n order: 10,\n },\n {\n title: 'Run in Console',\n description: 'Run selected commands in the console',\n icon: vsPlay,\n shortcut: SHORTCUTS.COMMAND_HISTORY.RUN,\n action: this.runInConsole,\n group: CommandHistory.menuGroups.send,\n order: 10,\n },\n {\n title: 'Send to Active Notebook',\n description: 'Open selected commands in a notebook',\n icon: vsFileCode,\n shortcut: SHORTCUTS.COMMAND_HISTORY.SEND_TO_NOTEBOOK,\n action: this.sendToNotebook,\n group: CommandHistory.menuGroups.send,\n order: 20,\n },\n {\n title: 'Send to New Notebook',\n description: 'Open selected commands in a new notebook',\n icon: vsNewFile,\n action: this.createNotebook,\n group: CommandHistory.menuGroups.send,\n order: 30,\n },\n ];\n\n this.historyActions = [\n {\n title: 'Send to Console',\n icon: vsTerminal,\n selectionRequired: true,\n description: 'Open selected commands in the console',\n action: this.sendToConsole,\n },\n {\n title: 'Send to Notebook',\n icon: vsFileCode,\n selectionRequired: true,\n description: 'Open selected commands in a notebook',\n action: this.sendToNotebook,\n },\n ];\n\n this.pending = new Pending();\n this.searchInputRef = React.createRef();\n this.itemListRef = React.createRef();\n\n const { table } = props;\n\n this.state = {\n actions: [],\n historyActions: this.historyActions,\n top: 0,\n bottom: 0,\n itemCount: table.size,\n items: [],\n offset: 0,\n selectedRanges: [],\n searchText: '',\n };\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n }\n\n itemActions: ItemAction[];\n\n historyActions: HistoryAction[];\n\n pending: Pending;\n\n searchInputRef: RefObject<SearchInput>;\n\n itemListRef: React.RefObject<ItemList<CommandHistoryStorageItem>>;\n\n /**\n * Retrieves the selected commands as an array.\n * If they're not within the current viewport, will fetch them from the table\n * @returns Array of selected commands\n */\n async getSelectedCommands(): Promise<string[]> {\n const { items, offset, selectedRanges } = this.state;\n const ranges = selectedRanges.slice().sort((a, b) => a[0] - b[0]);\n\n if (ranges.length === 0) {\n return [];\n }\n if (\n ranges[0][0] >= offset &&\n ranges[ranges.length - 1][1] < offset + items.length\n ) {\n // All ranges are in the current viewport, just copy the data we've already got\n return CommandHistory.getCommandsFromViewport(items, offset, ranges);\n }\n const { table } = this.props;\n return this.pending.add(\n CommandHistory.getCommandsFromSnapshot(table, ranges)\n );\n }\n\n /**\n * Retrieves the text of all the currently selected commands, joined by a new line char\n * @returns The commands joined by \\n char\n */\n getSelectedCommandText(): Promise<string> {\n return this.getSelectedCommands().then(commands => commands.join('\\n'));\n }\n\n updateActions(): void {\n this.setState(state => {\n const { selectedRanges } = state;\n const selectedRowCount = selectedRanges.reduce(\n (count, range) => count + range[1] - range[0] + 1,\n 0\n );\n if (\n selectedRowCount > 0 &&\n selectedRowCount < CommandHistory.MAX_SELECTION_COUNT\n ) {\n log.debug('Updating actions', this.itemActions);\n return { actions: this.itemActions };\n }\n log.debug('Disabling actions', selectedRowCount);\n return { actions: [] };\n });\n }\n\n copySelectedCommands(): void {\n this.getSelectedCommandText().then(copyToClipboard).catch(log.error);\n }\n\n createNotebook(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { language, sendToNotebook } = this.props;\n sendToNotebook({ value: commandText, language }, true);\n })\n .catch(log.error);\n }\n\n sendToNotebook(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { language, sendToNotebook } = this.props;\n sendToNotebook({ value: commandText, language });\n })\n .catch(log.error);\n }\n\n sendToConsole(): void {\n const { sendToConsole } = this.props;\n this.getSelectedCommandText().then(sendToConsole).catch(log.error);\n }\n\n runInConsole(): void {\n this.getSelectedCommandText()\n .then(commandText => {\n const { sendToConsole } = this.props;\n sendToConsole(commandText, true, true);\n })\n .catch(log.error);\n }\n\n handleSelect(index: number): void {\n const { sendToConsole } = this.props;\n const { items, offset } = this.state;\n if (index < offset || index >= offset + items.length) {\n log.error('Invalid index!', index);\n return;\n }\n\n const { name } = items[index - offset];\n sendToConsole(name);\n }\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedRanges });\n this.updateActions();\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.setState({ top, bottom });\n }\n\n handleSearchChange(e: ChangeEvent<HTMLInputElement>): void {\n // clear selected range, as old selection could be filtered from list\n this.setState({ searchText: e.target.value, selectedRanges: [] });\n }\n\n handleViewportUpdate({\n items,\n offset,\n }: ViewportData<CommandHistoryStorageItem>): void {\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ items, itemCount, offset });\n }\n\n renderItem({\n item,\n itemIndex,\n isSelected,\n }: RenderItemProps<CommandHistoryStorageItem>): ReactElement {\n const { language, commandHistoryStorage } = this.props;\n return (\n <CommandHistoryItem\n isSelected={isSelected}\n item={item}\n language={language}\n commandHistoryStorage={commandHistoryStorage}\n />\n );\n }\n\n focus(): void {\n if (this.searchInputRef.current) {\n this.searchInputRef.current.focus();\n }\n }\n\n restoreScrollPosition(): void {\n this.itemListRef.current?.restoreScrollPosition();\n }\n\n render(): ReactElement {\n const { language, table } = this.props;\n const {\n actions,\n historyActions,\n searchText,\n top,\n bottom,\n items,\n itemCount,\n offset,\n selectedRanges,\n } = this.state;\n const languageDisplayString =\n ConsoleConstants.LANGUAGE_MAP.get(language) ?? '';\n return (\n <div className=\"command-history\">\n <div className=\"command-history-search-bar\">\n <SearchInput\n ref={this.searchInputRef}\n value={searchText}\n placeholder={`${languageDisplayString} Command History`}\n onChange={this.handleSearchChange}\n />\n <CommandHistoryActions\n actions={historyActions}\n hasSelection={selectedRanges.length > 0}\n />\n </div>\n <div className=\"command-history-list\">\n <ItemList\n ref={this.itemListRef}\n itemCount={itemCount}\n items={items}\n offset={offset}\n selectedRanges={selectedRanges}\n onSelect={this.handleSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={this.handleViewportChange}\n renderItem={this.renderItem}\n rowHeight={CommandHistory.ITEM_HEIGHT}\n isDoubleClickSelect\n isMultiSelect\n isStickyBottom\n />\n <CommandHistoryViewportUpdater\n table={table}\n top={top}\n bottom={bottom}\n search={searchText}\n onUpdate={this.handleViewportUpdate}\n />\n <ContextActions actions={actions} />\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistory;\n"],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
2
4
|
import React, { Component } from 'react';
|
|
3
5
|
import debounce from 'lodash.debounce';
|
|
4
6
|
import memoize from 'memoizee';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandHistoryItemTooltip.js","names":["React","Component","debounce","memoize","LoadingSpinner","TimeUtils","FontAwesomeIcon","vsWarning","Code","LOAD_DATA_DEBOUNCE","MAX_NUMBER_OF_LINES","CommandHistoryItemTooltip","getTimeString","startTime","endTime","deltaTime","Math","round","Date","valueOf","formatElapsedTime","constructor","props","commandHistoryStorage","item","language","id","cleanup","listenItem","handleUpdate","handleError","name","split","join","max","bind","handleTimeout","state","currentTime","now","componentDidMount","loadData","componentDidUpdate","prevProps","prevState","data","timer","result","Boolean","undefined","startTimer","stopTimer","componentWillUnmount","cancel","setInterval","clearInterval","updateTime","setState","error","onUpdate","render","errorMessage","timeString","previewText","getPreviewText","hasTimeString","length"],"sources":["../../src/command-history/CommandHistoryItemTooltip.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport debounce from 'lodash.debounce';\nimport memoize from 'memoizee';\nimport { LoadingSpinner } from '@deephaven/components';\nimport { TimeUtils } from '@deephaven/utils';\nimport { StorageListenerRemover } from '@deephaven/storage';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsWarning } from '@deephaven/icons';\nimport Code from '../common/Code';\nimport './CommandHistoryItemTooltip.scss';\nimport CommandHistoryStorage, {\n CommandHistoryStorageData,\n CommandHistoryStorageItem,\n} from './CommandHistoryStorage';\n\ninterface CommandHistoryItemTooltipProps {\n item: CommandHistoryStorageItem;\n language: string;\n onUpdate?: (data: CommandHistoryStorageData | null) => void;\n commandHistoryStorage: CommandHistoryStorage;\n}\n\ninterface CommandHistoryItemTooltipState {\n currentTime: number;\n data?: CommandHistoryStorageData;\n error?: string;\n}\n\nconst LOAD_DATA_DEBOUNCE = 250;\nconst MAX_NUMBER_OF_LINES = 2500;\n\nexport class CommandHistoryItemTooltip extends Component<\n CommandHistoryItemTooltipProps,\n CommandHistoryItemTooltipState\n> {\n static defaultProps = {\n onUpdate: (): void => undefined,\n };\n\n static getTimeString(\n startTime: string | undefined,\n endTime: string | number\n ): string | null {\n if (startTime == null || endTime === '' || endTime === 0) {\n return null;\n }\n\n const deltaTime = Math.round(\n (new Date(endTime).valueOf() - new Date(startTime).valueOf()) / 1000\n );\n\n if (deltaTime < 1) return '<1s';\n\n return TimeUtils.formatElapsedTime(deltaTime);\n }\n\n constructor(props: CommandHistoryItemTooltipProps) {\n super(props);\n\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n\n this.state = {\n currentTime: Date.now(),\n };\n }\n\n componentDidMount(): void {\n this.loadData();\n }\n\n componentDidUpdate(\n prevProps: CommandHistoryItemTooltipProps,\n prevState: CommandHistoryItemTooltipState\n ): void {\n const { data } = this.state;\n\n if (\n this.timer == null &&\n !data?.result &&\n Boolean(data?.startTime) &&\n !(data == null || data.endTime === undefined)\n ) {\n this.startTimer();\n } else if (\n (data?.result && !prevState.data?.result) ||\n (Boolean(data?.endTime) &&\n !(prevState.data == null || prevState.data.endTime === undefined))\n ) {\n // Command complete\n this.stopTimer();\n }\n }\n\n componentWillUnmount(): void {\n this.loadData.cancel();\n if (this.cleanup != null) {\n this.cleanup();\n }\n this.stopTimer();\n }\n\n timer?: NodeJS.Timer;\n\n cleanup?: StorageListenerRemover;\n\n loadData = debounce((): void => {\n const { commandHistoryStorage, item, language } = this.props;\n const { id } = item;\n this.cleanup = commandHistoryStorage.listenItem(\n language,\n id,\n this.handleUpdate,\n this.handleError\n );\n }, LOAD_DATA_DEBOUNCE);\n\n startTimer(): void {\n this.stopTimer();\n\n this.timer = setInterval(this.handleTimeout, 1000);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n updateTime(): void {\n this.setState({\n currentTime: Date.now(),\n });\n }\n\n handleError(error: string): void {\n this.setState({ error: `${error}` });\n }\n\n handleUpdate(item: CommandHistoryStorageItem): void {\n const { data } = item ?? {};\n this.setState({ data });\n\n const { onUpdate } = this.props;\n onUpdate?.(data);\n }\n\n handleTimeout(): void {\n this.updateTime();\n }\n\n getPreviewText = memoize(\n (name: string) => name.split('\\n', MAX_NUMBER_OF_LINES).join('\\n'),\n { max: 1 }\n );\n\n render(): ReactElement {\n const {\n item: { name },\n language,\n } = this.props;\n const { currentTime, data, error } = this.state;\n const { result, startTime, endTime } = data ?? {};\n\n const errorMessage = result?.error ?? error;\n\n const timeString = CommandHistoryItemTooltip.getTimeString(\n startTime,\n endTime ?? currentTime\n );\n\n // colorizing in monaco is mostly a function of the number of lines,\n // it gets real slow after a few thousand lines. Truncate the tooltip\n // to avoid UI locks. The full command is still inserted.\n const previewText = this.getPreviewText(name);\n\n const hasTimeString = Boolean(timeString);\n return (\n <div className=\"command-history-item-tooltip\">\n <div className=\"scroll-container\">\n <Code language={language}>{previewText}</Code>\n {previewText.length < name.length && <p>Preview Truncated...</p>}\n </div>\n <div className=\"result-info\">\n <div className=\"d-flex justify-content-between\">\n {Boolean(errorMessage) && (\n <div className=\"text-danger mr-1\">\n <FontAwesomeIcon icon={vsWarning} /> Executed with errors\n </div>\n )}\n <div className=\"time-wrapper\">\n Elapsed time:{' '}\n {hasTimeString ? (\n <span className=\"time-string\">{timeString}</span>\n ) : (\n <LoadingSpinner />\n )}\n </div>\n </div>\n {Boolean(errorMessage) && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistoryItemTooltip;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CommandHistoryItemTooltip.js","names":["React","Component","debounce","memoize","LoadingSpinner","TimeUtils","FontAwesomeIcon","vsWarning","Code","LOAD_DATA_DEBOUNCE","MAX_NUMBER_OF_LINES","CommandHistoryItemTooltip","getTimeString","startTime","endTime","deltaTime","Math","round","Date","valueOf","formatElapsedTime","constructor","props","commandHistoryStorage","item","language","id","cleanup","listenItem","handleUpdate","handleError","name","split","join","max","bind","handleTimeout","state","currentTime","now","componentDidMount","loadData","componentDidUpdate","prevProps","prevState","data","timer","result","Boolean","undefined","startTimer","stopTimer","componentWillUnmount","cancel","setInterval","clearInterval","updateTime","setState","error","onUpdate","render","errorMessage","timeString","previewText","getPreviewText","hasTimeString","length"],"sources":["../../src/command-history/CommandHistoryItemTooltip.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport debounce from 'lodash.debounce';\nimport memoize from 'memoizee';\nimport { LoadingSpinner } from '@deephaven/components';\nimport { TimeUtils } from '@deephaven/utils';\nimport { StorageListenerRemover } from '@deephaven/storage';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsWarning } from '@deephaven/icons';\nimport Code from '../common/Code';\nimport './CommandHistoryItemTooltip.scss';\nimport CommandHistoryStorage, {\n CommandHistoryStorageData,\n CommandHistoryStorageItem,\n} from './CommandHistoryStorage';\n\ninterface CommandHistoryItemTooltipProps {\n item: CommandHistoryStorageItem;\n language: string;\n onUpdate?: (data: CommandHistoryStorageData | null) => void;\n commandHistoryStorage: CommandHistoryStorage;\n}\n\ninterface CommandHistoryItemTooltipState {\n currentTime: number;\n data?: CommandHistoryStorageData;\n error?: string;\n}\n\nconst LOAD_DATA_DEBOUNCE = 250;\nconst MAX_NUMBER_OF_LINES = 2500;\n\nexport class CommandHistoryItemTooltip extends Component<\n CommandHistoryItemTooltipProps,\n CommandHistoryItemTooltipState\n> {\n static defaultProps = {\n onUpdate: (): void => undefined,\n };\n\n static getTimeString(\n startTime: string | undefined,\n endTime: string | number\n ): string | null {\n if (startTime == null || endTime === '' || endTime === 0) {\n return null;\n }\n\n const deltaTime = Math.round(\n (new Date(endTime).valueOf() - new Date(startTime).valueOf()) / 1000\n );\n\n if (deltaTime < 1) return '<1s';\n\n return TimeUtils.formatElapsedTime(deltaTime);\n }\n\n constructor(props: CommandHistoryItemTooltipProps) {\n super(props);\n\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n\n this.state = {\n currentTime: Date.now(),\n };\n }\n\n componentDidMount(): void {\n this.loadData();\n }\n\n componentDidUpdate(\n prevProps: CommandHistoryItemTooltipProps,\n prevState: CommandHistoryItemTooltipState\n ): void {\n const { data } = this.state;\n\n if (\n this.timer == null &&\n !data?.result &&\n Boolean(data?.startTime) &&\n !(data == null || data.endTime === undefined)\n ) {\n this.startTimer();\n } else if (\n (data?.result && !prevState.data?.result) ||\n (Boolean(data?.endTime) &&\n !(prevState.data == null || prevState.data.endTime === undefined))\n ) {\n // Command complete\n this.stopTimer();\n }\n }\n\n componentWillUnmount(): void {\n this.loadData.cancel();\n if (this.cleanup != null) {\n this.cleanup();\n }\n this.stopTimer();\n }\n\n timer?: NodeJS.Timer;\n\n cleanup?: StorageListenerRemover;\n\n loadData = debounce((): void => {\n const { commandHistoryStorage, item, language } = this.props;\n const { id } = item;\n this.cleanup = commandHistoryStorage.listenItem(\n language,\n id,\n this.handleUpdate,\n this.handleError\n );\n }, LOAD_DATA_DEBOUNCE);\n\n startTimer(): void {\n this.stopTimer();\n\n this.timer = setInterval(this.handleTimeout, 1000);\n }\n\n stopTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n updateTime(): void {\n this.setState({\n currentTime: Date.now(),\n });\n }\n\n handleError(error: string): void {\n this.setState({ error: `${error}` });\n }\n\n handleUpdate(item: CommandHistoryStorageItem): void {\n const { data } = item ?? {};\n this.setState({ data });\n\n const { onUpdate } = this.props;\n onUpdate?.(data);\n }\n\n handleTimeout(): void {\n this.updateTime();\n }\n\n getPreviewText = memoize(\n (name: string) => name.split('\\n', MAX_NUMBER_OF_LINES).join('\\n'),\n { max: 1 }\n );\n\n render(): ReactElement {\n const {\n item: { name },\n language,\n } = this.props;\n const { currentTime, data, error } = this.state;\n const { result, startTime, endTime } = data ?? {};\n\n const errorMessage = result?.error ?? error;\n\n const timeString = CommandHistoryItemTooltip.getTimeString(\n startTime,\n endTime ?? currentTime\n );\n\n // colorizing in monaco is mostly a function of the number of lines,\n // it gets real slow after a few thousand lines. Truncate the tooltip\n // to avoid UI locks. The full command is still inserted.\n const previewText = this.getPreviewText(name);\n\n const hasTimeString = Boolean(timeString);\n return (\n <div className=\"command-history-item-tooltip\">\n <div className=\"scroll-container\">\n <Code language={language}>{previewText}</Code>\n {previewText.length < name.length && <p>Preview Truncated...</p>}\n </div>\n <div className=\"result-info\">\n <div className=\"d-flex justify-content-between\">\n {Boolean(errorMessage) && (\n <div className=\"text-danger mr-1\">\n <FontAwesomeIcon icon={vsWarning} /> Executed with errors\n </div>\n )}\n <div className=\"time-wrapper\">\n Elapsed time:{' '}\n {hasTimeString ? (\n <span className=\"time-string\">{timeString}</span>\n ) : (\n <LoadingSpinner />\n )}\n </div>\n </div>\n {Boolean(errorMessage) && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default CommandHistoryItemTooltip;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAsB,OAAO;AACtD,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,OAAO,MAAM,UAAU;AAC9B,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,SAAS,QAAQ,kBAAkB;AAAC,OACtCC,IAAI;AAAA;AAoBX,IAAMC,kBAAkB,GAAG,GAAG;AAC9B,IAAMC,mBAAmB,GAAG,IAAI;AAEhC,OAAO,MAAMC,yBAAyB,SAASV,SAAS,CAGtD;EAKA,OAAOW,aAAa,CAClBC,SAA6B,EAC7BC,OAAwB,EACT;IACf,IAAID,SAAS,IAAI,IAAI,IAAIC,OAAO,KAAK,EAAE,IAAIA,OAAO,KAAK,CAAC,EAAE;MACxD,OAAO,IAAI;IACb;IAEA,IAAMC,SAAS,GAAGC,IAAI,CAACC,KAAK,CAC1B,CAAC,IAAIC,IAAI,CAACJ,OAAO,CAAC,CAACK,OAAO,EAAE,GAAG,IAAID,IAAI,CAACL,SAAS,CAAC,CAACM,OAAO,EAAE,IAAI,IAAI,CACrE;IAED,IAAIJ,SAAS,GAAG,CAAC,EAAE,OAAO,KAAK;IAE/B,OAAOV,SAAS,CAACe,iBAAiB,CAACL,SAAS,CAAC;EAC/C;EAEAM,WAAW,CAACC,KAAqC,EAAE;IACjD,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA,kCAkDJpB,QAAQ,CAAC,MAAY;MAC9B,IAAM;QAAEqB,qBAAqB;QAAEC,IAAI;QAAEC;MAAS,CAAC,GAAG,IAAI,CAACH,KAAK;MAC5D,IAAM;QAAEI;MAAG,CAAC,GAAGF,IAAI;MACnB,IAAI,CAACG,OAAO,GAAGJ,qBAAqB,CAACK,UAAU,CAC7CH,QAAQ,EACRC,EAAE,EACF,IAAI,CAACG,YAAY,EACjB,IAAI,CAACC,WAAW,CACjB;IACH,CAAC,EAAErB,kBAAkB,CAAC;IAAA,wCAqCLN,OAAO,CACrB4B,IAAY,IAAKA,IAAI,CAACC,KAAK,CAAC,IAAI,EAAEtB,mBAAmB,CAAC,CAACuB,IAAI,CAAC,IAAI,CAAC,EAClE;MAAEC,GAAG,EAAE;IAAE,CAAC,CACX;IAjGC,IAAI,CAACL,YAAY,GAAG,IAAI,CAACA,YAAY,CAACM,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACL,WAAW,GAAG,IAAI,CAACA,WAAW,CAACK,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACC,aAAa,GAAG,IAAI,CAACA,aAAa,CAACD,IAAI,CAAC,IAAI,CAAC;IAElD,IAAI,CAACE,KAAK,GAAG;MACXC,WAAW,EAAEpB,IAAI,CAACqB,GAAG;IACvB,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAI,CAACC,QAAQ,EAAE;EACjB;EAEAC,kBAAkB,CAChBC,SAAyC,EACzCC,SAAyC,EACnC;IAAA;IACN,IAAM;MAAEC;IAAK,CAAC,GAAG,IAAI,CAACR,KAAK;IAE3B,IACE,IAAI,CAACS,KAAK,IAAI,IAAI,IAClB,EAACD,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,MAAM,KACbC,OAAO,CAACH,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEhC,SAAS,CAAC,IACxB,EAAEgC,IAAI,IAAI,IAAI,IAAIA,IAAI,CAAC/B,OAAO,KAAKmC,SAAS,CAAC,EAC7C;MACA,IAAI,CAACC,UAAU,EAAE;IACnB,CAAC,MAAM,IACJL,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,MAAM,IAAI,qBAACH,SAAS,CAACC,IAAI,4CAAd,gBAAgBE,MAAM,KACvCC,OAAO,CAACH,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAE/B,OAAO,CAAC,IACrB,EAAE8B,SAAS,CAACC,IAAI,IAAI,IAAI,IAAID,SAAS,CAACC,IAAI,CAAC/B,OAAO,KAAKmC,SAAS,CAAE,EACpE;MACA;MACA,IAAI,CAACE,SAAS,EAAE;IAClB;EACF;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACX,QAAQ,CAACY,MAAM,EAAE;IACtB,IAAI,IAAI,CAAC1B,OAAO,IAAI,IAAI,EAAE;MACxB,IAAI,CAACA,OAAO,EAAE;IAChB;IACA,IAAI,CAACwB,SAAS,EAAE;EAClB;EAiBAD,UAAU,GAAS;IACjB,IAAI,CAACC,SAAS,EAAE;IAEhB,IAAI,CAACL,KAAK,GAAGQ,WAAW,CAAC,IAAI,CAAClB,aAAa,EAAE,IAAI,CAAC;EACpD;EAEAe,SAAS,GAAS;IAChB,IAAI,IAAI,CAACL,KAAK,EAAE;MACdS,aAAa,CAAC,IAAI,CAACT,KAAK,CAAC;MACzB,IAAI,CAACA,KAAK,GAAGG,SAAS;IACxB;EACF;EAEAO,UAAU,GAAS;IACjB,IAAI,CAACC,QAAQ,CAAC;MACZnB,WAAW,EAAEpB,IAAI,CAACqB,GAAG;IACvB,CAAC,CAAC;EACJ;EAEAT,WAAW,CAAC4B,KAAa,EAAQ;IAC/B,IAAI,CAACD,QAAQ,CAAC;MAAEC,KAAK,YAAKA,KAAK;IAAG,CAAC,CAAC;EACtC;EAEA7B,YAAY,CAACL,IAA+B,EAAQ;IAClD,IAAM;MAAEqB;IAAK,CAAC,GAAGrB,IAAI,aAAJA,IAAI,cAAJA,IAAI,GAAI,CAAC,CAAC;IAC3B,IAAI,CAACiC,QAAQ,CAAC;MAAEZ;IAAK,CAAC,CAAC;IAEvB,IAAM;MAAEc;IAAS,CAAC,GAAG,IAAI,CAACrC,KAAK;IAC/BqC,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGd,IAAI,CAAC;EAClB;EAEAT,aAAa,GAAS;IACpB,IAAI,CAACoB,UAAU,EAAE;EACnB;EAOAI,MAAM,GAAiB;IAAA;IACrB,IAAM;MACJpC,IAAI,EAAE;QAAEO;MAAK,CAAC;MACdN;IACF,CAAC,GAAG,IAAI,CAACH,KAAK;IACd,IAAM;MAAEgB,WAAW;MAAEO,IAAI;MAAEa;IAAM,CAAC,GAAG,IAAI,CAACrB,KAAK;IAC/C,IAAM;MAAEU,MAAM;MAAElC,SAAS;MAAEC;IAAQ,CAAC,GAAG+B,IAAI,aAAJA,IAAI,cAAJA,IAAI,GAAI,CAAC,CAAC;IAEjD,IAAMgB,YAAY,oBAAGd,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEW,KAAK,yDAAIA,KAAK;IAE3C,IAAMI,UAAU,GAAGnD,yBAAyB,CAACC,aAAa,CACxDC,SAAS,EACTC,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAIwB,WAAW,CACvB;;IAED;IACA;IACA;IACA,IAAMyB,WAAW,GAAG,IAAI,CAACC,cAAc,CAACjC,IAAI,CAAC;IAE7C,IAAMkC,aAAa,GAAGjB,OAAO,CAACc,UAAU,CAAC;IACzC,oBACE;MAAK,SAAS,EAAC;IAA8B,gBAC3C;MAAK,SAAS,EAAC;IAAkB,gBAC/B,oBAAC,IAAI;MAAC,QAAQ,EAAErC;IAAS,GAAEsC,WAAW,CAAQ,EAC7CA,WAAW,CAACG,MAAM,GAAGnC,IAAI,CAACmC,MAAM,iBAAI,+BAAG,sBAAoB,CAAI,CAC5D,eACN;MAAK,SAAS,EAAC;IAAa,gBAC1B;MAAK,SAAS,EAAC;IAAgC,GAC5ClB,OAAO,CAACa,YAAY,CAAC,iBACpB;MAAK,SAAS,EAAC;IAAkB,gBAC/B,oBAAC,eAAe;MAAC,IAAI,EAAEtD;IAAU,EAAG,yBACtC,CACD,eACD;MAAK,SAAS,EAAC;IAAc,GAAC,eACf,EAAC,GAAG,EAChB0D,aAAa,gBACZ;MAAM,SAAS,EAAC;IAAa,GAAEH,UAAU,CAAQ,gBAEjD,oBAAC,cAAc,OAChB,CACG,CACF,EACLd,OAAO,CAACa,YAAY,CAAC,iBACpB;MAAK,SAAS,EAAC;IAAe,GAAEA,YAAY,CAC7C,CACG,CACF;EAEV;AACF;AAAC,gBAjLYlD,yBAAyB,kBAId;EACpBgD,QAAQ,EAAE,MAAYV;AACxB,CAAC;AA6KH,eAAetC,yBAAyB"}
|
package/dist/common/Code.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
2
4
|
import React, { Component } from 'react';
|
|
3
5
|
import * as monaco from 'monaco-editor';
|
|
4
6
|
class Code extends Component {
|
package/dist/common/Code.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Code.js","names":["React","Component","monaco","Code","constructor","props","container","componentDidMount","colorize","children","editor","colorizeElement","theme","render","language","pointerEvents"],"sources":["../../src/common/Code.tsx"],"sourcesContent":["import React, { Component, ReactElement, ReactNode } from 'react';\nimport * as monaco from 'monaco-editor';\n\ninterface CodeProps {\n children: ReactNode;\n language: string;\n}\n\nclass Code extends Component<CodeProps, Record<string, never>> {\n constructor(props: CodeProps) {\n super(props);\n\n this.container = null;\n }\n\n componentDidMount(): void {\n this.colorize();\n }\n\n container: HTMLDivElement | null;\n\n colorize(): void {\n const { children } = this.props;\n if (this.container && children != null) {\n monaco.editor.colorizeElement(this.container, {\n theme: 'dh-dark',\n });\n }\n }\n\n render(): ReactElement {\n const { children, language } = this.props;\n return (\n <div>\n <div\n data-lang={language}\n ref={container => {\n this.container = container;\n }}\n // Add pointerEvents: 'none' has huge benefits on performance with Hit Test testing on large colorized elements.\n // You can still select the text event with this set\n style={{ pointerEvents: 'none' }}\n >\n {children}\n </div>\n </div>\n );\n }\n}\n\nexport default Code;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Code.js","names":["React","Component","monaco","Code","constructor","props","container","componentDidMount","colorize","children","editor","colorizeElement","theme","render","language","pointerEvents"],"sources":["../../src/common/Code.tsx"],"sourcesContent":["import React, { Component, ReactElement, ReactNode } from 'react';\nimport * as monaco from 'monaco-editor';\n\ninterface CodeProps {\n children: ReactNode;\n language: string;\n}\n\nclass Code extends Component<CodeProps, Record<string, never>> {\n constructor(props: CodeProps) {\n super(props);\n\n this.container = null;\n }\n\n componentDidMount(): void {\n this.colorize();\n }\n\n container: HTMLDivElement | null;\n\n colorize(): void {\n const { children } = this.props;\n if (this.container && children != null) {\n monaco.editor.colorizeElement(this.container, {\n theme: 'dh-dark',\n });\n }\n }\n\n render(): ReactElement {\n const { children, language } = this.props;\n return (\n <div>\n <div\n data-lang={language}\n ref={container => {\n this.container = container;\n }}\n // Add pointerEvents: 'none' has huge benefits on performance with Hit Test testing on large colorized elements.\n // You can still select the text event with this set\n style={{ pointerEvents: 'none' }}\n >\n {children}\n </div>\n </div>\n );\n }\n}\n\nexport default Code;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAiC,OAAO;AACjE,OAAO,KAAKC,MAAM,MAAM,eAAe;AAOvC,MAAMC,IAAI,SAASF,SAAS,CAAmC;EAC7DG,WAAW,CAACC,KAAgB,EAAE;IAC5B,KAAK,CAACA,KAAK,CAAC;IAAC;IAEb,IAAI,CAACC,SAAS,GAAG,IAAI;EACvB;EAEAC,iBAAiB,GAAS;IACxB,IAAI,CAACC,QAAQ,EAAE;EACjB;EAIAA,QAAQ,GAAS;IACf,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC/B,IAAI,IAAI,CAACC,SAAS,IAAIG,QAAQ,IAAI,IAAI,EAAE;MACtCP,MAAM,CAACQ,MAAM,CAACC,eAAe,CAAC,IAAI,CAACL,SAAS,EAAE;QAC5CM,KAAK,EAAE;MACT,CAAC,CAAC;IACJ;EACF;EAEAC,MAAM,GAAiB;IACrB,IAAM;MAAEJ,QAAQ;MAAEK;IAAS,CAAC,GAAG,IAAI,CAACT,KAAK;IACzC,oBACE,8CACE;MACE,aAAWS,QAAS;MACpB,GAAG,EAAER,SAAS,IAAI;QAChB,IAAI,CAACA,SAAS,GAAGA,SAAS;MAC5B;MACA;MACA;MAAA;MACA,KAAK,EAAE;QAAES,aAAa,EAAE;MAAO;IAAE,GAEhCN,QAAQ,CACL,CACF;EAEV;AACF;AAEA,eAAeN,IAAI"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
2
4
|
/**
|
|
3
5
|
* Console display for use in the Iris environment.
|
|
4
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleHistory.js","names":["React","Component","ConsoleHistoryItem","ConsoleHistory","itemKey","i","item","command","result","message","error","render","disabled","items","language","openObject","props","historyElements","length","historyElement","push"],"sources":["../../src/console-history/ConsoleHistory.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { Component, ReactElement } from 'react';\nimport { VariableDefinition } from '@deephaven/jsapi-shim';\nimport ConsoleHistoryItem from './ConsoleHistoryItem';\n\nimport './ConsoleHistory.scss';\nimport { ConsoleHistoryActionItem } from './ConsoleHistoryTypes';\n\ninterface ConsoleHistoryProps {\n items: ConsoleHistoryActionItem[];\n language: string;\n openObject: (object: VariableDefinition) => void;\n disabled?: boolean;\n}\n\nclass ConsoleHistory extends Component<\n ConsoleHistoryProps,\n Record<string, never>\n> {\n static defaultProps = {\n disabled: false,\n };\n\n static itemKey(i: number, item: ConsoleHistoryActionItem): string {\n return `${i}.${item.command}.${item.result && item.result.message}.${\n item.result && item.result.error\n }`;\n }\n\n render(): ReactElement {\n const { disabled, items, language, openObject } = this.props;\n const historyElements = [];\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const historyElement = (\n <ConsoleHistoryItem\n key={ConsoleHistory.itemKey(i, item)}\n disabled={disabled}\n item={item}\n openObject={openObject}\n language={language}\n />\n );\n historyElements.push(historyElement);\n }\n\n return (\n <div className=\"container-fluid console-history\">{historyElements}</div>\n );\n }\n}\n\nexport default ConsoleHistory;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConsoleHistory.js","names":["React","Component","ConsoleHistoryItem","ConsoleHistory","itemKey","i","item","command","result","message","error","render","disabled","items","language","openObject","props","historyElements","length","historyElement","push"],"sources":["../../src/console-history/ConsoleHistory.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { Component, ReactElement } from 'react';\nimport { VariableDefinition } from '@deephaven/jsapi-shim';\nimport ConsoleHistoryItem from './ConsoleHistoryItem';\n\nimport './ConsoleHistory.scss';\nimport { ConsoleHistoryActionItem } from './ConsoleHistoryTypes';\n\ninterface ConsoleHistoryProps {\n items: ConsoleHistoryActionItem[];\n language: string;\n openObject: (object: VariableDefinition) => void;\n disabled?: boolean;\n}\n\nclass ConsoleHistory extends Component<\n ConsoleHistoryProps,\n Record<string, never>\n> {\n static defaultProps = {\n disabled: false,\n };\n\n static itemKey(i: number, item: ConsoleHistoryActionItem): string {\n return `${i}.${item.command}.${item.result && item.result.message}.${\n item.result && item.result.error\n }`;\n }\n\n render(): ReactElement {\n const { disabled, items, language, openObject } = this.props;\n const historyElements = [];\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const historyElement = (\n <ConsoleHistoryItem\n key={ConsoleHistory.itemKey(i, item)}\n disabled={disabled}\n item={item}\n openObject={openObject}\n language={language}\n />\n );\n historyElements.push(historyElement);\n }\n\n return (\n <div className=\"container-fluid console-history\">{historyElements}</div>\n );\n }\n}\n\nexport default ConsoleHistory;\n"],"mappings":";;;AAAA;AACA;AACA;AACA,OAAOA,KAAK,IAAIC,SAAS,QAAsB,OAAO;AAAC,OAEhDC,kBAAkB;AAAA;AAYzB,MAAMC,cAAc,SAASF,SAAS,CAGpC;EAKA,OAAOG,OAAO,CAACC,CAAS,EAAEC,IAA8B,EAAU;IAChE,iBAAUD,CAAC,cAAIC,IAAI,CAACC,OAAO,cAAID,IAAI,CAACE,MAAM,IAAIF,IAAI,CAACE,MAAM,CAACC,OAAO,cAC/DH,IAAI,CAACE,MAAM,IAAIF,IAAI,CAACE,MAAM,CAACE,KAAK;EAEpC;EAEAC,MAAM,GAAiB;IACrB,IAAM;MAAEC,QAAQ;MAAEC,KAAK;MAAEC,QAAQ;MAAEC;IAAW,CAAC,GAAG,IAAI,CAACC,KAAK;IAC5D,IAAMC,eAAe,GAAG,EAAE;IAC1B,KAAK,IAAIZ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGQ,KAAK,CAACK,MAAM,EAAEb,CAAC,IAAI,CAAC,EAAE;MACxC,IAAMC,IAAI,GAAGO,KAAK,CAACR,CAAC,CAAC;MACrB,IAAMc,cAAc,gBAClB,oBAAC,kBAAkB;QACjB,GAAG,EAAEhB,cAAc,CAACC,OAAO,CAACC,CAAC,EAAEC,IAAI,CAAE;QACrC,QAAQ,EAAEM,QAAS;QACnB,IAAI,EAAEN,IAAK;QACX,UAAU,EAAES,UAAW;QACvB,QAAQ,EAAED;MAAS,EAEtB;MACDG,eAAe,CAACG,IAAI,CAACD,cAAc,CAAC;IACtC;IAEA,oBACE;MAAK,SAAS,EAAC;IAAiC,GAAEF,eAAe,CAAO;EAE5E;AACF;AAAC,gBAnCKd,cAAc,kBAII;EACpBS,QAAQ,EAAE;AACZ,CAAC;AA+BH,eAAeT,cAAc"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
2
4
|
/**
|
|
3
5
|
* Console display for use in the Iris environment.
|
|
4
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleHistoryItem.js","names":["React","PureComponent","Button","Log","classNames","Code","ObjectIcon","ConsoleHistoryItemResult","ConsoleHistoryResultInProgress","ConsoleHistoryResultErrorMessage","log","module","ConsoleHistoryItem","constructor","props","handleCancelClick","bind","handleObjectClick","object","debug","openObject","item","cancelResult","command","render","disabled","language","disabledObjects","result","commandElement","resultElements","hasButtons","error","message","changes","created","updated","forEach","title","key","btnDisabled","undefined","indexOf","element","type","push","errorMessage","resultElement","length"],"sources":["../../src/console-history/ConsoleHistoryItem.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { PureComponent, ReactElement } from 'react';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { VariableDefinition } from '@deephaven/jsapi-shim';\nimport classNames from 'classnames';\nimport { Code, ObjectIcon } from '../common';\nimport ConsoleHistoryItemResult from './ConsoleHistoryItemResult';\nimport ConsoleHistoryResultInProgress from './ConsoleHistoryResultInProgress';\nimport ConsoleHistoryResultErrorMessage from './ConsoleHistoryResultErrorMessage';\nimport './ConsoleHistoryItem.scss';\nimport { ConsoleHistoryActionItem } from './ConsoleHistoryTypes';\n\nconst log = Log.module('ConsoleHistoryItem');\n\ninterface ConsoleHistoryItemProps {\n item: ConsoleHistoryActionItem;\n language: string;\n openObject: (object: VariableDefinition) => void;\n disabled?: boolean;\n}\n\nclass ConsoleHistoryItem extends PureComponent<\n ConsoleHistoryItemProps,\n Record<string, never>\n> {\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props: ConsoleHistoryItemProps) {\n super(props);\n\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleObjectClick = this.handleObjectClick.bind(this);\n }\n\n handleObjectClick(object: VariableDefinition): void {\n log.debug('handleObjectClick', object);\n\n const { openObject } = this.props;\n openObject(object);\n }\n\n handleCancelClick(): void {\n const { item } = this.props;\n if (item != null && item.cancelResult) {\n log.debug(`Cancelling command: ${item.command}`);\n item.cancelResult();\n }\n }\n\n render(): ReactElement {\n const { disabled, item, language } = this.props;\n const { disabledObjects, result } = item;\n\n let commandElement = null;\n if (item.command != null && item.command !== '') {\n commandElement = (\n <div className=\"console-history-item-command\">\n <div className=\"console-history-gutter\">></div>\n <div className=\"console-history-content\">\n <Code language={language}>{item.command}</Code>\n </div>\n </div>\n );\n }\n\n const resultElements = [];\n let hasButtons = false;\n\n if (result) {\n const { error, message, changes } = result;\n\n if (changes) {\n const { created, updated } = changes;\n [...created, ...updated].forEach(object => {\n hasButtons = true;\n const { title } = object;\n const key = `${title}`;\n const btnDisabled =\n disabled === undefined ||\n disabled ||\n (disabledObjects ?? []).indexOf(key) >= 0;\n const element = (\n <Button\n key={key}\n kind=\"primary\"\n onClick={() => this.handleObjectClick(object)}\n className=\"btn-console-object\"\n disabled={btnDisabled}\n icon={<ObjectIcon type={object.type} />}\n >\n {title}\n </Button>\n );\n resultElements.push(element);\n });\n }\n\n // If the error has an associated command, we'll actually get a separate ERROR item printed out, so only print an error if there isn't an associated command\n if (error != null && item.command == null) {\n let errorMessage = `${(error as { message: string }).message ?? error}`;\n if (!errorMessage) {\n errorMessage = error as string;\n }\n const element = (\n <ConsoleHistoryResultErrorMessage\n key=\"result-error\"\n message={errorMessage}\n />\n );\n resultElements.push(element);\n }\n\n if (message !== undefined && message !== '') {\n const element = (\n <div key=\"log-message\" className=\"log-message\">\n {message}\n </div>\n );\n resultElements.push(element);\n }\n } else {\n hasButtons = true;\n const element = (\n <ConsoleHistoryResultInProgress\n key=\"in_progress\"\n onCancelClick={this.handleCancelClick}\n disabled={disabled}\n />\n );\n resultElements.push(element);\n }\n\n let resultElement = null;\n if (resultElements.length > 0) {\n resultElement = (\n <ConsoleHistoryItemResult>{resultElements}</ConsoleHistoryItemResult>\n );\n }\n\n return (\n <div\n className={classNames('console-command-result', {\n 'console-result-buttons': hasButtons,\n })}\n >\n {commandElement}\n {resultElement}\n </div>\n );\n }\n}\n\nexport default ConsoleHistoryItem;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConsoleHistoryItem.js","names":["React","PureComponent","Button","Log","classNames","Code","ObjectIcon","ConsoleHistoryItemResult","ConsoleHistoryResultInProgress","ConsoleHistoryResultErrorMessage","log","module","ConsoleHistoryItem","constructor","props","handleCancelClick","bind","handleObjectClick","object","debug","openObject","item","cancelResult","command","render","disabled","language","disabledObjects","result","commandElement","resultElements","hasButtons","error","message","changes","created","updated","forEach","title","key","btnDisabled","undefined","indexOf","element","type","push","errorMessage","resultElement","length"],"sources":["../../src/console-history/ConsoleHistoryItem.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { PureComponent, ReactElement } from 'react';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { VariableDefinition } from '@deephaven/jsapi-shim';\nimport classNames from 'classnames';\nimport { Code, ObjectIcon } from '../common';\nimport ConsoleHistoryItemResult from './ConsoleHistoryItemResult';\nimport ConsoleHistoryResultInProgress from './ConsoleHistoryResultInProgress';\nimport ConsoleHistoryResultErrorMessage from './ConsoleHistoryResultErrorMessage';\nimport './ConsoleHistoryItem.scss';\nimport { ConsoleHistoryActionItem } from './ConsoleHistoryTypes';\n\nconst log = Log.module('ConsoleHistoryItem');\n\ninterface ConsoleHistoryItemProps {\n item: ConsoleHistoryActionItem;\n language: string;\n openObject: (object: VariableDefinition) => void;\n disabled?: boolean;\n}\n\nclass ConsoleHistoryItem extends PureComponent<\n ConsoleHistoryItemProps,\n Record<string, never>\n> {\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props: ConsoleHistoryItemProps) {\n super(props);\n\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleObjectClick = this.handleObjectClick.bind(this);\n }\n\n handleObjectClick(object: VariableDefinition): void {\n log.debug('handleObjectClick', object);\n\n const { openObject } = this.props;\n openObject(object);\n }\n\n handleCancelClick(): void {\n const { item } = this.props;\n if (item != null && item.cancelResult) {\n log.debug(`Cancelling command: ${item.command}`);\n item.cancelResult();\n }\n }\n\n render(): ReactElement {\n const { disabled, item, language } = this.props;\n const { disabledObjects, result } = item;\n\n let commandElement = null;\n if (item.command != null && item.command !== '') {\n commandElement = (\n <div className=\"console-history-item-command\">\n <div className=\"console-history-gutter\">></div>\n <div className=\"console-history-content\">\n <Code language={language}>{item.command}</Code>\n </div>\n </div>\n );\n }\n\n const resultElements = [];\n let hasButtons = false;\n\n if (result) {\n const { error, message, changes } = result;\n\n if (changes) {\n const { created, updated } = changes;\n [...created, ...updated].forEach(object => {\n hasButtons = true;\n const { title } = object;\n const key = `${title}`;\n const btnDisabled =\n disabled === undefined ||\n disabled ||\n (disabledObjects ?? []).indexOf(key) >= 0;\n const element = (\n <Button\n key={key}\n kind=\"primary\"\n onClick={() => this.handleObjectClick(object)}\n className=\"btn-console-object\"\n disabled={btnDisabled}\n icon={<ObjectIcon type={object.type} />}\n >\n {title}\n </Button>\n );\n resultElements.push(element);\n });\n }\n\n // If the error has an associated command, we'll actually get a separate ERROR item printed out, so only print an error if there isn't an associated command\n if (error != null && item.command == null) {\n let errorMessage = `${(error as { message: string }).message ?? error}`;\n if (!errorMessage) {\n errorMessage = error as string;\n }\n const element = (\n <ConsoleHistoryResultErrorMessage\n key=\"result-error\"\n message={errorMessage}\n />\n );\n resultElements.push(element);\n }\n\n if (message !== undefined && message !== '') {\n const element = (\n <div key=\"log-message\" className=\"log-message\">\n {message}\n </div>\n );\n resultElements.push(element);\n }\n } else {\n hasButtons = true;\n const element = (\n <ConsoleHistoryResultInProgress\n key=\"in_progress\"\n onCancelClick={this.handleCancelClick}\n disabled={disabled}\n />\n );\n resultElements.push(element);\n }\n\n let resultElement = null;\n if (resultElements.length > 0) {\n resultElement = (\n <ConsoleHistoryItemResult>{resultElements}</ConsoleHistoryItemResult>\n );\n }\n\n return (\n <div\n className={classNames('console-command-result', {\n 'console-result-buttons': hasButtons,\n })}\n >\n {commandElement}\n {resultElement}\n </div>\n );\n }\n}\n\nexport default ConsoleHistoryItem;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleHistoryItemResult.js","names":["React","PropTypes","ConsoleHistoryItemResult","children","propTypes","node","isRequired"],"sources":["../../src/console-history/ConsoleHistoryItemResult.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { ReactElement, ReactNode } from 'react';\nimport PropTypes from 'prop-types';\n\nfunction ConsoleHistoryItemResult({\n children,\n}: {\n children: ReactNode;\n}): ReactElement {\n return (\n <div className=\"console-history-item-result\">\n <div className=\"console-history-gutter\">-</div>\n <div className=\"console-history-content\">{children}</div>\n </div>\n );\n}\n\nConsoleHistoryItemResult.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default ConsoleHistoryItemResult;\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,KAAK,MAAmC,OAAO;AACtD,OAAOC,SAAS,MAAM,YAAY;AAElC,SAASC,wBAAwB,OAIhB;EAAA,IAJiB;IAChCC;EAGF,CAAC;EACC,oBACE;IAAK,SAAS,EAAC;EAA6B,gBAC1C;IAAK,SAAS,EAAC;EAAwB,
|
|
1
|
+
{"version":3,"file":"ConsoleHistoryItemResult.js","names":["React","PropTypes","ConsoleHistoryItemResult","children","propTypes","node","isRequired"],"sources":["../../src/console-history/ConsoleHistoryItemResult.tsx"],"sourcesContent":["/**\n * Console display for use in the Iris environment.\n */\nimport React, { ReactElement, ReactNode } from 'react';\nimport PropTypes from 'prop-types';\n\nfunction ConsoleHistoryItemResult({\n children,\n}: {\n children: ReactNode;\n}): ReactElement {\n return (\n <div className=\"console-history-item-result\">\n <div className=\"console-history-gutter\">-</div>\n <div className=\"console-history-content\">{children}</div>\n </div>\n );\n}\n\nConsoleHistoryItemResult.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default ConsoleHistoryItemResult;\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,KAAK,MAAmC,OAAO;AACtD,OAAOC,SAAS,MAAM,YAAY;AAElC,SAASC,wBAAwB,OAIhB;EAAA,IAJiB;IAChCC;EAGF,CAAC;EACC,oBACE;IAAK,SAAS,EAAC;EAA6B,gBAC1C;IAAK,SAAS,EAAC;EAAwB,GAAC,GAAC,CAAM,eAC/C;IAAK,SAAS,EAAC;EAAyB,GAAEA,QAAQ,CAAO,CACrD;AAEV;AAEAD,wBAAwB,CAACE,SAAS,GAAG;EACnCD,QAAQ,EAAEF,SAAS,CAACI,IAAI,CAACC;AAC3B,CAAC;AAED,eAAeJ,wBAAwB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
2
4
|
/**
|
|
3
5
|
* Error message that can be expanded
|
|
4
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleHistoryResultErrorMessage.js","names":["React","PureComponent","classNames","FontAwesomeIcon","vsTriangleRight","vsTriangleDown","assertNotNull","ConsoleHistoryResultErrorMessage","constructor","props","handleKeyPress","bind","handleMouseDown","handleMouseMove","handleMouseUp","handleToggleError","handleMouseEnter","handleMouseLeave","mouseX","mouseY","isClicking","state","isExpanded","isTriggerHovered","event","key","stopPropagation","preventDefault","clientX","clientY","Math","abs","mouseDragThreshold","shiftKey","metaKey","altKey","setState","render","message","messageProp","lineBreakIndex","indexOf","isMultiline","topLineOfMessage","slice","remainderOfMessage","arrowBtnClasses","expanded"],"sources":["../../src/console-history/ConsoleHistoryResultErrorMessage.tsx"],"sourcesContent":["/**\n * Error message that can be expanded\n */\nimport React, {\n KeyboardEvent,\n MouseEvent,\n PureComponent,\n ReactElement,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleRight, vsTriangleDown } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\n\ninterface ConsoleHistoryResultErrorMessageProps {\n message?: string;\n}\n\ninterface ConsoleHistoryResultErrorMessageState {\n isExpanded: boolean;\n isTriggerHovered: boolean;\n}\n\nclass ConsoleHistoryResultErrorMessage extends PureComponent<\n ConsoleHistoryResultErrorMessageProps,\n ConsoleHistoryResultErrorMessageState\n> {\n static defaultProps = {\n message: '',\n };\n\n static mouseDragThreshold = 5;\n\n constructor(props: ConsoleHistoryResultErrorMessageProps) {\n super(props);\n\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleToggleError = this.handleToggleError.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n\n this.mouseX = null;\n this.mouseY = null;\n this.isClicking = false;\n\n this.state = {\n isExpanded: false,\n isTriggerHovered: false,\n };\n }\n\n mouseX: number | null;\n\n mouseY: number | null;\n\n isClicking: boolean;\n\n handleKeyPress(event: KeyboardEvent<HTMLDivElement>): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n // Toggle the error open/closed\n this.handleToggleError();\n event.stopPropagation();\n event.preventDefault();\n break;\n default:\n break;\n }\n }\n\n handleMouseDown(event: MouseEvent<HTMLDivElement>): void {\n this.mouseX = event.clientX;\n this.mouseY = event.clientY;\n this.isClicking = true;\n }\n\n handleMouseMove(event: MouseEvent<HTMLDivElement>): void {\n if (this.mouseX != null && this.mouseY != null) {\n if (\n Math.abs(event.clientX - this.mouseX) >=\n ConsoleHistoryResultErrorMessage.mouseDragThreshold ||\n Math.abs(event.clientY - this.mouseY) >=\n ConsoleHistoryResultErrorMessage.mouseDragThreshold\n ) {\n this.isClicking = false;\n }\n } else if (this.isClicking) {\n // Rare case - could happen if you mouse down, switch window focus, release the mouse, then come back, mouse down outside of the error, drag into the error, then release the mouse\n this.isClicking = false;\n }\n }\n\n handleMouseUp(event: MouseEvent<HTMLDivElement>): void {\n // We don't want to expand/collapse the error if user is holding shift or an alt key\n // They may be trying to adjust their selection\n if (this.isClicking && !event.shiftKey && !event.metaKey && !event.altKey) {\n this.handleToggleError();\n }\n this.mouseX = null;\n this.mouseY = null;\n this.isClicking = false;\n }\n\n handleToggleError(): void {\n this.setState(state => ({ isExpanded: !state.isExpanded }));\n }\n\n handleMouseEnter(): void {\n this.setState({ isTriggerHovered: true });\n }\n\n handleMouseLeave(): void {\n this.setState({ isTriggerHovered: false });\n }\n\n render(): ReactElement {\n const { isExpanded, isTriggerHovered } = this.state;\n const { message: messageProp } = this.props;\n assertNotNull(messageProp);\n const lineBreakIndex = messageProp.indexOf('\\n');\n const isMultiline = lineBreakIndex > -1;\n let topLineOfMessage = messageProp;\n if (isMultiline) {\n topLineOfMessage = messageProp.slice(0, lineBreakIndex);\n }\n const remainderOfMessage = messageProp.slice(lineBreakIndex);\n const arrowBtnClasses = isTriggerHovered\n ? 'error-btn-link error-btn-link--active'\n : 'error-btn-link';\n\n return (\n <div\n key=\"error\"\n className={classNames('error-message', {\n expanded: isExpanded,\n })}\n >\n {isMultiline && (\n <>\n <div className=\"error-gutter\">\n <button\n type=\"button\"\n onClick={this.handleToggleError}\n className={arrowBtnClasses}\n tabIndex={-1}\n >\n <FontAwesomeIcon\n icon={isExpanded ? vsTriangleDown : vsTriangleRight}\n transform=\"left-3\"\n />\n </button>\n </div>\n <div className=\"error-content\">\n <div\n className=\"console-error-text-trigger\"\n role=\"button\"\n tabIndex={0}\n onKeyPress={this.handleKeyPress}\n onMouseDown={this.handleMouseDown}\n onMouseMove={this.handleMouseMove}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n onMouseUp={this.handleMouseUp}\n >\n {topLineOfMessage}\n </div>\n {isExpanded ? remainderOfMessage : ''}\n </div>\n </>\n )}\n {!isMultiline && (\n <div className=\"error-content\">\n <div className=\"console-error-text\">{topLineOfMessage}</div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ConsoleHistoryResultErrorMessage;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConsoleHistoryResultErrorMessage.js","names":["React","PureComponent","classNames","FontAwesomeIcon","vsTriangleRight","vsTriangleDown","assertNotNull","ConsoleHistoryResultErrorMessage","constructor","props","handleKeyPress","bind","handleMouseDown","handleMouseMove","handleMouseUp","handleToggleError","handleMouseEnter","handleMouseLeave","mouseX","mouseY","isClicking","state","isExpanded","isTriggerHovered","event","key","stopPropagation","preventDefault","clientX","clientY","Math","abs","mouseDragThreshold","shiftKey","metaKey","altKey","setState","render","message","messageProp","lineBreakIndex","indexOf","isMultiline","topLineOfMessage","slice","remainderOfMessage","arrowBtnClasses","expanded"],"sources":["../../src/console-history/ConsoleHistoryResultErrorMessage.tsx"],"sourcesContent":["/**\n * Error message that can be expanded\n */\nimport React, {\n KeyboardEvent,\n MouseEvent,\n PureComponent,\n ReactElement,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleRight, vsTriangleDown } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\n\ninterface ConsoleHistoryResultErrorMessageProps {\n message?: string;\n}\n\ninterface ConsoleHistoryResultErrorMessageState {\n isExpanded: boolean;\n isTriggerHovered: boolean;\n}\n\nclass ConsoleHistoryResultErrorMessage extends PureComponent<\n ConsoleHistoryResultErrorMessageProps,\n ConsoleHistoryResultErrorMessageState\n> {\n static defaultProps = {\n message: '',\n };\n\n static mouseDragThreshold = 5;\n\n constructor(props: ConsoleHistoryResultErrorMessageProps) {\n super(props);\n\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleToggleError = this.handleToggleError.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n\n this.mouseX = null;\n this.mouseY = null;\n this.isClicking = false;\n\n this.state = {\n isExpanded: false,\n isTriggerHovered: false,\n };\n }\n\n mouseX: number | null;\n\n mouseY: number | null;\n\n isClicking: boolean;\n\n handleKeyPress(event: KeyboardEvent<HTMLDivElement>): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n // Toggle the error open/closed\n this.handleToggleError();\n event.stopPropagation();\n event.preventDefault();\n break;\n default:\n break;\n }\n }\n\n handleMouseDown(event: MouseEvent<HTMLDivElement>): void {\n this.mouseX = event.clientX;\n this.mouseY = event.clientY;\n this.isClicking = true;\n }\n\n handleMouseMove(event: MouseEvent<HTMLDivElement>): void {\n if (this.mouseX != null && this.mouseY != null) {\n if (\n Math.abs(event.clientX - this.mouseX) >=\n ConsoleHistoryResultErrorMessage.mouseDragThreshold ||\n Math.abs(event.clientY - this.mouseY) >=\n ConsoleHistoryResultErrorMessage.mouseDragThreshold\n ) {\n this.isClicking = false;\n }\n } else if (this.isClicking) {\n // Rare case - could happen if you mouse down, switch window focus, release the mouse, then come back, mouse down outside of the error, drag into the error, then release the mouse\n this.isClicking = false;\n }\n }\n\n handleMouseUp(event: MouseEvent<HTMLDivElement>): void {\n // We don't want to expand/collapse the error if user is holding shift or an alt key\n // They may be trying to adjust their selection\n if (this.isClicking && !event.shiftKey && !event.metaKey && !event.altKey) {\n this.handleToggleError();\n }\n this.mouseX = null;\n this.mouseY = null;\n this.isClicking = false;\n }\n\n handleToggleError(): void {\n this.setState(state => ({ isExpanded: !state.isExpanded }));\n }\n\n handleMouseEnter(): void {\n this.setState({ isTriggerHovered: true });\n }\n\n handleMouseLeave(): void {\n this.setState({ isTriggerHovered: false });\n }\n\n render(): ReactElement {\n const { isExpanded, isTriggerHovered } = this.state;\n const { message: messageProp } = this.props;\n assertNotNull(messageProp);\n const lineBreakIndex = messageProp.indexOf('\\n');\n const isMultiline = lineBreakIndex > -1;\n let topLineOfMessage = messageProp;\n if (isMultiline) {\n topLineOfMessage = messageProp.slice(0, lineBreakIndex);\n }\n const remainderOfMessage = messageProp.slice(lineBreakIndex);\n const arrowBtnClasses = isTriggerHovered\n ? 'error-btn-link error-btn-link--active'\n : 'error-btn-link';\n\n return (\n <div\n key=\"error\"\n className={classNames('error-message', {\n expanded: isExpanded,\n })}\n >\n {isMultiline && (\n <>\n <div className=\"error-gutter\">\n <button\n type=\"button\"\n onClick={this.handleToggleError}\n className={arrowBtnClasses}\n tabIndex={-1}\n >\n <FontAwesomeIcon\n icon={isExpanded ? vsTriangleDown : vsTriangleRight}\n transform=\"left-3\"\n />\n </button>\n </div>\n <div className=\"error-content\">\n <div\n className=\"console-error-text-trigger\"\n role=\"button\"\n tabIndex={0}\n onKeyPress={this.handleKeyPress}\n onMouseDown={this.handleMouseDown}\n onMouseMove={this.handleMouseMove}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n onMouseUp={this.handleMouseUp}\n >\n {topLineOfMessage}\n </div>\n {isExpanded ? remainderOfMessage : ''}\n </div>\n </>\n )}\n {!isMultiline && (\n <div className=\"error-content\">\n <div className=\"console-error-text\">{topLineOfMessage}</div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ConsoleHistoryResultErrorMessage;\n"],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
2
4
|
import React, { Component } from 'react';
|
|
3
5
|
import classNames from 'classnames';
|
|
4
6
|
import { Button, LoadingSpinner } from '@deephaven/components';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleHistoryResultInProgress.js","names":["React","Component","classNames","Button","LoadingSpinner","vsClose","TimeUtils","ConsoleHistoryResultInProgress","constructor","props","updateElapsed","bind","startTime","Date","now","state","elapsed","componentDidMount","timer","setInterval","componentWillUnmount","clearInterval","undefined","setState","Math","round","render","disabled","onCancelClick","formatElapsedTime"],"sources":["../../src/console-history/ConsoleHistoryResultInProgress.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { vsClose } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport './ConsoleHistoryResultInProgress.scss';\n\ninterface ConsoleHistoryResultInProgressProps {\n onCancelClick: () => void;\n disabled: boolean;\n}\n\ninterface ConsoleHistoryResultInProgressState {\n elapsed: number;\n}\n/**\n * A spinner shown when a command is taking a while.\n */\nclass ConsoleHistoryResultInProgress extends Component<\n ConsoleHistoryResultInProgressProps,\n ConsoleHistoryResultInProgressState\n> {\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props: ConsoleHistoryResultInProgressProps) {\n super(props);\n\n this.updateElapsed = this.updateElapsed.bind(this);\n\n this.startTime = Date.now();\n\n this.state = {\n elapsed: 0,\n };\n }\n\n componentDidMount(): void {\n this.timer = setInterval(this.updateElapsed, 1000);\n }\n\n componentWillUnmount(): void {\n if (this.timer) {\n clearInterval(this.timer);\n }\n\n this.timer = undefined;\n }\n\n timer?: NodeJS.Timer;\n\n startTime: number;\n\n updateElapsed(): void {\n this.setState({\n elapsed: Math.round((Date.now() - this.startTime) / 1000),\n });\n }\n\n render(): ReactElement {\n const { disabled, onCancelClick } = this.props;\n const { elapsed } = this.state;\n return (\n <div\n className={classNames('console-history-result-in-progress', {\n disabled,\n })}\n >\n <span className=\"badge\">\n <LoadingSpinner />\n Running... {TimeUtils.formatElapsedTime(elapsed)} \n <Button\n className=\"console-history-result-in-progress-cancel\"\n kind=\"ghost\"\n icon={vsClose}\n tooltip=\"Cancel\"\n onClick={onCancelClick}\n disabled={disabled}\n />\n </span>\n </div>\n );\n }\n}\n\nexport default ConsoleHistoryResultInProgress;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConsoleHistoryResultInProgress.js","names":["React","Component","classNames","Button","LoadingSpinner","vsClose","TimeUtils","ConsoleHistoryResultInProgress","constructor","props","updateElapsed","bind","startTime","Date","now","state","elapsed","componentDidMount","timer","setInterval","componentWillUnmount","clearInterval","undefined","setState","Math","round","render","disabled","onCancelClick","formatElapsedTime"],"sources":["../../src/console-history/ConsoleHistoryResultInProgress.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { vsClose } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport './ConsoleHistoryResultInProgress.scss';\n\ninterface ConsoleHistoryResultInProgressProps {\n onCancelClick: () => void;\n disabled: boolean;\n}\n\ninterface ConsoleHistoryResultInProgressState {\n elapsed: number;\n}\n/**\n * A spinner shown when a command is taking a while.\n */\nclass ConsoleHistoryResultInProgress extends Component<\n ConsoleHistoryResultInProgressProps,\n ConsoleHistoryResultInProgressState\n> {\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props: ConsoleHistoryResultInProgressProps) {\n super(props);\n\n this.updateElapsed = this.updateElapsed.bind(this);\n\n this.startTime = Date.now();\n\n this.state = {\n elapsed: 0,\n };\n }\n\n componentDidMount(): void {\n this.timer = setInterval(this.updateElapsed, 1000);\n }\n\n componentWillUnmount(): void {\n if (this.timer) {\n clearInterval(this.timer);\n }\n\n this.timer = undefined;\n }\n\n timer?: NodeJS.Timer;\n\n startTime: number;\n\n updateElapsed(): void {\n this.setState({\n elapsed: Math.round((Date.now() - this.startTime) / 1000),\n });\n }\n\n render(): ReactElement {\n const { disabled, onCancelClick } = this.props;\n const { elapsed } = this.state;\n return (\n <div\n className={classNames('console-history-result-in-progress', {\n disabled,\n })}\n >\n <span className=\"badge\">\n <LoadingSpinner />\n Running... {TimeUtils.formatElapsedTime(elapsed)} \n <Button\n className=\"console-history-result-in-progress-cancel\"\n kind=\"ghost\"\n icon={vsClose}\n tooltip=\"Cancel\"\n onClick={onCancelClick}\n disabled={disabled}\n />\n </span>\n </div>\n );\n }\n}\n\nexport default ConsoleHistoryResultInProgress;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAsB,OAAO;AACtD,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,MAAM,EAAEC,cAAc,QAAQ,uBAAuB;AAC9D,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,SAAS,QAAQ,kBAAkB;AAAC;AAW7C;AACA;AACA;AACA,MAAMC,8BAA8B,SAASN,SAAS,CAGpD;EAKAO,WAAW,CAACC,KAA0C,EAAE;IACtD,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAEb,IAAI,CAACC,aAAa,GAAG,IAAI,CAACA,aAAa,CAACC,IAAI,CAAC,IAAI,CAAC;IAElD,IAAI,CAACC,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE3B,IAAI,CAACC,KAAK,GAAG;MACXC,OAAO,EAAE;IACX,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAI,CAACC,KAAK,GAAGC,WAAW,CAAC,IAAI,CAACT,aAAa,EAAE,IAAI,CAAC;EACpD;EAEAU,oBAAoB,GAAS;IAC3B,IAAI,IAAI,CAACF,KAAK,EAAE;MACdG,aAAa,CAAC,IAAI,CAACH,KAAK,CAAC;IAC3B;IAEA,IAAI,CAACA,KAAK,GAAGI,SAAS;EACxB;EAMAZ,aAAa,GAAS;IACpB,IAAI,CAACa,QAAQ,CAAC;MACZP,OAAO,EAAEQ,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAG,IAAI,CAACF,SAAS,IAAI,IAAI;IAC1D,CAAC,CAAC;EACJ;EAEAc,MAAM,GAAiB;IACrB,IAAM;MAAEC,QAAQ;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACnB,KAAK;IAC9C,IAAM;MAAEO;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,oBACE;MACE,SAAS,EAAEb,UAAU,CAAC,oCAAoC,EAAE;QAC1DyB;MACF,CAAC;IAAE,gBAEH;MAAM,SAAS,EAAC;IAAO,gBACrB,oBAAC,cAAc,OAAG,mBACD,EAACrB,SAAS,CAACuB,iBAAiB,CAACb,OAAO,CAAC,EAAC,MACvD,mCAAC,MAAM;MACL,SAAS,EAAC,2CAA2C;MACrD,IAAI,EAAC,OAAO;MACZ,IAAI,EAAEX,OAAQ;MACd,OAAO,EAAC,QAAQ;MAChB,OAAO,EAAEuB,aAAc;MACvB,QAAQ,EAAED;IAAS,EACnB,CACG,CACH;EAEV;AACF;AAAC,gBAlEKpB,8BAA8B,kBAIZ;EACpBoB,QAAQ,EAAE;AACZ,CAAC;AA8DH,eAAepB,8BAA8B"}
|
package/dist/csv/CsvFormats.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
2
4
|
class CsvFormats {
|
|
3
5
|
static fromExtension(fileName) {
|
|
4
6
|
if (fileName.endsWith('.csv')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvFormats.js","names":["CsvFormats","fromExtension","fileName","endsWith","Object","freeze","DEFAULT_CSV","name","delimiter","newline","undefined","escapeChar","shouldTrim","skipEmptyLines","nullString","TSV","APACHE_COMMON_CSV","EXCEL_CSV","MY_SQL_CSV","RFC4180_CSV","COLON_SV","SEMI_COLON_SV","PIPE_SV","SPACE_SV","AUTODETECT"],"sources":["../../src/csv/CsvFormats.ts"],"sourcesContent":["export type CsvTypes = typeof CsvFormats.TYPES[keyof typeof CsvFormats.TYPES];\n\nclass CsvFormats {\n static DEFAULT_TYPE = 'DEFAULT_CSV' as const;\n\n static AUTO = 'AUTODETECT' as const;\n\n static fromExtension(fileName: string): keyof typeof CsvFormats.TYPES {\n if (fileName.endsWith('.csv')) {\n return 'DEFAULT_CSV';\n }\n if (fileName.endsWith('.tsv') || fileName.endsWith('.tab')) {\n return 'TSV';\n }\n if (fileName.endsWith('.psv')) {\n return 'PIPE_SV';\n }\n return 'AUTODETECT';\n }\n\n static TYPES = Object.freeze({\n DEFAULT_CSV: {\n name: 'Default csv (trimmed)',\n delimiter: ',',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n TSV: {\n name: 'Tab seperated (tsv)',\n delimiter: '\\t',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n // From org.apache.commons.csv.CSVFormat#DEFAULT\n APACHE_COMMON_CSV: {\n name: 'Apache Common csv',\n delimiter: ',',\n newline: '\\r\\n',\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: null,\n },\n\n // From org.apache.commons.csv.CSVFormat#EXCEL\n EXCEL_CSV: {\n name: 'Excel csv (strict)',\n delimiter: ',',\n newline: '\\r\\n',\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: false,\n nullString: null,\n },\n\n // From org.apache.commons.csv.CSVFormat#MYSQL\n MY_SQL_CSV: {\n name: 'MySQL csv',\n delimiter: '\\t',\n newline: '\\n',\n escapeChar: '\\\\',\n shouldTrim: true,\n skipEmptyLines: false,\n nullString: '\\\\N',\n },\n\n // From org.apache.commons.csv.CSVFormat#RFC4180\n RFC4180_CSV: {\n name: 'RFC4180 csv',\n delimiter: ',',\n newline: '\\r\\n',\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: false,\n nullString: null,\n },\n\n COLON_SV: {\n name: ': colon sv',\n delimiter: ':',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n SEMI_COLON_SV: {\n name: '; semi-colon sv',\n delimiter: ';',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n PIPE_SV: {\n name: '| pipe separated (psv)',\n delimiter: '|',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n SPACE_SV: {\n name: '\" \" space sv',\n delimiter: ' ',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n AUTODETECT: {\n name: 'autodetect',\n delimiter: undefined, // autodetect\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n });\n}\n\nexport default CsvFormats;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CsvFormats.js","names":["CsvFormats","fromExtension","fileName","endsWith","Object","freeze","DEFAULT_CSV","name","delimiter","newline","undefined","escapeChar","shouldTrim","skipEmptyLines","nullString","TSV","APACHE_COMMON_CSV","EXCEL_CSV","MY_SQL_CSV","RFC4180_CSV","COLON_SV","SEMI_COLON_SV","PIPE_SV","SPACE_SV","AUTODETECT"],"sources":["../../src/csv/CsvFormats.ts"],"sourcesContent":["export type CsvTypes = typeof CsvFormats.TYPES[keyof typeof CsvFormats.TYPES];\n\nclass CsvFormats {\n static DEFAULT_TYPE = 'DEFAULT_CSV' as const;\n\n static AUTO = 'AUTODETECT' as const;\n\n static fromExtension(fileName: string): keyof typeof CsvFormats.TYPES {\n if (fileName.endsWith('.csv')) {\n return 'DEFAULT_CSV';\n }\n if (fileName.endsWith('.tsv') || fileName.endsWith('.tab')) {\n return 'TSV';\n }\n if (fileName.endsWith('.psv')) {\n return 'PIPE_SV';\n }\n return 'AUTODETECT';\n }\n\n static TYPES = Object.freeze({\n DEFAULT_CSV: {\n name: 'Default csv (trimmed)',\n delimiter: ',',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n TSV: {\n name: 'Tab seperated (tsv)',\n delimiter: '\\t',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n // From org.apache.commons.csv.CSVFormat#DEFAULT\n APACHE_COMMON_CSV: {\n name: 'Apache Common csv',\n delimiter: ',',\n newline: '\\r\\n',\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: null,\n },\n\n // From org.apache.commons.csv.CSVFormat#EXCEL\n EXCEL_CSV: {\n name: 'Excel csv (strict)',\n delimiter: ',',\n newline: '\\r\\n',\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: false,\n nullString: null,\n },\n\n // From org.apache.commons.csv.CSVFormat#MYSQL\n MY_SQL_CSV: {\n name: 'MySQL csv',\n delimiter: '\\t',\n newline: '\\n',\n escapeChar: '\\\\',\n shouldTrim: true,\n skipEmptyLines: false,\n nullString: '\\\\N',\n },\n\n // From org.apache.commons.csv.CSVFormat#RFC4180\n RFC4180_CSV: {\n name: 'RFC4180 csv',\n delimiter: ',',\n newline: '\\r\\n',\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: false,\n nullString: null,\n },\n\n COLON_SV: {\n name: ': colon sv',\n delimiter: ':',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n SEMI_COLON_SV: {\n name: '; semi-colon sv',\n delimiter: ';',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n PIPE_SV: {\n name: '| pipe separated (psv)',\n delimiter: '|',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n SPACE_SV: {\n name: '\" \" space sv',\n delimiter: ' ',\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n\n AUTODETECT: {\n name: 'autodetect',\n delimiter: undefined, // autodetect\n newline: undefined, // autodetect\n escapeChar: '\"',\n shouldTrim: true,\n skipEmptyLines: true,\n nullString: '(null)',\n },\n });\n}\n\nexport default CsvFormats;\n"],"mappings":"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"}
|