UNPKG

@spartacus/storefront

Version:

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

91 lines 12.6 kB
import { ApplicationRef, Injectable, } from '@angular/core'; import { Scroll } from '@angular/router'; import { filter, pairwise } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "./config"; import * as i2 from "@angular/router"; import * as i3 from "@angular/common"; export class OnNavigateService { constructor(config, router, viewportScroller, injector) { this.config = config; this.router = router; this.viewportScroller = viewportScroller; this.injector = injector; } get hostComponent() { var _a, _b; return (_b = (_a = this.injector.get(ApplicationRef)) === null || _a === void 0 ? void 0 : _a.components) === null || _b === void 0 ? void 0 : _b[0]; } /** * Reads configuration and enables features based on flags set. */ initializeWithConfig() { var _a, _b; if ((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.enableResetViewOnNavigate) === null || _b === void 0 ? void 0 : _b.active) { this.setResetViewOnNavigate(this.config.enableResetViewOnNavigate.active); } } /** * Resets view back to the original position when performing a back navigation and to the top when performing a front navigation * and sets the focus back to the top of the page before skiplinks for any type of navigation * @param enable Enable or disable this feature */ setResetViewOnNavigate(enable) { var _a; (_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); if (enable) { this.subscription = this.router.events .pipe(filter((event) => event instanceof Scroll), pairwise()) .subscribe((event) => { var _a, _b, _c; const previousRoute = event[0]; const currentRoute = event[1]; if (currentRoute.position) { // allow the pages to be repainted before scrolling to proper position setTimeout(() => this.viewportScroller.scrollToPosition(currentRoute.position)); } else { if (((_a = this.config.enableResetViewOnNavigate) === null || _a === void 0 ? void 0 : _a.ignoreQueryString) && this.isPathEqual(previousRoute, currentRoute)) { return; } if (this.isChildRoute(currentRoute)) { return; } setTimeout(() => this.viewportScroller.scrollToPosition([0, 0]), 100); } (_c = (_b = this.hostComponent) === null || _b === void 0 ? void 0 : _b.location) === null || _c === void 0 ? void 0 : _c.nativeElement.focus(); }); } } /** * Verifies if the current route is a child route from the given ignore config route * * @param route * @returns boolean whether the route is a child route */ isChildRoute(route) { var _a, _b, _c; return ((_c = (_b = (_a = this.config.enableResetViewOnNavigate) === null || _a === void 0 ? void 0 : _a.ignoreRoutes) === null || _b === void 0 ? void 0 : _b.some((configRoute) => route.routerEvent.urlAfterRedirects.split('/').includes(configRoute))) !== null && _c !== void 0 ? _c : false); } /** * Verifies if the previous and current route are the same without the query string * * @param previousRoute * @param currentRoute * @returns boolean depending on the previous and current route are equal without the query strings */ isPathEqual(previousRoute, currentRoute) { return (previousRoute.routerEvent.urlAfterRedirects.split('?')[0] === currentRoute.routerEvent.urlAfterRedirects.split('?')[0]); } } OnNavigateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OnNavigateService, deps: [{ token: i1.OnNavigateConfig }, { token: i2.Router }, { token: i3.ViewportScroller }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); OnNavigateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OnNavigateService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OnNavigateService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.OnNavigateConfig }, { type: i2.Router }, { type: i3.ViewportScroller }, { type: i0.Injector }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tbmF2aWdhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0b3JlZnJvbnRsaWIvcm91dGVyL29uLW5hdmlnYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGNBQWMsRUFFZCxVQUFVLEdBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBTWxELE1BQU0sT0FBTyxpQkFBaUI7SUFPNUIsWUFDWSxNQUF3QixFQUN4QixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLFFBQWtCO1FBSGxCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQVU7SUFDM0IsQ0FBQztJQVRKLElBQUksYUFBYTs7UUFDZixPQUFPLE1BQUEsTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsMENBQUUsVUFBVSwwQ0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBU0Q7O09BRUc7SUFDSCxvQkFBb0I7O1FBQ2xCLElBQUksTUFBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLHlCQUF5QiwwQ0FBRSxNQUFNLEVBQUU7WUFDbEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0U7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLE1BQWU7O1FBQ3BDLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsV0FBVyxFQUFFLENBQUM7UUFFakMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtpQkFDbkMsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLEtBQUssWUFBWSxNQUFNLENBQUMsRUFDM0QsUUFBUSxFQUFFLENBQ1g7aUJBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7O2dCQUNuQixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFOUIsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFO29CQUN6QixzRUFBc0U7b0JBQ3RFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUM5RCxDQUFDO2lCQUNIO3FCQUFNO29CQUNMLElBQ0UsQ0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMseUJBQXlCLDBDQUFFLGlCQUFpQjt3QkFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEVBQzdDO3dCQUNBLE9BQU87cUJBQ1I7b0JBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUNuQyxPQUFPO3FCQUNSO29CQUVELFVBQVUsQ0FDUixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDcEQsR0FBRyxDQUNKLENBQUM7aUJBQ0g7Z0JBRUQsTUFBQSxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLFFBQVEsMENBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxZQUFZLENBQUMsS0FBYTs7UUFDaEMsT0FBTyxDQUNMLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMseUJBQXlCLDBDQUFFLFlBQVksMENBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDeEUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUNyRSxtQ0FBSSxLQUFLLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxXQUFXLENBQUMsYUFBcUIsRUFBRSxZQUFvQjtRQUM3RCxPQUFPLENBQ0wsYUFBYSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELFlBQVksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN6RCxDQUFDO0lBQ0osQ0FBQzs7OEdBL0ZVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdwb3J0U2Nyb2xsZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBTY3JvbGwgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHBhaXJ3aXNlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT25OYXZpZ2F0ZUNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE9uTmF2aWdhdGVTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGdldCBob3N0Q29tcG9uZW50KCk6IENvbXBvbmVudFJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpPy5jb21wb25lbnRzPy5bMF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBPbk5hdmlnYXRlQ29uZmlnLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgdmlld3BvcnRTY3JvbGxlcjogVmlld3BvcnRTY3JvbGxlcixcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge31cblxuICAvKipcbiAgICogUmVhZHMgY29uZmlndXJhdGlvbiBhbmQgZW5hYmxlcyBmZWF0dXJlcyBiYXNlZCBvbiBmbGFncyBzZXQuXG4gICAqL1xuICBpbml0aWFsaXplV2l0aENvbmZpZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWc/LmVuYWJsZVJlc2V0Vmlld09uTmF2aWdhdGU/LmFjdGl2ZSkge1xuICAgICAgdGhpcy5zZXRSZXNldFZpZXdPbk5hdmlnYXRlKHRoaXMuY29uZmlnLmVuYWJsZVJlc2V0Vmlld09uTmF2aWdhdGUuYWN0aXZlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHZpZXcgYmFjayB0byB0aGUgb3JpZ2luYWwgcG9zaXRpb24gd2hlbiBwZXJmb3JtaW5nIGEgYmFjayBuYXZpZ2F0aW9uIGFuZCB0byB0aGUgdG9wIHdoZW4gcGVyZm9ybWluZyBhIGZyb250IG5hdmlnYXRpb25cbiAgICogYW5kIHNldHMgdGhlIGZvY3VzIGJhY2sgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZSBiZWZvcmUgc2tpcGxpbmtzIGZvciBhbnkgdHlwZSBvZiBuYXZpZ2F0aW9uXG4gICAqIEBwYXJhbSBlbmFibGUgRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlXG4gICAqL1xuICBzZXRSZXNldFZpZXdPbk5hdmlnYXRlKGVuYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKGVuYWJsZSkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIFNjcm9sbCA9PiBldmVudCBpbnN0YW5jZW9mIFNjcm9sbCksXG4gICAgICAgICAgcGFpcndpc2UoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNSb3V0ZSA9IGV2ZW50WzBdO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZSA9IGV2ZW50WzFdO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRSb3V0ZS5wb3NpdGlvbikge1xuICAgICAgICAgICAgLy8gYWxsb3cgdGhlIHBhZ2VzIHRvIGJlIHJlcGFpbnRlZCBiZWZvcmUgc2Nyb2xsaW5nIHRvIHByb3BlciBwb3NpdGlvblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PlxuICAgICAgICAgICAgICB0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihjdXJyZW50Um91dGUucG9zaXRpb24pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmVuYWJsZVJlc2V0Vmlld09uTmF2aWdhdGU/Lmlnbm9yZVF1ZXJ5U3RyaW5nICYmXG4gICAgICAgICAgICAgIHRoaXMuaXNQYXRoRXF1YWwocHJldmlvdXNSb3V0ZSwgY3VycmVudFJvdXRlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGlsZFJvdXRlKGN1cnJlbnRSb3V0ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAoKSA9PiB0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihbMCwgMF0pLFxuICAgICAgICAgICAgICAxMDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ob3N0Q29tcG9uZW50Py5sb2NhdGlvbj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIGN1cnJlbnQgcm91dGUgaXMgYSBjaGlsZCByb3V0ZSBmcm9tIHRoZSBnaXZlbiBpZ25vcmUgY29uZmlnIHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSByb3V0ZVxuICAgKiBAcmV0dXJucyBib29sZWFuIHdoZXRoZXIgdGhlIHJvdXRlIGlzIGEgY2hpbGQgcm91dGVcbiAgICovXG4gIHByaXZhdGUgaXNDaGlsZFJvdXRlKHJvdXRlOiBTY3JvbGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb25maWcuZW5hYmxlUmVzZXRWaWV3T25OYXZpZ2F0ZT8uaWdub3JlUm91dGVzPy5zb21lKChjb25maWdSb3V0ZSkgPT5cbiAgICAgICAgcm91dGUucm91dGVyRXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMuc3BsaXQoJy8nKS5pbmNsdWRlcyhjb25maWdSb3V0ZSlcbiAgICAgICkgPz8gZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudCByb3V0ZSBhcmUgdGhlIHNhbWUgd2l0aG91dCB0aGUgcXVlcnkgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSBwcmV2aW91c1JvdXRlXG4gICAqIEBwYXJhbSBjdXJyZW50Um91dGVcbiAgICogQHJldHVybnMgYm9vbGVhbiBkZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHJvdXRlIGFyZSBlcXVhbCB3aXRob3V0IHRoZSBxdWVyeSBzdHJpbmdzXG4gICAqL1xuICBwcml2YXRlIGlzUGF0aEVxdWFsKHByZXZpb3VzUm91dGU6IFNjcm9sbCwgY3VycmVudFJvdXRlOiBTY3JvbGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcHJldmlvdXNSb3V0ZS5yb3V0ZXJFdmVudC51cmxBZnRlclJlZGlyZWN0cy5zcGxpdCgnPycpWzBdID09PVxuICAgICAgY3VycmVudFJvdXRlLnJvdXRlckV2ZW50LnVybEFmdGVyUmVkaXJlY3RzLnNwbGl0KCc/JylbMF1cbiAgICApO1xuICB9XG59XG4iXX0=