@@ -87,7 +87,9 @@ export const EnsembleParser = {
8787 const screen = parse ( yaml ) as EnsembleScreenYAML ;
8888 const viewGroup = get ( screen , "ViewGroup" ) ;
8989 if ( viewGroup ) {
90- return EnsembleParser . parseMenu ( viewGroup ) ;
90+ // add Import block to the viewGroup
91+ set ( viewGroup , "Import" , get ( screen , "Import" ) ) ;
92+ return EnsembleParser . parseMenu ( viewGroup , app ) ;
9193 }
9294
9395 const pageScreen = EnsembleParser . parseScreen ( id , name , screen , app ) ;
@@ -255,7 +257,7 @@ export const EnsembleParser = {
255257 global,
256258 header : unwrapHeader ( header ) ,
257259 footer : unwrapFooter ( footer ) ,
258- menu : menu ? EnsembleParser . parseMenu ( menu ) : undefined ,
260+ menu : menu ? EnsembleParser . parseMenu ( menu , app ) : undefined ,
259261 body : viewWidget ,
260262 apis,
261263 styles : get ( view , "styles" ) ,
@@ -293,7 +295,7 @@ export const EnsembleParser = {
293295 } ;
294296 } ,
295297
296- parseMenu : ( menu : object ) : EnsembleMenuModel => {
298+ parseMenu : ( menu : object , app : ApplicationDTO ) : EnsembleMenuModel => {
297299 const menuType = head ( Object . keys ( menu ) ) ;
298300 if ( ! menuType || ! includes ( [ "SideBar" , "Drawer" ] , String ( menuType ) ) ) {
299301 throw Error ( "Invalid ViewGroup definition: invalid menu type" ) ;
@@ -305,13 +307,30 @@ export const EnsembleParser = {
305307 const footerDef = get ( menu , [ menuType , "footer" ] ) as
306308 | { [ key : string ] : unknown }
307309 | undefined ;
310+
311+ // handle import block
312+ const importBlock = get ( menu , "Import" ) as unknown [ ] | undefined ;
313+ let importedScripts : string | undefined ;
314+ if ( isArray ( importBlock ) ) {
315+ const matchingScripts = filter ( app . scripts , ( script ) =>
316+ includes ( importBlock , script . name ) ,
317+ ) ;
318+ if ( ! isEmpty ( matchingScripts ) ) {
319+ importedScripts = matchingScripts . reduce (
320+ ( acc , script ) => acc . concat ( script . content , "\n\n" ) ,
321+ "" ,
322+ ) ;
323+ }
324+ }
325+
308326 return {
309327 id : get ( menu , [ menuType , "id" ] ) as string | undefined ,
310328 type : menuType as EnsembleMenuModelType ,
311329 items : ( get ( menu , [ menuType , "items" ] ) as [ ] ) ?? [ ] ,
312330 header : headerDef ? unwrapWidget ( headerDef ) : undefined ,
313331 footer : footerDef ? unwrapWidget ( footerDef ) : undefined ,
314332 styles : get ( menu , [ menuType , "styles" ] ) as { [ key : string ] : unknown } ,
333+ importedScripts,
315334 } ;
316335 } ,
317336} ;
0 commit comments