From ce9e4d272ae28b7bd3c52aaf746829ea24ff6641 Mon Sep 17 00:00:00 2001 From: Amine Mouafik Date: Thu, 27 Feb 2020 03:12:36 +0100 Subject: Conditionally display Menu items based on lock state --- src/lib/Menu.js | 163 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 92 insertions(+), 71 deletions(-) (limited to 'src/lib/Menu.js') diff --git a/src/lib/Menu.js b/src/lib/Menu.js index f2669a106..cd2ebaef5 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -300,7 +300,7 @@ function termsBase() { return window.ferdi.stores.settings.all.app.server !== 'https://api.franzinfra.com' ? window.ferdi.stores.settings.all.app.server : 'https://meetfranz.com'; } -const _templateFactory = intl => [ +const _templateFactory = (intl, locked) => [ { label: intl.formatMessage(menuItems.edit), submenu: [ @@ -351,6 +351,7 @@ const _templateFactory = intl => [ }, { label: intl.formatMessage(menuItems.view), + visible: !locked, submenu: [ { type: 'separator', @@ -426,17 +427,18 @@ const _templateFactory = intl => [ }, { label: intl.formatMessage(menuItems.services), + visible: !locked, submenu: [], }, { label: intl.formatMessage(menuItems.workspaces), submenu: [], - visible: workspaceStore.isFeatureEnabled, + visible: !locked && workspaceStore.isFeatureEnabled, }, { label: intl.formatMessage(menuItems.todos), submenu: [], - visible: todosStore.isFeatureEnabled, + visible: !locked && todosStore.isFeatureEnabled, }, { label: intl.formatMessage(menuItems.window), @@ -465,7 +467,7 @@ const _templateFactory = intl => [ click: () => { announcementActions.show(); }, - visible: window.ferdi.stores.user.isLoggedIn && announcementsStore.areNewsAvailable, + visible: !locked && window.ferdi.stores.user.isLoggedIn && announcementsStore.areNewsAvailable, }, { type: 'separator', @@ -489,7 +491,7 @@ const _templateFactory = intl => [ }, ]; -const _titleBarTemplateFactory = intl => [ +const _titleBarTemplateFactory = (intl, locked) => [ { label: intl.formatMessage(menuItems.edit), accelerator: 'Alt+E', @@ -557,6 +559,7 @@ const _titleBarTemplateFactory = intl => [ { label: intl.formatMessage(menuItems.view), accelerator: 'Alt+V', + visible: !locked, submenu: [ { type: 'separator', @@ -649,18 +652,19 @@ const _titleBarTemplateFactory = intl => [ { label: intl.formatMessage(menuItems.services), accelerator: 'Alt+S', + visible: !locked, submenu: [], }, { label: intl.formatMessage(menuItems.workspaces), accelerator: 'Alt+W', submenu: [], - visible: workspaceStore.isFeatureEnabled, + visible: !locked && workspaceStore.isFeatureEnabled, }, { label: intl.formatMessage(menuItems.todos), submenu: [], - visible: todosStore.isFeatureEnabled, + visible: !locked && todosStore.isFeatureEnabled, }, { label: intl.formatMessage(menuItems.window), @@ -746,83 +750,97 @@ export default class FranzMenu { } const { intl } = window.ferdi; - const tpl = isMac ? _templateFactory(intl) : _titleBarTemplateFactory(intl); + const tpl = isMac ? _templateFactory(intl, this.stores.settings.app.locked) : _titleBarTemplateFactory(intl); const { actions } = this; - tpl[1].submenu.push({ - type: 'separator', - }, { - label: intl.formatMessage(menuItems.toggleDevTools), - accelerator: `${cmdKey}+Alt+I`, - click: (menuItem, browserWindow) => { - browserWindow.webContents.toggleDevTools(); - }, - }, { - label: intl.formatMessage(menuItems.toggleServiceDevTools), - accelerator: `${cmdKey}+Shift+Alt+I`, - click: () => { - this.actions.service.openDevToolsForActiveService(); - }, - enabled: this.stores.user.isLoggedIn && this.stores.services.enabled.length > 0, - }); - - if (this.stores.features.features.isTodosEnabled) { + if (this.stores.settings.app.locked) { tpl[1].submenu.push({ - label: intl.formatMessage(menuItems.toggleTodosDevTools), - accelerator: `${cmdKey}+Shift+Alt+O`, + type: 'separator', + }, { + label: intl.formatMessage(menuItems.toggleDevTools), + accelerator: `${cmdKey}+Alt+I`, + click: (menuItem, browserWindow) => { + browserWindow.webContents.toggleDevTools(); + }, + }, { + label: intl.formatMessage(menuItems.toggleServiceDevTools), + accelerator: `${cmdKey}+Shift+Alt+I`, click: () => { - const webview = document.querySelector('webview[partition="persist:todos"]'); - if (webview) webview.openDevTools(); + this.actions.service.openDevToolsForActiveService(); }, + enabled: this.stores.user.isLoggedIn && this.stores.services.enabled.length > 0, }); - } - tpl[1].submenu.unshift({ - label: intl.formatMessage(menuItems.reloadService), - id: 'reloadService', // TODO: needed? - accelerator: `${cmdKey}+R`, - click: () => { - if (this.stores.user.isLoggedIn - && this.stores.services.enabled.length > 0) { - if (this.stores.services.active.recipe.id === CUSTOM_WEBSITE_ID) { - this.stores.services.active.webview.reload(); + if (this.stores.features.features.isTodosEnabled) { + tpl[1].submenu.push({ + label: intl.formatMessage(menuItems.toggleTodosDevTools), + accelerator: `${cmdKey}+Shift+Alt+O`, + click: () => { + const webview = document.querySelector('webview[partition="persist:todos"]'); + if (webview) webview.openDevTools(); + }, + }); + } + + tpl[1].submenu.unshift({ + label: intl.formatMessage(menuItems.reloadService), + id: 'reloadService', // TODO: needed? + accelerator: `${cmdKey}+R`, + click: () => { + if (this.stores.user.isLoggedIn + && this.stores.services.enabled.length > 0) { + if (this.stores.services.active.recipe.id === CUSTOM_WEBSITE_ID) { + this.stores.services.active.webview.reload(); + } else { + this.actions.service.reloadActive(); + } } else { - this.actions.service.reloadActive(); + window.location.reload(); } - } else { + }, + }, { + label: intl.formatMessage(menuItems.reloadFranz), + accelerator: `${cmdKey}+Shift+R`, + click: () => { window.location.reload(); - } - }, - }, { - label: intl.formatMessage(menuItems.reloadFranz), - accelerator: `${cmdKey}+Shift+R`, - click: () => { - window.location.reload(); - }, - }, { - type: 'separator', - }, { - label: intl.formatMessage(menuItems.lockFerdi), - accelerator: 'CmdOrCtrl+Shift+L', - enabled: this.stores.user.isLoggedIn && this.stores.settings.app.lockingFeatureEnabled, - click() { - // Disable lock first - otherwise the application might not update correctly - actions.settings.update({ - type: 'app', - data: { - locked: false, - }, - }); - setTimeout(() => { + }, + }, { + type: 'separator', + }, { + label: intl.formatMessage(menuItems.lockFerdi), + accelerator: 'CmdOrCtrl+Shift+L', + enabled: this.stores.user.isLoggedIn && this.stores.settings.app.lockingFeatureEnabled, + click() { + // Disable lock first - otherwise the application might not update correctly actions.settings.update({ type: 'app', data: { - locked: true, + locked: false, }, }); - }, 0); - }, - }); + setTimeout(() => { + actions.settings.update({ + type: 'app', + data: { + locked: true, + }, + }); + }, 0); + }, + }); + + if (serviceTpl.length > 0) { + tpl[3].submenu = serviceTpl; + } + + if (workspaceStore.isFeatureEnabled) { + tpl[4].submenu = this.workspacesMenu(); + } + + if (todosStore.isFeatureEnabled) { + tpl[5].submenu = this.todosMenu(); + } + } tpl.unshift({ label: isMac ? app.name : intl.formatMessage(menuItems.file), @@ -842,15 +860,18 @@ export default class FranzMenu { this.actions.ui.openSettings({ path: 'app' }); }, enabled: this.stores.user.isLoggedIn, + visible: !this.stores.settings.app.locked, }, { label: intl.formatMessage(menuItems.checkForUpdates), + visible: !this.stores.settings.app.locked, click: () => { this.actions.app.checkForUpdates(); }, }, { type: 'separator', + visible: !this.stores.settings.app.locked, }, { label: intl.formatMessage(menuItems.services), @@ -930,6 +951,7 @@ export default class FranzMenu { this.actions.ui.openSettings({ path: 'app' }); }, enabled: this.stores.user.isLoggedIn, + visible: !this.stores.settings.locked, }, { type: 'separator', @@ -967,8 +989,7 @@ export default class FranzMenu { this.currentTemplate = tpl; const menu = Menu.buildFromTemplate(tpl); - const lockedMenu = Menu.buildFromTemplate([]); - Menu.setApplicationMenu(this.stores.user.isLoggedIn && this.stores.settings.app.locked ? lockedMenu : menu); + Menu.setApplicationMenu(menu); } serviceTpl() { -- cgit v1.2.3-54-g00ecf