@@ -625,8 +625,9 @@ export const Chat = ({
625625 ) => {
626626 ensureQueueActiveBeforeSubmit ( )
627627
628+ const preserveInput = options ?. preserveInputValue === true
628629 const previousInputValue =
629- options ?. preserveInputValue === true
630+ preserveInput
630631 ? ( ( ) => {
631632 const {
632633 inputValue : text ,
@@ -636,39 +637,58 @@ export const Chat = ({
636637 return { text, cursorPosition, lastEditDueToNav }
637638 } ) ( )
638639 : null
640+ const preservedPendingImages =
641+ preserveInput && useChatStore . getState ( ) . pendingImages . length > 0
642+ ? [ ...useChatStore . getState ( ) . pendingImages ]
643+ : null
639644
640- const result = await routeUserPrompt ( {
641- abortControllerRef,
642- agentMode : mode ,
643- inputRef,
644- inputValue : content ,
645- isChainInProgressRef,
646- isStreaming,
647- logoutMutation,
648- streamMessageIdRef,
649- addToQueue,
650- clearMessages,
651- saveToHistory,
652- scrollToLatest,
653- sendMessage,
654- setCanProcessQueue,
655- setInputFocused,
656- setInputValue,
657- setIsAuthenticated,
658- setMessages,
659- setUser,
660- stopStreaming,
661- } )
645+ if ( preserveInput && preservedPendingImages ) {
646+ useChatStore . getState ( ) . clearPendingImages ( )
647+ }
662648
663- if ( previousInputValue ) {
664- setInputValue ( {
665- text : previousInputValue . text ,
666- cursorPosition : previousInputValue . cursorPosition ,
667- lastEditDueToNav : previousInputValue . lastEditDueToNav ,
649+ try {
650+ const result = await routeUserPrompt ( {
651+ abortControllerRef,
652+ agentMode : mode ,
653+ inputRef,
654+ inputValue : content ,
655+ isChainInProgressRef,
656+ isStreaming,
657+ logoutMutation,
658+ streamMessageIdRef,
659+ addToQueue,
660+ clearMessages,
661+ saveToHistory,
662+ scrollToLatest,
663+ sendMessage,
664+ setCanProcessQueue,
665+ setInputFocused,
666+ setInputValue,
667+ setIsAuthenticated,
668+ setMessages,
669+ setUser,
670+ stopStreaming,
668671 } )
669- }
670672
671- return result
673+ return result
674+ } finally {
675+ if ( previousInputValue ) {
676+ setInputValue ( {
677+ text : previousInputValue . text ,
678+ cursorPosition : previousInputValue . cursorPosition ,
679+ lastEditDueToNav : previousInputValue . lastEditDueToNav ,
680+ } )
681+ }
682+
683+ if ( preserveInput && preservedPendingImages ) {
684+ const currentPending = useChatStore . getState ( ) . pendingImages
685+ if ( currentPending . length === 0 ) {
686+ useChatStore . setState ( ( state ) => {
687+ state . pendingImages = preservedPendingImages
688+ } )
689+ }
690+ }
691+ }
672692 } ,
673693 )
674694
0 commit comments