1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-14 07:13:32 +00:00
Files
browser/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt-install.component.ts
Nick Krantz dae4f7b3cc [PM-17564] Prompt Browser Extension (#13349)
* add browser extension prompt page with initial loading state

* add browser extension icon

* move browser extension prompt to state

* add installation link for error state

* automatically open extension when possible for browser-reprompt-page

* refactor browser tabs query into a standalone method

* add success message state for auto-opening browsers

* Refactor `VaultOnboardingMessages` to `VaultMessages` to be more generic

* add auto-open extension messages to `VaultMessages` enum

* add bitwarden icon

* Add manual error state for firefox users

* add extension prompt routing

* fix incorrect imports

* add mobile screen for browser prompt

* remove comment

* fix typo in code comment

* update key for `checkBwInstalled` method

* add check for safari before attempting to send a message

* break translation for manual opening into two parts
2025-02-19 11:00:07 -08:00

67 lines
2.4 KiB
TypeScript

import { CommonModule } from "@angular/common";
import { Component, OnInit } from "@angular/core";
import { map } from "rxjs";
import { DeviceType } from "@bitwarden/common/enums";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { LinkModule } from "@bitwarden/components";
import { I18nPipe } from "@bitwarden/ui-common";
import {
BrowserExtensionPromptService,
BrowserPromptState,
} from "../../services/browser-extension-prompt.service";
/** Device specific Urls for the extension */
const WebStoreUrls: Partial<Record<DeviceType, string>> = {
[DeviceType.ChromeBrowser]:
"https://chrome.google.com/webstore/detail/bitwarden-password-manage/nngceckbapebfimnlniiiahkandclblb",
[DeviceType.FirefoxBrowser]:
"https://addons.mozilla.org/en-US/firefox/addon/bitwarden-password-manager/",
[DeviceType.SafariBrowser]: "https://apps.apple.com/us/app/bitwarden/id1352778147?mt=12",
[DeviceType.OperaBrowser]:
"https://addons.opera.com/extensions/details/bitwarden-free-password-manager/",
[DeviceType.EdgeBrowser]:
"https://microsoftedge.microsoft.com/addons/detail/jbkfoedolllekgbhcbcoahefnbanhhlh",
};
@Component({
selector: "vault-browser-extension-prompt-install",
templateUrl: "./browser-extension-prompt-install.component.html",
standalone: true,
imports: [CommonModule, I18nPipe, LinkModule],
})
export class BrowserExtensionPromptInstallComponent implements OnInit {
/** The install link should only show for the error states */
protected shouldShow$ = this.browserExtensionPromptService.pageState$.pipe(
map((state) => state === BrowserPromptState.Error || state === BrowserPromptState.ManualOpen),
);
/** All available page states */
protected BrowserPromptState = BrowserPromptState;
/**
* Installation link for the extension
*/
protected webStoreUrl: string = "https://bitwarden.com/download/#downloads-web-browser";
constructor(
private browserExtensionPromptService: BrowserExtensionPromptService,
private platformService: PlatformUtilsService,
) {}
ngOnInit(): void {
this.setBrowserStoreLink();
}
/** If available, set web store specific URL for the extension */
private setBrowserStoreLink(): void {
const deviceType = this.platformService.getDevice();
const platformSpecificUrl = WebStoreUrls[deviceType];
if (platformSpecificUrl) {
this.webStoreUrl = platformSpecificUrl;
}
}
}