PM-7392 - Per PR feedback, move error handling toast responsibility to client specific app component logic reached via messaging.
This commit is contained in:
parent
c5b807114f
commit
28d2a8797c
|
@ -572,7 +572,7 @@ export default class MainBackground {
|
|||
this.environmentService,
|
||||
this.appIdService,
|
||||
this.stateService,
|
||||
this.i18nService,
|
||||
this.messagingService,
|
||||
this.logService,
|
||||
(expired: boolean) => this.logout(expired),
|
||||
);
|
||||
|
|
|
@ -16,8 +16,8 @@ import {
|
|||
environmentServiceFactory,
|
||||
EnvironmentServiceInitOptions,
|
||||
} from "./environment-service.factory";
|
||||
import { i18nServiceFactory, I18nServiceInitOptions } from "./i18n-service.factory";
|
||||
import { logServiceFactory, LogServiceInitOptions } from "./log-service.factory";
|
||||
import { messageSenderFactory, MessageSenderInitOptions } from "./message-sender.factory";
|
||||
import {
|
||||
PlatformUtilsServiceInitOptions,
|
||||
platformUtilsServiceFactory,
|
||||
|
@ -37,7 +37,7 @@ export type ApiServiceInitOptions = ApiServiceFactoryOptions &
|
|||
EnvironmentServiceInitOptions &
|
||||
AppIdServiceInitOptions &
|
||||
StateServiceInitOptions &
|
||||
I18nServiceInitOptions &
|
||||
MessageSenderInitOptions &
|
||||
LogServiceInitOptions;
|
||||
|
||||
export function apiServiceFactory(
|
||||
|
@ -55,7 +55,7 @@ export function apiServiceFactory(
|
|||
await environmentServiceFactory(cache, opts),
|
||||
await appIdServiceFactory(cache, opts),
|
||||
await stateServiceFactory(cache, opts),
|
||||
await i18nServiceFactory(cache, opts),
|
||||
await messageSenderFactory(cache, opts),
|
||||
await logServiceFactory(cache, opts),
|
||||
opts.apiServiceOptions.logoutCallback,
|
||||
opts.apiServiceOptions.customUserAgent,
|
||||
|
|
|
@ -144,6 +144,12 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
|
||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
||||
this.router.navigate(["/update-temp-password"]);
|
||||
} else if (msg.command === "refreshAccessTokenError") {
|
||||
this.toastService.showToast({
|
||||
variant: "error",
|
||||
title: this.i18nService.t("errorRefreshingAccessToken"),
|
||||
message: this.i18nService.t("errorRefreshingAccessTokenDesc"),
|
||||
});
|
||||
}
|
||||
}),
|
||||
takeUntil(this.destroy$),
|
||||
|
|
|
@ -454,6 +454,13 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||
case "deepLink":
|
||||
this.processDeepLink(message.urlString);
|
||||
break;
|
||||
case "refreshAccessTokenError":
|
||||
this.toastService.showToast({
|
||||
variant: "error",
|
||||
title: this.i18nService.t("errorRefreshingAccessToken"),
|
||||
message: this.i18nService.t("errorRefreshingAccessTokenDesc"),
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -209,6 +209,13 @@ export class AppComponent implements OnDestroy, OnInit {
|
|||
case "showToast":
|
||||
this.toastService._showToast(message);
|
||||
break;
|
||||
case "refreshAccessTokenError":
|
||||
this.toastService.showToast({
|
||||
variant: "error",
|
||||
title: this.i18nService.t("errorRefreshingAccessToken"),
|
||||
message: this.i18nService.t("errorRefreshingAccessTokenDesc"),
|
||||
});
|
||||
break;
|
||||
case "convertAccountToKeyConnector":
|
||||
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
|
||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
||||
|
|
|
@ -574,7 +574,7 @@ const safeProviders: SafeProvider[] = [
|
|||
EnvironmentService,
|
||||
AppIdServiceAbstraction,
|
||||
StateServiceAbstraction,
|
||||
I18nServiceAbstraction,
|
||||
MessageSender,
|
||||
LogService,
|
||||
LOGOUT_CALLBACK,
|
||||
],
|
||||
|
|
|
@ -115,10 +115,10 @@ import { ProfileResponse } from "../models/response/profile.response";
|
|||
import { UserKeyResponse } from "../models/response/user-key.response";
|
||||
import { AppIdService } from "../platform/abstractions/app-id.service";
|
||||
import { EnvironmentService } from "../platform/abstractions/environment.service";
|
||||
import { I18nService } from "../platform/abstractions/i18n.service";
|
||||
import { LogService } from "../platform/abstractions/log.service";
|
||||
import { PlatformUtilsService } from "../platform/abstractions/platform-utils.service";
|
||||
import { StateService } from "../platform/abstractions/state.service";
|
||||
import { CommandDefinition, MessageSender } from "../platform/messaging";
|
||||
import { Utils } from "../platform/misc/utils";
|
||||
import { UserId } from "../types/guid";
|
||||
import { AttachmentRequest } from "../vault/models/request/attachment.request";
|
||||
|
@ -142,6 +142,11 @@ import {
|
|||
} from "../vault/models/response/collection.response";
|
||||
import { SyncResponse } from "../vault/models/response/sync.response";
|
||||
|
||||
// TODO: platform to investigate why we can't do CommandDefinition<void>
|
||||
export const REFRESH_ACCESS_TOKEN_ERROR_MSG_CMD = new CommandDefinition<object>(
|
||||
"refreshAccessTokenError",
|
||||
);
|
||||
|
||||
/**
|
||||
* @deprecated The `ApiService` class is deprecated and calls should be extracted into individual
|
||||
* api services. The `send` method is still allowed to be used within api services. For background
|
||||
|
@ -159,7 +164,7 @@ export class ApiService implements ApiServiceAbstraction {
|
|||
private environmentService: EnvironmentService,
|
||||
private appIdService: AppIdService,
|
||||
private stateService: StateService,
|
||||
private i18nService: I18nService,
|
||||
private messageSender: MessageSender,
|
||||
private logService: LogService,
|
||||
private logoutCallback: (expired: boolean) => Promise<void>,
|
||||
private customUserAgent: string = null,
|
||||
|
@ -1718,12 +1723,8 @@ export class ApiService implements ApiServiceAbstraction {
|
|||
return this.doApiTokenRefresh();
|
||||
}
|
||||
|
||||
// Surface an error to the user.
|
||||
this.platformUtilsService.showToast(
|
||||
"error",
|
||||
this.i18nService.t("errorRefreshingAccessToken"),
|
||||
this.i18nService.t("errorRefreshingAccessTokenDesc"),
|
||||
);
|
||||
// Send message which each client can handle to surface an error message to the user.
|
||||
this.messageSender.send(REFRESH_ACCESS_TOKEN_ERROR_MSG_CMD, null);
|
||||
|
||||
throw new Error("Cannot refresh access token, no refresh token or api keys are stored.");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue