Browse Source

feat(theme-shared): add an property named skipHandledErrorCodes

#3636
pull/3652/head
mehmet-erim 6 years ago
parent
commit
67654d2d0c
  1. 29
      npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts
  2. 7
      npm/ng-packs/packages/theme-shared/src/lib/models/common.ts
  3. 1
      npm/ng-packs/packages/theme-shared/src/lib/tokens/http-error.token.ts

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

@ -19,6 +19,7 @@ import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http
import { HttpErrorConfig, ErrorScreenErrorCodes } from '../models/common';
import { Confirmation } from '../models/confirmation';
import { ConfirmationService } from '../services/confirmation.service';
import { filter } from 'rxjs/operators';
export const DEFAULT_ERROR_MESSAGES = {
defaultError: {
@ -58,7 +59,10 @@ export class ErrorHandler {
@Inject('HTTP_ERROR_CONFIG') private httpErrorConfig: HttpErrorConfig,
) {
this.actions
.pipe(ofActionSuccessful(RestOccurError, RouterError, RouterDataResolved))
.pipe(
ofActionSuccessful(RestOccurError, RouterError, RouterDataResolved),
filter(this.filterErrors),
)
.subscribe(res => {
if (res instanceof RestOccurError) {
const { payload: err = {} as HttpErrorResponse | any } = res;
@ -254,4 +258,27 @@ export class ErrorHandler {
this.httpErrorConfig.errorScreen.forWhichErrors.indexOf(status) > -1,
);
}
private filterErrors = (
instance: RestOccurError | RouterError<any, any> | RouterDataResolved,
): boolean => {
if (instance instanceof RouterDataResolved) return true;
if (instance instanceof RestOccurError) {
const { payload: err = {} as HttpErrorResponse | any } = instance;
if (!err.status) return true;
this.httpErrorConfig.skipHandledErrorCodes = this.httpErrorConfig.skipHandledErrorCodes || [];
return this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === err.status) < 0;
}
if (instance instanceof RouterError) {
return (
!snq(() => instance.event.error.indexOf('Cannot match') > -1) ||
this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === 404) < 0
);
}
};
}

7
npm/ng-packs/packages/theme-shared/src/lib/models/common.ts

@ -7,13 +7,10 @@ export interface RootParams {
export type ErrorScreenErrorCodes = 401 | 403 | 404 | 500;
export interface HttpErrorConfig {
skipHandledErrorCodes?: ErrorScreenErrorCodes[];
errorScreen?: {
component: Type<any>;
forWhichErrors?:
| [ErrorScreenErrorCodes]
| [ErrorScreenErrorCodes, ErrorScreenErrorCodes]
| [ErrorScreenErrorCodes, ErrorScreenErrorCodes, ErrorScreenErrorCodes]
| [ErrorScreenErrorCodes, ErrorScreenErrorCodes, ErrorScreenErrorCodes, ErrorScreenErrorCodes];
forWhichErrors?: ErrorScreenErrorCodes[];
hideCloseIcon?: boolean;
};
}

1
npm/ng-packs/packages/theme-shared/src/lib/tokens/http-error.token.ts

@ -7,6 +7,7 @@ export function httpErrorConfigFactory(config = {} as HttpErrorConfig) {
}
return {
skipHandledErrorCodes: [],
errorScreen: {},
...config,
} as HttpErrorConfig;

Loading…
Cancel
Save