mirror of
https://github.com/bitwarden/browser
synced 2026-02-16 00:24:52 +00:00
[PM-29514] Remove ts strict ignore in overlay notifications content overlay notifications content service (#17947)
* early return on typedata if it is not present * use optional chaining on null checks * nullish coallescing operator on potentially undefined type * optional chaining to check both that the element exists and that contentWindow is not null before calling postMessage * add null check for this.currentNotificationBarType before calling * add a null check before appending notificationBarRootElement, ts cant track we set the iframe across method calls * added null checks before calling setElementStyles
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
// FIXME: Update this file to be type safe and remove this and next line
|
||||
// @ts-strict-ignore
|
||||
import { EVENTS } from "@bitwarden/common/autofill/constants";
|
||||
|
||||
import { BrowserApi } from "../../../../platform/browser/browser-api";
|
||||
@@ -84,11 +82,15 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
}
|
||||
const { type, typeData, params } = message.data;
|
||||
|
||||
if (!typeData) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.currentNotificationBarType && type !== this.currentNotificationBarType) {
|
||||
this.closeNotificationBar();
|
||||
}
|
||||
|
||||
const initData = {
|
||||
const initData: NotificationBarIframeInitData = {
|
||||
type: type as NotificationType,
|
||||
isVaultLocked: typeData.isVaultLocked,
|
||||
theme: typeData.theme,
|
||||
@@ -116,7 +118,9 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
const closedByUser =
|
||||
typeof message.data?.closedByUser === "boolean" ? message.data.closedByUser : true;
|
||||
if (message.data?.fadeOutNotification) {
|
||||
setElementStyles(this.notificationBarIframeElement, { opacity: "0" }, true);
|
||||
if (this.notificationBarIframeElement) {
|
||||
setElementStyles(this.notificationBarIframeElement, { opacity: "0" }, true);
|
||||
}
|
||||
globalThis.setTimeout(() => this.closeNotificationBar(closedByUser), 150);
|
||||
return;
|
||||
}
|
||||
@@ -166,7 +170,9 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
this.createNotificationBarElement();
|
||||
|
||||
this.setupInitNotificationBarMessageListener(initData);
|
||||
globalThis.document.body.appendChild(this.notificationBarRootElement);
|
||||
if (this.notificationBarRootElement) {
|
||||
globalThis.document.body.appendChild(this.notificationBarRootElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +185,7 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
const isNotificationFresh =
|
||||
initData.launchTimestamp && Date.now() - initData.launchTimestamp < 250;
|
||||
|
||||
this.currentNotificationBarType = initData.type;
|
||||
this.currentNotificationBarType = initData.type ?? null;
|
||||
this.notificationBarIframeElement = globalThis.document.createElement("iframe");
|
||||
this.notificationBarIframeElement.id = "bit-notification-bar-iframe";
|
||||
const parentOrigin = globalThis.location.origin;
|
||||
@@ -206,11 +212,13 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
* This will animate the notification bar into view.
|
||||
*/
|
||||
private handleNotificationBarIframeOnLoad = () => {
|
||||
setElementStyles(
|
||||
this.notificationBarIframeElement,
|
||||
{ transform: "translateX(0)", opacity: "1" },
|
||||
true,
|
||||
);
|
||||
if (this.notificationBarIframeElement) {
|
||||
setElementStyles(
|
||||
this.notificationBarIframeElement,
|
||||
{ transform: "translateX(0)", opacity: "1" },
|
||||
true,
|
||||
);
|
||||
}
|
||||
|
||||
this.notificationBarIframeElement?.removeEventListener(
|
||||
EVENTS.LOAD,
|
||||
@@ -252,6 +260,7 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
const handleInitNotificationBarMessage = (event: MessageEvent) => {
|
||||
const { source, data } = event;
|
||||
if (
|
||||
!this.notificationBarIframeElement?.contentWindow ||
|
||||
source !== this.notificationBarIframeElement.contentWindow ||
|
||||
data?.command !== "initNotificationBar"
|
||||
) {
|
||||
@@ -282,13 +291,14 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
return;
|
||||
}
|
||||
|
||||
this.notificationBarIframeElement.remove();
|
||||
this.notificationBarIframeElement?.remove();
|
||||
this.notificationBarIframeElement = null;
|
||||
|
||||
this.notificationBarElement.remove();
|
||||
this.notificationBarElement?.remove();
|
||||
this.notificationBarElement = null;
|
||||
this.notificationBarShadowRoot = null;
|
||||
this.notificationBarRootElement.remove();
|
||||
|
||||
this.notificationBarRootElement?.remove();
|
||||
this.notificationBarRootElement = null;
|
||||
|
||||
const removableNotificationTypes = new Set([
|
||||
@@ -297,7 +307,11 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
NotificationTypes.AtRiskPassword,
|
||||
] as NotificationType[]);
|
||||
|
||||
if (closedByUserAction && removableNotificationTypes.has(this.currentNotificationBarType)) {
|
||||
if (
|
||||
closedByUserAction &&
|
||||
this.currentNotificationBarType &&
|
||||
removableNotificationTypes.has(this.currentNotificationBarType)
|
||||
) {
|
||||
void sendExtensionMessage("bgRemoveTabFromNotificationQueue");
|
||||
}
|
||||
|
||||
@@ -310,7 +324,7 @@ export class OverlayNotificationsContentService implements OverlayNotificationsC
|
||||
* @param message - The message to send to the notification bar iframe.
|
||||
*/
|
||||
private sendMessageToNotificationBarIframe(message: Record<string, any>) {
|
||||
if (this.notificationBarIframeElement) {
|
||||
if (this.notificationBarIframeElement?.contentWindow) {
|
||||
this.notificationBarIframeElement.contentWindow.postMessage(message, this.extensionOrigin);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user