@@ -21,10 +21,10 @@ import {
2121 PromptImageUpload ,
2222 PromptDocumentUpload ,
2323} from "@agenta/ui/components/presentational"
24- import type { ViewMode } from "@agenta/ui/drill-in"
24+ import { messageViewModeAtom , toMessageViewMode } from "@agenta/ui/drill-in"
2525import type { UploadFile } from "antd"
2626import clsx from "clsx"
27- import { useAtomValue , useSetAtom } from "jotai"
27+ import { useAtom , useAtomValue , useSetAtom } from "jotai"
2828import JSON5 from "json5"
2929import { v4 as uuidv4 } from "uuid"
3030
@@ -215,9 +215,13 @@ const TurnMessageAdapter: React.FC<Props> = ({
215215
216216 return fallback
217217 } , [ computedText , msg ] )
218- const [ viewMode , setViewMode ] = useState < ViewMode > ( "text" )
219- const isCodeMode = viewMode === "json" || viewMode === "yaml"
220- const editorLanguage = viewMode === "yaml" ? "yaml" : "json"
218+ // Shared + persisted across all message editors (see messageViewModeAtom).
219+ // The atom is typed `ViewMode` (can hold "form"), so coerce to a mode this
220+ // editor can actually render before deriving any mode-dependent state.
221+ const [ viewMode , setViewMode ] = useAtom ( messageViewModeAtom )
222+ const chatViewMode = toMessageViewMode ( viewMode )
223+ const isCodeMode = chatViewMode === "json" || chatViewMode === "yaml"
224+ const editorLanguage = chatViewMode === "yaml" ? "yaml" : "json"
221225
222226 const effectiveDisabled = Boolean ( disabled )
223227 const isUserRole = kind === "user" && ! isToolKind
@@ -656,7 +660,7 @@ const TurnMessageAdapter: React.FC<Props> = ({
656660 isJSON = { isCodeMode }
657661 isTool = { isCodeMode }
658662 language = { editorLanguage }
659- markdownView = { viewMode === "markdown " }
663+ markdownView = { chatViewMode === "text " }
660664 onFocusChange = { handleEditorFocusChange }
661665 text = { p ?. json }
662666 enableTokens = { messageProps ?. enableTokens ?? ! isCodeMode }
@@ -686,7 +690,7 @@ const TurnMessageAdapter: React.FC<Props> = ({
686690 resultHashes = { propsResultHashes ?? resultHashes }
687691 results = { results }
688692 text = { p ?. json ?? editorText }
689- viewMode = { viewMode }
693+ viewMode = { chatViewMode }
690694 onViewModeChange = { setViewMode }
691695 collapsed = { isMessageCollapsed }
692696 allowFileUpload = { isUserRole && ! effectiveDisabled }
@@ -750,7 +754,7 @@ const TurnMessageAdapter: React.FC<Props> = ({
750754 state = { editorState }
751755 isJSON = { isCodeMode }
752756 language = { editorLanguage }
753- markdownView = { viewMode === "markdown " }
757+ markdownView = { chatViewMode === "text " }
754758 enableTokens = { messageProps ?. enableTokens ?? ! isCodeMode }
755759 headerRight = {
756760 < TurnMessageHeaderOptions
@@ -761,7 +765,7 @@ const TurnMessageAdapter: React.FC<Props> = ({
761765 resultHashes = { propsResultHashes ?? resultHashes }
762766 results = { results }
763767 text = { editorText }
764- viewMode = { viewMode }
768+ viewMode = { chatViewMode }
765769 onViewModeChange = { setViewMode }
766770 collapsed = { isMessageCollapsed }
767771 allowFileUpload = { isUserRole && ! effectiveDisabled }
0 commit comments