@@ -382,17 +382,24 @@ export default function ChatView({ threadId }: ChatViewProps) {
382382 const setStickyComposerModel = useComposerDraftStore ( ( store ) => store . setStickyModel ) ;
383383 const timestampFormat = settings . timestampFormat ;
384384 const navigate = useNavigate ( ) ;
385- const previewOpen = usePreviewStateStore ( ( state ) => state . globalOpen ) ;
386- const togglePreviewOpen = usePreviewStateStore ( ( state ) => state . toggleGlobalOpen ) ;
387- const setPreviewOpen = usePreviewStateStore ( ( state ) => state . setGlobalOpen ) ;
388- const previewDock = usePreviewStateStore ( ( state ) => state . dockByThreadId [ threadId ] ?? "right" ) ;
389- const previewSize = usePreviewStateStore (
390- ( state ) => state . sizeByThreadId [ threadId ] ?? PREVIEW_SPLIT_DEFAULT_SIZE_PX ,
385+ const activeProjectId = threads . find ( ( t ) => t . id === threadId ) ?. projectId ?? null ;
386+ const previewOpen = usePreviewStateStore ( ( state ) =>
387+ activeProjectId ? ( state . openByProjectId [ activeProjectId ] ?? false ) : false ,
388+ ) ;
389+ const togglePreviewOpen = usePreviewStateStore ( ( state ) => state . toggleProjectOpen ) ;
390+ const setPreviewOpen = usePreviewStateStore ( ( state ) => state . setProjectOpen ) ;
391+ const previewDock = usePreviewStateStore ( ( state ) =>
392+ activeProjectId ? ( state . dockByProjectId [ activeProjectId ] ?? "right" ) : "right" ,
393+ ) ;
394+ const previewSize = usePreviewStateStore ( ( state ) =>
395+ activeProjectId
396+ ? ( state . sizeByProjectId [ activeProjectId ] ?? PREVIEW_SPLIT_DEFAULT_SIZE_PX )
397+ : PREVIEW_SPLIT_DEFAULT_SIZE_PX ,
391398 ) ;
392399 const previewStacked = previewDock === "top" || previewDock === "bottom" ;
393- const setPreviewDock = usePreviewStateStore ( ( state ) => state . setThreadDock ) ;
394- const togglePreviewLayout = usePreviewStateStore ( ( state ) => state . toggleThreadLayout ) ;
395- const setPreviewSize = usePreviewStateStore ( ( state ) => state . setThreadSize ) ;
400+ const setPreviewDock = usePreviewStateStore ( ( state ) => state . setProjectDock ) ;
401+ const togglePreviewLayout = usePreviewStateStore ( ( state ) => state . toggleProjectLayout ) ;
402+ const setPreviewSize = usePreviewStateStore ( ( state ) => state . setProjectSize ) ;
396403 const previewSplitRef = useRef < HTMLDivElement | null > ( null ) ;
397404 const previewResizeStateRef = useRef < {
398405 pointerId : number ;
@@ -671,9 +678,7 @@ export default function ChatView({ threadId }: ChatViewProps) {
671678 ) ;
672679 const latestTurnSettled = isLatestTurnSettled ( activeLatestTurn , activeThread ?. session ?? null ) ;
673680 const activeProject = projects . find ( ( p ) => p . id === activeThread ?. projectId ) ;
674- const previewPanelKey = activeThread
675- ? `${ activeThread . id } :${ activeProject ?. id ?? "no-project" } :${ previewDock } `
676- : null ;
681+ const previewPanelKey = activeProject ? `${ activeProject . id } :${ previewDock } ` : null ;
677682
678683 const openPullRequestDialog = useCallback (
679684 ( reference ?: string ) => {
@@ -1593,7 +1598,7 @@ export default function ChatView({ threadId }: ChatViewProps) {
15931598 const handlePreviewUrl = useCallback (
15941599 ( url : string ) => {
15951600 if ( ! activeProject || ! activeThread ) return ;
1596- setPreviewOpen ( true ) ;
1601+ setPreviewOpen ( activeProject . id , true ) ;
15971602 void previewBridgeRef ?. createTab ( { url } ) ;
15981603 } ,
15991604 [ activeProject , activeThread , setPreviewOpen , previewBridgeRef ] ,
@@ -4549,9 +4554,9 @@ export default function ChatView({ threadId }: ChatViewProps) {
45494554 PREVIEW_SPLIT_MIN_SIZE_PX ,
45504555 Math . min ( Math . round ( nextSizeUnclamped ) , maxSize ) ,
45514556 ) ;
4552- setPreviewSize ( threadId , nextSize ) ;
4557+ if ( activeProjectId ) setPreviewSize ( activeProjectId , nextSize ) ;
45534558 } ,
4554- [ previewDock , previewStacked , setPreviewSize , threadId ] ,
4559+ [ activeProjectId , previewDock , previewStacked , setPreviewSize ] ,
45554560 ) ;
45564561
45574562 const handlePreviewResizePointerEnd = useCallback ( ( event : React . PointerEvent < HTMLDivElement > ) => {
@@ -4604,20 +4609,22 @@ export default function ChatView({ threadId }: ChatViewProps) {
46044609 }
46054610
46064611 event . preventDefault ( ) ;
4612+ if ( ! activeProjectId ) return ;
4613+
46074614 if ( previewOpen && previewDock === targetDock ) {
4608- setPreviewOpen ( false ) ;
4615+ setPreviewOpen ( activeProjectId , false ) ;
46094616 return ;
46104617 }
46114618
4612- setPreviewOpen ( true ) ;
4613- setPreviewDock ( threadId , targetDock ) ;
4619+ setPreviewOpen ( activeProjectId , true ) ;
4620+ setPreviewDock ( activeProjectId , targetDock ) ;
46144621 } ;
46154622
46164623 window . addEventListener ( "keydown" , onWindowKeyDown ) ;
46174624 return ( ) => {
46184625 window . removeEventListener ( "keydown" , onWindowKeyDown ) ;
46194626 } ;
4620- } , [ activeProject , previewDock , previewOpen , setPreviewDock , setPreviewOpen , threadId ] ) ;
4627+ } , [ activeProject , activeProjectId , previewDock , previewOpen , setPreviewDock , setPreviewOpen ] ) ;
46214628
46224629 // Empty state: no active thread
46234630 if ( ! activeThread ) {
@@ -4670,8 +4677,8 @@ export default function ChatView({ threadId }: ChatViewProps) {
46704677 onImportProjectScripts = { importProjectScripts }
46714678 onToggleTerminal = { toggleTerminalVisibility }
46724679 onToggleDiff = { onToggleDiff }
4673- onTogglePreview = { ( ) => togglePreviewOpen ( ) }
4674- onTogglePreviewLayout = { ( ) => togglePreviewLayout ( activeThread . id ) }
4680+ onTogglePreview = { ( ) => activeProjectId && togglePreviewOpen ( activeProjectId ) }
4681+ onTogglePreviewLayout = { ( ) => activeProjectId && togglePreviewLayout ( activeProjectId ) }
46754682 />
46764683 </ header >
46774684
@@ -4706,8 +4713,8 @@ export default function ChatView({ threadId }: ChatViewProps) {
47064713 >
47074714 < PreviewPanel
47084715 key = { previewPanelKey ?? undefined }
4709- threadId = { activeThread . id }
4710- onClose = { ( ) => setPreviewOpen ( false ) }
4716+ projectId = { activeProject ! . id }
4717+ onClose = { ( ) => setPreviewOpen ( activeProject ! . id , false ) }
47114718 />
47124719 </ div >
47134720 < div
@@ -5527,8 +5534,8 @@ export default function ChatView({ threadId }: ChatViewProps) {
55275534 >
55285535 < PreviewPanel
55295536 key = { previewPanelKey ?? undefined }
5530- threadId = { activeThread . id }
5531- onClose = { ( ) => setPreviewOpen ( false ) }
5537+ projectId = { activeProject ! . id }
5538+ onClose = { ( ) => setPreviewOpen ( activeProject ! . id , false ) }
55325539 />
55335540 </ div >
55345541 </ >
0 commit comments