@@ -9,10 +9,22 @@ import {
99 View ,
1010} from '../io/state-file/schema' ;
1111
12+ function cloneLayout ( layout : Layout ) : Layout {
13+ return {
14+ direction : layout . direction ,
15+ items : layout . items . map ( ( item ) =>
16+ typeof item === 'string' ? item : cloneLayout ( item )
17+ ) ,
18+ ...( layout . name && { name : layout . name } ) ,
19+ } ;
20+ }
21+
1222interface State {
1323 layout : Layout ;
1424 viewSpecs : Record < string , ViewSpec > ;
1525 activeViewID : string ;
26+ maximizedViewID : string | null ;
27+ originalLayout : Layout | null ;
1628}
1729
1830export const useViewStore = defineStore ( 'view' , {
@@ -23,6 +35,8 @@ export const useViewStore = defineStore('view', {
2335 } ,
2436 viewSpecs : structuredClone ( InitViewSpecs ) ,
2537 activeViewID : '' ,
38+ maximizedViewID : null ,
39+ originalLayout : null ,
2640 } ) ,
2741 getters : {
2842 viewIDs ( state ) {
@@ -44,6 +58,7 @@ export const useViewStore = defineStore('view', {
4458 }
4559 } ,
4660 setLayout ( layout : Layout ) {
61+ this . restoreLayout ( ) ;
4762 this . layout = layout ;
4863
4964 const layoutsToProcess = [ layout ] ;
@@ -59,6 +74,33 @@ export const useViewStore = defineStore('view', {
5974 } ) ;
6075 }
6176 } ,
77+ maximizeView ( viewID : string ) {
78+ if ( this . maximizedViewID ) {
79+ this . restoreLayout ( ) ;
80+ }
81+
82+ this . originalLayout = cloneLayout ( this . layout ) ;
83+ this . maximizedViewID = viewID ;
84+
85+ this . layout = {
86+ direction : LayoutDirection . H ,
87+ items : [ viewID ] ,
88+ } ;
89+ } ,
90+ restoreLayout ( ) {
91+ if ( this . originalLayout ) {
92+ this . layout = this . originalLayout ;
93+ this . originalLayout = null ;
94+ this . maximizedViewID = null ;
95+ }
96+ } ,
97+ toggleMaximizeView ( viewID : string ) {
98+ if ( this . maximizedViewID === viewID ) {
99+ this . restoreLayout ( ) ;
100+ } else {
101+ this . maximizeView ( viewID ) ;
102+ }
103+ } ,
62104 serialize ( stateFile : StateFile ) {
63105 const viewConfigStore = useViewConfigStore ( ) ;
64106 const { manifest } = stateFile ;
0 commit comments