Browse Source

Merge pull request #5124 from abpframework/fix/4327

Fixed localization problem of default error messages
pull/5130/head
Mehmet Erim 6 years ago
committed by GitHub
parent
commit
665b065b8b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 75
      npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts
  2. 35
      npm/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts

75
npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts

@ -43,6 +43,29 @@ export const DEFAULT_ERROR_MESSAGES = {
}, },
}; };
export const DEFAULT_ERROR_LOCALIZATIONS = {
defaultError: {
title: 'AbpUi::DefaultErrorMessage',
details: 'AbpUi::DefaultErrorMessageDetail',
},
defaultError401: {
title: 'AbpUi::DefaultErrorMessage401',
details: 'AbpUi::DefaultErrorMessage401Detail',
},
defaultError403: {
title: 'AbpUi::DefaultErrorMessage403',
details: 'AbpUi::DefaultErrorMessage403Detail',
},
defaultError404: {
title: 'AbpUi::DefaultErrorMessage404',
details: 'AbpUi::DefaultErrorMessage404Detail',
},
defaultError500: {
title: 'AbpUi::500Message',
details: 'AbpUi::DefaultErrorMessage',
},
};
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class ErrorHandler { export class ErrorHandler {
componentRef: ComponentRef<HttpErrorWrapperComponent>; componentRef: ComponentRef<HttpErrorWrapperComponent>;
@ -64,7 +87,10 @@ export class ErrorHandler {
private listenToRouterError() { private listenToRouterError() {
this.actions this.actions
.pipe(ofActionSuccessful(RouterError), filter(this.filterRouteErrors)) .pipe(
ofActionSuccessful(RouterError),
filter(this.filterRouteErrors),
)
.subscribe(() => this.show404Page()); .subscribe(() => this.show404Page());
} }
@ -88,7 +114,10 @@ export class ErrorHandler {
filter(this.filterRestErrors), filter(this.filterRestErrors),
) )
.subscribe(err => { .subscribe(err => {
const body = snq(() => err.error.error, DEFAULT_ERROR_MESSAGES.defaultError.title); const body = snq(() => err.error.error, {
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
});
if (err instanceof HttpErrorResponse && err.headers.get('_AbpErrorFormat')) { if (err instanceof HttpErrorResponse && err.headers.get('_AbpErrorFormat')) {
const confirmation$ = this.showError(null, null, body); const confirmation$ = this.showError(null, null, body);
@ -105,11 +134,11 @@ export class ErrorHandler {
? this.show401Page() ? this.show401Page()
: this.showError( : this.showError(
{ {
key: 'AbpAccount::DefaultErrorMessage401', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title,
}, },
{ {
key: 'AbpAccount::DefaultErrorMessage401Detail', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details,
}, },
).subscribe(() => this.navigateToLogin()); ).subscribe(() => this.navigateToLogin());
@ -117,11 +146,11 @@ export class ErrorHandler {
case 403: case 403:
this.createErrorComponent({ this.createErrorComponent({
title: { title: {
key: 'AbpAccount::DefaultErrorMessage403', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.title,
}, },
details: { details: {
key: 'AbpAccount::DefaultErrorMessage403Detail', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.details,
}, },
status: 403, status: 403,
@ -132,11 +161,11 @@ export class ErrorHandler {
? this.show404Page() ? this.show404Page()
: this.showError( : this.showError(
{ {
key: 'AbpAccount::DefaultErrorMessage404', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.details,
}, },
{ {
key: 'AbpAccount::DefaultErrorMessage404Detail', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title,
}, },
); );
@ -144,11 +173,11 @@ export class ErrorHandler {
case 500: case 500:
this.createErrorComponent({ this.createErrorComponent({
title: { title: {
key: 'AbpAccount::500Message', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.title,
}, },
details: { details: {
key: 'AbpAccount::InternalServerErrorMessage', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.details,
}, },
status: 500, status: 500,
@ -158,7 +187,7 @@ export class ErrorHandler {
if (err.statusText === 'Unknown Error') { if (err.statusText === 'Unknown Error') {
this.createErrorComponent({ this.createErrorComponent({
title: { title: {
key: 'AbpAccount::DefaultErrorMessage', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
}, },
details: err.message, details: err.message,
@ -168,8 +197,14 @@ export class ErrorHandler {
break; break;
default: default:
this.showError( this.showError(
DEFAULT_ERROR_MESSAGES.defaultError.details, {
DEFAULT_ERROR_MESSAGES.defaultError.title, key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.details,
},
{
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
},
); );
break; break;
} }
@ -180,7 +215,7 @@ export class ErrorHandler {
private show401Page() { private show401Page() {
this.createErrorComponent({ this.createErrorComponent({
title: { title: {
key: 'AbpAccount::401Message', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title,
}, },
status: 401, status: 401,
@ -190,7 +225,7 @@ export class ErrorHandler {
private show404Page() { private show404Page() {
this.createErrorComponent({ this.createErrorComponent({
title: { title: {
key: 'AbpAccount::404Message', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title,
}, },
status: 404, status: 404,
@ -207,10 +242,16 @@ export class ErrorHandler {
message = body.details; message = body.details;
title = body.message; title = body.message;
} else if (body.message) { } else if (body.message) {
title = DEFAULT_ERROR_MESSAGES.defaultError.title; title = {
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
};
message = body.message; message = body.message;
} else { } else {
message = body.message || DEFAULT_ERROR_MESSAGES.defaultError.title; message = body.message || {
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
};
} }
} }

35
npm/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts

@ -9,7 +9,7 @@ import { Actions, NgxsModule, ofActionDispatched, Store } from '@ngxs/store';
import { OAuthService } from 'angular-oauth2-oidc'; import { OAuthService } from 'angular-oauth2-oidc';
import { of } from 'rxjs'; import { of } from 'rxjs';
import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component';
import { DEFAULT_ERROR_MESSAGES, ErrorHandler } from '../handlers'; import { DEFAULT_ERROR_MESSAGES, ErrorHandler, DEFAULT_ERROR_LOCALIZATIONS } from '../handlers';
import { ConfirmationService } from '../services'; import { ConfirmationService } from '../services';
import { httpErrorConfigFactory } from '../tokens/http-error.token'; import { httpErrorConfigFactory } from '../tokens/http-error.token';
@ -66,11 +66,11 @@ describe('ErrorHandler', () => {
const error = new HttpErrorResponse({ status: 500 }); const error = new HttpErrorResponse({ status: 500 });
const params = { const params = {
title: { title: {
key: 'AbpAccount::500Message', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.title,
}, },
details: { details: {
key: 'AbpAccount::InternalServerErrorMessage', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.details,
}, },
status: 500, status: 500,
@ -95,11 +95,11 @@ describe('ErrorHandler', () => {
const error = new HttpErrorResponse({ status: 403 }); const error = new HttpErrorResponse({ status: 403 });
const params = { const params = {
title: { title: {
key: 'AbpAccount::DefaultErrorMessage403', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.title,
}, },
details: { details: {
key: 'AbpAccount::DefaultErrorMessage403Detail', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.details,
}, },
status: 403, status: 403,
@ -124,7 +124,7 @@ describe('ErrorHandler', () => {
const error = new HttpErrorResponse({ status: 0, statusText: 'Unknown Error' }); const error = new HttpErrorResponse({ status: 0, statusText: 'Unknown Error' });
const params = { const params = {
title: { title: {
key: 'AbpAccount::DefaultErrorMessage', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
}, },
details: error.message, details: error.message,
@ -150,11 +150,11 @@ describe('ErrorHandler', () => {
expect(errorConfirmation).toHaveBeenCalledWith( expect(errorConfirmation).toHaveBeenCalledWith(
{ {
key: 'AbpAccount::DefaultErrorMessage404', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.details,
}, },
{ {
key: 'AbpAccount::DefaultErrorMessage404Detail', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title,
}, },
CONFIRMATION_BUTTONS, CONFIRMATION_BUTTONS,
@ -165,8 +165,14 @@ describe('ErrorHandler', () => {
store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 412 }))); store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 412 })));
expect(errorConfirmation).toHaveBeenCalledWith( expect(errorConfirmation).toHaveBeenCalledWith(
DEFAULT_ERROR_MESSAGES.defaultError.details, {
DEFAULT_ERROR_MESSAGES.defaultError.title, key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.details,
},
{
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
},
CONFIRMATION_BUTTONS, CONFIRMATION_BUTTONS,
); );
}); });
@ -176,11 +182,11 @@ describe('ErrorHandler', () => {
expect(errorConfirmation).toHaveBeenCalledWith( expect(errorConfirmation).toHaveBeenCalledWith(
{ {
key: 'AbpAccount::DefaultErrorMessage401', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title,
}, },
{ {
key: 'AbpAccount::DefaultErrorMessage401Detail', key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details,
}, },
CONFIRMATION_BUTTONS, CONFIRMATION_BUTTONS,
@ -205,7 +211,10 @@ describe('ErrorHandler', () => {
store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 401, headers }))); store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 401, headers })));
expect(errorConfirmation).toHaveBeenCalledWith( expect(errorConfirmation).toHaveBeenCalledWith(
DEFAULT_ERROR_MESSAGES.defaultError.title, {
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
},
null, null,
CONFIRMATION_BUTTONS, CONFIRMATION_BUTTONS,
); );

Loading…
Cancel
Save