import { BrowserWindow, MenuItemConstructorOptions } from "electron"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; import { isMac } from "../../utils"; import { UpdaterMain } from "../updater.main"; import { FirstMenu } from "./menu.first"; import { MenuAccount } from "./menu.updater"; import { IMenubarMenu } from "./menubar"; // AKA: "FirstMenu" or "MacMenu" - the first menu that shows on all macOs apps export class BitwardenMenu extends FirstMenu implements IMenubarMenu { readonly id: string = "bitwarden"; readonly label: string = "Bitwarden"; get items(): MenuItemConstructorOptions[] { const items = [this.aboutBitwarden, this.checkForUpdates]; if (this.aboutBitwarden.visible === true || this.checkForUpdates.visible === true) { items.push(this.separator); } items.push(this.settings); items.push(this.lock); items.push(this.lockAll); items.push(this.logOut); items.push(this.separator); items.push(this.services); if ( this.hideBitwarden.visible === true || this.hideOthers.visible === true || this.showAll.visible === true ) { items.push(this.separator); } items.push(this.hideBitwarden); items.push(this.hideOthers); items.push(this.showAll); if (this.quitBitwarden.visible === true) { items.push(this.separator); } items.push(this.quitBitwarden); return items; } constructor( i18nService: I18nService, messagingService: MessagingService, updater: UpdaterMain, window: BrowserWindow, accounts: { [userId: string]: MenuAccount }, isLocked: boolean ) { super(i18nService, messagingService, updater, window, accounts, isLocked); } private get aboutBitwarden(): MenuItemConstructorOptions { return { id: "aboutBitwarden", label: this.localize("aboutBitwarden"), role: "about", visible: isMac(), }; } private get services(): MenuItemConstructorOptions { return { id: "services", label: this.localize("services"), role: "services", submenu: [], visible: isMac(), }; } private get hideBitwarden(): MenuItemConstructorOptions { return { id: "hideBitwarden", label: this.localize("hideBitwarden"), role: "hide", visible: isMac(), }; } private get hideOthers(): MenuItemConstructorOptions { return { id: "hideOthers", label: this.localize("hideOthers"), role: "hideOthers", visible: isMac(), }; } private get showAll(): MenuItemConstructorOptions { return { id: "showAll", label: this.localize("showAll"), role: "unhide", visible: isMac(), }; } private get quitBitwarden(): MenuItemConstructorOptions { return { id: "quitBitwarden", label: this.localize("quitBitwarden"), role: "quit", visible: isMac(), }; } }