user-interfaces/menu/menu.js

const { resolve } = require('path');
const { Menu, dialog, BrowserWindow } = require('electron');
const { ENV } = require('../../env');
const FILE = require('../../util-functions/file');

/**
 * Funcion que inicializa el menu principal
 * @param {boolean} dev - entorno de desarrollo
 */
function initMainMenu( dev ) {
    
    /** @type {Array<Electron.MenuItemConstructorOptions | Electron.MenuItem>} */
    const templateMenu = [
        {
            label: 'Ayuda',
            role: 'help',
            submenu: [
                // documentacion
                {
                    label: 'Ayuda al usuario',
                    accelerator: dev ? 'F2' : 'F1',
                    click: ( _, browserWindow ) => {

                        // creacion de una ventana modal
                        const url = resolve( ENV.PATH_DOCUMENTS, 'manual-usuario-productos-app.pdf' );
                        const modalWindow = new BrowserWindow({
                            parent: browserWindow,
                            modal: true,
                            show: false,
                            height: 600,
                            width: 400,
                        });

                        // oculta el menu al usuario
                        modalWindow.setMenuBarVisibility( false );

                        // carga el pdf
                        modalWindow.loadFile( url );

                        modalWindow.once('ready-to-show', () => {
                            modalWindow.show();
                        });
                    }, 
                },
                // acerca de
                {
                    label: 'Acerca de',
                    accelerator: 'Ctrl+h',
                    click: () => {
                        
                        try {
                            const message = FILE.readFile( resolve( ENV.PATH_DOCUMENTS, 'acerca.txt' ), true );
                            
                            dialog.showMessageBox( null, {
                                title: 'Acerca de',
                                message 
                            });
                        
                        } catch ( error ) {
                            throw error;
                        }
                    }, 
                },
            ]
        },
    ];
    
    // aƱadimos las opciones de desarrollador
    // si el entorno es de desarrollo
    if ( dev ) {

        // si ya esta agregado el elemento ventana no cargamos la opcion
        templateMenu.unshift({
            label: 'Ventana',
            role: 'window',
            submenu: [
                { role: 'reload', },
                { role: 'forceReload', },
                { type: 'separator', },
                { role: 'toggleDevTools',},
            ]
        });

        // manual tecnico
        templateMenu[templateMenu.length - 1].submenu.unshift(
            {
                label: 'Ayuda para desarrolladores',
                accelerator: 'F1',
                click: ( _, browserWindow ) => {
        
                    // creacion de una ventana modal
                    const url = resolve( ENV.PATH_DOCUMENTS, 'manual-tecnico-productos-app.pdf' );
                    const modalWindow = new BrowserWindow({
                        parent: browserWindow,
                        modal: true,
                        show: false,
                        height: 600,
                        width: 400,
                    });
        
                    // oculta el menu al usuario
                    modalWindow.setMenuBarVisibility( false );
        
                    // carga el pdf
                    modalWindow.loadFile( url );
        
                    modalWindow.once('ready-to-show', () => {
                        modalWindow.show();
                    });
                },
            }, 
            {  type: 'separator' }
        );
    }

    // creamos el menu
    const menu = Menu.buildFromTemplate( templateMenu );
    Menu.setApplicationMenu( menu );
}



module.exports = {
    initMainMenu,
}