diff --git a/news/2 Fixes/5774.md b/news/2 Fixes/5774.md new file mode 100644 index 000000000000..7bcdf5aa2ef5 --- /dev/null +++ b/news/2 Fixes/5774.md @@ -0,0 +1 @@ +Fix problem with using up/down arrows in autocomplete. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a3ecd5d820e6..52dd24e9a912 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3959,12 +3959,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3979,17 +3981,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4106,7 +4111,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -4118,6 +4124,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4132,6 +4139,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4139,12 +4147,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -4163,6 +4173,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4243,7 +4254,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -4255,6 +4267,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -4376,6 +4389,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -12347,7 +12361,7 @@ "dependencies": { "convert-source-map": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "resolved": false, "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { @@ -12356,7 +12370,7 @@ }, "execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "resolved": false, "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { @@ -12382,7 +12396,7 @@ }, "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "resolved": false, "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { @@ -12397,7 +12411,7 @@ }, "get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "resolved": false, "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { @@ -12406,7 +12420,7 @@ }, "glob": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "resolved": false, "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { @@ -12420,7 +12434,7 @@ }, "locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "resolved": false, "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { @@ -12440,7 +12454,7 @@ }, "os-locale": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "resolved": false, "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { @@ -12451,7 +12465,7 @@ }, "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "resolved": false, "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, @@ -12463,7 +12477,7 @@ }, "pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "resolved": false, "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { @@ -12472,7 +12486,7 @@ }, "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "resolved": false, "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { @@ -12488,13 +12502,13 @@ }, "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "resolved": false, "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "rimraf": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "resolved": false, "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { diff --git a/src/datascience-ui/history-react/code.tsx b/src/datascience-ui/history-react/code.tsx index 73102d885ee5..d402aa3d28ee 100644 --- a/src/datascience-ui/history-react/code.tsx +++ b/src/datascience-ui/history-react/code.tsx @@ -43,6 +43,7 @@ interface ICodeState { export class Code extends React.Component { private subscriptions: monacoEditor.IDisposable[] = []; private lastCleanVersionId: number = 0; + private editorRef: React.RefObject = React.createRef(); constructor(prop: ICodeProps) { super(prop); @@ -102,6 +103,7 @@ export class Code extends React.Component { editorMounted={this.editorDidMount} options={options} openLink={this.props.openLink} + ref={this.editorRef} />
{this.getWatermarkString()}
@@ -135,9 +137,11 @@ export class Code extends React.Component { // Listen for model changes this.subscriptions.push(editor.onDidChangeModelContent(this.modelChanged)); - // List for key up/down events. - this.subscriptions.push(editor.onKeyDown(this.onKeyDown)); - this.subscriptions.push(editor.onKeyUp(this.onKeyUp)); + // List for key up/down events if not read only + if (!this.props.readOnly) { + this.subscriptions.push(editor.onKeyDown(this.onKeyDown)); + this.subscriptions.push(editor.onKeyUp(this.onKeyUp)); + } // Indicate we're ready this.props.onCreated(this.props.code, model!.id); @@ -203,8 +207,15 @@ export class Code extends React.Component { return ''; } + private isAutoCompleteOpen() : boolean { + if (this.editorRef.current) { + return this.editorRef.current.isSuggesting(); + } + return false; + } + private arrowUp(e: monacoEditor.IKeyboardEvent) { - if (this.state.editor && this.state.model) { + if (this.state.editor && this.state.model && !this.isAutoCompleteOpen()) { const cursor = this.state.editor.getPosition(); if (cursor && cursor.lineNumber === 1 && this.props.history) { const currentValue = this.getContents(); @@ -220,7 +231,7 @@ export class Code extends React.Component { } private arrowDown(e: monacoEditor.IKeyboardEvent) { - if (this.state.editor && this.state.model) { + if (this.state.editor && this.state.model && !this.isAutoCompleteOpen()) { const cursor = this.state.editor.getPosition(); if (cursor && cursor.lineNumber === this.state.model.getLineCount() && this.props.history) { const currentValue = this.getContents(); diff --git a/src/datascience-ui/react-common/monacoEditor.tsx b/src/datascience-ui/react-common/monacoEditor.tsx index c7e1fde47c6f..3f83cdfb3681 100644 --- a/src/datascience-ui/react-common/monacoEditor.tsx +++ b/src/datascience-ui/react-common/monacoEditor.tsx @@ -182,6 +182,15 @@ export class MonacoEditor extends React.Component= 2) { + const suggestWidget = this.widgetParent.firstChild.childNodes.item(1) as HTMLDivElement; + return suggestWidget && suggestWidget.className.includes('visible'); + } + return false; + } + private windowResized = () => { if (this.resizeTimer) { clearTimeout(this.resizeTimer);