@@ -28,6 +28,7 @@ export function getAvatarColors(key?: string) {
2828type SessionTabs = {
2929 active ?: string
3030 all : string [ ]
31+ history : string [ ]
3132}
3233
3334type SessionView = {
@@ -621,16 +622,20 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
621622 ) ,
622623 )
623624
624- const tabs = createMemo ( ( ) => store . sessionTabs [ key ( ) ] ?? { all : [ ] } )
625+ const tabs = createMemo ( ( ) => store . sessionTabs [ key ( ) ] ?? { all : [ ] , history : [ ] } )
625626 return {
626627 tabs,
627628 active : createMemo ( ( ) => ( tabs ( ) . active === "review" ? undefined : tabs ( ) . active ) ) ,
628629 all : createMemo ( ( ) => tabs ( ) . all . filter ( ( tab ) => tab !== "review" ) ) ,
629630 setActive ( tab : string | undefined ) {
630631 const session = key ( )
631632 if ( tab === "review" ) return
632- if ( ! store . sessionTabs [ session ] ) {
633- setStore ( "sessionTabs" , session , { all : [ ] , active : tab } )
633+ const current = store . sessionTabs [ session ]
634+ if ( current ?. active && current . active !== tab ) {
635+ setStore ( "sessionTabs" , session , "history" , [ ...( current . history ?? [ ] ) , current . active ] )
636+ }
637+ if ( ! current ) {
638+ setStore ( "sessionTabs" , session , { all : [ ] , active : tab , history : [ ] } )
634639 } else {
635640 setStore ( "sessionTabs" , session , "active" , tab )
636641 }
@@ -639,41 +644,50 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
639644 const session = key ( )
640645 const next = all . filter ( ( tab ) => tab !== "review" )
641646 if ( ! store . sessionTabs [ session ] ) {
642- setStore ( "sessionTabs" , session , { all : next , active : undefined } )
647+ setStore ( "sessionTabs" , session , { all : next , active : undefined , history : [ ] } )
643648 } else {
644649 setStore ( "sessionTabs" , session , "all" , next )
645650 }
646651 } ,
647652 async open ( tab : string ) {
648653 if ( tab === "review" ) return
649654 const session = key ( )
650- const current = store . sessionTabs [ session ] ?? { all : [ ] }
655+ const current = store . sessionTabs [ session ] ?? { all : [ ] , history : [ ] }
656+
657+ const pushHistory = ( ) => {
658+ if ( current . active && current . active !== tab ) {
659+ setStore ( "sessionTabs" , session , "history" , [ ...( current . history ?? [ ] ) , current . active ] )
660+ }
661+ }
651662
652663 if ( tab === "context" ) {
653664 const all = [ tab , ...current . all . filter ( ( x ) => x !== tab ) ]
654665 if ( ! store . sessionTabs [ session ] ) {
655- setStore ( "sessionTabs" , session , { all, active : tab } )
666+ setStore ( "sessionTabs" , session , { all, active : tab , history : [ ] } )
656667 return
657668 }
669+ pushHistory ( )
658670 setStore ( "sessionTabs" , session , "all" , all )
659671 setStore ( "sessionTabs" , session , "active" , tab )
660672 return
661673 }
662674
663675 if ( ! current . all . includes ( tab ) ) {
664676 if ( ! store . sessionTabs [ session ] ) {
665- setStore ( "sessionTabs" , session , { all : [ tab ] , active : tab } )
677+ setStore ( "sessionTabs" , session , { all : [ tab ] , active : tab , history : [ ] } )
666678 return
667679 }
680+ pushHistory ( )
668681 setStore ( "sessionTabs" , session , "all" , [ ...current . all , tab ] )
669682 setStore ( "sessionTabs" , session , "active" , tab )
670683 return
671684 }
672685
673686 if ( ! store . sessionTabs [ session ] ) {
674- setStore ( "sessionTabs" , session , { all : current . all , active : tab } )
687+ setStore ( "sessionTabs" , session , { all : current . all , active : tab , history : [ ] } )
675688 return
676689 }
690+ pushHistory ( )
677691 setStore ( "sessionTabs" , session , "active" , tab )
678692 } ,
679693 close ( tab : string ) {
@@ -682,12 +696,14 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
682696 if ( ! current ) return
683697
684698 const all = current . all . filter ( ( x ) => x !== tab )
699+ const history = ( current . history ?? [ ] ) . filter ( ( x ) => x !== tab )
700+
685701 batch ( ( ) => {
686702 setStore ( "sessionTabs" , session , "all" , all )
703+ setStore ( "sessionTabs" , session , "history" , history )
687704 if ( current . active !== tab ) return
688705
689- const index = current . all . findIndex ( ( f ) => f === tab )
690- const next = all [ index - 1 ] ?? all [ 0 ]
706+ const next = history . pop ( ) ?? all [ 0 ]
691707 setStore ( "sessionTabs" , session , "active" , next )
692708 } )
693709 } ,
0 commit comments