@@ -6485,6 +6485,262 @@ describe('dockviewComponent', () => {
64856485 } ) ;
64866486 } ) ;
64876487
6488+ describe ( 'moveGroup' , ( ) => {
6489+ test ( '#1' , ( ) => {
6490+ const container = document . createElement ( 'div' ) ;
6491+
6492+ const dockview = new DockviewComponent ( container , {
6493+ createComponent ( options ) {
6494+ switch ( options . name ) {
6495+ case 'default' :
6496+ return new PanelContentPartTest (
6497+ options . id ,
6498+ options . name
6499+ ) ;
6500+ default :
6501+ throw new Error ( `unsupported` ) ;
6502+ }
6503+ } ,
6504+ } ) ;
6505+ const api = new DockviewApi ( dockview ) ;
6506+
6507+ dockview . layout ( 1000 , 1000 ) ;
6508+
6509+ let panel1 ! : IDockviewPanel ;
6510+ let panel2 ! : IDockviewPanel ;
6511+ let panel3 ! : IDockviewPanel ;
6512+
6513+ const reset = ( ) => {
6514+ dockview . clear ( ) ;
6515+
6516+ panel1 = api . addPanel ( {
6517+ id : 'panel_1' ,
6518+ component : 'default' ,
6519+ } ) ;
6520+
6521+ panel2 = api . addPanel ( {
6522+ id : 'panel_2' ,
6523+ component : 'default' ,
6524+ position : { direction : 'right' } ,
6525+ } ) ;
6526+
6527+ panel3 = api . addPanel ( {
6528+ id : 'panel_3' ,
6529+ component : 'default' ,
6530+ position : { direction : 'right' } ,
6531+ } ) ;
6532+
6533+ panel2 . api . setActive ( ) ;
6534+ } ;
6535+
6536+ // default case
6537+
6538+ reset ( ) ;
6539+ expect ( [
6540+ panel1 . group . api . isActive ,
6541+ panel2 . group . api . isActive ,
6542+ ] ) . toEqual ( [ false , true ] ) ;
6543+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6544+ false ,
6545+ true ,
6546+ ] ) ;
6547+
6548+ // move inactive group
6549+
6550+ reset ( ) ;
6551+ panel1 . group . api . moveTo ( { group : panel2 . group , position : 'right' } ) ;
6552+ expect ( [
6553+ panel1 . group . api . isActive ,
6554+ panel2 . group . api . isActive ,
6555+ ] ) . toEqual ( [ true , false ] ) ;
6556+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6557+ true ,
6558+ false ,
6559+ ] ) ;
6560+
6561+ // move active group
6562+
6563+ reset ( ) ;
6564+ panel2 . group . api . moveTo ( { group : panel1 . group , position : 'left' } ) ;
6565+ expect ( [
6566+ panel1 . group . api . isActive ,
6567+ panel2 . group . api . isActive ,
6568+ ] ) . toEqual ( [ false , true ] ) ;
6569+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6570+ false ,
6571+ true ,
6572+ ] ) ;
6573+
6574+ // move inactive group (with inactive flag)
6575+
6576+ reset ( ) ;
6577+ panel1 . group . api . moveTo ( {
6578+ group : panel2 . group ,
6579+ position : 'right' ,
6580+ inactive : true ,
6581+ } ) ;
6582+ expect ( [
6583+ panel1 . group . api . isActive ,
6584+ panel2 . group . api . isActive ,
6585+ ] ) . toEqual ( [ false , true ] ) ;
6586+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6587+ false ,
6588+ true ,
6589+ ] ) ;
6590+
6591+ // move active group (with inactive flag)
6592+
6593+ reset ( ) ;
6594+ panel2 . group . api . moveTo ( {
6595+ group : panel1 . group ,
6596+ position : 'left' ,
6597+ inactive : true ,
6598+ } ) ;
6599+ expect ( [
6600+ panel1 . group . api . isActive ,
6601+ panel2 . group . api . isActive ,
6602+ ] ) . toEqual ( [ false , true ] ) ;
6603+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6604+ false ,
6605+ true ,
6606+ ] ) ;
6607+
6608+ // merge inactive group with active group
6609+
6610+ reset ( ) ;
6611+ panel1 . group . api . moveTo ( { group : panel2 . group } ) ;
6612+ expect ( [
6613+ panel1 . group . api . isActive ,
6614+ panel2 . group . api . isActive ,
6615+ ] ) . toEqual ( [ true , true ] ) ;
6616+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6617+ true ,
6618+ false ,
6619+ ] ) ;
6620+
6621+ // merge active group with inactive group
6622+
6623+ reset ( ) ;
6624+ panel2 . group . api . moveTo ( { group : panel1 . group } ) ;
6625+ expect ( [
6626+ panel1 . group . api . isActive ,
6627+ panel2 . group . api . isActive ,
6628+ ] ) . toEqual ( [ true , true ] ) ;
6629+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6630+ false ,
6631+ true ,
6632+ ] ) ;
6633+
6634+ // merge inactive group with active group (with inactive flag)
6635+
6636+ reset ( ) ;
6637+ panel1 . group . api . moveTo ( { group : panel2 . group , inactive : true } ) ;
6638+ expect ( [
6639+ panel1 . group . api . isActive ,
6640+ panel2 . group . api . isActive ,
6641+ ] ) . toEqual ( [ true , true ] ) ;
6642+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6643+ false ,
6644+ true ,
6645+ ] ) ;
6646+
6647+ // merge active group with inactive group (with inactive flag)
6648+
6649+ reset ( ) ;
6650+ panel2 . group . api . moveTo ( { group : panel1 . group , inactive : true } ) ;
6651+ expect ( [
6652+ panel1 . group . api . isActive ,
6653+ panel2 . group . api . isActive ,
6654+ ] ) . toEqual ( [ true , true ] ) ;
6655+ expect ( [ panel1 . api . isActive , panel2 . api . isActive ] ) . toEqual ( [
6656+ false ,
6657+ true ,
6658+ ] ) ;
6659+
6660+ // merge inactive group with inactive group
6661+
6662+ reset ( ) ;
6663+ panel1 . group . api . moveTo ( { group : panel3 . group } ) ;
6664+ expect ( [
6665+ panel1 . group . api . isActive ,
6666+ panel2 . group . api . isActive ,
6667+ panel3 . group . api . isActive ,
6668+ ] ) . toEqual ( [ true , false , true ] ) ;
6669+ expect ( [
6670+ panel1 . api . isActive ,
6671+ panel2 . api . isActive ,
6672+ panel3 . api . isActive ,
6673+ ] ) . toEqual ( [ true , false , false ] ) ;
6674+
6675+ // merge inactive group with inactive group (with inactive flag)
6676+
6677+ reset ( ) ;
6678+ panel1 . group . api . moveTo ( { group : panel3 . group , inactive : true } ) ;
6679+ expect ( [
6680+ panel1 . group . api . isActive ,
6681+ panel2 . group . api . isActive ,
6682+ panel3 . group . api . isActive ,
6683+ ] ) . toEqual ( [ false , true , false ] ) ;
6684+ expect ( [
6685+ panel1 . api . isActive ,
6686+ panel2 . api . isActive ,
6687+ panel3 . api . isActive ,
6688+ ] ) . toEqual ( [ false , true , false ] ) ;
6689+ } ) ;
6690+ } ) ;
6691+
6692+ describe ( 'movePanel' , ( ) => {
6693+ test ( '#1' , ( ) => {
6694+ const container = document . createElement ( 'div' ) ;
6695+
6696+ const dockview = new DockviewComponent ( container , {
6697+ createComponent ( options ) {
6698+ switch ( options . name ) {
6699+ case 'default' :
6700+ return new PanelContentPartTest (
6701+ options . id ,
6702+ options . name
6703+ ) ;
6704+ default :
6705+ throw new Error ( `unsupported` ) ;
6706+ }
6707+ } ,
6708+ } ) ;
6709+ const api = new DockviewApi ( dockview ) ;
6710+
6711+ dockview . layout ( 1000 , 1000 ) ;
6712+
6713+ let panel1 ! : IDockviewPanel ;
6714+ let panel2 ! : IDockviewPanel ;
6715+
6716+ const reset = ( ) => {
6717+ dockview . clear ( ) ;
6718+
6719+ panel1 = api . addPanel ( {
6720+ id : 'panel_1' ,
6721+ component : 'default' ,
6722+ } ) ;
6723+
6724+ panel2 = api . addPanel ( {
6725+ id : 'panel_2' ,
6726+ component : 'default' ,
6727+ position : { direction : 'right' } ,
6728+ } ) ;
6729+ } ;
6730+
6731+ // default case
6732+ //
6733+ // last panel of group to within another group
6734+ //
6735+ // panel from group of at least 2 panels to within another group
6736+ //
6737+ // last panel of group to a new group within same branch
6738+ //
6739+ // last panel of group to a new group not within same branch
6740+ //
6741+ } ) ;
6742+ } ) ;
6743+
64886744 test ( 'that `onDidLayoutChange` only subscribes to events after initial subscription time' , ( ) => {
64896745 jest . useFakeTimers ( ) ;
64906746
0 commit comments