diff --git a/src/app/core/guards/no-server-side-rendering.guard.ts b/src/app/core/guards/no-server-side-rendering.guard.ts new file mode 100644 index 0000000000..fd3de08eea --- /dev/null +++ b/src/app/core/guards/no-server-side-rendering.guard.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, Router } from '@angular/router'; + +/** + * guards a route against server side rendering (e.g. if the logic requires information only available in browser rendering) + */ +@Injectable({ providedIn: 'root' }) +export class NoServerSideRenderingGuard implements CanActivate { + constructor(private router: Router) {} + + canActivate() { + // prevent any handling in the server side rendering (SSR) and instead show loading + if (SSR) { + return this.router.parseUrl('/loading'); + } + + // if not in SSR just return true and continue + return true; + } +} diff --git a/src/app/pages/checkout/checkout-page.module.ts b/src/app/pages/checkout/checkout-page.module.ts index c1fd01fed1..c0f5c6e670 100644 --- a/src/app/pages/checkout/checkout-page.module.ts +++ b/src/app/pages/checkout/checkout-page.module.ts @@ -1,6 +1,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; +import { NoServerSideRenderingGuard } from 'ish-core/guards/no-server-side-rendering.guard'; import { SharedModule } from 'ish-shared/shared.module'; import { CheckoutAddressPageModule } from '../checkout-address/checkout-address-page.module'; @@ -16,6 +17,7 @@ import { CheckoutProgressBarComponent } from './checkout-progress-bar/checkout-p const checkoutPageRoutes: Routes = [ { path: '', + canActivate: [NoServerSideRenderingGuard], component: CheckoutPageComponent, children: [ {