@spartacus/storefront
Version:
Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.
49 lines • 8.46 kB
JavaScript
import { Injectable } from '@angular/core';
import { of } from 'rxjs';
import { first, switchMap, take } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@spartacus/core";
import * as i2 from "./cms-page-guard.service";
export class CmsPageGuard {
constructor(routingService, cmsService, protectedRoutesGuard, service, routingConfig) {
this.routingService = routingService;
this.cmsService = cmsService;
this.protectedRoutesGuard = protectedRoutesGuard;
this.service = service;
this.routingConfig = routingConfig;
}
/**
* Tries to load the CMS page data for the anticipated route and returns:
* - `true` - if it can be activated
* - `false` - if it cannot be activated
* - `UrlTree` - if user should be redirected to a given `UrlTree`
*
* If the route can be activated, it fires additional calculations on the CMS components present on this CMS page,
* based on their configuration (`cmsComponents` config).
*
* For more, see docs of the `CmsPageGuardService.canActivatePage`.
*/
canActivate(route, state) {
return this.protectedRoutesGuard.canActivate(route).pipe(switchMap((canActivate) => canActivate === true
? this.routingService.getNextPageContext().pipe(take(1), switchMap((pageContext) => this.cmsService.getPage(pageContext, this.shouldReload()).pipe(first(), switchMap((pageData) => pageData
? this.service.canActivatePage(pageContext, pageData, route, state)
: this.service.canActivateNotFoundPage(pageContext, route, state)))))
: of(canActivate)));
}
/**
* Returns whether we should reload the CMS page data, even when it was loaded before.
*/
shouldReload() {
return this.routingConfig.getLoadStrategy() !== "once" /* ONCE */;
}
}
CmsPageGuard.guardName = 'CmsPageGuard';
CmsPageGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CmsPageGuard, deps: [{ token: i1.RoutingService }, { token: i1.CmsService }, { token: i1.ProtectedRoutesGuard }, { token: i2.CmsPageGuardService }, { token: i1.RoutingConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
CmsPageGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CmsPageGuard, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CmsPageGuard, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.RoutingService }, { type: i1.CmsService }, { type: i1.ProtectedRoutesGuard }, { type: i2.CmsPageGuardService }, { type: i1.RoutingConfigService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLXBhZ2UuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL2Ntcy1zdHJ1Y3R1cmUvZ3VhcmRzL2Ntcy1wYWdlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU14RCxNQUFNLE9BQU8sWUFBWTtJQUd2QixZQUNZLGNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLG9CQUEwQyxFQUMxQyxPQUE0QixFQUM1QixhQUFtQztRQUpuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBQzVCLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtJQUM1QyxDQUFDO0lBRUo7Ozs7Ozs7Ozs7T0FVRztJQUNILFdBQVcsQ0FDVCxLQUFnQyxFQUNoQyxLQUEwQjtRQUUxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUN0RCxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUN4QixXQUFXLEtBQUssSUFBSTtZQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FDM0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzVELEtBQUssRUFBRSxFQUNQLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ3JCLFFBQVE7Z0JBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUMxQixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFDTCxLQUFLLENBQ047Z0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQ2xDLFdBQVcsRUFDWCxLQUFLLEVBQ0wsS0FBSyxDQUNOLENBQ04sQ0FDRixDQUNGLENBQ0Y7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUNwQixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsc0JBQTJCLENBQUM7SUFDekUsQ0FBQzs7QUE1RE0sc0JBQVMsR0FBRyxjQUFjLENBQUM7eUdBRHZCLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBDbXNBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBDbXNTZXJ2aWNlLFxuICBQcm90ZWN0ZWRSb3V0ZXNHdWFyZCxcbiAgUm91dGVMb2FkU3RyYXRlZ3ksXG4gIFJvdXRpbmdDb25maWdTZXJ2aWNlLFxuICBSb3V0aW5nU2VydmljZSxcbn0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ21zUGFnZUd1YXJkU2VydmljZSB9IGZyb20gJy4vY21zLXBhZ2UtZ3VhcmQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDbXNQYWdlR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gIHN0YXRpYyBndWFyZE5hbWUgPSAnQ21zUGFnZUd1YXJkJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcm91dGluZ1NlcnZpY2U6IFJvdXRpbmdTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjbXNTZXJ2aWNlOiBDbXNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBwcm90ZWN0ZWRSb3V0ZXNHdWFyZDogUHJvdGVjdGVkUm91dGVzR3VhcmQsXG4gICAgcHJvdGVjdGVkIHNlcnZpY2U6IENtc1BhZ2VHdWFyZFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRpbmdDb25maWc6IFJvdXRpbmdDb25maWdTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogVHJpZXMgdG8gbG9hZCB0aGUgQ01TIHBhZ2UgZGF0YSBmb3IgdGhlIGFudGljaXBhdGVkIHJvdXRlIGFuZCByZXR1cm5zOlxuICAgKiAtIGB0cnVlYCAtIGlmIGl0IGNhbiBiZSBhY3RpdmF0ZWRcbiAgICogLSBgZmFsc2VgIC0gaWYgaXQgY2Fubm90IGJlIGFjdGl2YXRlZFxuICAgKiAtIGBVcmxUcmVlYCAtIGlmIHVzZXIgc2hvdWxkIGJlIHJlZGlyZWN0ZWQgdG8gYSBnaXZlbiBgVXJsVHJlZWBcbiAgICpcbiAgICogSWYgdGhlIHJvdXRlIGNhbiBiZSBhY3RpdmF0ZWQsIGl0IGZpcmVzIGFkZGl0aW9uYWwgY2FsY3VsYXRpb25zIG9uIHRoZSBDTVMgY29tcG9uZW50cyBwcmVzZW50IG9uIHRoaXMgQ01TIHBhZ2UsXG4gICAqIGJhc2VkIG9uIHRoZWlyIGNvbmZpZ3VyYXRpb24gKGBjbXNDb21wb25lbnRzYCBjb25maWcpLlxuICAgKlxuICAgKiBGb3IgbW9yZSwgc2VlIGRvY3Mgb2YgdGhlIGBDbXNQYWdlR3VhcmRTZXJ2aWNlLmNhbkFjdGl2YXRlUGFnZWAuXG4gICAqL1xuICBjYW5BY3RpdmF0ZShcbiAgICByb3V0ZTogQ21zQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdGVjdGVkUm91dGVzR3VhcmQuY2FuQWN0aXZhdGUocm91dGUpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGNhbkFjdGl2YXRlKSA9PlxuICAgICAgICBjYW5BY3RpdmF0ZSA9PT0gdHJ1ZVxuICAgICAgICAgID8gdGhpcy5yb3V0aW5nU2VydmljZS5nZXROZXh0UGFnZUNvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHBhZ2VDb250ZXh0KSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuY21zU2VydmljZS5nZXRQYWdlKHBhZ2VDb250ZXh0LCB0aGlzLnNob3VsZFJlbG9hZCgpKS5waXBlKFxuICAgICAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgocGFnZURhdGEpID0+XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VEYXRhXG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlcnZpY2UuY2FuQWN0aXZhdGVQYWdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXJ2aWNlLmNhbkFjdGl2YXRlTm90Rm91bmRQYWdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBvZihjYW5BY3RpdmF0ZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcmVsb2FkIHRoZSBDTVMgcGFnZSBkYXRhLCBldmVuIHdoZW4gaXQgd2FzIGxvYWRlZCBiZWZvcmUuXG4gICAqL1xuICBwcml2YXRlIHNob3VsZFJlbG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0aW5nQ29uZmlnLmdldExvYWRTdHJhdGVneSgpICE9PSBSb3V0ZUxvYWRTdHJhdGVneS5PTkNFO1xuICB9XG59XG4iXX0=