From d5f768bd78e014947e1490bbd9b7156254492f1c Mon Sep 17 00:00:00 2001 From: Simon Steinbeiss Date: Sun, 18 Jan 2026 02:46:00 +0100 Subject: [PATCH 1/2] fix(CodeEditor): prevent focus loss (#12211) Remove `&& !value` from outer conditional rendering to prevent Monaco editor from unmounting when code transitions from empty to non-empty. --- .../src/components/CodeEditor/CodeEditor.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx b/packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx index ac1ec9ee242..9649e042810 100644 --- a/packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx +++ b/packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx @@ -596,7 +596,8 @@ export const CodeEditor = ({ )} ref={ref} > - {(isUploadEnabled || emptyState) && !value ? ( + {isUploadEnabled || emptyState ? ( + /* Upload/EmptyState enabled: wrap in Dropzone container */
event.stopPropagation() // Prevents clicking TextArea from opening file dialog @@ -619,7 +620,8 @@ export const CodeEditor = ({
) : ( - <> + /* No upload/emptyState: use consistent container structure */ +
{editorHeader} {showEditor && (
@@ -627,7 +629,7 @@ export const CodeEditor = ({ {editor}
)} - +
)} ); From f7d8a0a1592f24b0628c405f56411a3a14761d55 Mon Sep 17 00:00:00 2001 From: Simon Steinbeiss Date: Mon, 19 Jan 2026 14:22:25 +0100 Subject: [PATCH 2/2] fix(CodeEditor): Account for focus loss fix --- .../CodeEditor/__test__/CodeEditor.test.tsx | 10 +- .../__snapshots__/CodeEditor.test.tsx.snap | 230 +++++++++--------- 2 files changed, 127 insertions(+), 113 deletions(-) diff --git a/packages/react-code-editor/src/components/CodeEditor/__test__/CodeEditor.test.tsx b/packages/react-code-editor/src/components/CodeEditor/__test__/CodeEditor.test.tsx index d6b7d21fe10..1aa6d6bb253 100644 --- a/packages/react-code-editor/src/components/CodeEditor/__test__/CodeEditor.test.tsx +++ b/packages/react-code-editor/src/components/CodeEditor/__test__/CodeEditor.test.tsx @@ -17,17 +17,21 @@ test('Matches snapshot with control buttons enabled', () => { test(`Renders with default classes ${styles.codeEditor}, ${styles.codeEditorCode}`, () => { render(); expect(screen.getByTestId('mock-editor').parentElement).toHaveClass(styles.codeEditorCode); - expect(screen.getByTestId('mock-editor').parentElement?.parentElement?.parentElement).toHaveClass(styles.codeEditor); + expect(screen.getByTestId('mock-editor').parentElement?.parentElement?.parentElement?.parentElement).toHaveClass( + styles.codeEditor + ); }); test('Renders custom class when className is passed', () => { render(); - expect(screen.getByTestId('mock-editor').parentElement?.parentElement?.parentElement).toHaveClass('custom'); + expect(screen.getByTestId('mock-editor').parentElement?.parentElement?.parentElement?.parentElement).toHaveClass( + 'custom' + ); }); test(`Renders with ${styles.modifiers.readOnly} when isReadOnly = true`, () => { render(); - expect(screen.getByTestId('mock-editor').parentElement?.parentElement?.parentElement).toHaveClass( + expect(screen.getByTestId('mock-editor').parentElement?.parentElement?.parentElement?.parentElement).toHaveClass( styles.modifiers.readOnly ); }); diff --git a/packages/react-code-editor/src/components/CodeEditor/__test__/__snapshots__/CodeEditor.test.tsx.snap b/packages/react-code-editor/src/components/CodeEditor/__test__/__snapshots__/CodeEditor.test.tsx.snap index 80f02fa90b6..40904d4b169 100644 --- a/packages/react-code-editor/src/components/CodeEditor/__test__/__snapshots__/CodeEditor.test.tsx.snap +++ b/packages/react-code-editor/src/components/CodeEditor/__test__/__snapshots__/CodeEditor.test.tsx.snap @@ -6,124 +6,130 @@ exports[`Matches snapshot with control buttons enabled 1`] = ` class="pf-v6-c-code-editor" > - -
-
-
@@ -136,25 +142,29 @@ exports[`Matches snapshot without props 1`] = ` class="pf-v6-c-code-editor" >
-
-
-