mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-18 21:53:50 +01:00
EDITOR: fix disposing models (#1026)
This commit is contained in:
parent
82511e5030
commit
6f8a59593a
@ -42,7 +42,7 @@ export function Editor({ onMount, onChange }: EditorProps) {
|
|||||||
// Unmounting
|
// Unmounting
|
||||||
return () => {
|
return () => {
|
||||||
subscription.current?.dispose();
|
subscription.current?.dispose();
|
||||||
editorRef.current?.getModel()?.dispose();
|
monaco.editor.getModels().forEach((model) => model.dispose());
|
||||||
editorRef.current?.dispose();
|
editorRef.current?.dispose();
|
||||||
};
|
};
|
||||||
// this eslint ignore instruction can potentially cause unobvious bugs
|
// this eslint ignore instruction can potentially cause unobvious bugs
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import type { ContentFilePath } from "../../Paths/ContentFile";
|
import type { ContentFilePath } from "../../Paths/ContentFile";
|
||||||
import monaco, { editor, Position } from "monaco-editor";
|
import { editor, Position } from "monaco-editor";
|
||||||
|
import { makeModel } from "./utils";
|
||||||
|
|
||||||
type ITextModel = editor.ITextModel;
|
type ITextModel = editor.ITextModel;
|
||||||
|
|
||||||
@ -24,13 +25,6 @@ export class OpenScript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
regenerateModel(): void {
|
regenerateModel(): void {
|
||||||
this.model = editor.createModel(
|
this.model = makeModel(this.hostname, this.path, this.code);
|
||||||
this.code,
|
|
||||||
this.isTxt ? "plaintext" : "javascript",
|
|
||||||
monaco.Uri.from({
|
|
||||||
scheme: "file",
|
|
||||||
path: `${this.hostname}/${this.path}`,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ import { PromptEvent } from "../../ui/React/PromptManager";
|
|||||||
|
|
||||||
import { useRerender } from "../../ui/React/hooks";
|
import { useRerender } from "../../ui/React/hooks";
|
||||||
|
|
||||||
import { dirty, getServerCode } from "./utils";
|
import { dirty, getServerCode, makeModel } from "./utils";
|
||||||
import { OpenScript } from "./OpenScript";
|
import { OpenScript } from "./OpenScript";
|
||||||
import { Tabs } from "./Tabs";
|
import { Tabs } from "./Tabs";
|
||||||
import { Toolbar } from "./Toolbar";
|
import { Toolbar } from "./Toolbar";
|
||||||
@ -191,14 +191,7 @@ function Root(props: IProps): React.ReactElement {
|
|||||||
code,
|
code,
|
||||||
props.hostname,
|
props.hostname,
|
||||||
new monaco.Position(0, 0),
|
new monaco.Position(0, 0),
|
||||||
monaco.editor.createModel(
|
makeModel(props.hostname, filename, code),
|
||||||
code,
|
|
||||||
filename.endsWith(".txt") ? "plaintext" : "javascript",
|
|
||||||
monaco.Uri.from({
|
|
||||||
scheme: "file",
|
|
||||||
path: `${props.hostname}/${filename}`,
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
openScripts.push(newScript);
|
openScripts.push(newScript);
|
||||||
currentScript = newScript;
|
currentScript = newScript;
|
||||||
@ -274,12 +267,12 @@ function Root(props: IProps): React.ReactElement {
|
|||||||
// Save changes
|
// Save changes
|
||||||
closingScript.code = savedScriptCode;
|
closingScript.code = savedScriptCode;
|
||||||
saveScript(closingScript);
|
saveScript(closingScript);
|
||||||
Router.toPage(Page.Terminal);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
//unmounting the editor will dispose all, doesnt hurt to dispose on close aswell
|
||||||
|
closingScript.model.dispose();
|
||||||
openScripts.splice(index, 1);
|
openScripts.splice(index, 1);
|
||||||
if (openScripts.length === 0) {
|
if (openScripts.length === 0) {
|
||||||
currentScript = null;
|
currentScript = null;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { GetServer } from "../../Server/AllServers";
|
import { GetServer } from "../../Server/AllServers";
|
||||||
|
import { editor, Uri } from "monaco-editor";
|
||||||
import { OpenScript } from "./OpenScript";
|
import { OpenScript } from "./OpenScript";
|
||||||
|
|
||||||
function getServerCode(scripts: OpenScript[], index: number): string | null {
|
function getServerCode(scripts: OpenScript[], index: number): string | null {
|
||||||
@ -21,5 +21,14 @@ function reorder(list: unknown[], startIndex: number, endIndex: number): void {
|
|||||||
const [removed] = list.splice(startIndex, 1);
|
const [removed] = list.splice(startIndex, 1);
|
||||||
list.splice(endIndex, 0, removed);
|
list.splice(endIndex, 0, removed);
|
||||||
}
|
}
|
||||||
|
function makeModel(hostname: string, filename: string, code: string) {
|
||||||
|
const uri = Uri.from({
|
||||||
|
scheme: "file",
|
||||||
|
path: `${hostname}/${filename}`,
|
||||||
|
});
|
||||||
|
const language = filename.endsWith(".txt") ? "plaintext" : "javascript";
|
||||||
|
//if somehow a model already exist return it
|
||||||
|
return editor.getModel(uri) ?? editor.createModel(code, language, uri);
|
||||||
|
}
|
||||||
|
|
||||||
export { getServerCode, dirty, reorder };
|
export { getServerCode, dirty, reorder, makeModel };
|
||||||
|
Loading…
Reference in New Issue
Block a user