UNPKG

@spartacus/core

Version:

Spartacus - the core framework

95 lines 14.7 kB
import { Injectable } from '@angular/core'; import { filter, map, take } from 'rxjs/operators'; import { BASE_SITE_CONTEXT_ID, CURRENCY_CONTEXT_ID, LANGUAGE_CONTEXT_ID, THEME_CONTEXT_ID, } from '../../providers/context-ids'; import * as i0 from "@angular/core"; import * as i1 from "../../facade/base-site.service"; import * as i2 from "../../../util/java-reg-exp-converter/java-reg-exp-converter"; import * as i3 from "../../../window/window-ref"; export class SiteContextConfigInitializer { constructor(baseSiteService, javaRegExpConverter, winRef) { this.baseSiteService = baseSiteService; this.javaRegExpConverter = javaRegExpConverter; this.winRef = winRef; this.scopes = ['context']; this.configFactory = () => this.resolveConfig().toPromise(); } get currentUrl() { return this.winRef.location.href; } /** * Emits the site context config basing on the current base site data. * * Completes after emitting the value. */ resolveConfig() { return this.baseSiteService.getAll().pipe(map((baseSites) => baseSites === null || baseSites === void 0 ? void 0 : baseSites.find((site) => this.isCurrentBaseSite(site))), filter((baseSite) => { if (!baseSite) { throw new Error(`Error: Cannot get base site config! Current url (${this.currentUrl}) doesn't match any of url patterns of any base sites.`); } return Boolean(baseSite); }), map((baseSite) => this.getConfig(baseSite)), take(1)); } getConfig(source) { var _a, _b, _c, _d; const result = { context: { urlParameters: this.getUrlParams(source.urlEncodingAttributes), [BASE_SITE_CONTEXT_ID]: [source.uid], [LANGUAGE_CONTEXT_ID]: this.getIsoCodes((_a = source.baseStore) === null || _a === void 0 ? void 0 : _a.languages, source.defaultLanguage || ((_b = source.baseStore) === null || _b === void 0 ? void 0 : _b.defaultLanguage)), [CURRENCY_CONTEXT_ID]: this.getIsoCodes((_c = source.baseStore) === null || _c === void 0 ? void 0 : _c.currencies, (_d = source.baseStore) === null || _d === void 0 ? void 0 : _d.defaultCurrency), [THEME_CONTEXT_ID]: [source.theme], }, }; return result; } isCurrentBaseSite(site) { const index = (site.urlPatterns || []).findIndex((javaRegexp) => { const jsRegexp = this.javaRegExpConverter.toJsRegExp(javaRegexp); if (jsRegexp) { const result = jsRegexp.test(this.currentUrl); return result; } }); return index !== -1; } /** * Returns an array of url encoded site context parameters. * * It maps the string "storefront" (used in OCC) to the "baseSite" (used in Spartacus) */ getUrlParams(params) { const STOREFRONT_PARAM = 'storefront'; return (params || []).map((param) => param === STOREFRONT_PARAM ? BASE_SITE_CONTEXT_ID : param); } /** * Returns iso codes in a array, where the first element is the default iso code. */ getIsoCodes(elements, defaultElement) { if (elements && defaultElement) { const result = this.moveToFirst(elements, (el) => el.isocode === defaultElement.isocode).map((el) => el.isocode); return result; } } /** * Moves to the start of the array the first element that satisfies the given predicate. * * @param array array to modify * @param predicate function called on elements */ moveToFirst(array, predicate) { array = [...array]; const index = array.findIndex(predicate); if (index !== -1) { const [el] = array.splice(index, 1); array.unshift(el); } return array; } } SiteContextConfigInitializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SiteContextConfigInitializer, deps: [{ token: i1.BaseSiteService }, { token: i2.JavaRegExpConverter }, { token: i3.WindowRef }], target: i0.ɵɵFactoryTarget.Injectable }); SiteContextConfigInitializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SiteContextConfigInitializer, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SiteContextConfigInitializer, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.BaseSiteService }, { type: i2.JavaRegExpConverter }, { type: i3.WindowRef }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZS1jb250ZXh0LWNvbmZpZy1pbml0aWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3NpdGUtY29udGV4dC9jb25maWcvY29uZmlnLWxvYWRlci9zaXRlLWNvbnRleHQtY29uZmlnLWluaXRpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNbkQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNqQixNQUFNLDZCQUE2QixDQUFDOzs7OztBQUlyQyxNQUFNLE9BQU8sNEJBQTRCO0lBSXZDLFlBQ1ksZUFBZ0MsRUFDaEMsbUJBQXdDLEVBQ3hDLE1BQWlCO1FBRmpCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFOcEIsV0FBTSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckIsa0JBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFNN0QsQ0FBQztJQUVKLElBQVksVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQWMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLGFBQWE7UUFDckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDaEIsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxD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O0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssV0FBVyxDQUFDLEtBQVksRUFBRSxTQUErQjtRQUMvRCxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O3lIQWhIVSw0QkFBNEI7NkhBQTVCLDRCQUE0QixjQURmLE1BQU07MkZBQ25CLDRCQUE0QjtrQkFEeEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ0luaXRpYWxpemVyIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlnL2NvbmZpZy1pbml0aWFsaXplci9jb25maWctaW5pdGlhbGl6ZXInO1xuaW1wb3J0IHsgQmFzZVNpdGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9taXNjLm1vZGVsJztcbmltcG9ydCB7IEphdmFSZWdFeHBDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi91dGlsL2phdmEtcmVnLWV4cC1jb252ZXJ0ZXIvamF2YS1yZWctZXhwLWNvbnZlcnRlcic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICcuLi8uLi8uLi93aW5kb3cvd2luZG93LXJlZic7XG5pbXBvcnQgeyBCYXNlU2l0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9mYWNhZGUvYmFzZS1zaXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQkFTRV9TSVRFX0NPTlRFWFRfSUQsXG4gIENVUlJFTkNZX0NPTlRFWFRfSUQsXG4gIExBTkdVQUdFX0NPTlRFWFRfSUQsXG4gIFRIRU1FX0NPTlRFWFRfSUQsXG59IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9jb250ZXh0LWlkcyc7XG5pbXBvcnQgeyBTaXRlQ29udGV4dENvbmZpZyB9IGZyb20gJy4uL3NpdGUtY29udGV4dC1jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFNpdGVDb250ZXh0Q29uZmlnSW5pdGlhbGl6ZXIgaW1wbGVtZW50cyBDb25maWdJbml0aWFsaXplciB7XG4gIHJlYWRvbmx5IHNjb3BlcyA9IFsnY29udGV4dCddO1xuICByZWFkb25seSBjb25maWdGYWN0b3J5ID0gKCkgPT4gdGhpcy5yZXNvbHZlQ29uZmlnKCkudG9Qcm9taXNlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGJhc2VTaXRlU2VydmljZTogQmFzZVNpdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBqYXZhUmVnRXhwQ29udmVydGVyOiBKYXZhUmVnRXhwQ29udmVydGVyLFxuICAgIHByb3RlY3RlZCB3aW5SZWY6IFdpbmRvd1JlZlxuICApIHt9XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndpblJlZi5sb2NhdGlvbi5ocmVmIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2l0ZSBjb250ZXh0IGNvbmZpZyBiYXNpbmcgb24gdGhlIGN1cnJlbnQgYmFzZSBzaXRlIGRhdGEuXG4gICAqXG4gICAqIENvbXBsZXRlcyBhZnRlciBlbWl0dGluZyB0aGUgdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZUNvbmZpZygpOiBPYnNlcnZhYmxlPFNpdGVDb250ZXh0Q29uZmlnPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVNpdGVTZXJ2aWNlLmdldEFsbCgpLnBpcGUoXG4gICAgICBtYXAoKGJhc2VTaXRlcykgPT5cbiAgICAgICAgYmFzZVNpdGVzPy5maW5kKChzaXRlKSA9PiB0aGlzLmlzQ3VycmVudEJhc2VTaXRlKHNpdGUpKVxuICAgICAgKSxcbiAgICAgIGZpbHRlcigoYmFzZVNpdGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWJhc2VTaXRlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEVycm9yOiBDYW5ub3QgZ2V0IGJhc2Ugc2l0ZSBjb25maWchIEN1cnJlbnQgdXJsICgke3RoaXMuY3VycmVudFVybH0pIGRvZXNuJ3QgbWF0Y2ggYW55IG9mIHVybCBwYXR0ZXJucyBvZiBhbnkgYmFzZSBzaXRlcy5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQm9vbGVhbihiYXNlU2l0ZSk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoYmFzZVNpdGUpID0+IHRoaXMuZ2V0Q29uZmlnKGJhc2VTaXRlKSksXG4gICAgICB0YWtlKDEpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb25maWcoc291cmNlOiBCYXNlU2l0ZSk6IFNpdGVDb250ZXh0Q29uZmlnIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHVybFBhcmFtZXRlcnM6IHRoaXMuZ2V0VXJsUGFyYW1zKHNvdXJjZS51cmxFbmNvZGluZ0F0dHJpYnV0ZXMpLFxuICAgICAgICBbQkFTRV9TSVRFX0NPTlRFWFRfSURdOiBbc291cmNlLnVpZF0sXG4gICAgICAgIFtMQU5HVUFHRV9DT05URVhUX0lEXTogdGhpcy5nZXRJc29Db2RlcyhcbiAgICAgICAgICBzb3VyY2UuYmFzZVN0b3JlPy5sYW5ndWFnZXMsXG4gICAgICAgICAgc291cmNlLmRlZmF1bHRMYW5ndWFnZSB8fCBzb3VyY2UuYmFzZVN0b3JlPy5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgKSxcbiAgICAgICAgW0NVUlJFTkNZX0NPTlRFWFRfSURdOiB0aGlzLmdldElzb0NvZGVzKFxuICAgICAgICAgIHNvdXJjZS5iYXNlU3RvcmU/LmN1cnJlbmNpZXMsXG4gICAgICAgICAgc291cmNlLmJhc2VTdG9yZT8uZGVmYXVsdEN1cnJlbmN5XG4gICAgICAgICksXG4gICAgICAgIFtUSEVNRV9DT05URVhUX0lEXTogW3NvdXJjZS50aGVtZV0sXG4gICAgICB9LFxuICAgIH0gYXMgU2l0ZUNvbnRleHRDb25maWc7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0N1cnJlbnRCYXNlU2l0ZShzaXRlOiBCYXNlU2l0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluZGV4ID0gKHNpdGUudXJsUGF0dGVybnMgfHwgW10pLmZpbmRJbmRleCgoamF2YVJlZ2V4cDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBqc1JlZ2V4cCA9IHRoaXMuamF2YVJlZ0V4cENvbnZlcnRlci50b0pzUmVnRXhwKGphdmFSZWdleHApO1xuICAgICAgaWYgKGpzUmVnZXhwKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGpzUmVnZXhwLnRlc3QodGhpcy5jdXJyZW50VXJsKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpbmRleCAhPT0gLTE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiB1cmwgZW5jb2RlZCBzaXRlIGNvbnRleHQgcGFyYW1ldGVycy5cbiAgICpcbiAgICogSXQgbWFwcyB0aGUgc3RyaW5nIFwic3RvcmVmcm9udFwiICh1c2VkIGluIE9DQykgdG8gdGhlIFwiYmFzZVNpdGVcIiAodXNlZCBpbiBTcGFydGFjdXMpXG4gICAqL1xuICBwcml2YXRlIGdldFVybFBhcmFtcyhwYXJhbXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IFNUT1JFRlJPTlRfUEFSQU0gPSAnc3RvcmVmcm9udCc7XG5cbiAgICByZXR1cm4gKHBhcmFtcyB8fCBbXSkubWFwKChwYXJhbSkgPT5cbiAgICAgIHBhcmFtID09PSBTVE9SRUZST05UX1BBUkFNID8gQkFTRV9TSVRFX0NPTlRFWFRfSUQgOiBwYXJhbVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpc28gY29kZXMgaW4gYSBhcnJheSwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIGRlZmF1bHQgaXNvIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGdldElzb0NvZGVzKFxuICAgIGVsZW1lbnRzOiB7IGlzb2NvZGU/OiBzdHJpbmcgfVtdIHwgdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRFbGVtZW50OiB7IGlzb2NvZGU/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoZWxlbWVudHMgJiYgZGVmYXVsdEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubW92ZVRvRmlyc3QoXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAoZWwpID0+IGVsLmlzb2NvZGUgPT09IGRlZmF1bHRFbGVtZW50Lmlzb2NvZGVcbiAgICAgICkubWFwKChlbCkgPT4gZWwuaXNvY29kZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyB0byB0aGUgc3RhcnQgb2YgdGhlIGFycmF5IHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgc2F0aXNmaWVzIHRoZSBnaXZlbiBwcmVkaWNhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBtb2RpZnlcbiAgICogQHBhcmFtIHByZWRpY2F0ZSBmdW5jdGlvbiBjYWxsZWQgb24gZWxlbWVudHNcbiAgICovXG4gIHByaXZhdGUgbW92ZVRvRmlyc3QoYXJyYXk6IGFueVtdLCBwcmVkaWNhdGU6IChlbDogYW55KSA9PiBib29sZWFuKTogYW55W10ge1xuICAgIGFycmF5ID0gWy4uLmFycmF5XTtcbiAgICBjb25zdCBpbmRleCA9IGFycmF5LmZpbmRJbmRleChwcmVkaWNhdGUpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IFtlbF0gPSBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgYXJyYXkudW5zaGlmdChlbCk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufVxuIl19