UNPKG

@spartacus/storefront

Version:

Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.

73 lines 10.5 kB
import { Injectable } from '@angular/core'; import { deepMerge, PageType, } from '@spartacus/core'; import { PageLayoutComponent } from '../page/page-layout/page-layout.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "./cms-components.service"; // This service should be exposed in public API only after the refactor planned in https://github.com/SAP/spartacus/issues/7070 export class CmsRoutesImplService { constructor(router, cmsComponentsService) { this.router = router; this.cmsComponentsService = cmsComponentsService; } cmsRouteExists(url) { const isCmsDrivenRoute = url.startsWith('/'); if (!isCmsDrivenRoute) { return false; } const routePath = url.substr(1); return (isCmsDrivenRoute && !!this.router.config.find((route) => route.data && route.data.cxCmsRouteContext && route.path === routePath)); } /** * Contains Cms driven routing logic intended for use use in guards, especially in canActivate method. * * Will return true, when logic wont have to modify routing (so canActivate could be easily resolved to true) * or will return false, when routing configuration was updated and redirection to newly generated route was initiated. * * @param pageContext * @param currentUrl */ handleCmsRoutesInGuard(pageContext, componentTypes, currentUrl, currentPageLabel) { var _a; if (this.cmsRouteExists(currentPageLabel)) { return true; } const childRoutesConfig = this.cmsComponentsService.getChildRoutes(componentTypes); if ((_a = childRoutesConfig === null || childRoutesConfig === void 0 ? void 0 : childRoutesConfig.children) === null || _a === void 0 ? void 0 : _a.length) { if (this.updateRouting(pageContext, currentPageLabel, childRoutesConfig)) { this.router.navigateByUrl(currentUrl); return false; } } return true; } updateRouting(pageContext, pageLabel, childRoutesConfig) { var _a, _b; if (pageContext.type === PageType.CONTENT_PAGE && pageLabel.startsWith('/') && pageLabel.length > 1) { const newRoute = { path: pageLabel.substr(1), component: PageLayoutComponent, children: childRoutesConfig.children, data: deepMerge({}, (_b = (_a = childRoutesConfig === null || childRoutesConfig === void 0 ? void 0 : childRoutesConfig.parent) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : {}, { cxCmsRouteContext: { type: pageContext.type, id: pageLabel, }, }), }; this.router.resetConfig([newRoute, ...this.router.config]); return true; } return false; } } CmsRoutesImplService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CmsRoutesImplService, deps: [{ token: i1.Router }, { token: i2.CmsComponentsService }], target: i0.ɵɵFactoryTarget.Injectable }); CmsRoutesImplService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CmsRoutesImplService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CmsRoutesImplService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.CmsComponentsService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLXJvdXRlcy1pbXBsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL2Ntcy1zdHJ1Y3R1cmUvc2VydmljZXMvY21zLXJvdXRlcy1pbXBsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBR0wsU0FBUyxFQUVULFFBQVEsR0FDVCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7O0FBR2hGLCtIQUErSDtBQUUvSCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQ1UsTUFBYyxFQUNkLG9CQUEwQztRQUQxQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtJQUNqRCxDQUFDO0lBRUksY0FBYyxDQUFDLEdBQVc7UUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQyxPQUFPLENBQ0wsZ0JBQWdCO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3ZCLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FDbEIsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUN6RSxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxzQkFBc0IsQ0FDcEIsV0FBd0IsRUFDeEIsY0FBd0IsRUFDeEIsVUFBa0IsRUFDbEIsZ0JBQXdCOztRQUV4QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxpQkFBaUIsR0FDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUzRCxJQUFJLE1BQUEsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsUUFBUSwwQ0FBRSxNQUFNLEVBQUU7WUFDdkMsSUFDRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUNwRTtnQkFDQSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sYUFBYSxDQUNuQixXQUF3QixFQUN4QixTQUFpQixFQUNqQixpQkFBZ0Q7O1FBRWhELElBQ0UsV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsWUFBWTtZQUMxQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUN6QixTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDcEI7WUFDQSxNQUFNLFFBQVEsR0FBYTtnQkFDekIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixTQUFTLEVBQUUsbUJBQW1CO2dCQUM5QixRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtnQkFDcEMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsTUFBQSxNQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLE1BQU0sMENBQUUsSUFBSSxtQ0FBSSxFQUFFLEVBQUU7b0JBQ3pELGlCQUFpQixFQUFFO3dCQUNqQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7d0JBQ3RCLEVBQUUsRUFBRSxTQUFTO3FCQUNkO2lCQUNGLENBQUM7YUFDSCxDQUFDO1lBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDM0QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7aUhBcEZVLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBDbXNDb21wb25lbnRDaGlsZFJvdXRlc0NvbmZpZyxcbiAgQ21zUm91dGUsXG4gIGRlZXBNZXJnZSxcbiAgUGFnZUNvbnRleHQsXG4gIFBhZ2VUeXBlLFxufSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2UvcGFnZS1sYXlvdXQvcGFnZS1sYXlvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENtc0NvbXBvbmVudHNTZXJ2aWNlIH0gZnJvbSAnLi9jbXMtY29tcG9uZW50cy5zZXJ2aWNlJztcblxuLy8gVGhpcyBzZXJ2aWNlIHNob3VsZCBiZSBleHBvc2VkIGluIHB1YmxpYyBBUEkgb25seSBhZnRlciB0aGUgcmVmYWN0b3IgcGxhbm5lZCBpbiBodHRwczovL2dpdGh1Yi5jb20vU0FQL3NwYXJ0YWN1cy9pc3N1ZXMvNzA3MFxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDbXNSb3V0ZXNJbXBsU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjbXNDb21wb25lbnRzU2VydmljZTogQ21zQ29tcG9uZW50c1NlcnZpY2VcbiAgKSB7fVxuXG4gIHByaXZhdGUgY21zUm91dGVFeGlzdHModXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0Ntc0RyaXZlblJvdXRlID0gdXJsLnN0YXJ0c1dpdGgoJy8nKTtcblxuICAgIGlmICghaXNDbXNEcml2ZW5Sb3V0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlUGF0aCA9IHVybC5zdWJzdHIoMSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgaXNDbXNEcml2ZW5Sb3V0ZSAmJlxuICAgICAgISF0aGlzLnJvdXRlci5jb25maWcuZmluZChcbiAgICAgICAgKHJvdXRlOiBDbXNSb3V0ZSkgPT5cbiAgICAgICAgICByb3V0ZS5kYXRhICYmIHJvdXRlLmRhdGEuY3hDbXNSb3V0ZUNvbnRleHQgJiYgcm91dGUucGF0aCA9PT0gcm91dGVQYXRoXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb250YWlucyBDbXMgZHJpdmVuIHJvdXRpbmcgbG9naWMgaW50ZW5kZWQgZm9yIHVzZSB1c2UgaW4gZ3VhcmRzLCBlc3BlY2lhbGx5IGluIGNhbkFjdGl2YXRlIG1ldGhvZC5cbiAgICpcbiAgICogV2lsbCByZXR1cm4gdHJ1ZSwgd2hlbiBsb2dpYyB3b250IGhhdmUgdG8gbW9kaWZ5IHJvdXRpbmcgKHNvIGNhbkFjdGl2YXRlIGNvdWxkIGJlIGVhc2lseSByZXNvbHZlZCB0byB0cnVlKVxuICAgKiBvciB3aWxsIHJldHVybiBmYWxzZSwgd2hlbiByb3V0aW5nIGNvbmZpZ3VyYXRpb24gd2FzIHVwZGF0ZWQgYW5kIHJlZGlyZWN0aW9uIHRvIG5ld2x5IGdlbmVyYXRlZCByb3V0ZSB3YXMgaW5pdGlhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFnZUNvbnRleHRcbiAgICogQHBhcmFtIGN1cnJlbnRVcmxcbiAgICovXG4gIGhhbmRsZUNtc1JvdXRlc0luR3VhcmQoXG4gICAgcGFnZUNvbnRleHQ6IFBhZ2VDb250ZXh0LFxuICAgIGNvbXBvbmVudFR5cGVzOiBzdHJpbmdbXSxcbiAgICBjdXJyZW50VXJsOiBzdHJpbmcsXG4gICAgY3VycmVudFBhZ2VMYWJlbDogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNtc1JvdXRlRXhpc3RzKGN1cnJlbnRQYWdlTGFiZWwpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFJvdXRlc0NvbmZpZyA9XG4gICAgICB0aGlzLmNtc0NvbXBvbmVudHNTZXJ2aWNlLmdldENoaWxkUm91dGVzKGNvbXBvbmVudFR5cGVzKTtcblxuICAgIGlmIChjaGlsZFJvdXRlc0NvbmZpZz8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnVwZGF0ZVJvdXRpbmcocGFnZUNvbnRleHQsIGN1cnJlbnRQYWdlTGFiZWwsIGNoaWxkUm91dGVzQ29uZmlnKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJvdXRpbmcoXG4gICAgcGFnZUNvbnRleHQ6IFBhZ2VDb250ZXh0LFxuICAgIHBhZ2VMYWJlbDogc3RyaW5nLFxuICAgIGNoaWxkUm91dGVzQ29uZmlnOiBDbXNDb21wb25lbnRDaGlsZFJvdXRlc0NvbmZpZ1xuICApOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICBwYWdlQ29udGV4dC50eXBlID09PSBQYWdlVHlwZS5DT05URU5UX1BBR0UgJiZcbiAgICAgIHBhZ2VMYWJlbC5zdGFydHNXaXRoKCcvJykgJiZcbiAgICAgIHBhZ2VMYWJlbC5sZW5ndGggPiAxXG4gICAgKSB7XG4gICAgICBjb25zdCBuZXdSb3V0ZTogQ21zUm91dGUgPSB7XG4gICAgICAgIHBhdGg6IHBhZ2VMYWJlbC5zdWJzdHIoMSksXG4gICAgICAgIGNvbXBvbmVudDogUGFnZUxheW91dENvbXBvbmVudCxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkUm91dGVzQ29uZmlnLmNoaWxkcmVuLFxuICAgICAgICBkYXRhOiBkZWVwTWVyZ2Uoe30sIGNoaWxkUm91dGVzQ29uZmlnPy5wYXJlbnQ/LmRhdGEgPz8ge30sIHtcbiAgICAgICAgICBjeENtc1JvdXRlQ29udGV4dDoge1xuICAgICAgICAgICAgdHlwZTogcGFnZUNvbnRleHQudHlwZSxcbiAgICAgICAgICAgIGlkOiBwYWdlTGFiZWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJvdXRlci5yZXNldENvbmZpZyhbbmV3Um91dGUsIC4uLnRoaXMucm91dGVyLmNvbmZpZ10pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=