jasonraimondi/traverse

View on GitHub
src/main/MainMenu.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { app, Menu, MenuItemConstructorOptions, shell } from 'electron';
import * as findKey from 'lodash.findkey';

import { IS_DEV_ENV, IS_MAC_OS } from '@/environment';
import { openMainWindow, reloadAllWindows } from '@/main';
import { ElectronSettingService } from '@/main/SettingsService';

const editMenu: MenuItemConstructorOptions = {
  label: 'Edit',
  submenu: [
    { role: 'undo' },
    { role: 'redo' },
    { type: 'separator' },
    { role: 'cut' },
    { role: 'copy' },
    { role: 'paste' },
    { role: 'delete' },
    // { role: 'selectall' },
  ],
};

const windowMenu: MenuItemConstructorOptions = {
  role: 'window',
  submenu: [
    { role: 'minimize' },
    { role: 'close' },
  ],
};

const windowMenuMacSubmenu: Menu | MenuItemConstructorOptions[] = [
  { role: 'minimize' },
  { role: 'zoom' },
  { type: 'separator' },
  { role: 'front' },
];

const helpMenu: MenuItemConstructorOptions = {
  role: 'help',
  submenu: [
    {
      label: 'Reset Settings',
      click() {
        const userId = ElectronSettingService.get('userId');
        ElectronSettingService.deleteAll();
        if (userId) {
          ElectronSettingService.set('userId', userId);
        }
        reloadAllWindows();
      },
    },
    {
      label: 'Traverse Website',
      click() {
        shell.openExternal('https://github.com/jasonraimondi/traverse');
      },
    },
  ],
};

const fileMenu: MenuItemConstructorOptions = {
  label: 'File',
  submenu: [
    {
      label: 'New Window',
      accelerator: 'CmdOrCtrl+N',
      click() {
        openMainWindow();
      },
    },
    {
      label: 'Reload',
      accelerator: 'CmdOrCtrl+R',
      click() {
        reloadAllWindows();
      },
    },
    { type: 'separator' },
    { role: 'close' },
  ],
};

const macTraverseAppMenu: MenuItemConstructorOptions = {
  label: app.getName(),
  submenu: [
    { role: 'about' },
    // { type: 'separator' },
    // { role: 'api', submenu: [] },
    { type: 'separator' },
    { role: 'hide' },
    // { role: 'hideothers' },
    { role: 'unhide' },
    { type: 'separator' },
    { role: 'quit' },
  ],
};

const developerMenu = {
  label: 'Developer',
  submenu: [
    { role: 'toggledevtools' },
  ],
};

const template: MenuItemConstructorOptions[] = [
  editMenu,
  windowMenu,
  helpMenu,
];

if (true) {
  template.unshift(fileMenu);
  template.unshift(macTraverseAppMenu);
  const windowMenuKey = findKey(template, (menuItem: MenuItemConstructorOptions) => menuItem.role === 'window');
  template[windowMenuKey].submenu = windowMenuMacSubmenu;
}

if (IS_DEV_ENV) {
  // template.push(developerMenu);
}

export const fileMenuTemplate = template;