@@ -46,29 +46,49 @@ import PauseSvg from "./assets/pause-icon.svg";
4646 const viewport = new Viewport ( app . renderer . events ) ;
4747 app . stage . addChild ( viewport ) ;
4848
49+ // Get the layer’s menu
50+ const layerSelect = document . getElementById (
51+ "layer-select" ,
52+ ) as HTMLSelectElement ;
53+
4954 // Left bar logic
5055 const leftBar = LeftBar . getFrom ( document ) ;
5156 RightBar . getInstance ( ) ;
5257
53- // Add router button
54- leftBar . addButton (
55- RouterSvg ,
56- ( ) => AddDevice ( ctx , DeviceType . Router ) ,
57- "Add Router" ,
58- ) ;
58+ const addRouterButton = ( ) =>
59+ leftBar . addButton (
60+ RouterSvg ,
61+ ( ) => AddDevice ( ctx , DeviceType . Router ) ,
62+ "Add Router" ,
63+ ) ;
64+
65+ const addHostButton = ( ) =>
66+ leftBar . addButton (
67+ ComputerSvg ,
68+ ( ) => AddDevice ( ctx , DeviceType . Host ) ,
69+ "Add Host" ,
70+ ) ;
71+
72+ function setButtonsByLayer ( layer : string ) {
73+ leftBar . clear ( ) ;
74+
75+ const buttonConfig : Record < string , ( ( ) => void ) [ ] > = {
76+ application : [ addHostButton ] ,
77+ transport : [ addHostButton ] ,
78+ network : [ addRouterButton , addHostButton ] ,
79+ link : [ addRouterButton , addHostButton ] ,
80+ } ;
81+
82+ buttonConfig [ layer ] ?. forEach ( ( addButton ) => addButton ( ) ) ;
83+ }
5984
60- // Add Host button
61- leftBar . addButton (
62- ComputerSvg ,
63- ( ) => AddDevice ( ctx , DeviceType . Host ) ,
64- "Add Host" ,
65- ) ;
85+ setButtonsByLayer ( layerSelect . value ) ;
6686
67- ctx . initialize ( viewport ) ;
87+ // Initialize Context
88+ ctx . initialize ( viewport , layerSelect . value ) ;
6889
6990 // Ticker logic
7091 // app.ticker.add(() => { });
71-
7292 const lBar = document . getElementById ( "left-bar" ) ;
7393 const rBar = document . getElementById ( "right-bar" ) ;
7494 const tBar = document . getElementById ( "top-bar" ) ;
@@ -126,16 +146,14 @@ import PauseSvg from "./assets/pause-icon.svg";
126146 pauseButton . onclick = triggerPause ;
127147
128148 // (!) For layer abstraction functionality
129- const layerSelect = document . getElementById (
130- "layer-select" ,
131- ) as HTMLSelectElement ;
132-
133149 const selectNewLayer = ( event : Event ) => {
134150 const selectedLayer = ( event . target as HTMLSelectElement ) . value ;
135151 console . log ( `Layer selected: ${ selectedLayer } ` ) ;
136152
137153 if ( selectedLayer ) {
138154 ctx . changeViewGraph ( selectedLayer ) ;
155+ // LeftBar is reset
156+ setButtonsByLayer ( selectedLayer ) ;
139157 }
140158 } ;
141159
@@ -149,7 +167,7 @@ import PauseSvg from "./assets/pause-icon.svg";
149167 } ;
150168
151169 // TODO: load from local storage directly, without first generating a context
152- loadFromLocalStorage ( ctx ) ;
170+ loadFromLocalStorage ( ctx , layerSelect . value ) ;
153171
154172 console . log ( "initialized!" ) ;
155173} ) ( ) ;
0 commit comments