1
0
mirror of https://github.com/sasjs/server.git synced 2025-12-11 19:44:35 +00:00

fix(web): dispose monaco editor actions in return of useEffect

This commit is contained in:
2022-11-11 15:27:12 +05:00
parent 4ca61feda6
commit acc25cbd68

View File

@@ -49,7 +49,7 @@ const useEditor = ({
const [openFilePathInputModal, setOpenFilePathInputModal] = useState(false) const [openFilePathInputModal, setOpenFilePathInputModal] = useState(false)
const [showDiff, setShowDiff] = useState(false) const [showDiff, setShowDiff] = useState(false)
const editorRef = useRef(null as any) const editorRef = useRef<monaco.editor.IStandaloneCodeEditor | null>(null)
const handleEditorDidMount: EditorDidMount = (editor) => { const handleEditorDidMount: EditorDidMount = (editor) => {
editorRef.current = editor editorRef.current = editor
@@ -199,7 +199,7 @@ const useEditor = ({
} }
useEffect(() => { useEffect(() => {
editorRef.current.addAction({ const saveFileAction = editorRef.current?.addAction({
// An unique identifier of the contributed action. // An unique identifier of the contributed action.
id: 'save-file', id: 'save-file',
@@ -209,6 +209,8 @@ const useEditor = ({
// An optional array of keybindings for the action. // An optional array of keybindings for the action.
keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS], keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS],
contextMenuGroupId: '9_cutcopypaste',
// Method that will be executed when the action is triggered. // Method that will be executed when the action is triggered.
// @param editor The editor instance is passed in as a convenience // @param editor The editor instance is passed in as a convenience
run: () => { run: () => {
@@ -217,7 +219,7 @@ const useEditor = ({
} }
}) })
editorRef.current.addAction({ const runCodeAction = editorRef.current?.addAction({
// An unique identifier of the contributed action. // An unique identifier of the contributed action.
id: 'run-code', id: 'run-code',
@@ -229,14 +231,17 @@ const useEditor = ({
contextMenuGroupId: 'navigation', contextMenuGroupId: 'navigation',
contextMenuOrder: 1,
// Method that will be executed when the action is triggered. // Method that will be executed when the action is triggered.
// @param editor The editor instance is passed in as a convenience // @param editor The editor instance is passed in as a convenience
run: function () { run: function () {
runCode(getSelection(editorRef.current as any) || fileContent) runCode(getSelection(editorRef.current as any) || fileContent)
} }
}) })
return () => {
saveFileAction?.dispose()
runCodeAction?.dispose()
}
}, [fileContent, prevFileContent, selectedFilePath, saveFile, runCode]) }, [fileContent, prevFileContent, selectedFilePath, saveFile, runCode])
useEffect(() => { useEffect(() => {