@deephaven/console 0.46.1-beta.0 → 0.46.1-beta.4
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 +66 -59
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleInput.js +20 -16
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/ConsoleMenu.js +73 -67
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/ConsoleStatusBar.js +17 -10
- package/dist/ConsoleStatusBar.js.map +1 -1
- package/dist/HeapUsage.d.ts.map +1 -1
- package/dist/HeapUsage.js +118 -113
- package/dist/HeapUsage.js.map +1 -1
- package/dist/command-history/CommandHistory.js +43 -38
- package/dist/command-history/CommandHistory.js.map +1 -1
- package/dist/command-history/CommandHistoryActions.js +25 -22
- package/dist/command-history/CommandHistoryActions.js.map +1 -1
- package/dist/command-history/CommandHistoryItem.js +25 -21
- package/dist/command-history/CommandHistoryItem.js.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.js +34 -21
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
- package/dist/common/Code.js +16 -12
- package/dist/common/Code.js.map +1 -1
- package/dist/common/ObjectIcon.js +5 -4
- package/dist/common/ObjectIcon.js.map +1 -1
- package/dist/console-history/ConsoleHistory.js +7 -6
- package/dist/console-history/ConsoleHistory.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js +35 -28
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.js +12 -7
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js +41 -30
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultInProgress.js +15 -11
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
- package/dist/csv/CsvInputBar.js +80 -60
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.js +74 -50
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/log/LogLevelMenuItem.js +9 -6
- package/dist/log/LogLevelMenuItem.js.map +1 -1
- package/dist/log/LogView.js +51 -42
- package/dist/log/LogView.js.map +1 -1
- package/dist/notebook/Editor.js +2 -1
- package/dist/notebook/Editor.js.map +1 -1
- package/dist/notebook/ScriptEditor.js +27 -18
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/package.json +13 -12
package/dist/csv/CsvOverlay.js
CHANGED
|
@@ -8,6 +8,8 @@ import { Button, ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components'
|
|
|
8
8
|
import { dhFileCsv, dhFileDownload, dhFileSpreadsheet, vsClippy, vsFileZip, vsTrash, vsWarning } from '@deephaven/icons';
|
|
9
9
|
import "./CsvOverlay.css";
|
|
10
10
|
import { assertNotNull, TextUtils } from '@deephaven/utils';
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
13
|
var PASTED_VALUES = 'pasted values';
|
|
12
14
|
var INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];
|
|
13
15
|
var VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];
|
|
@@ -178,60 +180,82 @@ class CsvOverlay extends Component {
|
|
|
178
180
|
} = this.state;
|
|
179
181
|
var error = dragError !== null && dragError !== void 0 ? dragError : dropError;
|
|
180
182
|
var contextActions = this.makeContextMenuItems();
|
|
181
|
-
return /*#__PURE__*/
|
|
183
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
182
184
|
ref: this.divElem,
|
|
183
185
|
className: "csv-overlay fill-parent-absolute",
|
|
184
186
|
onDragOver: CsvOverlay.handleDragOver,
|
|
185
187
|
onDrop: this.handleDrop,
|
|
186
|
-
tabIndex: -1
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
188
|
+
tabIndex: -1,
|
|
189
|
+
children: [/*#__PURE__*/_jsx(ContextActions, {
|
|
190
|
+
actions: contextActions
|
|
191
|
+
}), /*#__PURE__*/_jsx("input", {
|
|
192
|
+
ref: this.fileElem,
|
|
193
|
+
type: "file",
|
|
194
|
+
id: "fileElem",
|
|
195
|
+
accept: this.getAcceptString(allowZip),
|
|
196
|
+
style: {
|
|
197
|
+
display: 'none'
|
|
198
|
+
},
|
|
199
|
+
onChange: this.handleFiles,
|
|
200
|
+
"data-testid": "fileElem"
|
|
201
|
+
}), !selectedFileName && (error === undefined || error === '') && /*#__PURE__*/_jsxs("div", {
|
|
202
|
+
className: "message-content",
|
|
203
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
204
|
+
className: "message-icon",
|
|
205
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
206
|
+
icon: dhFileDownload
|
|
207
|
+
})
|
|
208
|
+
}), /*#__PURE__*/_jsx("label", {
|
|
209
|
+
children: "Drop file (or paste values) here to import"
|
|
210
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
211
|
+
className: "message-small",
|
|
212
|
+
children: /*#__PURE__*/_jsx("label", {
|
|
213
|
+
children: "or"
|
|
214
|
+
})
|
|
215
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
216
|
+
kind: "primary",
|
|
217
|
+
onClick: this.handleSelectFile,
|
|
218
|
+
children: "Select File..."
|
|
219
|
+
})]
|
|
220
|
+
}), selectedFileName && (error === undefined || error === '') && /*#__PURE__*/_jsxs("div", {
|
|
221
|
+
className: "selected-content",
|
|
222
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
223
|
+
className: "selected-icon",
|
|
224
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
225
|
+
icon: CsvOverlay.getIcon(selectedFileName)
|
|
226
|
+
})
|
|
227
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
228
|
+
className: "selected-text",
|
|
229
|
+
children: [/*#__PURE__*/_jsx("label", {
|
|
230
|
+
children: "Selected File"
|
|
231
|
+
}), /*#__PURE__*/_jsxs("label", {
|
|
232
|
+
className: "selected-name",
|
|
233
|
+
children: [selectedFileName, !uploadInProgress && /*#__PURE__*/_jsx(Button, {
|
|
234
|
+
kind: "ghost",
|
|
235
|
+
className: "ml-2",
|
|
236
|
+
onClick: this.unstageFile,
|
|
237
|
+
icon: vsTrash,
|
|
238
|
+
tooltip: "Remove"
|
|
239
|
+
})]
|
|
240
|
+
})]
|
|
241
|
+
})]
|
|
242
|
+
}), Boolean(error) && /*#__PURE__*/_jsxs("div", {
|
|
243
|
+
className: "message-content",
|
|
244
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
245
|
+
className: "message-icon",
|
|
246
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
247
|
+
icon: vsWarning
|
|
248
|
+
})
|
|
249
|
+
}), /*#__PURE__*/_jsx("label", {
|
|
250
|
+
children: error
|
|
251
|
+
}), error === CsvOverlay.FILE_TYPE_ERROR && /*#__PURE__*/_jsx("div", {
|
|
252
|
+
className: "message-small",
|
|
253
|
+
children: /*#__PURE__*/_jsx("label", {
|
|
254
|
+
children: this.getFileTypeErrorString(allowZip)
|
|
255
|
+
})
|
|
256
|
+
})]
|
|
257
|
+
})]
|
|
258
|
+
});
|
|
235
259
|
}
|
|
236
260
|
}
|
|
237
261
|
_defineProperty(CsvOverlay, "defaultProps", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvOverlay.js","names":["React","Component","memoize","FontAwesomeIcon","Button","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","files","target","handleFile","clearDragError","dragError","dataTransfer","items","length","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","undefined","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","Boolean","getFileTypeErrorString"],"sources":["../../src/csv/CsvOverlay.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n DragEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n IconDefinition,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { assertNotNull, TextUtils } from '@deephaven/utils';\n\ninterface CsvOverlayProps {\n allowZip: boolean;\n onFileOpened: (file: File) => void;\n onCancel: () => void;\n onPaste: (clipText: string) => void;\n clearDragError: () => void;\n dragError: string | null;\n onError: (e: unknown) => void;\n uploadInProgress: boolean;\n}\n\ninterface CsvOverlayState {\n selectedFileName: string;\n dropError?: string;\n}\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\nconst VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];\n\nconst ZIP_EXTENSIONS = ['.zip'];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component<CsvOverlayProps, CsvOverlayState> {\n static defaultProps = {\n allowZip: false,\n dragError: null,\n };\n\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item: DataTransferItem): boolean {\n return (\n item != null &&\n item.kind === 'file' &&\n !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type))\n );\n }\n\n static isValidExtension(name: string, allowZip = false): boolean {\n return (\n VALID_EXTENSIONS.some(ext => name.endsWith(ext)) ||\n (allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext)))\n );\n }\n\n static handleDragOver(e: DragEvent): void {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName: string): IconDefinition {\n if (fileName === PASTED_VALUES) {\n return vsClippy;\n }\n if (fileName.endsWith('.csv')) {\n return dhFileCsv;\n }\n if (fileName.endsWith('.zip')) {\n return vsFileZip;\n }\n return dhFileSpreadsheet;\n }\n\n constructor(props: CsvOverlayProps) {\n super(props);\n\n this.handleSelectFile = this.handleSelectFile.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.unstageFile = this.unstageFile.bind(this);\n this.handleMenuPaste = this.handleMenuPaste.bind(this);\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n\n this.fileElem = React.createRef();\n this.divElem = React.createRef();\n\n this.state = {\n selectedFileName: '',\n };\n }\n\n componentDidMount(): void {\n this.divElem.current?.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current?.focus();\n }\n\n componentWillUnmount(): void {\n this.divElem.current?.removeEventListener('paste', this.handlePasteEvent);\n }\n\n fileElem: RefObject<HTMLInputElement>;\n\n divElem: RefObject<HTMLDivElement>;\n\n handleSelectFile(): void {\n if (this.fileElem.current) {\n this.fileElem.current.value = '';\n this.fileElem.current?.click();\n }\n }\n\n handleFiles(event: ChangeEvent<HTMLInputElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { files } = event.target;\n if (files != null) {\n this.handleFile(files[0]);\n }\n }\n\n handleDrop(e: DragEvent<HTMLDivElement>): void {\n const { allowZip, clearDragError, dragError } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (dragError != null) {\n clearDragError();\n return;\n }\n\n if (\n e.dataTransfer == null ||\n e.dataTransfer.items == null ||\n e.dataTransfer.items.length === 0\n ) {\n return;\n }\n\n const file = e.dataTransfer.items[0].getAsFile();\n assertNotNull(file);\n if (CsvOverlay.isValidExtension(file.name, allowZip)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event: MouseEvent<HTMLButtonElement>): void {\n const { onCancel } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onCancel();\n this.setState({\n selectedFileName: '',\n dropError: undefined,\n });\n }\n\n handleFile(file: File): void {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: undefined,\n });\n }\n\n handleMenuPaste(): void {\n const { onPaste, onError, uploadInProgress } = this.props;\n if (uploadInProgress) {\n return;\n }\n navigator.clipboard\n .readText()\n .then(clipText => {\n onPaste(clipText);\n this.setState({\n selectedFileName: PASTED_VALUES,\n dropError: undefined,\n });\n })\n .catch((e: unknown) => onError(e));\n }\n\n handlePasteEvent(event: ClipboardEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems(): ContextAction[] {\n const { uploadInProgress } = this.props;\n return [\n {\n title: 'Paste',\n icon: vsClippy,\n action: this.handleMenuPaste,\n shortcut: GLOBAL_SHORTCUTS.PASTE,\n disabled: uploadInProgress,\n },\n ];\n }\n\n getValidExtensions = memoize((allowZip: boolean) =>\n allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]\n );\n\n getAcceptString = memoize((allowZip: boolean) =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize((allowZip: boolean) =>\n TextUtils.join(this.getValidExtensions(allowZip), 'or')\n );\n\n render(): ReactElement {\n const { allowZip, dragError, uploadInProgress } = this.props;\n const { selectedFileName, dropError } = this.state;\n const error = dragError ?? dropError;\n const contextActions = this.makeContextMenuItems();\n return (\n <div\n ref={this.divElem}\n className=\"csv-overlay fill-parent-absolute\"\n onDragOver={CsvOverlay.handleDragOver}\n onDrop={this.handleDrop}\n tabIndex={-1}\n >\n <ContextActions actions={contextActions} />\n <input\n ref={this.fileElem}\n type=\"file\"\n id=\"fileElem\"\n accept={this.getAcceptString(allowZip)}\n style={{ display: 'none' }}\n onChange={this.handleFiles}\n data-testid=\"fileElem\"\n />\n {!selectedFileName && (error === undefined || error === '') && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={dhFileDownload} />\n </div>\n <label>Drop file (or paste values) here to import</label>\n <div className=\"message-small\">\n <label>or</label>\n </div>\n <Button kind=\"primary\" onClick={this.handleSelectFile}>\n Select File...\n </Button>\n </div>\n )}\n {selectedFileName && (error === undefined || error === '') && (\n <div className=\"selected-content\">\n <div className=\"selected-icon\">\n <FontAwesomeIcon icon={CsvOverlay.getIcon(selectedFileName)} />\n </div>\n <div className=\"selected-text\">\n <label>Selected File</label>\n <label className=\"selected-name\">\n {selectedFileName}\n {!uploadInProgress && (\n <Button\n kind=\"ghost\"\n className=\"ml-2\"\n onClick={this.unstageFile}\n icon={vsTrash}\n tooltip=\"Remove\"\n />\n )}\n </label>\n </div>\n </div>\n )}\n {Boolean(error) && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={vsWarning} />\n </div>\n <label>{error}</label>\n {error === CsvOverlay.FILE_TYPE_ERROR && (\n <div className=\"message-small\">\n <label>{this.getFileTypeErrorString(allowZip)}</label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvOverlay;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CsvOverlay.js","names":["React","Component","memoize","FontAwesomeIcon","Button","ContextActions","GLOBAL_SHORTCUTS","dhFileCsv","dhFileDownload","dhFileSpreadsheet","vsClippy","vsFileZip","vsTrash","vsWarning","assertNotNull","TextUtils","PASTED_VALUES","INVALID_MIME_TYPES","VALID_EXTENSIONS","ZIP_EXTENSIONS","CsvOverlay","isValidDropItem","item","kind","find","invalid","test","type","isValidExtension","name","allowZip","some","ext","endsWith","handleDragOver","e","preventDefault","stopPropagation","getIcon","fileName","constructor","props","getValidExtensions","join","handleSelectFile","bind","handleFiles","handleDrop","unstageFile","handleMenuPaste","handlePasteEvent","fileElem","createRef","divElem","state","selectedFileName","componentDidMount","current","addEventListener","focus","componentWillUnmount","removeEventListener","value","click","event","files","target","handleFile","clearDragError","dragError","dataTransfer","items","length","file","getAsFile","setState","dropError","FILE_TYPE_ERROR","onCancel","undefined","onFileOpened","onPaste","onError","uploadInProgress","navigator","clipboard","readText","then","clipText","catch","makeContextMenuItems","title","icon","action","shortcut","PASTE","disabled","render","error","contextActions","getAcceptString","display","Boolean","getFileTypeErrorString"],"sources":["../../src/csv/CsvOverlay.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n DragEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n ContextAction,\n ContextActions,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport {\n dhFileCsv,\n dhFileDownload,\n dhFileSpreadsheet,\n IconDefinition,\n vsClippy,\n vsFileZip,\n vsTrash,\n vsWarning,\n} from '@deephaven/icons';\nimport './CsvOverlay.scss';\nimport { assertNotNull, TextUtils } from '@deephaven/utils';\n\ninterface CsvOverlayProps {\n allowZip: boolean;\n onFileOpened: (file: File) => void;\n onCancel: () => void;\n onPaste: (clipText: string) => void;\n clearDragError: () => void;\n dragError: string | null;\n onError: (e: unknown) => void;\n uploadInProgress: boolean;\n}\n\ninterface CsvOverlayState {\n selectedFileName: string;\n dropError?: string;\n}\n\nconst PASTED_VALUES = 'pasted values';\n\nconst INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];\n\nconst VALID_EXTENSIONS = ['.csv', '.tsv', '.tab', '.psv', '.dsv', '.txt'];\n\nconst ZIP_EXTENSIONS = ['.zip'];\n\n/**\n * Overlay that is displayed when uploading a CSV file.\n */\nclass CsvOverlay extends Component<CsvOverlayProps, CsvOverlayState> {\n static defaultProps = {\n allowZip: false,\n dragError: null,\n };\n\n static MULTIPLE_FILE_ERROR = 'Please select only one file';\n\n static FILE_TYPE_ERROR = 'Filetype not supported.';\n\n static isValidDropItem(item: DataTransferItem): boolean {\n return (\n item != null &&\n item.kind === 'file' &&\n !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type))\n );\n }\n\n static isValidExtension(name: string, allowZip = false): boolean {\n return (\n VALID_EXTENSIONS.some(ext => name.endsWith(ext)) ||\n (allowZip && ZIP_EXTENSIONS.some(ext => name.endsWith(ext)))\n );\n }\n\n static handleDragOver(e: DragEvent): void {\n e.preventDefault();\n e.stopPropagation();\n }\n\n static getIcon(fileName: string): IconDefinition {\n if (fileName === PASTED_VALUES) {\n return vsClippy;\n }\n if (fileName.endsWith('.csv')) {\n return dhFileCsv;\n }\n if (fileName.endsWith('.zip')) {\n return vsFileZip;\n }\n return dhFileSpreadsheet;\n }\n\n constructor(props: CsvOverlayProps) {\n super(props);\n\n this.handleSelectFile = this.handleSelectFile.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.unstageFile = this.unstageFile.bind(this);\n this.handleMenuPaste = this.handleMenuPaste.bind(this);\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n\n this.fileElem = React.createRef();\n this.divElem = React.createRef();\n\n this.state = {\n selectedFileName: '',\n };\n }\n\n componentDidMount(): void {\n this.divElem.current?.addEventListener('paste', this.handlePasteEvent);\n this.divElem.current?.focus();\n }\n\n componentWillUnmount(): void {\n this.divElem.current?.removeEventListener('paste', this.handlePasteEvent);\n }\n\n fileElem: RefObject<HTMLInputElement>;\n\n divElem: RefObject<HTMLDivElement>;\n\n handleSelectFile(): void {\n if (this.fileElem.current) {\n this.fileElem.current.value = '';\n this.fileElem.current?.click();\n }\n }\n\n handleFiles(event: ChangeEvent<HTMLInputElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { files } = event.target;\n if (files != null) {\n this.handleFile(files[0]);\n }\n }\n\n handleDrop(e: DragEvent<HTMLDivElement>): void {\n const { allowZip, clearDragError, dragError } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (dragError != null) {\n clearDragError();\n return;\n }\n\n if (\n e.dataTransfer == null ||\n e.dataTransfer.items == null ||\n e.dataTransfer.items.length === 0\n ) {\n return;\n }\n\n const file = e.dataTransfer.items[0].getAsFile();\n assertNotNull(file);\n if (CsvOverlay.isValidExtension(file.name, allowZip)) {\n this.handleFile(file);\n } else {\n this.setState({\n dropError: CsvOverlay.FILE_TYPE_ERROR,\n });\n }\n }\n\n unstageFile(event: MouseEvent<HTMLButtonElement>): void {\n const { onCancel } = this.props;\n event.stopPropagation();\n event.preventDefault();\n onCancel();\n this.setState({\n selectedFileName: '',\n dropError: undefined,\n });\n }\n\n handleFile(file: File): void {\n const { onFileOpened } = this.props;\n onFileOpened(file);\n this.setState({\n selectedFileName: file.name,\n dropError: undefined,\n });\n }\n\n handleMenuPaste(): void {\n const { onPaste, onError, uploadInProgress } = this.props;\n if (uploadInProgress) {\n return;\n }\n navigator.clipboard\n .readText()\n .then(clipText => {\n onPaste(clipText);\n this.setState({\n selectedFileName: PASTED_VALUES,\n dropError: undefined,\n });\n })\n .catch((e: unknown) => onError(e));\n }\n\n handlePasteEvent(event: ClipboardEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.handleMenuPaste();\n }\n\n makeContextMenuItems(): ContextAction[] {\n const { uploadInProgress } = this.props;\n return [\n {\n title: 'Paste',\n icon: vsClippy,\n action: this.handleMenuPaste,\n shortcut: GLOBAL_SHORTCUTS.PASTE,\n disabled: uploadInProgress,\n },\n ];\n }\n\n getValidExtensions = memoize((allowZip: boolean) =>\n allowZip ? [...VALID_EXTENSIONS, ...ZIP_EXTENSIONS] : [...VALID_EXTENSIONS]\n );\n\n getAcceptString = memoize((allowZip: boolean) =>\n this.getValidExtensions(allowZip).join(', ')\n );\n\n getFileTypeErrorString = memoize((allowZip: boolean) =>\n TextUtils.join(this.getValidExtensions(allowZip), 'or')\n );\n\n render(): ReactElement {\n const { allowZip, dragError, uploadInProgress } = this.props;\n const { selectedFileName, dropError } = this.state;\n const error = dragError ?? dropError;\n const contextActions = this.makeContextMenuItems();\n return (\n <div\n ref={this.divElem}\n className=\"csv-overlay fill-parent-absolute\"\n onDragOver={CsvOverlay.handleDragOver}\n onDrop={this.handleDrop}\n tabIndex={-1}\n >\n <ContextActions actions={contextActions} />\n <input\n ref={this.fileElem}\n type=\"file\"\n id=\"fileElem\"\n accept={this.getAcceptString(allowZip)}\n style={{ display: 'none' }}\n onChange={this.handleFiles}\n data-testid=\"fileElem\"\n />\n {!selectedFileName && (error === undefined || error === '') && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={dhFileDownload} />\n </div>\n <label>Drop file (or paste values) here to import</label>\n <div className=\"message-small\">\n <label>or</label>\n </div>\n <Button kind=\"primary\" onClick={this.handleSelectFile}>\n Select File...\n </Button>\n </div>\n )}\n {selectedFileName && (error === undefined || error === '') && (\n <div className=\"selected-content\">\n <div className=\"selected-icon\">\n <FontAwesomeIcon icon={CsvOverlay.getIcon(selectedFileName)} />\n </div>\n <div className=\"selected-text\">\n <label>Selected File</label>\n <label className=\"selected-name\">\n {selectedFileName}\n {!uploadInProgress && (\n <Button\n kind=\"ghost\"\n className=\"ml-2\"\n onClick={this.unstageFile}\n icon={vsTrash}\n tooltip=\"Remove\"\n />\n )}\n </label>\n </div>\n </div>\n )}\n {Boolean(error) && (\n <div className=\"message-content\">\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={vsWarning} />\n </div>\n <label>{error}</label>\n {error === CsvOverlay.FILE_TYPE_ERROR && (\n <div className=\"message-small\">\n <label>{this.getFileTypeErrorString(allowZip)}</label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CsvOverlay;\n"],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ import React, { PureComponent } from 'react';
|
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
import { UISwitch } from '@deephaven/components';
|
|
5
5
|
import "./LogLevelMenuItem.css";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
8
|
class LogLevelMenuItem extends PureComponent {
|
|
7
9
|
constructor(props) {
|
|
8
10
|
super(props);
|
|
@@ -20,12 +22,13 @@ class LogLevelMenuItem extends PureComponent {
|
|
|
20
22
|
logLevel,
|
|
21
23
|
on
|
|
22
24
|
} = this.props;
|
|
23
|
-
return /*#__PURE__*/
|
|
24
|
-
className: classNames('log-level-menu-item', logLevel)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
26
|
+
className: classNames('log-level-menu-item', logLevel),
|
|
27
|
+
children: [/*#__PURE__*/_jsx(UISwitch, {
|
|
28
|
+
on: on,
|
|
29
|
+
onClick: this.handleSwitchClick
|
|
30
|
+
}), logLevel]
|
|
31
|
+
});
|
|
29
32
|
}
|
|
30
33
|
}
|
|
31
34
|
export default LogLevelMenuItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogLevelMenuItem.js","names":["React","PureComponent","classNames","UISwitch","LogLevelMenuItem","constructor","props","handleSwitchClick","bind","logLevel","onClick","render","on"],"sources":["../../src/log/LogLevelMenuItem.tsx"],"sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { UISwitch } from '@deephaven/components';\nimport './LogLevelMenuItem.scss';\n\ninterface LogLevelMenuItemProps {\n logLevel: string;\n on: boolean;\n onClick: (logLevel: string) => void;\n}\n\nclass LogLevelMenuItem extends PureComponent<\n LogLevelMenuItemProps,\n Record<string, never>\n> {\n constructor(props: LogLevelMenuItemProps) {\n super(props);\n\n this.handleSwitchClick = this.handleSwitchClick.bind(this);\n }\n\n handleSwitchClick(): void {\n const { logLevel, onClick } = this.props;\n onClick(logLevel);\n }\n\n render(): ReactElement {\n const { logLevel, on } = this.props;\n return (\n <div className={classNames('log-level-menu-item', logLevel)}>\n <UISwitch on={on} onClick={this.handleSwitchClick} />\n {logLevel}\n </div>\n );\n }\n}\n\nexport default LogLevelMenuItem;\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,IAAIC,aAAa,QAAsB,OAAO;AAC1D,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,QAAQ,QAAQ,uBAAuB;AAAC;AASjD,MAAMC,gBAAgB,SAASH,aAAa,CAG1C;EACAI,WAAW,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC;EAC5D;EAEAD,iBAAiB,GAAS;IACxB,IAAM;MAAEE,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IACxCI,OAAO,CAACD,QAAQ,CAAC;EACnB;EAEAE,MAAM,GAAiB;IACrB,IAAM;MAAEF,QAAQ;MAAEG;IAAG,CAAC,GAAG,IAAI,CAACN,KAAK;IACnC,oBACE;MAAK,SAAS,EAAEJ,UAAU,CAAC,qBAAqB,EAAEO,QAAQ;
|
|
1
|
+
{"version":3,"file":"LogLevelMenuItem.js","names":["React","PureComponent","classNames","UISwitch","LogLevelMenuItem","constructor","props","handleSwitchClick","bind","logLevel","onClick","render","on"],"sources":["../../src/log/LogLevelMenuItem.tsx"],"sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { UISwitch } from '@deephaven/components';\nimport './LogLevelMenuItem.scss';\n\ninterface LogLevelMenuItemProps {\n logLevel: string;\n on: boolean;\n onClick: (logLevel: string) => void;\n}\n\nclass LogLevelMenuItem extends PureComponent<\n LogLevelMenuItemProps,\n Record<string, never>\n> {\n constructor(props: LogLevelMenuItemProps) {\n super(props);\n\n this.handleSwitchClick = this.handleSwitchClick.bind(this);\n }\n\n handleSwitchClick(): void {\n const { logLevel, onClick } = this.props;\n onClick(logLevel);\n }\n\n render(): ReactElement {\n const { logLevel, on } = this.props;\n return (\n <div className={classNames('log-level-menu-item', logLevel)}>\n <UISwitch on={on} onClick={this.handleSwitchClick} />\n {logLevel}\n </div>\n );\n }\n}\n\nexport default LogLevelMenuItem;\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,IAAIC,aAAa,QAAsB,OAAO;AAC1D,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,QAAQ,QAAQ,uBAAuB;AAAC;AAAA;AAAA;AASjD,MAAMC,gBAAgB,SAASH,aAAa,CAG1C;EACAI,WAAW,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC;EAC5D;EAEAD,iBAAiB,GAAS;IACxB,IAAM;MAAEE,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IACxCI,OAAO,CAACD,QAAQ,CAAC;EACnB;EAEAE,MAAM,GAAiB;IACrB,IAAM;MAAEF,QAAQ;MAAEG;IAAG,CAAC,GAAG,IAAI,CAACN,KAAK;IACnC,oBACE;MAAK,SAAS,EAAEJ,UAAU,CAAC,qBAAqB,EAAEO,QAAQ,CAAE;MAAA,wBAC1D,KAAC,QAAQ;QAAC,EAAE,EAAEG,EAAG;QAAC,OAAO,EAAE,IAAI,CAACL;MAAkB,EAAG,EACpDE,QAAQ;IAAA,EACL;EAEV;AACF;AAEA,eAAeL,gBAAgB"}
|
package/dist/log/LogView.js
CHANGED
|
@@ -13,6 +13,8 @@ import LogLevel from "./LogLevel.js";
|
|
|
13
13
|
import "./LogView.css";
|
|
14
14
|
import LogLevelMenuItem from "./LogLevelMenuItem.js";
|
|
15
15
|
import { MonacoUtils } from "../monaco/index.js";
|
|
16
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
17
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
18
|
/**
|
|
17
19
|
* Log view contents. Uses a monaco editor to display/search the contents of the log.
|
|
18
20
|
*/
|
|
@@ -84,9 +86,10 @@ class LogView extends PureComponent {
|
|
|
84
86
|
var _this = this;
|
|
85
87
|
var actions = [];
|
|
86
88
|
actions.push({
|
|
87
|
-
menuElement: /*#__PURE__*/
|
|
88
|
-
className: "log-level-menu-title"
|
|
89
|
-
|
|
89
|
+
menuElement: /*#__PURE__*/_jsx("div", {
|
|
90
|
+
className: "log-level-menu-title",
|
|
91
|
+
children: "Display Log Levels"
|
|
92
|
+
}),
|
|
90
93
|
group: 1,
|
|
91
94
|
order: 10
|
|
92
95
|
});
|
|
@@ -97,7 +100,7 @@ class LogView extends PureComponent {
|
|
|
97
100
|
title: logLevel,
|
|
98
101
|
group: 1,
|
|
99
102
|
order: i + 100,
|
|
100
|
-
menuElement: /*#__PURE__*/
|
|
103
|
+
menuElement: /*#__PURE__*/_jsx(LogLevelMenuItem, {
|
|
101
104
|
logLevel: logLevel,
|
|
102
105
|
on: on,
|
|
103
106
|
onClick: _this.handleMenuItemClick,
|
|
@@ -115,16 +118,19 @@ class LogView extends PureComponent {
|
|
|
115
118
|
actions.push({
|
|
116
119
|
group: 1,
|
|
117
120
|
order: 1000,
|
|
118
|
-
menuElement: /*#__PURE__*/
|
|
119
|
-
className: "log-level-menu-controls"
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
menuElement: /*#__PURE__*/_jsxs("div", {
|
|
122
|
+
className: "log-level-menu-controls",
|
|
123
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
124
|
+
kind: "ghost",
|
|
125
|
+
className: "log-level-toggle-all",
|
|
126
|
+
onClick: this.handleToggleAllClick,
|
|
127
|
+
children: "Toggle All"
|
|
128
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
129
|
+
kind: "ghost",
|
|
130
|
+
onClick: this.handleResetClick,
|
|
131
|
+
children: "Reset"
|
|
132
|
+
})]
|
|
133
|
+
})
|
|
128
134
|
});
|
|
129
135
|
return actions;
|
|
130
136
|
}
|
|
@@ -450,34 +456,37 @@ class LogView extends PureComponent {
|
|
|
450
456
|
shownLogLevels
|
|
451
457
|
} = this.state;
|
|
452
458
|
var actions = this.getMenuActions(shownLogLevels);
|
|
453
|
-
return /*#__PURE__*/
|
|
454
|
-
className: "log-pane h-100 w-100"
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
459
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
460
|
+
className: "log-pane h-100 w-100",
|
|
461
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
462
|
+
className: "log-pane-menu",
|
|
463
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
464
|
+
kind: "ghost",
|
|
465
|
+
className: "btn-clear-logs",
|
|
466
|
+
onClick: this.handleClearClick,
|
|
467
|
+
icon: dhTrashUndo,
|
|
468
|
+
tooltip: "Clear log"
|
|
469
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
470
|
+
kind: "ghost",
|
|
471
|
+
className: "btn-link-icon btn-overflow",
|
|
472
|
+
icon: vsGear,
|
|
473
|
+
tooltip: "Log Settings",
|
|
474
|
+
onClick: () => {
|
|
475
|
+
// no-op: click is handled in `DropdownMenu'
|
|
476
|
+
},
|
|
477
|
+
children: /*#__PURE__*/_jsx(DropdownMenu, {
|
|
478
|
+
actions: actions,
|
|
479
|
+
popperClassName: "log-level-menu-popper",
|
|
480
|
+
popperOptions: popperOptions
|
|
481
|
+
})
|
|
482
|
+
})]
|
|
483
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
484
|
+
className: "log-pane-editor h-100 w-100",
|
|
485
|
+
ref: editorContainer => {
|
|
486
|
+
this.editorContainer = editorContainer;
|
|
487
|
+
}
|
|
488
|
+
})]
|
|
489
|
+
});
|
|
481
490
|
}
|
|
482
491
|
}
|
|
483
492
|
_defineProperty(LogView, "DefaultLogLevels", [LogLevel.STDOUT, LogLevel.ERROR, LogLevel.FATAL, LogLevel.STDERR, LogLevel.WARN]);
|
package/dist/log/LogView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","MonacoUtils","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","AllLogLevels","i","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","KeyCode","Escape","KeyMod","Shift","forEach","keybindings","disableKeyBindings","addAction","id","label","keybindingContext","run","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { IdeSession, LogItem } from '@deephaven/jsapi-types';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\nimport { MonacoUtils } from '../monaco';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // Override default Monaco keybindings for `escape` and `shift-escape`\n [\n [monaco.KeyCode.Escape],\n [monaco.KeyMod.Shift | monaco.KeyCode.Escape], // eslint-disable-line no-bitwise\n ].forEach(keybindings => {\n assertNotNull(this.editor);\n\n // Monaco default behavior is for escape key to close the find widget.\n // Instead, capture it and do nothing. Same for shift-escape.\n MonacoUtils.disableKeyBindings(this.editor, keybindings);\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addAction({\n id: 'clear-selection-on-escape',\n label: '',\n keybindings: [monaco.KeyCode.Escape],\n keybindingContext: 'findWidgetVisible && editorTextFocus',\n run: () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n });\n });\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","MonacoUtils","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","AllLogLevels","i","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","KeyCode","Escape","KeyMod","Shift","forEach","keybindings","disableKeyBindings","addAction","id","label","keybindingContext","run","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { IdeSession, LogItem } from '@deephaven/jsapi-types';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\nimport { MonacoUtils } from '../monaco';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // Override default Monaco keybindings for `escape` and `shift-escape`\n [\n [monaco.KeyCode.Escape],\n [monaco.KeyMod.Shift | monaco.KeyCode.Escape], // eslint-disable-line no-bitwise\n ].forEach(keybindings => {\n assertNotNull(this.editor);\n\n // Monaco default behavior is for escape key to close the find widget.\n // Instead, capture it and do nothing. Same for shift-escape.\n MonacoUtils.disableKeyBindings(this.editor, keybindings);\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addAction({\n id: 'clear-selection-on-escape',\n label: '',\n keybindings: [monaco.KeyCode.Escape],\n keybindingContext: 'findWidgetVisible && editorTextFocus',\n run: () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n });\n });\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
|
package/dist/notebook/Editor.js
CHANGED
|
@@ -12,6 +12,7 @@ import * as monaco from 'monaco-editor';
|
|
|
12
12
|
import { assertNotNull } from '@deephaven/utils';
|
|
13
13
|
import MonacoUtils from "../monaco/MonacoUtils.js";
|
|
14
14
|
import "./Editor.css";
|
|
15
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
16
|
class Editor extends Component {
|
|
16
17
|
constructor(props) {
|
|
17
18
|
super(props);
|
|
@@ -111,7 +112,7 @@ class Editor extends Component {
|
|
|
111
112
|
var {
|
|
112
113
|
className
|
|
113
114
|
} = this.props;
|
|
114
|
-
return /*#__PURE__*/
|
|
115
|
+
return /*#__PURE__*/_jsx("div", {
|
|
115
116
|
className: classNames('editor-container', className),
|
|
116
117
|
ref: container => {
|
|
117
118
|
this.container = container;
|