@@ -470,13 +470,30 @@ const menuFactory = (core, proc, win) => {
470470 const __ = translatable ( translations ) ;
471471 const getMountpoints = ( ) => fs . mountpoints ( true ) ;
472472
473+ const menuItemsFromMiddleware = async ( type , middlewareArgs ) => {
474+ if ( ! core . has ( 'osjs/middleware' ) ) {
475+ return [ ] ;
476+ }
477+
478+ const items = core . make ( 'osjs/middleware' )
479+ . get ( `osjs/filemanager:menu:${ type } ` ) ;
480+
481+ const promises = items . map ( fn => fn ( middlewareArgs ) ) ;
482+
483+ const resolved = await Promise . all ( promises ) ;
484+ const result = resolved
485+ . filter ( items => items instanceof Array ) ;
486+
487+ return [ ] . concat ( ...result ) ;
488+ } ;
489+
473490 const createFileMenu = ( ) => ( [
474491 { label : _ ( 'LBL_UPLOAD' ) , onclick : ( ) => win . emit ( 'filemanager:menu:upload' ) } ,
475492 { label : _ ( 'LBL_MKDIR' ) , onclick : ( ) => win . emit ( 'filemanager:menu:mkdir' ) } ,
476493 { label : _ ( 'LBL_QUIT' ) , onclick : ( ) => win . emit ( 'filemanager:menu:quit' ) }
477494 ] ) ;
478495
479- const createEditMenu = ( item , isContextMenu ) => {
496+ const createEditMenu = async ( item , isContextMenu ) => {
480497 const emitter = name => win . emit ( name , item ) ;
481498
482499 if ( item && isSpecialFile ( item . filename ) ) {
@@ -521,6 +538,8 @@ const menuFactory = (core, proc, win) => {
521538 } ) ;
522539 }
523540
541+ const appendItems = await menuItemsFromMiddleware ( 'edit' , { file : item , isContextMenu} ) ;
542+
524543 return [
525544 ...openMenu ,
526545 {
@@ -538,7 +557,8 @@ const menuFactory = (core, proc, win) => {
538557 label : _ ( 'LBL_DOWNLOAD' ) ,
539558 disabled : ! item || isDirectory || ! isValidFile ,
540559 onclick : ( ) => emitter ( 'filemanager:menu:download' )
541- }
560+ } ,
561+ ...appendItems
542562 ] ;
543563 } ;
544564
@@ -562,10 +582,10 @@ const menuFactory = (core, proc, win) => {
562582 go : createGoMenu
563583 } ;
564584
565- return ( { name, ev} , args , isContextMenu = false ) => {
585+ return async ( { name, ev} , args , isContextMenu = false ) => {
566586 if ( menuItems [ name ] ) {
567587 contextmenu . show ( {
568- menu : menuItems [ name ] ( args , isContextMenu ) ,
588+ menu : await menuItems [ name ] ( args , isContextMenu ) ,
569589 position : isContextMenu ? ev : ev . target
570590 } ) ;
571591 } else {
0 commit comments