@@ -35,7 +35,12 @@ export function SessionHeader() {
3535 const projectDirectory = createMemo ( ( ) => base64Decode ( params . dir ?? "" ) )
3636
3737 const sessions = createMemo ( ( ) => ( sync . data . session ?? [ ] ) . filter ( ( s ) => ! s . parentID ) )
38- const currentSession = createMemo ( ( ) => sessions ( ) . find ( ( s ) => s . id === params . id ) )
38+ const currentSession = createMemo ( ( ) => sync . data . session . find ( ( s ) => s . id === params . id ) )
39+ const parentSession = createMemo ( ( ) => {
40+ const current = currentSession ( )
41+ if ( ! current ?. parentID ) return undefined
42+ return sync . data . session . find ( ( s ) => s . id === current . parentID )
43+ } )
3944 const shareEnabled = createMemo ( ( ) => sync . data . config . share !== "disabled" )
4045 const worktrees = createMemo ( ( ) => layout . projects . list ( ) . map ( ( p ) => p . worktree ) , [ ] , { equals : same } )
4146
@@ -45,6 +50,8 @@ export function SessionHeader() {
4550
4651 function navigateToSession ( session : Session | undefined ) {
4752 if ( ! session ) return
53+ // Only navigate if we're actually changing to a different session
54+ if ( session . id === params . id ) return
4855 navigate ( `/${ params . dir } /session/${ session . id } ` )
4956 }
5057
@@ -79,18 +86,56 @@ export function SessionHeader() {
7986 </ Select >
8087 < div class = "text-text-weaker" > /</ div >
8188 </ div >
82- < Select
83- options = { sessions ( ) }
84- current = { currentSession ( ) }
85- placeholder = "New session"
86- label = { ( x ) => x . title }
87- value = { ( x ) => x . id }
88- onSelect = { navigateToSession }
89- class = "text-14-regular text-text-base max-w-[calc(100vw-180px)] md:max-w-md"
90- variant = "ghost"
91- />
89+ < Show
90+ when = { parentSession ( ) }
91+ fallback = {
92+ < >
93+ < Select
94+ options = { sessions ( ) }
95+ current = { currentSession ( ) }
96+ placeholder = "New session"
97+ label = { ( x ) => x . title }
98+ value = { ( x ) => x . id }
99+ onSelect = { navigateToSession }
100+ class = "text-14-regular text-text-base max-w-[calc(100vw-180px)] md:max-w-md"
101+ variant = "ghost"
102+ />
103+ </ >
104+ }
105+ >
106+ < div class = "flex items-center gap-2 min-w-0" >
107+ < Select
108+ options = { sessions ( ) }
109+ current = { parentSession ( ) }
110+ placeholder = "Back to parent session"
111+ label = { ( x ) => x . title }
112+ value = { ( x ) => x . id }
113+ onSelect = { ( session ) => {
114+ // Only navigate if selecting a different session than current parent
115+ const currentParent = parentSession ( )
116+ if ( session && currentParent && session . id !== currentParent . id ) {
117+ navigateToSession ( session )
118+ }
119+ } }
120+ class = "text-14-regular text-text-base max-w-[calc(100vw-180px)] md:max-w-md"
121+ variant = "ghost"
122+ />
123+ < div class = "text-text-weaker" > /</ div >
124+ < div class = "flex items-center gap-1.5 min-w-0" >
125+ < Tooltip value = "Back to parent session" >
126+ < button
127+ type = "button"
128+ class = "flex items-center justify-center gap-1 p-1 rounded hover:bg-surface-raised-base-hover active:bg-surface-raised-base-active transition-colors flex-shrink-0"
129+ onClick = { ( ) => navigateToSession ( parentSession ( ) ) }
130+ >
131+ < Icon name = "arrow-left" size = "small" class = "text-icon-base" />
132+ </ button >
133+ </ Tooltip >
134+ </ div >
135+ </ div >
136+ </ Show >
92137 </ div >
93- < Show when = { currentSession ( ) } >
138+ < Show when = { currentSession ( ) && ! parentSession ( ) } >
94139 < TooltipKeybind class = "hidden xl:block" title = "New session" keybind = { command . keybind ( "session.new" ) } >
95140 < IconButton as = { A } href = { `/${ params . dir } /session` } icon = "edit-small-2" variant = "ghost" />
96141 </ TooltipKeybind >
0 commit comments