@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
JavaScript
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=