diff --git a/src/renderer/components/dock/editor-panel.tsx b/src/renderer/components/dock/editor-panel.tsx index 26bd5dec36..be7aaced8d 100644 --- a/src/renderer/components/dock/editor-panel.tsx +++ b/src/renderer/components/dock/editor-panel.tsx @@ -30,36 +30,47 @@ import { MonacoEditor, MonacoEditorProps } from "../monaco-editor"; import type { DockTabContentProps } from "./dock.views-manager"; export interface EditorPanelProps extends DockTabContentProps { + autoFocus?: boolean; // default: true value: string; onChange: MonacoEditorProps["onChange"]; onError?: MonacoEditorProps["onError"]; } +const defaultProps: Partial = { + autoFocus: true, +}; + @observer export class EditorPanel extends React.Component { - @observable.ref editor: MonacoEditor; + static defaultProps = defaultProps as object; + + @observable.ref editor?: MonacoEditor; constructor(props: EditorPanelProps) { super(props); makeObservable(this); + } + componentDidMount() { disposeOnUnmount(this, [ // keep focus on editor's area when just opened - reaction(() => dockStore.isOpen, isOpen => isOpen && this.editor.focus()), + reaction(() => dockStore.isOpen, isOpen => isOpen && this.editor?.focus(), { + fireImmediately: true, + }), // focus to editor on dock's resize or turning into fullscreen mode - dockStore.onResize(throttle(() => this.editor.focus(), 250)), + dockStore.onResize(throttle(() => this.editor?.focus(), 250)), ]); } render() { - const { className, tabId, value, onChange, onError } = this.props; + const { className, autoFocus, tabId, value, onChange, onError } = this.props; if (!tabId) return null; return (