@deephaven/console 0.9.1-beta.0 → 0.9.1-beta.2
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/ConsoleInput.d.ts +8 -3
- package/dist/ConsoleInput.d.ts.map +1 -1
- package/dist/ConsoleInput.js +27 -16
- package/dist/ConsoleInput.js.map +1 -1
- package/package.json +10 -10
package/dist/ConsoleInput.d.ts
CHANGED
|
@@ -8,13 +8,13 @@ export class ConsoleInput extends React.PureComponent<any, any, any> {
|
|
|
8
8
|
cancelListener: any;
|
|
9
9
|
commandContainer: React.RefObject<any>;
|
|
10
10
|
commandEditor: monaco.editor.IStandaloneCodeEditor | null;
|
|
11
|
-
commandHistoryIndex:
|
|
11
|
+
commandHistoryIndex: number | null;
|
|
12
12
|
commandSuggestionContainer: Element | null;
|
|
13
|
-
isCommandModified: boolean;
|
|
14
13
|
loadingPromise: any;
|
|
15
14
|
timestamp: number;
|
|
16
15
|
bufferIndex: number;
|
|
17
16
|
history: any[];
|
|
17
|
+
modifiedCommands: Map<any, any>;
|
|
18
18
|
/**
|
|
19
19
|
* Sets the console text from an external source.
|
|
20
20
|
* Sets commandHistoryIndex to null since the source is not part of the history
|
|
@@ -33,7 +33,12 @@ export class ConsoleInput extends React.PureComponent<any, any, any> {
|
|
|
33
33
|
focusEnd(): void;
|
|
34
34
|
clear(): void;
|
|
35
35
|
layoutEditor(): void;
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Loads the given command from history
|
|
38
|
+
* If edits have been made to the command since last run command, loads the modified version
|
|
39
|
+
* @param {number | null} index The index to load. Null to load command started in the editor and not in the history
|
|
40
|
+
*/
|
|
41
|
+
loadCommand(index: number | null): void;
|
|
37
42
|
loadMoreHistory(): Promise<void>;
|
|
38
43
|
processCommand(): void;
|
|
39
44
|
updateDimensions(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleInput.d.ts","sourceRoot":"","sources":["../src/ConsoleInput.jsx"],"names":[],"mappings":"AAkBA;;GAEG;AACH;IACE,gCAA0C;IAE1C,
|
|
1
|
+
{"version":3,"file":"ConsoleInput.d.ts","sourceRoot":"","sources":["../src/ConsoleInput.jsx"],"names":[],"mappings":"AAkBA;;GAEG;AACH;IACE,gCAA0C;IAE1C,wBAsBC;IAyMD,2BAEC;IA5NC,oBAA0B;IAC1B,uCAAyC;IACzC,0DAAyB;IACzB,mCAA+B;IAC/B,2CAAsC;IACtC,oBAA0B;IAC1B,kBAA2B;IAC3B,oBAAoB;IACpB,eAAiB;IAEjB,gCAAiC;IA+BnC;;;;;;;OAOG;IACH,qBALW,MAAM,UACN,OAAO,YACP,OAAO,QAwBjB;IAED,0BAuIC;IAED,6BAOC;IAMD,yCAWC;IAED,4CAMC;IAED,cAEC;IAED,mBAOC;IAED,iBAQC;IAED,cAIC;IAED,qBAIC;IAED;;;;OAIG;IACH,mBAFW,MAAM,GAAG,IAAI,QAevB;IAED,iCA+CC;IAED,uBAWC;IAED,yBA8BC;CA4BF"}
|
package/dist/ConsoleInput.js
CHANGED
|
@@ -32,11 +32,12 @@ export class ConsoleInput extends PureComponent {
|
|
|
32
32
|
this.commandEditor = null;
|
|
33
33
|
this.commandHistoryIndex = null;
|
|
34
34
|
this.commandSuggestionContainer = null;
|
|
35
|
-
this.isCommandModified = false;
|
|
36
35
|
this.loadingPromise = null;
|
|
37
36
|
this.timestamp = Date.now();
|
|
38
37
|
this.bufferIndex = 0;
|
|
39
|
-
this.history = [];
|
|
38
|
+
this.history = []; // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed
|
|
39
|
+
|
|
40
|
+
this.modifiedCommands = new Map();
|
|
40
41
|
this.state = {
|
|
41
42
|
commandEditorHeight: LINE_HEIGHT,
|
|
42
43
|
isFocused: false,
|
|
@@ -81,9 +82,11 @@ export class ConsoleInput extends PureComponent {
|
|
|
81
82
|
return;
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
log.debug('Command received: ', text);
|
|
85
|
-
|
|
85
|
+
log.debug('Command received: ', text); // Need to set commandHistoryIndex before value
|
|
86
|
+
// On value change, modified commands map updates
|
|
87
|
+
|
|
86
88
|
this.commandHistoryIndex = null;
|
|
89
|
+
this.commandEditor.setValue(text);
|
|
87
90
|
|
|
88
91
|
if (focus) {
|
|
89
92
|
this.focusEnd();
|
|
@@ -134,7 +137,7 @@ export class ConsoleInput extends PureComponent {
|
|
|
134
137
|
MonacoUtils.setEOL(this.commandEditor);
|
|
135
138
|
MonacoUtils.openDocument(this.commandEditor, session);
|
|
136
139
|
this.commandEditor.onDidChangeModelContent(() => {
|
|
137
|
-
this.
|
|
140
|
+
this.modifiedCommands.set(this.commandHistoryIndex, this.commandEditor.getValue());
|
|
138
141
|
this.updateDimensions();
|
|
139
142
|
});
|
|
140
143
|
this.commandEditor.onDidFocusEditorText(() => {
|
|
@@ -166,7 +169,7 @@ export class ConsoleInput extends PureComponent {
|
|
|
166
169
|
if (keyEvent.keyCode === monaco.KeyCode.UpArrow && lineNumber === 1) {
|
|
167
170
|
if (commandHistoryIndex != null) {
|
|
168
171
|
this.loadCommand(commandHistoryIndex + 1);
|
|
169
|
-
} else
|
|
172
|
+
} else {
|
|
170
173
|
this.loadCommand(0);
|
|
171
174
|
}
|
|
172
175
|
|
|
@@ -177,10 +180,10 @@ export class ConsoleInput extends PureComponent {
|
|
|
177
180
|
}
|
|
178
181
|
|
|
179
182
|
if (keyEvent.keyCode === monaco.KeyCode.DownArrow && lineNumber === model.getLineCount()) {
|
|
180
|
-
if (commandHistoryIndex != null && commandHistoryIndex
|
|
183
|
+
if (commandHistoryIndex != null && commandHistoryIndex > 0) {
|
|
181
184
|
this.loadCommand(commandHistoryIndex - 1);
|
|
182
185
|
} else {
|
|
183
|
-
this.
|
|
186
|
+
this.loadCommand(null);
|
|
184
187
|
}
|
|
185
188
|
|
|
186
189
|
this.focusEnd();
|
|
@@ -289,21 +292,29 @@ export class ConsoleInput extends PureComponent {
|
|
|
289
292
|
this.commandEditor.layout();
|
|
290
293
|
}
|
|
291
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Loads the given command from history
|
|
297
|
+
* If edits have been made to the command since last run command, loads the modified version
|
|
298
|
+
* @param {number | null} index The index to load. Null to load command started in the editor and not in the history
|
|
299
|
+
*/
|
|
300
|
+
|
|
292
301
|
|
|
293
302
|
loadCommand(index) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
this.
|
|
303
|
+
var _this$modifiedCommand;
|
|
304
|
+
|
|
305
|
+
var value = '';
|
|
306
|
+
|
|
307
|
+
if (index !== null && index < this.history.length) {
|
|
308
|
+
value = this.history[this.history.length - index - 1];
|
|
300
309
|
|
|
301
310
|
if (index > this.history.length - BUFFER_SIZE) {
|
|
302
311
|
this.loadMoreHistory();
|
|
303
312
|
}
|
|
304
313
|
}
|
|
305
314
|
|
|
306
|
-
this.
|
|
315
|
+
this.commandHistoryIndex = index;
|
|
316
|
+
value = (_this$modifiedCommand = this.modifiedCommands.get(index)) !== null && _this$modifiedCommand !== void 0 ? _this$modifiedCommand : value;
|
|
317
|
+
this.commandEditor.getModel().setValue(value);
|
|
307
318
|
}
|
|
308
319
|
|
|
309
320
|
loadMoreHistory() {
|
|
@@ -358,8 +369,8 @@ export class ConsoleInput extends PureComponent {
|
|
|
358
369
|
}
|
|
359
370
|
|
|
360
371
|
processCommand() {
|
|
361
|
-
this.isCommandModified = false;
|
|
362
372
|
this.commandHistoryIndex = null;
|
|
373
|
+
this.modifiedCommands.clear();
|
|
363
374
|
var command = this.commandEditor.getValue().trim();
|
|
364
375
|
this.history.push(command);
|
|
365
376
|
this.commandEditor.setValue('');
|
package/dist/ConsoleInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ConsoleInput.jsx"],"names":["React","PureComponent","PropTypes","classNames","monaco","Log","PromiseUtils","MonacoCompletionProvider","MonacoTheme","MonacoUtils","StoragePropTypes","log","module","LINE_HEIGHT","parseInt","TOP_PADDING","BOTTOM_PADDING","MIN_INPUT_HEIGHT","BUFFER_SIZE","ConsoleInput","constructor","props","handleWindowResize","bind","cancelListener","commandContainer","createRef","commandEditor","commandHistoryIndex","commandSuggestionContainer","isCommandModified","loadingPromise","timestamp","Date","now","bufferIndex","history","state","commandEditorHeight","isFocused","model","componentDidMount","initCommandEditor","window","addEventListener","loadMoreHistory","componentDidUpdate","layoutEditor","componentWillUnmount","removeEventListener","cancel","destroyCommandEditor","setConsoleText","text","focus","execute","debug","setValue","focusEnd","updateDimensions","processCommand","language","session","commandSettings","copyWithSyntaxHighlighting","cursorStyle","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineHeight","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollBeyondLastLine","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","padding","top","bottom","tabCompletion","value","wordWrap","editor","create","current","setEOL","openDocument","onDidChangeModelContent","onDidFocusEditorText","setState","onDidBlurEditorText","onKeyDown","keyEvent","lineNumber","getPosition","getModel","keyCode","KeyCode","UpArrow","loadCommand","getValueLength","focusStart","stopPropagation","preventDefault","DownArrow","getLineCount","altKey","shiftKey","metaKey","Enter","isSuggestionMenuPopulated","Tab","isSuggestionMenuActive","trigger","addCommand","KeyMod","CtrlCmd","KEY_F","removeConflictingKeybindings","registerPasteHandler","closeDocument","dispose","getDomNode","querySelector","classList","contains","childElementCount","column","getLineLength","firstCharTop","getTopForPosition","setPosition","setScrollTop","lastLine","lastCharTop","clear","layout","index","length","commandHistoryStorage","scope","makeCancelable","getTable","resolved","close","table","setReversed","setViewport","getViewportData","viewportData","size","items","map","name","reverse","err","isCanceled","debug2","error","command","getValue","trim","push","onSubmit","maxHeight","contentHeight","getContentHeight","Math","max","min","shouldScroll","options","getOptions","overviewRulerLanes","undefined","updateOptions","render","INPUT_CLASS_NAME","height","propTypes","shape","isRequired","string","CommandHistoryStorage","func","number","defaultProps"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport { MonacoCompletionProvider, MonacoTheme, MonacoUtils } from './monaco';\nimport './ConsoleInput.scss';\nimport StoragePropTypes from './StoragePropTypes';\n\nconst log = Log.module('ConsoleInput');\n\nconst LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);\nconst TOP_PADDING = 6;\nconst BOTTOM_PADDING = 6;\nconst MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;\nconst BUFFER_SIZE = 100;\n\n/**\n * Component for input in a console session. Handles loading the recent command history\n */\nexport class ConsoleInput extends PureComponent {\n static INPUT_CLASS_NAME = 'console-input';\n\n constructor(props) {\n super(props);\n\n this.handleWindowResize = this.handleWindowResize.bind(this);\n\n this.cancelListener = null;\n this.commandContainer = React.createRef();\n this.commandEditor = null;\n this.commandHistoryIndex = null;\n this.commandSuggestionContainer = null;\n this.isCommandModified = false;\n this.loadingPromise = null;\n this.timestamp = Date.now();\n this.bufferIndex = 0;\n this.history = [];\n\n this.state = {\n commandEditorHeight: LINE_HEIGHT,\n isFocused: false,\n model: null,\n };\n }\n\n componentDidMount() {\n this.initCommandEditor();\n\n window.addEventListener('resize', this.handleWindowResize);\n\n this.loadMoreHistory();\n }\n\n componentDidUpdate() {\n this.layoutEditor();\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleWindowResize);\n\n if (this.loadingPromise != null) {\n this.loadingPromise.cancel();\n }\n\n this.destroyCommandEditor();\n }\n\n /**\n * Sets the console text from an external source.\n * Sets commandHistoryIndex to null since the source is not part of the history\n * @param {string} text The text to set in the input\n * @param {boolean} focus If the input should be focused\n * @param {boolean} execute If the input should be executed\n * @returns void\n */\n setConsoleText(text, focus = true, execute = false) {\n if (!text) {\n return;\n }\n\n log.debug('Command received: ', text);\n\n this.commandEditor.setValue(text);\n this.commandHistoryIndex = null;\n\n if (focus) {\n this.focusEnd();\n }\n\n this.updateDimensions();\n\n if (execute) {\n this.processCommand();\n }\n }\n\n initCommandEditor() {\n const { language, session } = this.props;\n const commandSettings = {\n copyWithSyntaxHighlighting: 'false',\n cursorStyle: 'block',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language,\n lineHeight: LINE_HEIGHT,\n lineDecorationsWidth: 3,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n padding: {\n top: TOP_PADDING,\n bottom: BOTTOM_PADDING,\n },\n tabCompletion: 'on',\n value: '',\n wordWrap: 'on',\n };\n\n this.commandEditor = monaco.editor.create(\n this.commandContainer.current,\n commandSettings\n );\n\n MonacoUtils.setEOL(this.commandEditor);\n MonacoUtils.openDocument(this.commandEditor, session);\n\n this.commandEditor.onDidChangeModelContent(() => {\n this.isCommandModified = true;\n this.updateDimensions();\n });\n\n this.commandEditor.onDidFocusEditorText(() => {\n this.setState({ isFocused: true });\n });\n\n this.commandEditor.onDidBlurEditorText(() => {\n this.setState({ isFocused: false });\n });\n\n /**\n * Register for keydown events to capture the `Enter` key.\n * Need to do it this way instead of using `addCommand`, because that would eat the Enter key in all situations, which is not what we want.\n * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.\n */\n this.commandEditor.onKeyDown(keyEvent => {\n const { commandEditor, commandHistoryIndex } = this;\n const { lineNumber } = commandEditor.getPosition();\n const model = commandEditor.getModel();\n if (keyEvent.keyCode === monaco.KeyCode.UpArrow && lineNumber === 1) {\n if (commandHistoryIndex != null) {\n this.loadCommand(commandHistoryIndex + 1);\n } else if (model.getValueLength() === 0) {\n this.loadCommand(0);\n }\n\n this.focusStart();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.keyCode === monaco.KeyCode.DownArrow &&\n lineNumber === model.getLineCount()\n ) {\n if (commandHistoryIndex != null && commandHistoryIndex >= 0) {\n this.loadCommand(commandHistoryIndex - 1);\n } else {\n this.commandHistoryIndex = null;\n }\n\n this.focusEnd();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {\n if (keyEvent.keyCode === monaco.KeyCode.Enter) {\n if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.processCommand();\n }\n } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {\n if (!this.isSuggestionMenuActive()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.commandEditor.trigger(\n 'Tab key trigger suggestions',\n 'editor.action.triggerSuggest',\n {}\n );\n } else if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n }\n }\n }\n });\n\n // Override the Ctrl+F functionality so that the find window doesn't appear\n this.commandEditor.addCommand(\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_F, // eslint-disable-line no-bitwise\n () => {}\n );\n\n MonacoUtils.removeConflictingKeybindings(this.commandEditor);\n\n MonacoUtils.registerPasteHandler(this.commandEditor);\n\n this.commandEditor.focus();\n\n this.updateDimensions();\n\n this.setState({ model: this.commandEditor.getModel() });\n }\n\n destroyCommandEditor() {\n const { session } = this.props;\n if (this.commandEditor) {\n MonacoUtils.closeDocument(this.commandEditor, session);\n this.commandEditor.dispose();\n this.commandEditor = null;\n }\n }\n\n handleWindowResize() {\n this.updateDimensions();\n }\n\n isSuggestionMenuActive() {\n if (!this.commandSuggestionContainer) {\n this.commandSuggestionContainer = this.commandEditor\n .getDomNode()\n .querySelector('.suggest-widget');\n }\n\n return (\n this.commandSuggestionContainer &&\n this.commandSuggestionContainer.classList.contains('visible')\n );\n }\n\n isSuggestionMenuPopulated() {\n return (\n this.isSuggestionMenuActive() &&\n this.commandSuggestionContainer.querySelector('.monaco-list-rows')\n .childElementCount > 0\n );\n }\n\n focus() {\n this.commandEditor.focus();\n }\n\n focusStart() {\n const model = this.commandEditor.getModel();\n const column = model.getLineLength(1) + 1; // Length of 1st line\n const firstCharTop = this.commandEditor.getTopForPosition(1, column);\n this.commandEditor.setPosition({ lineNumber: 1, column });\n this.commandEditor.setScrollTop(firstCharTop);\n this.commandEditor.focus();\n }\n\n focusEnd() {\n const model = this.commandEditor.getModel();\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n const lastCharTop = this.commandEditor.getTopForPosition(lastLine, column);\n this.commandEditor.setPosition({ lineNumber: lastLine, column });\n this.commandEditor.setScrollTop(lastCharTop);\n this.commandEditor.focus();\n }\n\n clear() {\n this.commandEditor.focus();\n this.commandEditor.getModel().setValue('');\n this.commandHistoryIndex = null;\n }\n\n layoutEditor() {\n if (this.commandEditor) {\n this.commandEditor.layout();\n }\n }\n\n loadCommand(index) {\n if (index < 0) {\n this.commandHistoryIndex = null;\n this.commandEditor.getModel().setValue('');\n } else if (index < this.history.length) {\n this.commandHistoryIndex = index;\n this.commandEditor\n .getModel()\n .setValue(this.history[this.history.length - index - 1]);\n if (index > this.history.length - BUFFER_SIZE) {\n this.loadMoreHistory();\n }\n }\n\n this.isCommandModified = false;\n }\n\n async loadMoreHistory() {\n try {\n if (this.loadingPromise != null || this.bufferIndex == null) {\n return;\n }\n\n const { commandHistoryStorage, language, scope } = this.props;\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n commandHistoryStorage.getTable(language, scope, this.timestamp),\n resolved => resolved.close()\n );\n\n const table = await this.loadingPromise;\n table.setReversed(true);\n table.setViewport({\n top: this.bufferIndex,\n bottom: this.bufferIndex + BUFFER_SIZE - 1,\n });\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n table.getViewportData(),\n () => table.close()\n );\n const viewportData = await this.loadingPromise;\n this.bufferIndex += BUFFER_SIZE;\n if (this.bufferIndex >= table.size) {\n // We've loaded the full history, no need to load any more\n this.bufferIndex = null;\n }\n this.history = [\n ...viewportData.items.map(({ name }) => name).reverse(),\n ...this.history,\n ];\n\n this.loadingPromise = null;\n\n table.close();\n } catch (err) {\n this.loadingPromise = null;\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('Promise canceled, not loading history');\n return;\n }\n\n log.error('Error fetching history', err);\n }\n }\n\n processCommand() {\n this.isCommandModified = false;\n this.commandHistoryIndex = null;\n\n const command = this.commandEditor.getValue().trim();\n this.history.push(command);\n this.commandEditor.setValue('');\n this.updateDimensions();\n\n const { onSubmit } = this.props;\n onSubmit(command);\n }\n\n updateDimensions() {\n if (!this.commandEditor) {\n return;\n }\n\n const { maxHeight } = this.props;\n const contentHeight = this.commandEditor.getContentHeight();\n const commandEditorHeight = Math.max(\n Math.min(contentHeight, maxHeight),\n MIN_INPUT_HEIGHT\n );\n\n // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show\n const shouldScroll = contentHeight > commandEditorHeight;\n const options = this.commandEditor.getOptions();\n if (shouldScroll) {\n options.overviewRulerLanes = undefined; // Resets to default\n } else {\n options.overviewRulerLanes = 0;\n }\n\n this.setState(\n {\n commandEditorHeight,\n },\n () => {\n this.commandEditor.updateOptions(options);\n this.commandEditor.layout();\n }\n );\n }\n\n render() {\n const { language, session } = this.props;\n const { commandEditorHeight, isFocused, model } = this.state;\n return (\n <div className=\"console-input-wrapper\">\n <div\n className={classNames('console-input-inner-wrapper', {\n focus: isFocused,\n })}\n >\n <div\n className={ConsoleInput.INPUT_CLASS_NAME}\n ref={this.commandContainer}\n style={{ height: commandEditorHeight }}\n />\n {model && (\n <MonacoCompletionProvider\n model={model}\n language={language}\n session={session}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nConsoleInput.propTypes = {\n session: PropTypes.shape({}).isRequired,\n language: PropTypes.string.isRequired,\n scope: PropTypes.string,\n commandHistoryStorage: StoragePropTypes.CommandHistoryStorage.isRequired,\n onSubmit: PropTypes.func.isRequired,\n maxHeight: PropTypes.number,\n};\n\nConsoleInput.defaultProps = {\n maxHeight: LINE_HEIGHT * 10,\n scope: null,\n};\n\nexport default ConsoleInput;\n"],"file":"ConsoleInput.js"}
|
|
1
|
+
{"version":3,"sources":["../src/ConsoleInput.jsx"],"names":["React","PureComponent","PropTypes","classNames","monaco","Log","PromiseUtils","MonacoCompletionProvider","MonacoTheme","MonacoUtils","StoragePropTypes","log","module","LINE_HEIGHT","parseInt","TOP_PADDING","BOTTOM_PADDING","MIN_INPUT_HEIGHT","BUFFER_SIZE","ConsoleInput","constructor","props","handleWindowResize","bind","cancelListener","commandContainer","createRef","commandEditor","commandHistoryIndex","commandSuggestionContainer","loadingPromise","timestamp","Date","now","bufferIndex","history","modifiedCommands","Map","state","commandEditorHeight","isFocused","model","componentDidMount","initCommandEditor","window","addEventListener","loadMoreHistory","componentDidUpdate","layoutEditor","componentWillUnmount","removeEventListener","cancel","destroyCommandEditor","setConsoleText","text","focus","execute","debug","setValue","focusEnd","updateDimensions","processCommand","language","session","commandSettings","copyWithSyntaxHighlighting","cursorStyle","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineHeight","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollBeyondLastLine","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","padding","top","bottom","tabCompletion","value","wordWrap","editor","create","current","setEOL","openDocument","onDidChangeModelContent","set","getValue","onDidFocusEditorText","setState","onDidBlurEditorText","onKeyDown","keyEvent","lineNumber","getPosition","getModel","keyCode","KeyCode","UpArrow","loadCommand","focusStart","stopPropagation","preventDefault","DownArrow","getLineCount","altKey","shiftKey","metaKey","Enter","isSuggestionMenuPopulated","Tab","isSuggestionMenuActive","trigger","addCommand","KeyMod","CtrlCmd","KEY_F","removeConflictingKeybindings","registerPasteHandler","closeDocument","dispose","getDomNode","querySelector","classList","contains","childElementCount","column","getLineLength","firstCharTop","getTopForPosition","setPosition","setScrollTop","lastLine","lastCharTop","clear","layout","index","length","get","commandHistoryStorage","scope","makeCancelable","getTable","resolved","close","table","setReversed","setViewport","getViewportData","viewportData","size","items","map","name","reverse","err","isCanceled","debug2","error","command","trim","push","onSubmit","maxHeight","contentHeight","getContentHeight","Math","max","min","shouldScroll","options","getOptions","overviewRulerLanes","undefined","updateOptions","render","INPUT_CLASS_NAME","height","propTypes","shape","isRequired","string","CommandHistoryStorage","func","number","defaultProps"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport { MonacoCompletionProvider, MonacoTheme, MonacoUtils } from './monaco';\nimport './ConsoleInput.scss';\nimport StoragePropTypes from './StoragePropTypes';\n\nconst log = Log.module('ConsoleInput');\n\nconst LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);\nconst TOP_PADDING = 6;\nconst BOTTOM_PADDING = 6;\nconst MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;\nconst BUFFER_SIZE = 100;\n\n/**\n * Component for input in a console session. Handles loading the recent command history\n */\nexport class ConsoleInput extends PureComponent {\n static INPUT_CLASS_NAME = 'console-input';\n\n constructor(props) {\n super(props);\n\n this.handleWindowResize = this.handleWindowResize.bind(this);\n\n this.cancelListener = null;\n this.commandContainer = React.createRef();\n this.commandEditor = null;\n this.commandHistoryIndex = null;\n this.commandSuggestionContainer = null;\n this.loadingPromise = null;\n this.timestamp = Date.now();\n this.bufferIndex = 0;\n this.history = [];\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n this.modifiedCommands = new Map();\n\n this.state = {\n commandEditorHeight: LINE_HEIGHT,\n isFocused: false,\n model: null,\n };\n }\n\n componentDidMount() {\n this.initCommandEditor();\n\n window.addEventListener('resize', this.handleWindowResize);\n\n this.loadMoreHistory();\n }\n\n componentDidUpdate() {\n this.layoutEditor();\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleWindowResize);\n\n if (this.loadingPromise != null) {\n this.loadingPromise.cancel();\n }\n\n this.destroyCommandEditor();\n }\n\n /**\n * Sets the console text from an external source.\n * Sets commandHistoryIndex to null since the source is not part of the history\n * @param {string} text The text to set in the input\n * @param {boolean} focus If the input should be focused\n * @param {boolean} execute If the input should be executed\n * @returns void\n */\n setConsoleText(text, focus = true, execute = false) {\n if (!text) {\n return;\n }\n\n log.debug('Command received: ', text);\n\n // Need to set commandHistoryIndex before value\n // On value change, modified commands map updates\n this.commandHistoryIndex = null;\n this.commandEditor.setValue(text);\n\n if (focus) {\n this.focusEnd();\n }\n\n this.updateDimensions();\n\n if (execute) {\n this.processCommand();\n }\n }\n\n initCommandEditor() {\n const { language, session } = this.props;\n const commandSettings = {\n copyWithSyntaxHighlighting: 'false',\n cursorStyle: 'block',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language,\n lineHeight: LINE_HEIGHT,\n lineDecorationsWidth: 3,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n padding: {\n top: TOP_PADDING,\n bottom: BOTTOM_PADDING,\n },\n tabCompletion: 'on',\n value: '',\n wordWrap: 'on',\n };\n\n this.commandEditor = monaco.editor.create(\n this.commandContainer.current,\n commandSettings\n );\n\n MonacoUtils.setEOL(this.commandEditor);\n MonacoUtils.openDocument(this.commandEditor, session);\n\n this.commandEditor.onDidChangeModelContent(() => {\n this.modifiedCommands.set(\n this.commandHistoryIndex,\n this.commandEditor.getValue()\n );\n this.updateDimensions();\n });\n\n this.commandEditor.onDidFocusEditorText(() => {\n this.setState({ isFocused: true });\n });\n\n this.commandEditor.onDidBlurEditorText(() => {\n this.setState({ isFocused: false });\n });\n\n /**\n * Register for keydown events to capture the `Enter` key.\n * Need to do it this way instead of using `addCommand`, because that would eat the Enter key in all situations, which is not what we want.\n * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.\n */\n this.commandEditor.onKeyDown(keyEvent => {\n const { commandEditor, commandHistoryIndex } = this;\n const { lineNumber } = commandEditor.getPosition();\n const model = commandEditor.getModel();\n if (keyEvent.keyCode === monaco.KeyCode.UpArrow && lineNumber === 1) {\n if (commandHistoryIndex != null) {\n this.loadCommand(commandHistoryIndex + 1);\n } else {\n this.loadCommand(0);\n }\n\n this.focusStart();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.keyCode === monaco.KeyCode.DownArrow &&\n lineNumber === model.getLineCount()\n ) {\n if (commandHistoryIndex != null && commandHistoryIndex > 0) {\n this.loadCommand(commandHistoryIndex - 1);\n } else {\n this.loadCommand(null);\n }\n\n this.focusEnd();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {\n if (keyEvent.keyCode === monaco.KeyCode.Enter) {\n if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.processCommand();\n }\n } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {\n if (!this.isSuggestionMenuActive()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.commandEditor.trigger(\n 'Tab key trigger suggestions',\n 'editor.action.triggerSuggest',\n {}\n );\n } else if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n }\n }\n }\n });\n\n // Override the Ctrl+F functionality so that the find window doesn't appear\n this.commandEditor.addCommand(\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_F, // eslint-disable-line no-bitwise\n () => {}\n );\n\n MonacoUtils.removeConflictingKeybindings(this.commandEditor);\n\n MonacoUtils.registerPasteHandler(this.commandEditor);\n\n this.commandEditor.focus();\n\n this.updateDimensions();\n\n this.setState({ model: this.commandEditor.getModel() });\n }\n\n destroyCommandEditor() {\n const { session } = this.props;\n if (this.commandEditor) {\n MonacoUtils.closeDocument(this.commandEditor, session);\n this.commandEditor.dispose();\n this.commandEditor = null;\n }\n }\n\n handleWindowResize() {\n this.updateDimensions();\n }\n\n isSuggestionMenuActive() {\n if (!this.commandSuggestionContainer) {\n this.commandSuggestionContainer = this.commandEditor\n .getDomNode()\n .querySelector('.suggest-widget');\n }\n\n return (\n this.commandSuggestionContainer &&\n this.commandSuggestionContainer.classList.contains('visible')\n );\n }\n\n isSuggestionMenuPopulated() {\n return (\n this.isSuggestionMenuActive() &&\n this.commandSuggestionContainer.querySelector('.monaco-list-rows')\n .childElementCount > 0\n );\n }\n\n focus() {\n this.commandEditor.focus();\n }\n\n focusStart() {\n const model = this.commandEditor.getModel();\n const column = model.getLineLength(1) + 1; // Length of 1st line\n const firstCharTop = this.commandEditor.getTopForPosition(1, column);\n this.commandEditor.setPosition({ lineNumber: 1, column });\n this.commandEditor.setScrollTop(firstCharTop);\n this.commandEditor.focus();\n }\n\n focusEnd() {\n const model = this.commandEditor.getModel();\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n const lastCharTop = this.commandEditor.getTopForPosition(lastLine, column);\n this.commandEditor.setPosition({ lineNumber: lastLine, column });\n this.commandEditor.setScrollTop(lastCharTop);\n this.commandEditor.focus();\n }\n\n clear() {\n this.commandEditor.focus();\n this.commandEditor.getModel().setValue('');\n this.commandHistoryIndex = null;\n }\n\n layoutEditor() {\n if (this.commandEditor) {\n this.commandEditor.layout();\n }\n }\n\n /**\n * Loads the given command from history\n * If edits have been made to the command since last run command, loads the modified version\n * @param {number | null} index The index to load. Null to load command started in the editor and not in the history\n */\n loadCommand(index) {\n let value = '';\n if (index !== null && index < this.history.length) {\n value = this.history[this.history.length - index - 1];\n\n if (index > this.history.length - BUFFER_SIZE) {\n this.loadMoreHistory();\n }\n }\n\n this.commandHistoryIndex = index;\n value = this.modifiedCommands.get(index) ?? value;\n this.commandEditor.getModel().setValue(value);\n }\n\n async loadMoreHistory() {\n try {\n if (this.loadingPromise != null || this.bufferIndex == null) {\n return;\n }\n\n const { commandHistoryStorage, language, scope } = this.props;\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n commandHistoryStorage.getTable(language, scope, this.timestamp),\n resolved => resolved.close()\n );\n\n const table = await this.loadingPromise;\n table.setReversed(true);\n table.setViewport({\n top: this.bufferIndex,\n bottom: this.bufferIndex + BUFFER_SIZE - 1,\n });\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n table.getViewportData(),\n () => table.close()\n );\n const viewportData = await this.loadingPromise;\n this.bufferIndex += BUFFER_SIZE;\n if (this.bufferIndex >= table.size) {\n // We've loaded the full history, no need to load any more\n this.bufferIndex = null;\n }\n this.history = [\n ...viewportData.items.map(({ name }) => name).reverse(),\n ...this.history,\n ];\n\n this.loadingPromise = null;\n\n table.close();\n } catch (err) {\n this.loadingPromise = null;\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('Promise canceled, not loading history');\n return;\n }\n\n log.error('Error fetching history', err);\n }\n }\n\n processCommand() {\n this.commandHistoryIndex = null;\n this.modifiedCommands.clear();\n\n const command = this.commandEditor.getValue().trim();\n this.history.push(command);\n this.commandEditor.setValue('');\n this.updateDimensions();\n\n const { onSubmit } = this.props;\n onSubmit(command);\n }\n\n updateDimensions() {\n if (!this.commandEditor) {\n return;\n }\n\n const { maxHeight } = this.props;\n const contentHeight = this.commandEditor.getContentHeight();\n const commandEditorHeight = Math.max(\n Math.min(contentHeight, maxHeight),\n MIN_INPUT_HEIGHT\n );\n\n // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show\n const shouldScroll = contentHeight > commandEditorHeight;\n const options = this.commandEditor.getOptions();\n if (shouldScroll) {\n options.overviewRulerLanes = undefined; // Resets to default\n } else {\n options.overviewRulerLanes = 0;\n }\n\n this.setState(\n {\n commandEditorHeight,\n },\n () => {\n this.commandEditor.updateOptions(options);\n this.commandEditor.layout();\n }\n );\n }\n\n render() {\n const { language, session } = this.props;\n const { commandEditorHeight, isFocused, model } = this.state;\n return (\n <div className=\"console-input-wrapper\">\n <div\n className={classNames('console-input-inner-wrapper', {\n focus: isFocused,\n })}\n >\n <div\n className={ConsoleInput.INPUT_CLASS_NAME}\n ref={this.commandContainer}\n style={{ height: commandEditorHeight }}\n />\n {model && (\n <MonacoCompletionProvider\n model={model}\n language={language}\n session={session}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nConsoleInput.propTypes = {\n session: PropTypes.shape({}).isRequired,\n language: PropTypes.string.isRequired,\n scope: PropTypes.string,\n commandHistoryStorage: StoragePropTypes.CommandHistoryStorage.isRequired,\n onSubmit: PropTypes.func.isRequired,\n maxHeight: PropTypes.number,\n};\n\nConsoleInput.defaultProps = {\n maxHeight: LINE_HEIGHT * 10,\n scope: null,\n};\n\nexport default ConsoleInput;\n"],"file":"ConsoleInput.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/console",
|
|
3
|
-
"version": "0.9.1-beta.
|
|
3
|
+
"version": "0.9.1-beta.2+b7c0512",
|
|
4
4
|
"description": "Deephaven Console",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@deephaven/icons": "^0.9.1-beta.
|
|
38
|
-
"@deephaven/jsapi-shim": "^0.9.1-beta.
|
|
39
|
-
"@deephaven/storage": "^0.9.1-beta.
|
|
40
|
-
"@deephaven/utils": "^0.9.1-beta.
|
|
37
|
+
"@deephaven/icons": "^0.9.1-beta.2+b7c0512",
|
|
38
|
+
"@deephaven/jsapi-shim": "^0.9.1-beta.2+b7c0512",
|
|
39
|
+
"@deephaven/storage": "^0.9.1-beta.2+b7c0512",
|
|
40
|
+
"@deephaven/utils": "^0.9.1-beta.2+b7c0512",
|
|
41
41
|
"@fortawesome/react-fontawesome": "^0.1.12",
|
|
42
42
|
"classnames": "^2.3.1",
|
|
43
43
|
"jszip": "3.2.2",
|
|
@@ -58,10 +58,10 @@
|
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@babel/cli": "^7.16.0",
|
|
61
|
-
"@deephaven/components": "^0.9.1-beta.
|
|
62
|
-
"@deephaven/log": "^0.9.1-beta.
|
|
63
|
-
"@deephaven/mocks": "^0.9.1-beta.
|
|
64
|
-
"@deephaven/tsconfig": "^0.9.1-beta.
|
|
61
|
+
"@deephaven/components": "^0.9.1-beta.2+b7c0512",
|
|
62
|
+
"@deephaven/log": "^0.9.1-beta.2+b7c0512",
|
|
63
|
+
"@deephaven/mocks": "^0.9.1-beta.2+b7c0512",
|
|
64
|
+
"@deephaven/tsconfig": "^0.9.1-beta.2+b7c0512",
|
|
65
65
|
"@types/react": "^16.14.8",
|
|
66
66
|
"@types/react-dom": "^16.9.13",
|
|
67
67
|
"cross-env": "^7.0.2",
|
|
@@ -82,5 +82,5 @@
|
|
|
82
82
|
"publishConfig": {
|
|
83
83
|
"access": "public"
|
|
84
84
|
},
|
|
85
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "b7c05127d0caa20989ff59bd061b5780e408e38e"
|
|
86
86
|
}
|