@@ -5,8 +5,12 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
55import { MessageComposerContext } from './context/MessageComposerContext'
66import { useAuthStore , useChatStore , useStore } from '@stores'
77import { TChannelSettings } from '@types'
8- import { toolbarStorage } from './helpers/toolbarStorage'
9- import { getComposerState , clearComposerState , ComposerState } from '@db/messageComposerDB'
8+ import {
9+ getComposerState ,
10+ clearComposerState ,
11+ setComposerStateDebounced ,
12+ ComposerState
13+ } from '@db/messageComposerDB'
1014import { SignInDialog } from '@components/ui/dialogs'
1115
1216import { EditorContent } from '@tiptap/react'
@@ -62,7 +66,7 @@ const MessageComposer = ({
6266 const channels = useChatStore ( ( state ) => state . channels )
6367 const { workspaceId } = useStore ( ( state ) => state . settings )
6468 const editorRef = useRef < HTMLDivElement | null > ( null )
65- const [ isToolbarOpen , setIsToolbarOpen ] = useState ( ( ) => toolbarStorage . get ( ) )
69+ const [ isToolbarOpen , setIsToolbarOpen ] = useState ( false )
6670 const setOrUpdateChatRoom = useChatStore ( ( state ) => state . setOrUpdateChatRoom )
6771 const openDialog = useStore ( ( state ) => state . openDialog )
6872
@@ -94,7 +98,8 @@ const MessageComposer = ({
9498 loading,
9599 onSubmit : ( ) => submitRef . current ?.( ) ,
96100 workspaceId,
97- channelId
101+ channelId,
102+ isToolbarOpen
98103 } )
99104
100105 const chatChannels = useChatStore ( ( state ) => state . workspaceSettings . channels )
@@ -133,6 +138,8 @@ const MessageComposer = ({
133138 if ( draft ?. html ) {
134139 editor . chain ( ) . setContent ( draft . html ) . focus ( 'end' ) . run ( )
135140 }
141+ // Restore toolbar state
142+ if ( draft ?. isToolbarOpen !== undefined ) setIsToolbarOpen ( draft . isToolbarOpen )
136143 } )
137144 } , [ editor , workspaceId , channelId , editMessageMemory , replyMessageMemory , commentMessageMemory ] )
138145
@@ -432,16 +439,21 @@ const MessageComposer = ({
432439 setAttributes ( )
433440 } , [ editor , editorRef ] )
434441
435- // Save toolbar toggle state to localStorage
436- useEffect ( ( ) => {
437- toolbarStorage . set ( isToolbarOpen )
438- } , [ isToolbarOpen ] )
439-
440442 const toggleToolbar = useCallback ( ( ) => {
441443 setIsToolbarOpen ( ! isToolbarOpen )
442444 editor ?. commands . focus ( )
443445 } , [ setIsToolbarOpen , isToolbarOpen , editor ] )
444446
447+ // Persist toolbar state when it changes independently
448+ useEffect ( ( ) => {
449+ if ( ! workspaceId || ! channelId || ! editor ) return
450+
451+ const text = editor . getText ( ) || ''
452+ const html = editor . getHTML ( ) || ''
453+
454+ setComposerStateDebounced ( workspaceId , channelId , { text, html, isToolbarOpen } )
455+ } , [ isToolbarOpen , workspaceId , channelId , editor ] )
456+
445457 useEffect ( ( ) => {
446458 editor && setOrUpdateChatRoom ( 'editorInstance' , editor )
447459 editorRef . current && setOrUpdateChatRoom ( 'editorRef' , editorRef . current )
0 commit comments