@spartacus/core
Version:
Spartacus - the core framework
95 lines • 14.7 kB
JavaScript
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