@@ -28,6 +28,11 @@ export type DraftTab = {
2828
2929export type Tab = SessionTab | DraftTab
3030
31+ export type TabInfo = {
32+ title ?: string
33+ directory ?: string
34+ }
35+
3136type RecentTab = {
3237 key ?: string
3338}
@@ -64,6 +69,7 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
6469 createStore < Tab [ ] > ( [ ] ) ,
6570 )
6671 const [ recent , setRecent , , recentReady ] = persisted ( Persist . window ( "tabs.recent" ) , createStore < RecentTab > ( { } ) )
72+ const [ info , setInfo ] = persisted ( Persist . window ( "tabs.info" ) , createStore < Record < string , TabInfo > > ( { } ) )
6773 const [ closed , setClosed , , closedReady ] = persisted ( Persist . window ( "tabs.closed" ) , createStore < ClosedTab [ ] > ( [ ] ) )
6874
6975 const params = useParams ( )
@@ -102,6 +108,15 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
102108 for ( const key of draftPersistedKeys ( ) ) removePersisted ( Persist . draft ( draftID , key ) , platform )
103109 }
104110
111+ const removeInfo = ( key : string ) => {
112+ if ( ! info [ key ] ) return
113+ setInfo (
114+ produce ( ( draft ) => {
115+ delete draft [ key ]
116+ } ) ,
117+ )
118+ }
119+
105120 onCleanup ( memory . dispose )
106121
107122 createEffect ( ( ) => {
@@ -110,11 +125,19 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
110125 const next = store . filter ( ( tab ) => servers . has ( tab . server ) )
111126 if ( next . length !== store . length ) {
112127 for ( const tab of store ) {
113- if ( ! servers . has ( tab . server ) ) memory . remove ( tabKey ( tab ) )
128+ if ( ! servers . has ( tab . server ) ) {
129+ const key = tabKey ( tab )
130+ memory . remove ( key )
131+ removeInfo ( key )
132+ }
114133 }
115134 setStore ( ( ) => next )
116135 }
117136 if ( recent . key && ! next . some ( ( tab ) => tabKey ( tab ) === recent . key ) ) setRecentKey ( undefined )
137+ const keys = new Set ( next . map ( tabKey ) )
138+ for ( const key of Object . keys ( info ) ) {
139+ if ( ! keys . has ( key ) ) removeInfo ( key )
140+ }
118141 } )
119142
120143 createEffect ( ( ) => {
@@ -150,6 +173,7 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
150173 if ( nextTab ) navigateTab ( nextTab )
151174 } ) . finally ( ( ) => closing . delete ( key ) )
152175 memory . remove ( key )
176+ removeInfo ( key )
153177 if ( draftID ) removeDraftPersisted ( draftID )
154178 }
155179
@@ -264,6 +288,7 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
264288 const removed = store . filter ( ( tab ) => tab . server === key ) . map ( tabKey )
265289 setStore ( ( tabs ) => tabs . filter ( ( tab ) => tab . server !== key ) )
266290 for ( const key of removed ) memory . remove ( key )
291+ for ( const key of removed ) removeInfo ( key )
267292 if ( recent . key && removed . includes ( recent . key ) ) setRecentKey ( undefined )
268293 for ( const draftID of drafts ) removeDraftPersisted ( draftID )
269294 if ( server . key === key ) navigate ( "/" )
@@ -318,6 +343,14 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
318343 if ( recent . key && removed . includes ( recent . key ) ) setRecentKey ( undefined )
319344 } )
320345 for ( const key of removed ) memory . remove ( key )
346+ for ( const key of removed ) removeInfo ( key )
347+ } ,
348+ rememberSessionInfo ( tab : SessionTab , session : Session ) {
349+ const key = tabKey ( tab )
350+ const next = { title : session . title , directory : session . directory }
351+ const current = info [ key ]
352+ if ( current ?. title === next . title && current . directory === next . directory ) return
353+ setInfo ( key , next )
321354 } ,
322355 select : navigateTab ,
323356 remember ( tab : Tab ) {
@@ -342,6 +375,6 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
342375 } ,
343376 }
344377
345- return { ...actions , store, ready, recentReady }
378+ return { ...actions , store, info , ready, recentReady }
346379 } ,
347380} )
0 commit comments