Skip to content
Snippets Groups Projects
Unverified Commit 803289ee authored by Michael Clark's avatar Michael Clark Committed by GitHub
Browse files

:electron: Electron menu.js :arrow_right: menu.ts (#2978)

parent 76cdad4f
No related branches found
No related tags found
No related merge requests found
...@@ -17,7 +17,7 @@ import isDev from 'electron-is-dev'; ...@@ -17,7 +17,7 @@ import isDev from 'electron-is-dev';
import promiseRetry from 'promise-retry'; import promiseRetry from 'promise-retry';
import about from './about'; import about from './about';
import getMenu from './menu'; import { getMenu } from './menu';
import updater from './updater'; import updater from './updater';
import { import {
get as getWindowState, get as getWindowState,
......
const { Menu, ipcMain, app, shell } = require('electron'); import {
MenuItemConstructorOptions,
Menu,
ipcMain,
app,
shell,
} from 'electron';
function getMenu(isDev, createWindow, budgetId) { export function getMenu(
const template = [ isDev: boolean,
createWindow: () => Promise<void>,
budgetId: string | undefined = undefined,
) {
const template: MenuItemConstructorOptions[] = [
{ {
label: 'File', label: 'File',
submenu: [ submenu: [
{ {
label: 'Load Backup...', label: 'Load Backup...',
enabled: false, enabled: false,
click(item, focusedWindow) { click(_item, focusedWindow) {
if (focusedWindow && budgetId) { if (focusedWindow && budgetId) {
if (focusedWindow.webContents.getTitle() === 'Actual') { if (focusedWindow.webContents.getTitle() === 'Actual') {
focusedWindow.webContents.executeJavaScript( focusedWindow.webContents.executeJavaScript(
...@@ -24,7 +34,7 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -24,7 +34,7 @@ function getMenu(isDev, createWindow, budgetId) {
{ {
label: 'Manage files...', label: 'Manage files...',
accelerator: 'CmdOrCtrl+O', accelerator: 'CmdOrCtrl+O',
click(item, focusedWindow) { click(_item, focusedWindow) {
if (focusedWindow) { if (focusedWindow) {
if (focusedWindow.webContents.getTitle() === 'Actual') { if (focusedWindow.webContents.getTitle() === 'Actual') {
focusedWindow.webContents.executeJavaScript( focusedWindow.webContents.executeJavaScript(
...@@ -48,18 +58,26 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -48,18 +58,26 @@ function getMenu(isDev, createWindow, budgetId) {
label: 'Undo', label: 'Undo',
enabled: false, enabled: false,
accelerator: 'CmdOrCtrl+Z', accelerator: 'CmdOrCtrl+Z',
click: function (menuItem, focusedWin) { click: function (_menuItem, focusedWin) {
// Undo // Undo
focusedWin.webContents.executeJavaScript('__actionsForMenu.undo()'); if (focusedWin) {
focusedWin.webContents.executeJavaScript(
'__actionsForMenu.undo()',
);
}
}, },
}, },
{ {
label: 'Redo', label: 'Redo',
enabled: false, enabled: false,
accelerator: 'Shift+CmdOrCtrl+Z', accelerator: 'Shift+CmdOrCtrl+Z',
click: function (menuItem, focusedWin) { click: function (_menuItem, focusedWin) {
// Redo // Redo
focusedWin.webContents.executeJavaScript('__actionsForMenu.redo()'); if (focusedWin) {
focusedWin.webContents.executeJavaScript(
'__actionsForMenu.redo()',
);
}
}, },
}, },
{ {
...@@ -75,45 +93,49 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -75,45 +93,49 @@ function getMenu(isDev, createWindow, budgetId) {
role: 'paste', role: 'paste',
}, },
{ {
role: 'pasteandmatchstyle', role: 'pasteAndMatchStyle',
}, },
{ {
role: 'delete', role: 'delete',
}, },
{ {
role: 'selectall', role: 'selectAll',
}, },
], ],
}, },
{ {
label: 'View', label: 'View',
submenu: [ submenu: [
isDev && { isDev
label: 'Reload', ? {
accelerator: 'CmdOrCtrl+R', label: 'Reload',
click(item, focusedWindow) { accelerator: 'CmdOrCtrl+R',
if (focusedWindow) focusedWindow.reload(); click(_item, focusedWindow) {
}, if (focusedWindow) focusedWindow.reload();
}, },
}
: { label: 'hidden', visible: false },
{ {
label: 'Toggle Developer Tools', label: 'Toggle Developer Tools',
accelerator: accelerator:
process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I', process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I',
click(item, focusedWindow) { click(_item, focusedWindow) {
if (focusedWindow) focusedWindow.webContents.toggleDevTools(); if (focusedWindow) focusedWindow.webContents.toggleDevTools();
}, },
}, },
isDev && { isDev
type: 'separator', ? {
}, type: 'separator',
}
: { label: 'hidden', visible: false },
{ {
role: 'resetzoom', role: 'resetZoom',
}, },
{ {
role: 'zoomin', role: 'zoomIn',
}, },
{ {
role: 'zoomout', role: 'zoomOut',
}, },
{ {
type: 'separator', type: 'separator',
...@@ -121,7 +143,7 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -121,7 +143,7 @@ function getMenu(isDev, createWindow, budgetId) {
{ {
role: 'togglefullscreen', role: 'togglefullscreen',
}, },
].filter(x => x), ],
}, },
{ {
label: 'Tools', label: 'Tools',
...@@ -129,10 +151,12 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -129,10 +151,12 @@ function getMenu(isDev, createWindow, budgetId) {
{ {
label: 'Find schedules', label: 'Find schedules',
enabled: false, enabled: false,
click: function (menuItem, focusedWin) { click: function (_menuItem, focusedWin) {
focusedWin.webContents.executeJavaScript( if (focusedWin) {
'window.__actionsForMenu && window.__actionsForMenu.pushModal("schedules-discover")', focusedWin.webContents.executeJavaScript(
); 'window.__actionsForMenu && window.__actionsForMenu.pushModal("schedules-discover")',
);
}
}, },
}, },
], ],
...@@ -160,7 +184,9 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -160,7 +184,9 @@ function getMenu(isDev, createWindow, budgetId) {
if (process.platform === 'win32') { if (process.platform === 'win32') {
// Add about to help menu on Windows // Add about to help menu on Windows
template[template.length - 1].submenu.unshift({ (
template[template.length - 1].submenu as MenuItemConstructorOptions[]
).unshift({
label: 'About Actual', label: 'About Actual',
click() { click() {
ipcMain.emit('show-about'); ipcMain.emit('show-about');
...@@ -177,12 +203,14 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -177,12 +203,14 @@ function getMenu(isDev, createWindow, budgetId) {
ipcMain.emit('show-about'); ipcMain.emit('show-about');
}, },
}, },
isDev && { isDev
label: 'Screenshot', ? {
click() { label: 'Screenshot',
ipcMain.emit('screenshot'); click() {
}, ipcMain.emit('screenshot');
}, },
}
: { label: 'hidden', visible: false },
{ {
type: 'separator', type: 'separator',
}, },
...@@ -197,7 +225,7 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -197,7 +225,7 @@ function getMenu(isDev, createWindow, budgetId) {
role: 'hide', role: 'hide',
}, },
{ {
role: 'hideothers', role: 'hideOthers',
}, },
{ {
role: 'unhide', role: 'unhide',
...@@ -208,11 +236,11 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -208,11 +236,11 @@ function getMenu(isDev, createWindow, budgetId) {
{ {
role: 'quit', role: 'quit',
}, },
].filter(x => x), ],
}); });
// Edit menu. // Edit menu.
const editIdx = template.findIndex(t => t.label === 'Edit'); const editIdx = template.findIndex(t => t.label === 'Edit');
template[editIdx].submenu.push( (template[editIdx].submenu as MenuItemConstructorOptions[]).push(
{ {
type: 'separator', type: 'separator',
}, },
...@@ -220,10 +248,10 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -220,10 +248,10 @@ function getMenu(isDev, createWindow, budgetId) {
label: 'Speech', label: 'Speech',
submenu: [ submenu: [
{ {
role: 'startspeaking', role: 'startSpeaking',
}, },
{ {
role: 'stopspeaking', role: 'stopSpeaking',
}, },
], ],
}, },
...@@ -257,5 +285,3 @@ function getMenu(isDev, createWindow, budgetId) { ...@@ -257,5 +285,3 @@ function getMenu(isDev, createWindow, budgetId) {
return Menu.buildFromTemplate(template); return Menu.buildFromTemplate(template);
} }
module.exports = getMenu;
---
category: Maintenance
authors: [MikesGlitch]
---
Update Electron menu to use typescript
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment