BUGFIX: Save position of cursor when switching tabs and unmounting editor (#1297)

This commit is contained in:
catloversg
2024-05-23 15:51:33 +07:00
committed by GitHub
parent 7f8757b536
commit 8703da4ab6
4 changed files with 21 additions and 33 deletions
+4 -1
View File
@@ -10,9 +10,11 @@ interface EditorProps {
onMount: (editor: monaco.editor.IStandaloneCodeEditor) => void;
/** Function to be ran every time the code is updated */
onChange: (newCode?: string) => void;
/** This function is called before unmounting the editor */
onUnmount: () => void;
}
export function Editor({ onMount, onChange }: EditorProps) {
export function Editor({ onMount, onChange, onUnmount }: EditorProps) {
const containerDiv = useRef<HTMLDivElement | null>(null);
const editorRef = useRef<monaco.editor.IStandaloneCodeEditor | null>(null);
const subscription = useRef<monaco.IDisposable | null>(null);
@@ -41,6 +43,7 @@ export function Editor({ onMount, onChange }: EditorProps) {
// Unmounting
return () => {
onUnmount();
subscription.current?.dispose();
monaco.editor.getModels().forEach((model) => model.dispose());
editorRef.current?.dispose();
+17 -1
View File
@@ -233,6 +233,11 @@ function Root(props: IProps): React.ReactElement {
function onTabClick(index: number): void {
if (currentScript !== null) {
// Save the current position of the cursor.
const currentPosition = editorRef.current?.getPosition();
if (currentPosition) {
currentScript.lastPosition = currentPosition;
}
// Save currentScript to openScripts
const curIndex = currentTabIndex();
if (curIndex !== undefined) {
@@ -356,6 +361,17 @@ function Root(props: IProps): React.ReactElement {
}
}
function onUnmountEditor() {
if (!currentScript) {
return;
}
// Save the current position of the cursor.
const currentPosition = editorRef.current?.getPosition();
if (currentPosition) {
currentScript.lastPosition = currentPosition;
}
}
const { VimStatus } = useVimEditor({
editor: editorRef.current,
vim: options.vim,
@@ -392,7 +408,7 @@ function Root(props: IProps): React.ReactElement {
onTabUpdate={onTabUpdate}
/>
<div style={{ flex: "0 0 5px" }} />
<Editor onMount={onMount} onChange={updateCode} />
<Editor onMount={onMount} onChange={updateCode} onUnmount={onUnmountEditor} />
{VimStatus}