Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro: Electron capitulo 6

Olá,

Fazendo o exercício de adicionar um item no Tray menu encontrei um erro e não consegui encontrar o problema:

A JavaScript error occurred in the main process

Uncaught Exception:
TypeError: Error processing argument at index 0, conversion failure from [object Array]
    at TypeError (native)
    at EventEmitter.ipcMain.on (/home/wt/Willian/projetos/alura/electon-alura/alura-timer/main.js:63:10)
    at emitTwo (events.js:106:13)
    at EventEmitter.emit (events.js:191:7)
    at WebContents.<anonymous> (/home/wt/Willian/projetos/alura/electon-alura/alura-timer/node_modules/electron/dist/resources/electron.asar/browser/api/web-contents.js:222:13)
    at emitTwo (events.js:106:13)
    at WebContents.emit (events.js:191:7)

main.js

ipcMain.on('curso-adicionado', (event, novoCurso)=>{
    let novoTemplate = templateGenerator.adicionaCursoNoTray(novoCurso,mainWindow);
    let novoTrayMenu = Menu.buildFromTemplate(novoTemplate);
    tray.setContextMenu(novoTemplate);
})

renderer,js

let $ = document.querySelector.bind(document);
let campoAdicionar = $('.campo-adicionar');
let botaoAdicionar = $('.botao-adicionar');

botaoAdicionar.addEventListener('click',function(){
    let novoCurso = campoAdicionar.value;
    labelCurso.textContent = novoCurso;
    labelTempo.textContent = '00:00:00';
    campoAdicionar.value = '';
    ipcRenderer.send('curso-adicionado',novoCurso);
});

template,js

const data = require('./data');

module.exports = {
    templateInical: null,
    geraTrayTemplate(win){
        let template = [
          {'label': 'Cursos'},
          {type: 'separator'}
        ];        

        let cursos = data.pegaNomeDosCursos();
        cursos.forEach((curso)=>{
            let menuItem ={
                label: curso,
                type: 'radio',
                click: ()=>{
                    win.send('curso-trocado',curso);
                }
            }
            template.push(menuItem);
        });
        this.templateInicial = template;
        return template;
    },
    adicionaCursoNoTray(curso, win) {
        this.templateInicial.push({
            label: curso,
            type: 'radio',
            checked: true,
            click: () => {
                win.send('curso-trocado', curso);
            }
        });
        return this.templateInicial;
    }
}
2 respostas

Olá ,

Encontrei o erro, estava passando parâmetro errado na criação do menu:

errado:

ipcMain.on('curso-adicionado', (event, novoCurso)=>{
    let novoTemplate = templateGenerator.adicionaCursoNoTray(novoCurso,mainWindow);
    let novoTrayMenu = Menu.buildFromTemplate(novoTemplate);
    tray.setContextMenu(novoTemplate);
})

certo

ipcMain.on('curso-adicionado', (event, novoCurso)=>{
    let novoTemplate = templateGenerator.adicionaCursoNoTray(novoCurso,mainWindow);
    let novoTrayMenu = Menu.buildFromTemplate(novoTemplate);
    tray.setContextMenu(novoTrayMenu);
})
solução!

Boa Willian, o que precisar pode abrir um novo tópico :D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software