11import type { KartonService } from '../karton' ;
22import type { TabController } from './tab-controller' ;
33import type { SelectedElement } from '@shared/selected-elements' ;
4+ import type { AppState } from '@shared/karton-contracts/ui' ;
45
56export class ChatStateController {
67 private uiKarton : KartonService ;
78 private tabs : Record < string , TabController > ;
9+ private getActiveBrowserGroupId : ( ) => string ;
810
9- constructor ( uiKarton : KartonService , tabs : Record < string , TabController > ) {
11+ constructor (
12+ uiKarton : KartonService ,
13+ tabs : Record < string , TabController > ,
14+ getActiveBrowserGroupId : ( ) => string ,
15+ ) {
1016 this . uiKarton = uiKarton ;
1117 this . tabs = tabs ;
18+ this . getActiveBrowserGroupId = getActiveBrowserGroupId ;
1219 }
1320
1421 /**
@@ -32,6 +39,7 @@ export class ChatStateController {
3239 // Add if not exists
3340 if ( ! elements . some ( ( e ) => e . stagewiseId === element . stagewiseId ) )
3441 elements . push ( element ) ;
42+ this . syncGroupSelection ( draft . browser . tabsByAgent , elements ) ;
3543 } ) ;
3644 this . broadcastSelectionUpdate ( ) ;
3745 }
@@ -45,6 +53,10 @@ export class ChatStateController {
4553 draft . browser . selectedElements = draft . browser . selectedElements . filter (
4654 ( e ) => e . stagewiseId !== elementId ,
4755 ) ;
56+ this . syncGroupSelection (
57+ draft . browser . tabsByAgent ,
58+ draft . browser . selectedElements ,
59+ ) ;
4860 } ) ;
4961 this . broadcastSelectionUpdate ( ) ;
5062 }
@@ -55,6 +67,10 @@ export class ChatStateController {
5567 public clearElements ( ) : void {
5668 this . uiKarton . setState ( ( draft ) => {
5769 draft . browser . selectedElements = [ ] ;
70+ this . syncGroupSelection (
71+ draft . browser . tabsByAgent ,
72+ draft . browser . selectedElements ,
73+ ) ;
5874 } ) ;
5975 this . broadcastSelectionUpdate ( ) ;
6076 }
@@ -66,6 +82,10 @@ export class ChatStateController {
6682 public restoreElements ( elements : SelectedElement [ ] ) : void {
6783 this . uiKarton . setState ( ( draft ) => {
6884 draft . browser . selectedElements = [ ...elements ] ;
85+ this . syncGroupSelection (
86+ draft . browser . tabsByAgent ,
87+ draft . browser . selectedElements ,
88+ ) ;
6989 } ) ;
7090 this . broadcastSelectionUpdate ( ) ;
7191 }
@@ -90,4 +110,14 @@ export class ChatStateController {
90110 tab . updateContextSelection ( allSelectedElements ) ;
91111 } ) ;
92112 }
113+
114+ private syncGroupSelection (
115+ tabsByAgent : AppState [ 'browser' ] [ 'tabsByAgent' ] ,
116+ selectedElements : SelectedElement [ ] ,
117+ ) : void {
118+ const group = tabsByAgent [ this . getActiveBrowserGroupId ( ) ] ;
119+ if ( group ) {
120+ group . selectedElements = [ ...selectedElements ] ;
121+ }
122+ }
93123}
0 commit comments