ryzokuken/harbor

View on GitHub
src/renderer/main.js

Summary

Maintainability
A
0 mins
Test Coverage
/* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */
import { ipcRenderer as ipc, shell } from 'electron';
import Vue from 'vue';

import Notifications from 'vue-notification';

import App from './App';

Vue.config.productionTip = false;
Vue.use(Notifications);

/* eslint-disable no-new */
const vm = new Vue({
  components: { App },
  template:
    '<App :loggedIn="loggedIn" :username="username" @login="handleLogin" @logout="handleLogout" @link="handleLink" />',
  data: {
    loggedIn: false,
    username: undefined,
  },
  methods: {
    handleLogin(data) {
      ipc.send('login', data);
    },
    handleLogout() {
      ipc.send('logout', this.username);
    },
    handleLink(url) {
      shell.openExternal(url);
    },
  },
}).$mount('#app');

ipc.on('logged-in', (event, username) => {
  vm.loggedIn = true;
  vm.username = username;
});

ipc.on('logged-out', () => {
  if (vm.username) {
    vm.loggedIn = false;
    vm.username = undefined;
  } else {
    throw Error('Username not properly set');
  }
});

ipc.on('login-failure', (event, err) => {
  vm.$notify(err);
});

ipc.on('logout-failure', (event, err) => {
  vm.$notify(err);
});

ipc.on('disconnected', () => {
  vm.loggedIn = false;
  vm.username = undefined;
});