aaaaaa
aaaaaa
quando faço o exercicio dois da esse erro
Uncaught Exception:
TypeError: Invalid template for Menu
at Function.Menu.buildFromTemplate (/Users/yagosilva/Desktop/alura-timer/node_modules/electron/dist/Electron.app/Contents/Resources/electron.asar/browser/api/menu.js:171:11)
at App.app.on (/Users/yagosilva/Desktop/alura-timer/main.js:21:30)
at emitTwo (events.js:130:20)
at App.emit (events.js:213:7
segue o codigo main:
const { app, BrowserWindow, ipcMain,Tray, Menu } = require('electron');
const data = require('./data')
const templateGenerator = require('./template');
let tray = null;
let mainWindow = null;
app.on('ready', () => {
let mainWindow = new BrowserWindow({
width: 600,
height: 400,
});
tray = new Tray(__dirname + '/app/img/icon-tray.png');
let template = templateGenerator.geraTrayTemplate(mainWindow);
let trayMenu = Menu.buildFromTemplate(template);
let templateMenu = templateGenerator.geraMenuPrincipalTemplate(app);
let menuPrincipal = Menu.buildFromTemplate(templateMenu);
Menu.setApplicationMenu(menuPrincipal);
tray.setContextMenu(trayMenu);
mainWindow.loadURL(`file://${__dirname}/app/index.html`);
});
app.on('window-all-closed', () => {
app.quit();
});
let sobreWindow = null;
ipcMain.on('abrir-janela-sobre', () => {
if(sobreWindow == null){
sobreWindow = new BrowserWindow({
width: 300,
height: 220,
alwaysOnTop: true,
frame: false
});
sobreWindow.on('closed', () => {
sobreWindow = null;
})
}
sobreWindow.loadURL(`file://${__dirname}/app/sobre.html`);
});
ipcMain.on('fechar-janela-sobre', () => {
sobreWindow.close();
});
ipcMain.on('curso-parado', (event,curso, tempoEstudado) => {
console.log(`O curso ${curso} foi estudado por ${tempoEstudado}`);
data.salvaDados(curso, tempoEstudado);
});
ipcMain.on('curso-adicionado', (event, novoCurso) =>{
let novoTemplate = templateGenerator.adicionarCursoNotray(novoCurso,mainWindow);
let novoTrayTemplate = Menu.buildFromTemplate(novoTemplate);
tray.setContextMenu(novoTrayTemplate);
});
template:
const data = require('./data');
const ipcMain = require('electron');
module.exports = {
templateInicial: null,
geraTrayTemplate(win){
let template = [
{
label: 'Cursos'
},
{
type:'separator'
}
];
this.templateInicial = template;
let cursos = data.pegaNomeDosCursos();
cursos.forEach((curso) => {
let menuItem ={
label: curso,
type: 'radio',
click: () => {
win.send('curso-trocado', curso);
}
}
template.push(menuItem);
})
return template;
},
adicionarCursoNotray(curso,win){
this.templateInicial.push({
label: curso,
type: 'radio',
checked: true,
click: () => {
win.send('curso-adicionado', curso);
}
})
return this.templateInicial;
},
geraMenuPrincipalTemplate(app){
let templateMenu = [
{
label: 'Sobre',
submenu: [
{
label: 'Sobre o Alura Timer',
click:() =>{
ipcMain.emit('abrir-janela-sobre');
}
}
]
}
];
if( process.platform == 'darwin'){
templateMenu.unshift(
{
label: app.getName(),
submenu: [
{
label: 'Estou rodando no Mac!'
}
]
}
)
}
}
}
Fala ai Yago, tudo bem? Olhando o erro:
TypeError: Invalid template for Menu
Parece que algum template que você está passando para a função buildFromTemplate
do Menu
está inválido, talvez por algum problema na estrutura ou sintaxe do mesmo.
Sendo assim, para a gente testar se realmente o problema é essa função, tente comentar as duas, no caso comentar os seguintes trechos de código:
let trayMenu = Menu.buildFromTemplate(template);
tray.setContextMenu(trayMenu);
e
let menuPrincipal = Menu.buildFromTemplate(templateMenu);
Menu.setApplicationMenu(menuPrincipal);
E tente rodar a aplicação novamente, caso tudo funcione, remova o comentários de apenas um deles, pode ser qualquer um. Se funcionar, remove o comentários do segundo, provavelmente se o problema for essa função, um deles irá dar erro.
Espero ter ajudado.