@@ -209,7 +209,11 @@ function nestedBooleanRecordsEqual(
209209 return true ;
210210}
211211
212- export function syncProjects ( state : UiState , projects : readonly SyncProjectInput [ ] ) : UiState {
212+ export function syncProjects (
213+ state : UiState ,
214+ projects : readonly SyncProjectInput [ ] ,
215+ defaultExpanded = false ,
216+ ) : UiState {
213217 const previousProjectCwdById = new Map ( currentProjectCwdById ) ;
214218 const previousProjectIdByCwd = new Map (
215219 [ ...previousProjectCwdById . entries ( ) ] . map ( ( [ projectId , cwd ] ) => [ cwd , projectId ] as const ) ,
@@ -234,7 +238,7 @@ export function syncProjects(state: UiState, projects: readonly SyncProjectInput
234238 ( previousProjectIdForCwd ? previousExpandedById [ previousProjectIdForCwd ] : undefined ) ??
235239 ( persistedExpandedProjectCwds . size > 0
236240 ? persistedExpandedProjectCwds . has ( project . cwd )
237- : true ) ;
241+ : defaultExpanded ) ;
238242 nextExpandedById [ project . key ] = expanded ;
239243 return {
240244 id : project . key ,
@@ -456,8 +460,8 @@ export function setThreadChangedFilesExpanded(
456460 } ;
457461}
458462
459- export function toggleProject ( state : UiState , projectId : string ) : UiState {
460- const expanded = state . projectExpandedById [ projectId ] ?? true ;
463+ export function toggleProject ( state : UiState , projectId : string , defaultExpanded = false ) : UiState {
464+ const expanded = state . projectExpandedById [ projectId ] ?? defaultExpanded ;
461465 return {
462466 ...state ,
463467 projectExpandedById : {
@@ -467,8 +471,13 @@ export function toggleProject(state: UiState, projectId: string): UiState {
467471 } ;
468472}
469473
470- export function setProjectExpanded ( state : UiState , projectId : string , expanded : boolean ) : UiState {
471- if ( ( state . projectExpandedById [ projectId ] ?? true ) === expanded ) {
474+ export function setProjectExpanded (
475+ state : UiState ,
476+ projectId : string ,
477+ expanded : boolean ,
478+ defaultExpanded = false ,
479+ ) : UiState {
480+ if ( ( state . projectExpandedById [ projectId ] ?? defaultExpanded ) === expanded ) {
472481 return state ;
473482 }
474483 return {
@@ -524,14 +533,14 @@ export function reorderProjects(
524533}
525534
526535interface UiStateStore extends UiState {
527- syncProjects : ( projects : readonly SyncProjectInput [ ] ) => void ;
536+ syncProjects : ( projects : readonly SyncProjectInput [ ] , defaultExpanded ?: boolean ) => void ;
528537 syncThreads : ( threads : readonly SyncThreadInput [ ] ) => void ;
529538 markThreadVisited : ( threadId : string , visitedAt ?: string ) => void ;
530539 markThreadUnread : ( threadId : string , latestTurnCompletedAt : string | null | undefined ) => void ;
531540 clearThreadUi : ( threadId : string ) => void ;
532541 setThreadChangedFilesExpanded : ( threadId : string , turnId : string , expanded : boolean ) => void ;
533- toggleProject : ( projectId : string ) => void ;
534- setProjectExpanded : ( projectId : string , expanded : boolean ) => void ;
542+ toggleProject : ( projectId : string , defaultExpanded ?: boolean ) => void ;
543+ setProjectExpanded : ( projectId : string , expanded : boolean , defaultExpanded ?: boolean ) => void ;
535544 reorderProjects : (
536545 draggedProjectIds : readonly string [ ] ,
537546 targetProjectIds : readonly string [ ] ,
@@ -540,7 +549,8 @@ interface UiStateStore extends UiState {
540549
541550export const useUiStateStore = create < UiStateStore > ( ( set ) => ( {
542551 ...readPersistedState ( ) ,
543- syncProjects : ( projects ) => set ( ( state ) => syncProjects ( state , projects ) ) ,
552+ syncProjects : ( projects , defaultExpanded ) =>
553+ set ( ( state ) => syncProjects ( state , projects , defaultExpanded ) ) ,
544554 syncThreads : ( threads ) => set ( ( state ) => syncThreads ( state , threads ) ) ,
545555 markThreadVisited : ( threadId , visitedAt ) =>
546556 set ( ( state ) => markThreadVisited ( state , threadId , visitedAt ) ) ,
@@ -549,9 +559,10 @@ export const useUiStateStore = create<UiStateStore>((set) => ({
549559 clearThreadUi : ( threadId ) => set ( ( state ) => clearThreadUi ( state , threadId ) ) ,
550560 setThreadChangedFilesExpanded : ( threadId , turnId , expanded ) =>
551561 set ( ( state ) => setThreadChangedFilesExpanded ( state , threadId , turnId , expanded ) ) ,
552- toggleProject : ( projectId ) => set ( ( state ) => toggleProject ( state , projectId ) ) ,
553- setProjectExpanded : ( projectId , expanded ) =>
554- set ( ( state ) => setProjectExpanded ( state , projectId , expanded ) ) ,
562+ toggleProject : ( projectId , defaultExpanded ) =>
563+ set ( ( state ) => toggleProject ( state , projectId , defaultExpanded ) ) ,
564+ setProjectExpanded : ( projectId , expanded , defaultExpanded ) =>
565+ set ( ( state ) => setProjectExpanded ( state , projectId , expanded , defaultExpanded ) ) ,
555566 reorderProjects : ( draggedProjectIds , targetProjectIds ) =>
556567 set ( ( state ) => reorderProjects ( state , draggedProjectIds , targetProjectIds ) ) ,
557568} ) ) ;
0 commit comments