UNPKG

@spartacus/storefront

Version:

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

101 lines 13.2 kB
import { Injectable } from '@angular/core'; import { NavigationStart } from '@angular/router'; import { filter, take } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "../config"; import * as i2 from "@angular/router"; import * as i3 from "../../../../layout/breakpoint/breakpoint.service"; import * as i4 from "@spartacus/core"; /** * @deprecated since 4.2, refer to spartacus issues (#13762) * Shared service for keyboard focus features called when the browser navigates. */ export class OnNavigateFocusService { constructor(config, router, breakpointService, winRef) { this.config = config; this.router = router; this.breakpointService = breakpointService; this.winRef = winRef; } ngOnDestroy() { var _a, _b; (_a = this.resetFocusOnNavigate) === null || _a === void 0 ? void 0 : _a.unsubscribe(); (_b = this.resetViewOnNavigate) === null || _b === void 0 ? void 0 : _b.unsubscribe(); } /** * Reads configuration and enables features based on flags set. */ initializeWithConfig() { var _a, _b, _c, _d; if (!this.winRef.isBrowser()) { return; } if ((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.keyboardFocus) === null || _b === void 0 ? void 0 : _b.enableResetFocusOnNavigate) { this.setResetFocusOnNavigate(this.config.keyboardFocus.enableResetFocusOnNavigate); } if ((_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.keyboardFocus) === null || _d === void 0 ? void 0 : _d.enableResetViewOnNavigate) { this.setResetViewOnNavigate(this.config.keyboardFocus.enableResetViewOnNavigate); } } /** * Resets focus back to body element in the DOM tree when a navigation is started. * @param enable Enable or disable this feature. Set this to an array of BREAKPOINTS to enable for specified screen widths. */ setResetFocusOnNavigate(enable) { var _a; (_a = this.resetFocusOnNavigate) === null || _a === void 0 ? void 0 : _a.unsubscribe(); if (enable) { this.resetFocusOnNavigate = this.router.events .pipe(filter((event) => event instanceof NavigationStart)) .subscribe(() => { if (Array.isArray(enable)) { this.breakpointService.breakpoint$ .pipe(take(1)) .subscribe((breakpoint) => { if (enable.includes(breakpoint)) { this.winRef.document.body.focus(); } }); } else if (typeof enable === 'boolean') { this.winRef.document.body.focus(); } }); } } /** * Resets view back to body element in the DOM tree when a navigation is started. * @param enable Enable or disable this feature. Set this to an array of BREAKPOINTS to enable for specified screen widths. */ setResetViewOnNavigate(enable) { var _a; (_a = this.resetViewOnNavigate) === null || _a === void 0 ? void 0 : _a.unsubscribe(); if (enable) { this.resetViewOnNavigate = this.router.events .pipe(filter((event) => event instanceof NavigationStart)) .subscribe(() => { if (Array.isArray(enable)) { this.breakpointService.breakpoint$ .pipe(take(1)) .subscribe((breakpoint) => { if (enable.includes(breakpoint)) { this.winRef.document.body.scrollIntoView(); } }); } else if (typeof enable === 'boolean') { this.winRef.document.body.scrollIntoView(); } }); } } } OnNavigateFocusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OnNavigateFocusService, deps: [{ token: i1.KeyboardFocusConfig }, { token: i2.Router }, { token: i3.BreakpointService }, { token: i4.WindowRef }], target: i0.ɵɵFactoryTarget.Injectable }); OnNavigateFocusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OnNavigateFocusService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OnNavigateFocusService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.KeyboardFocusConfig }, { type: i2.Router }, { type: i3.BreakpointService }, { type: i4.WindowRef }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tbmF2aWdhdGUtZm9jdXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0b3JlZnJvbnRsaWIvbGF5b3V0L2ExMXkva2V5Ym9hcmQtZm9jdXMvb24tbmF2aWdhdGUvb24tbmF2aWdhdGUtZm9jdXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFLOUM7OztHQUdHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUNZLE1BQTJCLEVBQzNCLE1BQWMsRUFDZCxpQkFBb0MsRUFDcEMsTUFBaUI7UUFIakIsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztJQUMxQixDQUFDO0lBRUosV0FBVzs7UUFDVCxNQUFBLElBQUksQ0FBQyxvQkFBb0IsMENBQUUsV0FBVyxFQUFFLENBQUM7UUFDekMsTUFBQSxJQUFJLENBQUMsbUJBQW1CLDBDQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQjs7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDNUIsT0FBTztTQUNSO1FBRUQsSUFBSSxNQUFBLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsYUFBYSwwQ0FBRSwwQkFBMEIsRUFBRTtZQUMxRCxJQUFJLENBQUMsdUJBQXVCLENBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUNyRCxDQUFDO1NBQ0g7UUFFRCxJQUFJLE1BQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxhQUFhLDBDQUFFLHlCQUF5QixFQUFFO1lBQ3pELElBQUksQ0FBQyxzQkFBc0IsQ0FDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQ3BELENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx1QkFBdUIsQ0FBQyxNQUE4Qjs7UUFDcEQsTUFBQSxJQUFJLENBQUMsb0JBQW9CLDBDQUFFLFdBQVcsRUFBRSxDQUFDO1FBRXpDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtpQkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLGVBQWUsQ0FBQyxDQUFDO2lCQUN6RCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7eUJBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2IsU0FBUyxDQUFDLENBQUMsVUFBc0IsRUFBRSxFQUFFO3dCQUNwQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7NEJBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt5QkFDbkM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ047cUJBQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxTQUFTLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDbkM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILHNCQUFzQixDQUFDLE1BQThCOztRQUNuRCxNQUFBLElBQUksQ0FBQyxtQkFBbUIsMENBQUUsV0FBVyxFQUFFLENBQUM7UUFFeEMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2lCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksZUFBZSxDQUFDLENBQUM7aUJBQ3pELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVzt5QkFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDYixTQUFTLENBQUMsQ0FBQyxVQUFzQixFQUFFLEVBQUU7d0JBQ3BDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTs0QkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3lCQUM1QztvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDTjtxQkFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFNBQVMsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUM1QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDOzttSEF2RlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCcmVha3BvaW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xheW91dC9icmVha3BvaW50L2JyZWFrcG9pbnQuc2VydmljZSc7XG5pbXBvcnQgeyBCUkVBS1BPSU5UIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IEtleWJvYXJkRm9jdXNDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDQuMiwgcmVmZXIgdG8gc3BhcnRhY3VzIGlzc3VlcyAoIzEzNzYyKVxuICogU2hhcmVkIHNlcnZpY2UgZm9yIGtleWJvYXJkIGZvY3VzIGZlYXR1cmVzIGNhbGxlZCB3aGVuIHRoZSBicm93c2VyIG5hdmlnYXRlcy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE9uTmF2aWdhdGVGb2N1c1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgcmVzZXRGb2N1c09uTmF2aWdhdGU6IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHJlc2V0Vmlld09uTmF2aWdhdGU6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBLZXlib2FyZEZvY3VzQ29uZmlnLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgYnJlYWtwb2ludFNlcnZpY2U6IEJyZWFrcG9pbnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB3aW5SZWY6IFdpbmRvd1JlZlxuICApIHt9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEZvY3VzT25OYXZpZ2F0ZT8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlc2V0Vmlld09uTmF2aWdhdGU/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgY29uZmlndXJhdGlvbiBhbmQgZW5hYmxlcyBmZWF0dXJlcyBiYXNlZCBvbiBmbGFncyBzZXQuXG4gICAqL1xuICBpbml0aWFsaXplV2l0aENvbmZpZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMud2luUmVmLmlzQnJvd3NlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5rZXlib2FyZEZvY3VzPy5lbmFibGVSZXNldEZvY3VzT25OYXZpZ2F0ZSkge1xuICAgICAgdGhpcy5zZXRSZXNldEZvY3VzT25OYXZpZ2F0ZShcbiAgICAgICAgdGhpcy5jb25maWcua2V5Ym9hcmRGb2N1cy5lbmFibGVSZXNldEZvY3VzT25OYXZpZ2F0ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWc/LmtleWJvYXJkRm9jdXM/LmVuYWJsZVJlc2V0Vmlld09uTmF2aWdhdGUpIHtcbiAgICAgIHRoaXMuc2V0UmVzZXRWaWV3T25OYXZpZ2F0ZShcbiAgICAgICAgdGhpcy5jb25maWcua2V5Ym9hcmRGb2N1cy5lbmFibGVSZXNldFZpZXdPbk5hdmlnYXRlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgZm9jdXMgYmFjayB0byBib2R5IGVsZW1lbnQgaW4gdGhlIERPTSB0cmVlIHdoZW4gYSBuYXZpZ2F0aW9uIGlzIHN0YXJ0ZWQuXG4gICAqIEBwYXJhbSBlbmFibGUgRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlLiBTZXQgdGhpcyB0byBhbiBhcnJheSBvZiBCUkVBS1BPSU5UUyB0byBlbmFibGUgZm9yIHNwZWNpZmllZCBzY3JlZW4gd2lkdGhzLlxuICAgKi9cbiAgc2V0UmVzZXRGb2N1c09uTmF2aWdhdGUoZW5hYmxlOiBib29sZWFuIHwgQlJFQUtQT0lOVFtdKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEZvY3VzT25OYXZpZ2F0ZT8udW5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChlbmFibGUpIHtcbiAgICAgIHRoaXMucmVzZXRGb2N1c09uTmF2aWdhdGUgPSB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbmFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFrcG9pbnRTZXJ2aWNlLmJyZWFrcG9pbnQkXG4gICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJyZWFrcG9pbnQ6IEJSRUFLUE9JTlQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW5hYmxlLmluY2x1ZGVzKGJyZWFrcG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndpblJlZi5kb2N1bWVudC5ib2R5LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmFibGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhpcy53aW5SZWYuZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB2aWV3IGJhY2sgdG8gYm9keSBlbGVtZW50IGluIHRoZSBET00gdHJlZSB3aGVuIGEgbmF2aWdhdGlvbiBpcyBzdGFydGVkLlxuICAgKiBAcGFyYW0gZW5hYmxlIEVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZmVhdHVyZS4gU2V0IHRoaXMgdG8gYW4gYXJyYXkgb2YgQlJFQUtQT0lOVFMgdG8gZW5hYmxlIGZvciBzcGVjaWZpZWQgc2NyZWVuIHdpZHRocy5cbiAgICovXG4gIHNldFJlc2V0Vmlld09uTmF2aWdhdGUoZW5hYmxlOiBib29sZWFuIHwgQlJFQUtQT0lOVFtdKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFZpZXdPbk5hdmlnYXRlPy51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKGVuYWJsZSkge1xuICAgICAgdGhpcy5yZXNldFZpZXdPbk5hdmlnYXRlID0gdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW5hYmxlKSkge1xuICAgICAgICAgICAgdGhpcy5icmVha3BvaW50U2VydmljZS5icmVha3BvaW50JFxuICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChicmVha3BvaW50OiBCUkVBS1BPSU5UKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVuYWJsZS5pbmNsdWRlcyhicmVha3BvaW50KSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy53aW5SZWYuZG9jdW1lbnQuYm9keS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW5hYmxlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRoaXMud2luUmVmLmRvY3VtZW50LmJvZHkuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19