From ce9f5c78400f1125d46a35c3feaeeb57875c3c83 Mon Sep 17 00:00:00 2001 From: Jon Eugster Date: Fri, 22 Mar 2024 18:11:14 +0100 Subject: [PATCH] fix locked editor mode --- client/src/components/app_bar.tsx | 12 ++++++------ client/src/components/infoview/context.ts | 8 ++++---- client/src/components/infoview/goals.tsx | 2 -- client/src/components/infoview/main.tsx | 8 ++++---- client/src/components/infoview/messages.tsx | 4 ++-- client/src/components/level.tsx | 17 ++++++++++------- 6 files changed, 26 insertions(+), 25 deletions(-) diff --git a/client/src/components/app_bar.tsx b/client/src/components/app_bar.tsx index f8a171f..2fdb338 100644 --- a/client/src/components/app_bar.tsx +++ b/client/src/components/app_bar.tsx @@ -98,23 +98,23 @@ function PreviousButton({setNavOpen}) { /** button to toggle between editor and typewriter */ function InputModeButton({setNavOpen, isDropdown}) { const {levelId} = React.useContext(WorldLevelIdContext) - const {typewriterMode, setTypewriterMode, lockInputMode} = React.useContext(InputModeContext) + const {typewriterMode, setTypewriterMode, lockEditorMode} = React.useContext(InputModeContext) /** toggle input mode if allowed */ function toggleInputMode(ev: React.MouseEvent) { - if (!lockInputMode){ + if (!lockEditorMode){ setTypewriterMode(!typewriterMode) setNavOpen(false) } } return } diff --git a/client/src/components/infoview/context.ts b/client/src/components/infoview/context.ts index a413191..6d51e19 100644 --- a/client/src/components/infoview/context.ts +++ b/client/src/components/infoview/context.ts @@ -125,13 +125,13 @@ export const InputModeContext = React.createContext<{ setTypewriterMode: React.Dispatch>, typewriterInput: string, setTypewriterInput: React.Dispatch>, - lockInputMode: boolean, - setLockInputMode: React.Dispatch>, + lockEditorMode: boolean, + setLockEditorMode: React.Dispatch>, }>({ typewriterMode: true, setTypewriterMode: () => {}, typewriterInput: "", setTypewriterInput: () => {}, - lockInputMode: false, - setLockInputMode: () => {}, + lockEditorMode: false, + setLockEditorMode: () => {}, }); diff --git a/client/src/components/infoview/goals.tsx b/client/src/components/infoview/goals.tsx index 9a742aa..f4b4b5b 100644 --- a/client/src/components/infoview/goals.tsx +++ b/client/src/components/infoview/goals.tsx @@ -170,7 +170,6 @@ export const Goal = React.memo((props: GoalProps) => { // const hints = const objectHyps = hyps.filter(hyp => !hyp.isAssumption) const assumptionHyps = hyps.filter(hyp => hyp.isAssumption) - const {typewriterMode} = React.useContext(InputModeContext) return
{/* {goal.userName &&
case {goal.userName}
} */} @@ -181,7 +180,6 @@ export const Goal = React.memo((props: GoalProps) => { {!typewriter && assumptionHyps.length > 0 &&
Assumptions:
{assumptionHyps.map((h, i) => )}
} - {/* {typewriter && typewriterMode && } */} {!filter.reverse && goalLi} {/* {showHints && hints} */}
diff --git a/client/src/components/infoview/main.tsx b/client/src/components/infoview/main.tsx index 7913375..3268b72 100644 --- a/client/src/components/infoview/main.tsx +++ b/client/src/components/infoview/main.tsx @@ -43,9 +43,9 @@ import { DiagnosticSeverity } from 'vscode-languageclient'; */ export function DualEditor({ level, codeviewRef, levelId, worldId, worldSize }) { const ec = React.useContext(EditorContext) - const { typewriterMode } = React.useContext(InputModeContext) + const { typewriterMode, lockEditorMode } = React.useContext(InputModeContext) return <> -
+
@@ -61,7 +61,7 @@ export function DualEditor({ level, codeviewRef, levelId, worldId, worldSize }) function DualEditorMain({ worldId, levelId, level, worldSize }: { worldId: string, levelId: number, level: LevelInfo, worldSize: number }) { const ec = React.useContext(EditorContext) const gameId = React.useContext(GameIdContext) - const { typewriterMode } = React.useContext(InputModeContext) + const { typewriterMode, lockEditorMode } = React.useContext(InputModeContext) const {proof, setProof} = React.useContext(ProofContext) @@ -111,7 +111,7 @@ function DualEditorMain({ worldId, levelId, level, worldSize }: { worldId: strin - {typewriterMode ? + {(typewriterMode && !lockEditorMode) ? :
diff --git a/client/src/components/infoview/messages.tsx b/client/src/components/infoview/messages.tsx index dd2721b..3e082ed 100644 --- a/client/src/components/infoview/messages.tsx +++ b/client/src/components/infoview/messages.tsx @@ -79,7 +79,7 @@ const MessageView = React.memo(({uri, diag}: MessageViewProps) => { message = diag.message } - const { typewriterMode } = React.useContext(InputModeContext) + const { typewriterMode, lockEditorMode } = React.useContext(InputModeContext) return ( //
@@ -98,7 +98,7 @@ const MessageView = React.memo(({uri, diag}: MessageViewProps) => { // //
- {!typewriterMode &&

{title}

} + {!(typewriterMode && !lockEditorMode) &&

{title}

}
                 
             
diff --git a/client/src/components/level.tsx b/client/src/components/level.tsx index 633c659..1e193b5 100644 --- a/client/src/components/level.tsx +++ b/client/src/components/level.tsx @@ -222,7 +222,7 @@ function PlayableLevel({impressum, setImpressum}) { const [pageNumber, setPageNumber] = useState(0) // set to true to prevent switching between typewriter and editor - const [lockInputMode, setLockInputMode] = useState(false) + const [lockEditorMode, setLockEditorMode] = useState(false) const [typewriterInput, setTypewriterInput] = useState("") const lastLevel = levelId >= gameInfo.data?.worldSize[worldId] @@ -282,10 +282,11 @@ function PlayableLevel({impressum, setImpressum}) { // a hint at the beginning of the proof... const [selectedStep, setSelectedStep] = useState() + useEffect (() => { // Lock editor mode if (level?.data?.template) { - setTypewriterMode(false) + setLockEditorMode(true) if (editor) { let code = editor.getModel().getLinesContent() @@ -312,6 +313,8 @@ function PlayableLevel({impressum, setImpressum}) { console.debug(`not inserting template.`) } } + } else { + setLockEditorMode(false) } }, [level, levelId, worldId, gameId, editor]) @@ -326,7 +329,7 @@ function PlayableLevel({impressum, setImpressum}) { }, [gameId, worldId, levelId]) useEffect(() => { - if (!typewriterMode && editor) { + if (!(typewriterMode && !lockEditorMode) && editor) { // Delete last input attempt from command line editor.executeEdits("typewriter", [{ range: editor.getSelection(), @@ -335,7 +338,7 @@ function PlayableLevel({impressum, setImpressum}) { }]); editor.focus() } - }, [typewriterMode]) + }, [typewriterMode, lockEditorMode]) useEffect(() => { // Forget whether hidden hints are displayed for steps that don't exist yet @@ -355,7 +358,7 @@ function PlayableLevel({impressum, setImpressum}) { // Effect when command line mode gets enabled useEffect(() => { - if (onigasmH && editor && typewriterMode) { + if (onigasmH && editor && (typewriterMode && !lockEditorMode)) { let code = editor.getModel().getLinesContent().filter(line => line.trim()) editor.executeEdits("typewriter", [{ range: editor.getModel().getFullModelRange(), @@ -378,13 +381,13 @@ function PlayableLevel({impressum, setImpressum}) { // editor.setSelection(monaco.Selection.fromPositions(endPos, endPos)) // } } - }, [editor, typewriterMode, onigasmH == null]) + }, [editor, typewriterMode, lockEditorMode, onigasmH == null]) return <>
- +