@postnord/pn-marketweb-components 1.0.35 → 1.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/cjs/FetchHelper-f80943bf.js +87 -0
  2. package/cjs/{MarketWebLoginManager-8b675eb4.js → MarketWebLoginManager-859590e2.js} +8 -0
  3. package/cjs/loader.cjs.js +1 -1
  4. package/cjs/pn-language-selector_9.cjs.entry.js +6 -1
  5. package/cjs/pn-mainnav-link.cjs.entry.js +1 -1
  6. package/cjs/pn-market-web-components.cjs.js +1 -1
  7. package/cjs/pn-marketweb-sitefooter.cjs.entry.js +15 -2
  8. package/cjs/pn-marketweb-siteheader.cjs.entry.js +50 -22
  9. package/cjs/pn-profile-selector.cjs.entry.js +21 -13
  10. package/collection/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.js +33 -2
  11. package/collection/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.stories.js +3 -3
  12. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.js +23 -0
  13. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.js +95 -23
  14. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.stories.js +60 -2
  15. package/collection/components/navigation/pn-mainnav/pn-mainnav-link.js +1 -1
  16. package/collection/components/navigation/pn-profile-selector/pn-profile-selector.js +26 -18
  17. package/collection/globals/FetchHelper.js +84 -0
  18. package/collection/globals/MarketWebLoginManager.js +8 -0
  19. package/custom-elements/index.js +375 -232
  20. package/esm/FetchHelper-a0c8aa54.js +85 -0
  21. package/esm/{MarketWebLoginManager-dd7ac023.js → MarketWebLoginManager-83f2e86a.js} +8 -0
  22. package/esm/loader.js +1 -1
  23. package/esm/pn-language-selector_9.entry.js +6 -1
  24. package/esm/pn-mainnav-link.entry.js +1 -1
  25. package/esm/pn-market-web-components.js +1 -1
  26. package/esm/pn-marketweb-sitefooter.entry.js +15 -2
  27. package/esm/pn-marketweb-siteheader.entry.js +50 -22
  28. package/esm/pn-profile-selector.entry.js +21 -13
  29. package/esm-es5/FetchHelper-a0c8aa54.js +1 -0
  30. package/esm-es5/MarketWebLoginManager-83f2e86a.js +1 -0
  31. package/esm-es5/loader.js +1 -1
  32. package/esm-es5/pn-language-selector_9.entry.js +1 -1
  33. package/esm-es5/pn-mainnav-link.entry.js +1 -1
  34. package/esm-es5/pn-market-web-components.js +1 -1
  35. package/esm-es5/pn-marketweb-sitefooter.entry.js +1 -1
  36. package/esm-es5/pn-marketweb-siteheader.entry.js +1 -1
  37. package/esm-es5/pn-profile-selector.entry.js +1 -1
  38. package/package.json +27 -27
  39. package/pn-market-web-components/p-02ab0208.entry.js +1 -0
  40. package/pn-market-web-components/{p-ffdf87ee.entry.js → p-03fb0285.entry.js} +1 -1
  41. package/pn-market-web-components/p-1649b94a.entry.js +1 -0
  42. package/pn-market-web-components/p-25bdf3f8.system.js +1 -1
  43. package/pn-market-web-components/p-4921fcc3.entry.js +1 -0
  44. package/pn-market-web-components/p-58cdf3a6.system.js +1 -0
  45. package/pn-market-web-components/{p-6a32362d.system.entry.js → p-7b4c721f.system.entry.js} +1 -1
  46. package/pn-market-web-components/p-97dc5687.js +1 -0
  47. package/pn-market-web-components/p-a983c263.system.entry.js +1 -0
  48. package/pn-market-web-components/p-c254cfdf.js +1 -0
  49. package/pn-market-web-components/p-d6a17042.system.js +1 -0
  50. package/pn-market-web-components/p-daa6ddb3.system.entry.js +1 -0
  51. package/pn-market-web-components/p-dade9bdb.system.entry.js +1 -0
  52. package/pn-market-web-components/p-dc471243.entry.js +1 -0
  53. package/pn-market-web-components/{p-251d44f2.system.entry.js → p-e3fb52a6.system.entry.js} +1 -1
  54. package/pn-market-web-components/pn-market-web-components.esm.js +1 -1
  55. package/types/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.d.ts +5 -0
  56. package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.d.ts +2 -0
  57. package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.d.ts +11 -0
  58. package/types/components/navigation/pn-profile-selector/pn-profile-selector.d.ts +2 -1
  59. package/types/components.d.ts +34 -2
  60. package/types/globals/FetchHelper.d.ts +17 -0
  61. package/types/globals/MarketWebLoginManager.d.ts +1 -0
  62. package/esm-es5/MarketWebLoginManager-dd7ac023.js +0 -1
  63. package/pn-market-web-components/p-031d91aa.entry.js +0 -1
  64. package/pn-market-web-components/p-134f14eb.system.entry.js +0 -1
  65. package/pn-market-web-components/p-2f494f64.system.entry.js +0 -1
  66. package/pn-market-web-components/p-3562a62f.entry.js +0 -1
  67. package/pn-market-web-components/p-37efd029.entry.js +0 -1
  68. package/pn-market-web-components/p-4dcea578.js +0 -1
  69. package/pn-market-web-components/p-51768dc0.system.js +0 -1
  70. package/pn-market-web-components/p-db7419be.system.entry.js +0 -1
  71. package/pn-market-web-components/p-e220ea83.entry.js +0 -1
@@ -0,0 +1,87 @@
1
+ 'use strict';
2
+
3
+ class FetchHelper {
4
+ constructor(namespace = "") {
5
+ this.storagePrefix = "";
6
+ this.store = {
7
+ get: (key, permanentStorageFirst = false) => {
8
+ const firstProfider = permanentStorageFirst ? window.localStorage : window.sessionStorage;
9
+ const secondProvider = permanentStorageFirst ? window.sessionStorage : window.localStorage;
10
+ let value = firstProfider.getItem(`${this.storagePrefix}-${key}`);
11
+ if (!value) {
12
+ value = secondProvider.getItem(`${this.storagePrefix}-${key}`);
13
+ }
14
+ if (!value) {
15
+ return value;
16
+ }
17
+ if (value.indexOf('{') === 0) {
18
+ try {
19
+ return JSON.parse(value);
20
+ }
21
+ catch (e) {
22
+ }
23
+ }
24
+ if (value.indexOf(',') !== -1) {
25
+ return value.split(',');
26
+ }
27
+ return value;
28
+ },
29
+ set: (key, value, permanent = false) => {
30
+ const provider = permanent ? window.localStorage : window.sessionStorage;
31
+ if (typeof value === "object" && typeof value.length === "undefined") {
32
+ provider.setItem(`${this.storagePrefix}-${key}`, JSON.stringify(value));
33
+ return;
34
+ }
35
+ provider.setItem(`${this.storagePrefix}-${key}`, value);
36
+ },
37
+ remove: (key) => {
38
+ window.sessionStorage.removeItem(`${this.storagePrefix}-${key}`);
39
+ },
40
+ };
41
+ this.storagePrefix = namespace;
42
+ }
43
+ async fetchJson(input, init = {}, useCache = false, onCacheUpdated = null) {
44
+ const requestPromise = new Promise(async (resolve) => {
45
+ let doFetchRequest = true;
46
+ const url = (typeof input === "string") ? input : input.url;
47
+ const cacheKey = url;
48
+ let jsonData = null;
49
+ let cachedData = null;
50
+ if (useCache) {
51
+ cachedData = this.store.get(cacheKey);
52
+ // If the data was stored in session storage, then we don't need to do a full request
53
+ if (cachedData && !cachedData.permanent) {
54
+ doFetchRequest = false;
55
+ }
56
+ if (cachedData && cachedData.data) {
57
+ jsonData = cachedData.data;
58
+ resolve(jsonData);
59
+ }
60
+ }
61
+ if (doFetchRequest) {
62
+ const response = await window.fetch(input, init);
63
+ jsonData = await response.json();
64
+ resolve(jsonData);
65
+ if (useCache) {
66
+ if (typeof onCacheUpdated === "function" && cachedData != null) {
67
+ onCacheUpdated(jsonData);
68
+ }
69
+ this.store.set(cacheKey, this.wrapJson(jsonData, true), true);
70
+ this.store.set(cacheKey, this.wrapJson(jsonData, false), false);
71
+ }
72
+ }
73
+ });
74
+ return requestPromise;
75
+ }
76
+ wrapJson(data, permanent = false) {
77
+ const now = new Date();
78
+ return {
79
+ timestamp: now.getTime(),
80
+ time: now.toISOString(),
81
+ data: data,
82
+ permanent: permanent
83
+ };
84
+ }
85
+ }
86
+
87
+ exports.FetchHelper = FetchHelper;
@@ -75,6 +75,14 @@ class MarketWebLoginManager {
75
75
  const isLoggedIn = (this.store.get(this.keys.token) && this.store.get(this.keys.user)) ? true : false;
76
76
  return isLoggedIn;
77
77
  }
78
+ registerToken(token) {
79
+ if (!token || token === this.getToken()) {
80
+ return;
81
+ }
82
+ this.clearUserData();
83
+ this.store.set(this.keys.token, token);
84
+ this.fetchUserInfo();
85
+ }
78
86
  getLoginUrl(redirectPage = "") {
79
87
  const currentPage = window.location.href;
80
88
  redirectPage = redirectPage ? redirectPage : currentPage;
package/cjs/loader.cjs.js CHANGED
@@ -14,7 +14,7 @@ const patchEsm = () => {
14
14
  const defineCustomElements = (win, options) => {
15
15
  if (typeof window === 'undefined') return Promise.resolve();
16
16
  return patchEsm().then(() => {
17
- return index.bootstrapLazy([["pn-marketweb-siteheader.cjs",[[4,"pn-marketweb-siteheader",{"market":[1537],"language":[1537],"environment":[1537],"endpoint":[1],"hideSiteSelector":[1540,"hide-site-selector"],"hideLanguageSelector":[1540,"hide-language-selector"],"hideSearch":[1540,"hide-search"],"hideLogin":[1540,"hide-login"],"sessionForward":[4,"session-forward"],"spaMode":[4,"spa-mode"],"i18n":[32],"gotData":[32],"fetchingData":[32],"homePageLink":[32],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[32],"languageOptions":[32],"loginDialog":[32],"minimizeSearch":[32]},[[0,"setLanguage","onLanguageSelectorChange"],[0,"loginStateChange","onLoginStateChange"],[9,"resize","handleResize"]]]]],["pn-find-service-and-price.cjs",[[0,"pn-find-service-and-price",{"source":[1],"language":[1025],"market":[1025],"filteredItems":[32],"postagetype":[32],"weight":[32],"weightvalue":[32],"deliveryscope":[32],"sourceData":[32]}]]],["pn-product-pricelist.cjs",[[4,"pn-product-pricelist",{"source":[1],"language":[1025],"market":[1025],"productid":[1],"filteredItems":[32],"sourceData":[32],"gotData":[32],"loading":[32],"postagetype":[32],"weight":[32],"weightvalue":[32]}]]],["pn-marketweb-sitefooter.cjs",[[0,"pn-marketweb-sitefooter",{"market":[1537],"language":[1537],"environment":[1537],"endpoint":[1],"siteDefinition":[32],"footerContent":[32],"i18n":[32],"gotData":[32],"fetchingData":[32]}]]],["pn-filter-checkbox.cjs",[[1,"pn-filter-checkbox",{"value":[520],"name":[1],"checkboxid":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]]],["pn-filter-search.cjs",[[1,"pn-filter-search",{"disabled":[4],"placeholder":[1],"inputid":[1],"name":[1],"autocomplete":[1],"value":[1],"label":[1],"loading":[4],"button":[1],"light":[4]},[[0,"input","inputHandler"]]]]],["pn-profile-selector.cjs",[[0,"pn-profile-selector",{"language":[1537],"returnUrl":[1,"return-url"],"endpoint":[1],"loginManager":[32],"loggedIn":[32],"i18n":[32],"isLoading":[32],"numberOfProfiles":[32]}]]],["pn-sidenav.cjs",[[4,"pn-sidenav",{"language":[1],"navLabel":[1,"nav-label"],"i18n":[32]},[[0,"language","setLanguage"],[0,"openSubMenuLevelChange","onOpenSubMenuLevelChange"]]]]],["pn-sidenav-level.cjs",[[4,"pn-sidenav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"alignment":[32]}]]],["pn-sidenav-link.cjs",[[4,"pn-sidenav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"icon":[1],"current":[4],"levelId":[32],"open":[32],"hasChildren":[32]}]]],["pn-product-tile_3.cjs",[[4,"pn-product-tile"],[0,"pn-product-tile-info",{"label":[1],"text":[1],"icon":[1]}],[0,"pn-product-tile-price",{"label":[1],"amount":[1],"currency":[1],"url":[1]}]]],["pn-product-pricelist-result.cjs",[[0,"pn-product-pricelist-result",{"item":[1040],"shownitems":[16],"weightText":[32]}]]],["pn-choice-button_2.cjs",[[0,"pn-find-service-and-price-result",{"item":[1040],"shownitems":[16],"weightText":[32]}],[4,"pn-choice-button",{"value":[520],"name":[1],"choiceid":[1],"type":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]]],["pn-site-footer_2.cjs",[[4,"pn-site-footer",{"url":[1]}],[4,"pn-site-footer-col"]]],["pn-mainnav-link.cjs",[[4,"pn-mainnav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"levelId":[32],"open":[32],"hasChildren":[32]}]]],["pn-language-selector_9.cjs",[[4,"pn-mainnav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"listCount":[32],"alignment":[32]}],[4,"pn-language-selector",{"value":[1537],"selectedLanguageName":[32],"options":[32],"i18n":[32]}],[0,"pn-language-selector-option",{"name":[1],"code":[1],"url":[1],"selected":[4],"currentLanguage":[1,"current-language"]}],[4,"pn-mainnav",{"market":[1],"language":[1],"navigationId":[1,"navigation-id"],"openMenu":[1028,"open-menu"],"navLabel":[1,"nav-label"]},[[0,"language","setLanguage"],[0,"market","setMarket"],[0,"menuLanguageChange","onLanguageChange"],[0,"setmenuopenstate","setMenuOpenState"],[0,"openMenuLevelChange","onOpenMenuLevelChange"]]],[4,"pn-mainnav-list",{"heading":[1],"linkCount":[32]}],[0,"pn-marketweb-siteheader-login",{"endpoint":[1],"i18n":[8,"i-1-8n"],"emitEvents":[4,"emit-events"],"loginDialog":[1040],"loginManager":[32],"loggedIn":[32],"toggleButtonText":[32],"username":[32]}],[0,"pn-marketweb-siteheader-search",{"i18n":[8,"i-1-8n"],"showOnlyLink":[1028,"show-only-link"],"hideSearch":[1028,"hide-search"],"search":[1040]}],[4,"pn-site-selector",{"buttontext":[1537],"heading":[1537],"language":[1537],"i18n":[32]}],[0,"pn-site-selector-item",{"url":[1],"heading":[1],"description":[1],"newwindow":[4]}]]]], options);
17
+ return index.bootstrapLazy([["pn-marketweb-siteheader.cjs",[[4,"pn-marketweb-siteheader",{"market":[1537],"language":[1537],"environment":[1537],"token":[1],"endpoint":[1],"hideSiteSelector":[1540,"hide-site-selector"],"hideLanguageSelector":[1540,"hide-language-selector"],"hideSearch":[1540,"hide-search"],"hideLogin":[1540,"hide-login"],"sessionForward":[4,"session-forward"],"cache":[4],"spaMode":[4,"spa-mode"],"i18n":[32],"gotData":[32],"fetchingData":[32],"homePageLink":[32],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[32],"languageOptions":[32],"loginDialog":[32],"minimizeSearch":[32],"loggedIn":[32],"loginManager":[32]},[[0,"setLanguage","onLanguageSelectorChange"],[0,"loginStateChange","onLoginStateChange"],[9,"resize","handleResize"]]]]],["pn-find-service-and-price.cjs",[[0,"pn-find-service-and-price",{"source":[1],"language":[1025],"market":[1025],"filteredItems":[32],"postagetype":[32],"weight":[32],"weightvalue":[32],"deliveryscope":[32],"sourceData":[32]}]]],["pn-product-pricelist.cjs",[[4,"pn-product-pricelist",{"source":[1],"language":[1025],"market":[1025],"productid":[1],"filteredItems":[32],"sourceData":[32],"gotData":[32],"loading":[32],"postagetype":[32],"weight":[32],"weightvalue":[32]}]]],["pn-marketweb-sitefooter.cjs",[[0,"pn-marketweb-sitefooter",{"market":[1537],"language":[1537],"environment":[1537],"endpoint":[1],"cache":[4],"siteDefinition":[32],"footerContent":[32],"i18n":[32],"gotData":[32],"fetchingData":[32]}]]],["pn-filter-checkbox.cjs",[[1,"pn-filter-checkbox",{"value":[520],"name":[1],"checkboxid":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]]],["pn-filter-search.cjs",[[1,"pn-filter-search",{"disabled":[4],"placeholder":[1],"inputid":[1],"name":[1],"autocomplete":[1],"value":[1],"label":[1],"loading":[4],"button":[1],"light":[4]},[[0,"input","inputHandler"]]]]],["pn-profile-selector.cjs",[[0,"pn-profile-selector",{"language":[1537],"returnUrl":[1,"return-url"],"spamode":[4],"loginManager":[32],"loggedIn":[32],"i18n":[32],"isLoading":[32],"numberOfProfiles":[32]}]]],["pn-sidenav.cjs",[[4,"pn-sidenav",{"language":[1],"navLabel":[1,"nav-label"],"i18n":[32]},[[0,"language","setLanguage"],[0,"openSubMenuLevelChange","onOpenSubMenuLevelChange"]]]]],["pn-sidenav-level.cjs",[[4,"pn-sidenav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"alignment":[32]}]]],["pn-sidenav-link.cjs",[[4,"pn-sidenav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"icon":[1],"current":[4],"levelId":[32],"open":[32],"hasChildren":[32]}]]],["pn-product-tile_3.cjs",[[4,"pn-product-tile"],[0,"pn-product-tile-info",{"label":[1],"text":[1],"icon":[1]}],[0,"pn-product-tile-price",{"label":[1],"amount":[1],"currency":[1],"url":[1]}]]],["pn-product-pricelist-result.cjs",[[0,"pn-product-pricelist-result",{"item":[1040],"shownitems":[16],"weightText":[32]}]]],["pn-choice-button_2.cjs",[[0,"pn-find-service-and-price-result",{"item":[1040],"shownitems":[16],"weightText":[32]}],[4,"pn-choice-button",{"value":[520],"name":[1],"choiceid":[1],"type":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]]],["pn-site-footer_2.cjs",[[4,"pn-site-footer",{"url":[1]}],[4,"pn-site-footer-col"]]],["pn-mainnav-link.cjs",[[4,"pn-mainnav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"levelId":[32],"open":[32],"hasChildren":[32]}]]],["pn-language-selector_9.cjs",[[4,"pn-mainnav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"listCount":[32],"alignment":[32]}],[4,"pn-language-selector",{"value":[1537],"selectedLanguageName":[32],"options":[32],"i18n":[32]}],[0,"pn-language-selector-option",{"name":[1],"code":[1],"url":[1],"selected":[4],"currentLanguage":[1,"current-language"]}],[4,"pn-mainnav",{"market":[1],"language":[1],"navigationId":[1,"navigation-id"],"openMenu":[1028,"open-menu"],"navLabel":[1,"nav-label"]},[[0,"language","setLanguage"],[0,"market","setMarket"],[0,"menuLanguageChange","onLanguageChange"],[0,"setmenuopenstate","setMenuOpenState"],[0,"openMenuLevelChange","onOpenMenuLevelChange"]]],[4,"pn-mainnav-list",{"heading":[1],"linkCount":[32]}],[0,"pn-marketweb-siteheader-login",{"endpoint":[1],"token":[1],"i18n":[8,"i-1-8n"],"emitEvents":[4,"emit-events"],"loginDialog":[1040],"loginManager":[32],"loggedIn":[32],"toggleButtonText":[32],"username":[32]}],[0,"pn-marketweb-siteheader-search",{"i18n":[8,"i-1-8n"],"showOnlyLink":[1028,"show-only-link"],"hideSearch":[1028,"hide-search"],"search":[1040]}],[4,"pn-site-selector",{"buttontext":[1537],"heading":[1537],"language":[1537],"i18n":[32]}],[0,"pn-site-selector-item",{"url":[1],"heading":[1],"description":[1],"newwindow":[4]}]]]], options);
18
18
  });
19
19
  };
20
20
 
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-0404c97e.js');
6
6
  const pnMainnavStore = require('./pn-mainnav-store-87a95686.js');
7
- const MarketWebLoginManager = require('./MarketWebLoginManager-8b675eb4.js');
7
+ const MarketWebLoginManager = require('./MarketWebLoginManager-859590e2.js');
8
8
  require('./index-ea886985.js');
9
9
 
10
10
  const translations$1 = {
@@ -326,6 +326,8 @@ let PnMarketwebSiteheaderLogin = class {
326
326
  this.loginStateChange = index.createEvent(this, "loginStateChange", 7);
327
327
  /** Specifies which endpoint domain we should load from */
328
328
  this.endpoint = "";
329
+ /** Access token passed from backend */
330
+ this.token = "";
329
331
  this.emitEvents = true;
330
332
  // Login dialog
331
333
  this.loginDialog = null;
@@ -337,6 +339,9 @@ let PnMarketwebSiteheaderLogin = class {
337
339
  componentWillLoad() {
338
340
  this.loginManager = new MarketWebLoginManager.MarketWebLoginManager({ endpoint: this.endpoint, eventTarget: this.hostElement });
339
341
  this.hostElement["loginmanager"] = this.loginManager;
342
+ if (this.token) {
343
+ this.loginManager.registerToken(this.token);
344
+ }
340
345
  this.hostElement.addEventListener(this.loginManager.events.loginstatechange, this.onLoginStateChange.bind(this));
341
346
  this.init();
342
347
  }
@@ -36,7 +36,7 @@ let PnMainnavLink = class {
36
36
  pnMainnavStore.state.openLevel = (pnMainnavStore.state.openLevel + "" === this.levelId + "") ? '' : this.levelId;
37
37
  }
38
38
  render() {
39
- return (index.h(index.Host, { role: "listitem", name: this.name, href: this.href, linkid: this.linkid }, this.hasChildren ? (index.h("button", { onClick: this.setOpenMenuLevel.bind(this), "aria-controls": this.levelId, "aria-pressed": "", "aria-expanded": ((pnMainnavStore.state.openLevel + "" === this.levelId + "")) + '' }, this.name, index.h("pn-icon", { class: "first-level_icon", symbol: "angle-small-down", color: "blue700" }), index.h("pn-icon", { class: "first-level_arrow", symbol: "arrow-right", color: "blue700" }))) : (index.h("a", Object.assign({ href: this.href }, (this.target ? { target: this.target } : {}), (this.linkid ? { id: this.linkid } : {})), this.name, this.target === "_blank" ? (index.h("pn-icon", { symbol: "open-in-new", color: "blue700" })) : null)), index.h("slot", null)));
39
+ return (index.h(index.Host, { role: "listitem", name: this.name, href: this.href, linkid: this.linkid }, this.hasChildren ? (index.h("button", { onClick: this.setOpenMenuLevel.bind(this), "aria-controls": this.levelId, "aria-pressed": "", "aria-expanded": ((pnMainnavStore.state.openLevel + "" === this.levelId + "")) + '' }, this.name, index.h("pn-icon", { class: "first-level_icon", symbol: "angle-small-down", color: "blue700" }), index.h("pn-icon", { class: "first-level_arrow", symbol: "arrow-right", color: "blue700" }))) : (index.h("a", Object.assign({ href: this.href }, (this.target ? { target: this.target } : {}), (this.target === "_blank" ? { rel: "nofollow noopener" } : {}), (this.linkid ? { id: this.linkid } : {})), this.name, this.target === "_blank" ? (index.h("pn-icon", { symbol: "open-in-new", color: "blue700" })) : null)), index.h("slot", null)));
40
40
  }
41
41
  get hostElement() { return index.getElement(this); }
42
42
  };
@@ -55,5 +55,5 @@ const patchCloneNodeFix = (HTMLElementPrototype) => {
55
55
  };
56
56
 
57
57
  patchBrowser().then(options => {
58
- return index.bootstrapLazy([["pn-marketweb-siteheader.cjs",[[4,"pn-marketweb-siteheader",{"market":[1537],"language":[1537],"environment":[1537],"endpoint":[1],"hideSiteSelector":[1540,"hide-site-selector"],"hideLanguageSelector":[1540,"hide-language-selector"],"hideSearch":[1540,"hide-search"],"hideLogin":[1540,"hide-login"],"sessionForward":[4,"session-forward"],"spaMode":[4,"spa-mode"],"i18n":[32],"gotData":[32],"fetchingData":[32],"homePageLink":[32],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[32],"languageOptions":[32],"loginDialog":[32],"minimizeSearch":[32]},[[0,"setLanguage","onLanguageSelectorChange"],[0,"loginStateChange","onLoginStateChange"],[9,"resize","handleResize"]]]]],["pn-find-service-and-price.cjs",[[0,"pn-find-service-and-price",{"source":[1],"language":[1025],"market":[1025],"filteredItems":[32],"postagetype":[32],"weight":[32],"weightvalue":[32],"deliveryscope":[32],"sourceData":[32]}]]],["pn-product-pricelist.cjs",[[4,"pn-product-pricelist",{"source":[1],"language":[1025],"market":[1025],"productid":[1],"filteredItems":[32],"sourceData":[32],"gotData":[32],"loading":[32],"postagetype":[32],"weight":[32],"weightvalue":[32]}]]],["pn-marketweb-sitefooter.cjs",[[0,"pn-marketweb-sitefooter",{"market":[1537],"language":[1537],"environment":[1537],"endpoint":[1],"siteDefinition":[32],"footerContent":[32],"i18n":[32],"gotData":[32],"fetchingData":[32]}]]],["pn-filter-checkbox.cjs",[[1,"pn-filter-checkbox",{"value":[520],"name":[1],"checkboxid":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]]],["pn-filter-search.cjs",[[1,"pn-filter-search",{"disabled":[4],"placeholder":[1],"inputid":[1],"name":[1],"autocomplete":[1],"value":[1],"label":[1],"loading":[4],"button":[1],"light":[4]},[[0,"input","inputHandler"]]]]],["pn-profile-selector.cjs",[[0,"pn-profile-selector",{"language":[1537],"returnUrl":[1,"return-url"],"endpoint":[1],"loginManager":[32],"loggedIn":[32],"i18n":[32],"isLoading":[32],"numberOfProfiles":[32]}]]],["pn-sidenav.cjs",[[4,"pn-sidenav",{"language":[1],"navLabel":[1,"nav-label"],"i18n":[32]},[[0,"language","setLanguage"],[0,"openSubMenuLevelChange","onOpenSubMenuLevelChange"]]]]],["pn-sidenav-level.cjs",[[4,"pn-sidenav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"alignment":[32]}]]],["pn-sidenav-link.cjs",[[4,"pn-sidenav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"icon":[1],"current":[4],"levelId":[32],"open":[32],"hasChildren":[32]}]]],["pn-product-tile_3.cjs",[[4,"pn-product-tile"],[0,"pn-product-tile-info",{"label":[1],"text":[1],"icon":[1]}],[0,"pn-product-tile-price",{"label":[1],"amount":[1],"currency":[1],"url":[1]}]]],["pn-product-pricelist-result.cjs",[[0,"pn-product-pricelist-result",{"item":[1040],"shownitems":[16],"weightText":[32]}]]],["pn-choice-button_2.cjs",[[0,"pn-find-service-and-price-result",{"item":[1040],"shownitems":[16],"weightText":[32]}],[4,"pn-choice-button",{"value":[520],"name":[1],"choiceid":[1],"type":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]]],["pn-site-footer_2.cjs",[[4,"pn-site-footer",{"url":[1]}],[4,"pn-site-footer-col"]]],["pn-mainnav-link.cjs",[[4,"pn-mainnav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"levelId":[32],"open":[32],"hasChildren":[32]}]]],["pn-language-selector_9.cjs",[[4,"pn-mainnav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"listCount":[32],"alignment":[32]}],[4,"pn-language-selector",{"value":[1537],"selectedLanguageName":[32],"options":[32],"i18n":[32]}],[0,"pn-language-selector-option",{"name":[1],"code":[1],"url":[1],"selected":[4],"currentLanguage":[1,"current-language"]}],[4,"pn-mainnav",{"market":[1],"language":[1],"navigationId":[1,"navigation-id"],"openMenu":[1028,"open-menu"],"navLabel":[1,"nav-label"]},[[0,"language","setLanguage"],[0,"market","setMarket"],[0,"menuLanguageChange","onLanguageChange"],[0,"setmenuopenstate","setMenuOpenState"],[0,"openMenuLevelChange","onOpenMenuLevelChange"]]],[4,"pn-mainnav-list",{"heading":[1],"linkCount":[32]}],[0,"pn-marketweb-siteheader-login",{"endpoint":[1],"i18n":[8,"i-1-8n"],"emitEvents":[4,"emit-events"],"loginDialog":[1040],"loginManager":[32],"loggedIn":[32],"toggleButtonText":[32],"username":[32]}],[0,"pn-marketweb-siteheader-search",{"i18n":[8,"i-1-8n"],"showOnlyLink":[1028,"show-only-link"],"hideSearch":[1028,"hide-search"],"search":[1040]}],[4,"pn-site-selector",{"buttontext":[1537],"heading":[1537],"language":[1537],"i18n":[32]}],[0,"pn-site-selector-item",{"url":[1],"heading":[1],"description":[1],"newwindow":[4]}]]]], options);
58
+ return index.bootstrapLazy([["pn-marketweb-siteheader.cjs",[[4,"pn-marketweb-siteheader",{"market":[1537],"language":[1537],"environment":[1537],"token":[1],"endpoint":[1],"hideSiteSelector":[1540,"hide-site-selector"],"hideLanguageSelector":[1540,"hide-language-selector"],"hideSearch":[1540,"hide-search"],"hideLogin":[1540,"hide-login"],"sessionForward":[4,"session-forward"],"cache":[4],"spaMode":[4,"spa-mode"],"i18n":[32],"gotData":[32],"fetchingData":[32],"homePageLink":[32],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[32],"languageOptions":[32],"loginDialog":[32],"minimizeSearch":[32],"loggedIn":[32],"loginManager":[32]},[[0,"setLanguage","onLanguageSelectorChange"],[0,"loginStateChange","onLoginStateChange"],[9,"resize","handleResize"]]]]],["pn-find-service-and-price.cjs",[[0,"pn-find-service-and-price",{"source":[1],"language":[1025],"market":[1025],"filteredItems":[32],"postagetype":[32],"weight":[32],"weightvalue":[32],"deliveryscope":[32],"sourceData":[32]}]]],["pn-product-pricelist.cjs",[[4,"pn-product-pricelist",{"source":[1],"language":[1025],"market":[1025],"productid":[1],"filteredItems":[32],"sourceData":[32],"gotData":[32],"loading":[32],"postagetype":[32],"weight":[32],"weightvalue":[32]}]]],["pn-marketweb-sitefooter.cjs",[[0,"pn-marketweb-sitefooter",{"market":[1537],"language":[1537],"environment":[1537],"endpoint":[1],"cache":[4],"siteDefinition":[32],"footerContent":[32],"i18n":[32],"gotData":[32],"fetchingData":[32]}]]],["pn-filter-checkbox.cjs",[[1,"pn-filter-checkbox",{"value":[520],"name":[1],"checkboxid":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]]],["pn-filter-search.cjs",[[1,"pn-filter-search",{"disabled":[4],"placeholder":[1],"inputid":[1],"name":[1],"autocomplete":[1],"value":[1],"label":[1],"loading":[4],"button":[1],"light":[4]},[[0,"input","inputHandler"]]]]],["pn-profile-selector.cjs",[[0,"pn-profile-selector",{"language":[1537],"returnUrl":[1,"return-url"],"spamode":[4],"loginManager":[32],"loggedIn":[32],"i18n":[32],"isLoading":[32],"numberOfProfiles":[32]}]]],["pn-sidenav.cjs",[[4,"pn-sidenav",{"language":[1],"navLabel":[1,"nav-label"],"i18n":[32]},[[0,"language","setLanguage"],[0,"openSubMenuLevelChange","onOpenSubMenuLevelChange"]]]]],["pn-sidenav-level.cjs",[[4,"pn-sidenav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"alignment":[32]}]]],["pn-sidenav-link.cjs",[[4,"pn-sidenav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"icon":[1],"current":[4],"levelId":[32],"open":[32],"hasChildren":[32]}]]],["pn-product-tile_3.cjs",[[4,"pn-product-tile"],[0,"pn-product-tile-info",{"label":[1],"text":[1],"icon":[1]}],[0,"pn-product-tile-price",{"label":[1],"amount":[1],"currency":[1],"url":[1]}]]],["pn-product-pricelist-result.cjs",[[0,"pn-product-pricelist-result",{"item":[1040],"shownitems":[16],"weightText":[32]}]]],["pn-choice-button_2.cjs",[[0,"pn-find-service-and-price-result",{"item":[1040],"shownitems":[16],"weightText":[32]}],[4,"pn-choice-button",{"value":[520],"name":[1],"choiceid":[1],"type":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]]],["pn-site-footer_2.cjs",[[4,"pn-site-footer",{"url":[1]}],[4,"pn-site-footer-col"]]],["pn-mainnav-link.cjs",[[4,"pn-mainnav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"levelId":[32],"open":[32],"hasChildren":[32]}]]],["pn-language-selector_9.cjs",[[4,"pn-mainnav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"listCount":[32],"alignment":[32]}],[4,"pn-language-selector",{"value":[1537],"selectedLanguageName":[32],"options":[32],"i18n":[32]}],[0,"pn-language-selector-option",{"name":[1],"code":[1],"url":[1],"selected":[4],"currentLanguage":[1,"current-language"]}],[4,"pn-mainnav",{"market":[1],"language":[1],"navigationId":[1,"navigation-id"],"openMenu":[1028,"open-menu"],"navLabel":[1,"nav-label"]},[[0,"language","setLanguage"],[0,"market","setMarket"],[0,"menuLanguageChange","onLanguageChange"],[0,"setmenuopenstate","setMenuOpenState"],[0,"openMenuLevelChange","onOpenMenuLevelChange"]]],[4,"pn-mainnav-list",{"heading":[1],"linkCount":[32]}],[0,"pn-marketweb-siteheader-login",{"endpoint":[1],"token":[1],"i18n":[8,"i-1-8n"],"emitEvents":[4,"emit-events"],"loginDialog":[1040],"loginManager":[32],"loggedIn":[32],"toggleButtonText":[32],"username":[32]}],[0,"pn-marketweb-siteheader-search",{"i18n":[8,"i-1-8n"],"showOnlyLink":[1028,"show-only-link"],"hideSearch":[1028,"hide-search"],"search":[1040]}],[4,"pn-site-selector",{"buttontext":[1537],"heading":[1537],"language":[1537],"i18n":[32]}],[0,"pn-site-selector-item",{"url":[1],"heading":[1],"description":[1],"newwindow":[4]}]]]], options);
59
59
  });
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-0404c97e.js');
6
6
  const MarketWebContextService = require('./MarketWebContextService-bdc46f40.js');
7
+ const FetchHelper = require('./FetchHelper-f80943bf.js');
7
8
 
8
9
  const translations = {
9
10
  'sv': {
@@ -67,8 +68,12 @@ let PnMarketwebSiteheader = class {
67
68
  this.environment = null; //sv
68
69
  /** Specifies which endpoint domain we should load from */
69
70
  this.endpoint = null;
71
+ /** If the component should use cached requests */
72
+ this.cache = false;
70
73
  this.gotData = false;
71
74
  this.fetchingData = false;
75
+ // FetchHelper
76
+ this.fetchHelper = new FetchHelper.FetchHelper("sitefooter");
72
77
  }
73
78
  componentWillLoad() {
74
79
  this.setInitialValues().then(() => {
@@ -120,8 +125,13 @@ let PnMarketwebSiteheader = class {
120
125
  this.fetchingData = true;
121
126
  const endpointBase = (this.endpoint.lastIndexOf("/") === this.endpoint.length - 1) ? this.endpoint.substring(0, this.endpoint.length - 1) : this.endpoint;
122
127
  const fetchUrl = `${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`;
123
- const response = await fetch(fetchUrl);
124
- const data = await response.json();
128
+ const data = await this.fetchHelper.fetchJson(fetchUrl, {
129
+ 'mode': 'cors'
130
+ }, this.cache, this.onFetchRefreshed.bind(this));
131
+ await this.setStateFromData(data);
132
+ }
133
+ onFetchRefreshed(data) {
134
+ console.log('Data was updated after request', data);
125
135
  this.setStateFromData(data);
126
136
  }
127
137
  getLinkContentByType(linkType = "") {
@@ -167,6 +177,9 @@ let PnMarketwebSiteheader = class {
167
177
  render() {
168
178
  var _a, _b, _c, _d, _e;
169
179
  return (index.h(index.Host, { language: this.language, market: this.market, environment: this.environment }, index.h("pn-site-footer", { url: (_b = (_a = this.siteDefinition) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : "" }, (this.gotData && ((_c = this.footerContent) === null || _c === void 0 ? void 0 : _c.columns)) ? this.footerContent.columns.map((column) => (index.h("pn-site-footer-col", null, index.h("h3", null, column.heading), column.links ? (index.h("ul", Object.assign({}, ((column.links && column.links[0] && column.links[0].linkType) && { 'class': 'social-media' })), column.links.map((link) => {
180
+ if (!link.linkHref) {
181
+ return false;
182
+ }
170
183
  let linkText = link.linkText;
171
184
  if (link.linkType) {
172
185
  linkText = this.getLinkContentByType(link.linkType);
@@ -4,6 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-0404c97e.js');
6
6
  const MarketWebContextService = require('./MarketWebContextService-bdc46f40.js');
7
+ const MarketWebLoginManager = require('./MarketWebLoginManager-859590e2.js');
8
+ const FetchHelper = require('./FetchHelper-f80943bf.js');
7
9
 
8
10
  const translations = {
9
11
  'sv': {
@@ -69,6 +71,8 @@ let PnMarketwebSiteheader = class {
69
71
  this.language = null; //sv
70
72
  /** Specifies which environment we're fetching data from. (production, preproduction, integration, localhost) */
71
73
  this.environment = null; //sv
74
+ /** Access token passed from backend */
75
+ this.token = "";
72
76
  /** Specifies which endpoint domain we should load from */
73
77
  this.endpoint = null;
74
78
  /** Hides the site selector if set to true*/
@@ -81,6 +85,8 @@ let PnMarketwebSiteheader = class {
81
85
  this.hideLogin = false;
82
86
  /** Forward session to backend */
83
87
  this.sessionForward = false;
88
+ /** If the component should use cached requests */
89
+ this.cache = false;
84
90
  /** Event based only language switch */
85
91
  this.spaMode = false;
86
92
  this.gotData = false;
@@ -98,8 +104,14 @@ let PnMarketwebSiteheader = class {
98
104
  // Login dialog
99
105
  this.loginDialog = null;
100
106
  this.minimizeSearch = false;
107
+ this.loggedIn = false;
108
+ // FetchHelper
109
+ this.fetchHelper = new FetchHelper.FetchHelper("siteheader");
110
+ // Login manager
111
+ this.loginManager = null;
101
112
  }
102
113
  componentWillLoad() {
114
+ this.loginManager = new MarketWebLoginManager.MarketWebLoginManager({ eventTarget: this.hostElement });
103
115
  this.setInitialValues().then(() => {
104
116
  this.init();
105
117
  });
@@ -136,7 +148,9 @@ let PnMarketwebSiteheader = class {
136
148
  }
137
149
  }
138
150
  onLanguageSelectorChange(e) {
151
+ console.log('onLanguageSelectorChange(e', e);
139
152
  this.language = e.detail;
153
+ window.dispatchEvent(new CustomEvent('marketweb-languagechange', { detail: this.language }));
140
154
  }
141
155
  onLanguageChange() {
142
156
  this.setTranslations();
@@ -155,12 +169,14 @@ let PnMarketwebSiteheader = class {
155
169
  this.fetchingData = true;
156
170
  const endpointBase = (this.endpoint.lastIndexOf("/") === this.endpoint.length - 1) ? this.endpoint.substring(0, this.endpoint.length - 1) : this.endpoint;
157
171
  const fetchUrl = `${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`;
158
- const response = await fetch(fetchUrl, {
172
+ const data = await this.fetchHelper.fetchJson(fetchUrl, {
159
173
  'mode': 'cors'
160
- });
161
- const data = await response.json();
174
+ }, this.cache, this.onFetchRefreshed.bind(this));
162
175
  await this.setStateFromData(data);
163
176
  }
177
+ onFetchRefreshed(data) {
178
+ this.setStateFromData(data);
179
+ }
164
180
  getLanguageVersionUrl(item) {
165
181
  if (this.spaMode) {
166
182
  return null;
@@ -174,7 +190,7 @@ let PnMarketwebSiteheader = class {
174
190
  return siteUrl + ((siteUrl.lastIndexOf("/") !== siteUrl.length - 1) ? "/" : "") + item.twoLetterISOLanguageName;
175
191
  }
176
192
  async setStateFromData(data) {
177
- var _a, _b;
193
+ var _a, _b, _c;
178
194
  if (typeof data !== "object") {
179
195
  console.warn('Data was not valid', data);
180
196
  }
@@ -183,14 +199,16 @@ let PnMarketwebSiteheader = class {
183
199
  // Set navigation information
184
200
  this.menuItems = data.mainMenu.menuItems;
185
201
  // Create the "Home" link
186
- this.menuItems.unshift({
187
- href: this.siteDefinition.url,
188
- name: this.i18n.menuHomeButton,
189
- id: 'homelink',
190
- open: false,
191
- selected: false,
192
- children: []
193
- });
202
+ if (!this.menuItems[0] || ((_a = this.menuItems[0]) === null || _a === void 0 ? void 0 : _a.name) !== this.i18n.menuHomeButton) {
203
+ this.menuItems.unshift({
204
+ href: this.siteDefinition.url,
205
+ name: this.i18n.menuHomeButton,
206
+ id: 'homelink',
207
+ open: false,
208
+ selected: false,
209
+ children: []
210
+ });
211
+ }
194
212
  // Set search
195
213
  this.search = data.search;
196
214
  // Set site selector
@@ -202,7 +220,7 @@ let PnMarketwebSiteheader = class {
202
220
  await this.spaModeAdjustments();
203
221
  this.gotData = true;
204
222
  this.fetchingData = true;
205
- this.homePageLink = (_b = (_a = this.siteDefinition) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : document.location.hostname;
223
+ this.homePageLink = (_c = (_b = this.siteDefinition) === null || _b === void 0 ? void 0 : _b.url) !== null && _c !== void 0 ? _c : document.location.hostname;
206
224
  window.setTimeout(() => { this.checkMenuOverflow(); }, 100);
207
225
  }
208
226
  setLanguageOptions() {
@@ -212,17 +230,19 @@ let PnMarketwebSiteheader = class {
212
230
  }
213
231
  const hrefLangsTags = (_a = Array.prototype.slice.call(document.querySelectorAll('link[rel="alternate"][hreflang]'))) !== null && _a !== void 0 ? _a : [];
214
232
  const hrefLangs = hrefLangsTags.map((tag) => { return tag.getAttribute("hreflang"); });
233
+ let languageOptions = []; // Reset language options
215
234
  this.languageSelector.languages.map((languageOption) => {
216
235
  // In case there are language links present on the page we only show languages that have those tags
217
236
  if (hrefLangs && hrefLangs.length > 0) {
218
237
  if (hrefLangs.includes(languageOption.twoLetterISOLanguageName)) {
219
- this.languageOptions.push(languageOption);
238
+ languageOptions.push(languageOption);
220
239
  }
221
240
  }
222
241
  else {
223
- this.languageOptions.push(languageOption);
242
+ languageOptions.push(languageOption);
224
243
  }
225
244
  });
245
+ this.languageOptions = languageOptions; // Replace existing language options so we don't trigger a event change on every push.
226
246
  }
227
247
  async spaModeAdjustments() {
228
248
  if (!this.spaMode) {
@@ -231,12 +251,9 @@ let PnMarketwebSiteheader = class {
231
251
  return;
232
252
  }
233
253
  onLoginStateChange(e) {
234
- var _a, _b;
235
- if (((_a = e.detail) === null || _a === void 0 ? void 0 : _a.loggedIn) && ((_b = e.detail) === null || _b === void 0 ? void 0 : _b.token) && this.sessionForward) {
236
- try {
237
- fetch('/api/userprofile/sync?token=' + e.detail.token);
238
- }
239
- catch (e) { }
254
+ var _a, _b, _c;
255
+ if (((_a = e.detail) === null || _a === void 0 ? void 0 : _a.loggedIn) && ((_b = e.detail) === null || _b === void 0 ? void 0 : _b.token)) {
256
+ this.loggedIn = ((_c = e.detail) === null || _c === void 0 ? void 0 : _c.loggedIn) === true;
240
257
  }
241
258
  }
242
259
  promotedItemId(item) {
@@ -267,11 +284,22 @@ let PnMarketwebSiteheader = class {
267
284
  this.minimizeSearch = true;
268
285
  }
269
286
  }
287
+ adjustSiteSelectorUrl(href) {
288
+ if (!this.loggedIn) {
289
+ return href;
290
+ }
291
+ const loginDomains = ['portal.postnord.com'];
292
+ const matchedHref = loginDomains.filter((domain) => { return href.indexOf(domain) !== -1; });
293
+ if (matchedHref.length === 0) {
294
+ return href;
295
+ }
296
+ return this.loginManager.getLoginUrl(href);
297
+ }
270
298
  render() {
271
299
  var _a, _b, _c, _d, _e, _f;
272
300
  return (index.h(index.Host, { language: this.language, market: this.market, environment: this.environment }, index.h("header", null, index.h("div", { class: "siteheader-row" }, index.h("div", { class: "siteheader-topleft" }, index.h("slot", { name: "topleft" }), !this.hideSiteSelector &&
273
301
  index.h("pn-site-selector", { language: this.language, buttontext: (_b = (_a = this.siteSelector) === null || _a === void 0 ? void 0 : _a.currentSiteTitle) !== null && _b !== void 0 ? _b : 'postnord' }, (this.gotData && ((_c = this.siteSelector) === null || _c === void 0 ? void 0 : _c.currentSiteTitle)) &&
274
- index.h("pn-site-selector-item", { heading: this.siteSelector.currentSiteTitle + ' ', description: this.siteSelector.currentSiteDescription }), (this.gotData && ((_d = this.siteSelector) === null || _d === void 0 ? void 0 : _d.siteSelections)) && this.siteSelector.siteSelections.map((site) => index.h("pn-site-selector-item", { heading: site.linkText + ' ', description: site.linkDescription, url: site.href, newwindow: site.openInNewWindow })))), index.h("div", { class: "siteheader-logocontainer" }, index.h("a", { href: this.homePageLink, title: "Home", class: "siteheader-logolink" }, index.h("svg", { class: "siteheader-logo", xmlns: "http://www.w3.org/2000/svg", width: "12.7rem", height: "2.4rem", viewBox: "0 0 141.73 26.65" }, index.h("path", { d: "M108.84,13.35c0,6.34-5.17,9-10,9S89,19.76,89,13.63c0-6.28,5.08-9,10-9S108.84,7.25,108.84,13.35Zm-6.56.18a3.4,3.4,0,1,0-6.8,0,3.29,3.29,0,0,0,3.42,3.41A3.24,3.24,0,0,0,102.28,13.54Zm-83,0c0,4.83-3.32,8.82-8.49,8.82a6.54,6.54,0,0,1-4.65-1.57v5.86H0V5.16H6.17V6.8a6.43,6.43,0,0,1,5.11-2.18C16.41,4.62,19.31,8.58,19.31,13.54Zm-6.53,0A3.27,3.27,0,0,0,9.4,10,3.28,3.28,0,0,0,6,13.54,3.29,3.29,0,0,0,9.4,16.95,3.24,3.24,0,0,0,12.78,13.54Zm103.69,0.27c0-2.54,1.54-3.32,3.6-3.32a6.56,6.56,0,0,1,2.08.3L122.3,5.1a3.92,3.92,0,0,0-1.45-.18c-3.45,0-4.38,2.18-4.38,2.18V5.16H110.3V21.84h6.17v-8ZM141.73,0V21.84h-6.16V20.21a6.43,6.43,0,0,1-5.11,2.18c-5.14,0-8-4-8-8.91s3.32-8.82,8.49-8.82a6.54,6.54,0,0,1,4.65,1.57v-5Zm-6,13.48a3.28,3.28,0,0,0-3.41-3.41A3.24,3.24,0,0,0,129,13.47,3.4,3.4,0,1,0,135.75,13.47ZM81.35,4.62c-3.6,0-4.9,2.18-4.9,2.18V5.16H70.29V21.84h6.16V13.29c0-2.11.79-3.08,2.69-3.08s2.18,1.57,2.18,3.57v8.07h6.22V11.6C87.55,7,85.34,4.62,81.35,4.62ZM64.07,1.42H57.9V21.84h6.16V10.36H67l2.81-5.2H64.07V1.42ZM50.26,11.21c-2-.3-2.87-0.3-2.87-1.09s0.81-.94,2.42-0.94a16.15,16.15,0,0,1,5.11.91L56,5.41a24.56,24.56,0,0,0-6.13-.75c-5.89,0-9,2.27-9,5.89,0,2.81,1.66,4.47,6.53,5.11,2.06,0.27,2.81.39,2.81,1.15s-0.82,1-2.24,1a16.67,16.67,0,0,1-6-1.3L40.77,21.3a22.14,22.14,0,0,0,6.68,1c6.35,0,9.28-2.24,9.28-5.89C56.72,13.54,55.15,12,50.26,11.21ZM40.19,13.35c0,6.34-5.17,9-10,9s-9.82-2.6-9.82-8.73c0-6.28,5.08-9,10-9S40.19,7.25,40.19,13.35Zm-6.56.18a3.4,3.4,0,1,0-6.8,0,3.28,3.28,0,0,0,3.41,3.41A3.24,3.24,0,0,0,33.63,13.54Z", fill: "#00A0D6", transform: "translate(0 0)" })))), index.h("div", { class: "siteheader-topright" }, index.h("slot", { name: "toprightstart" }), (this.gotData && this.loginDialog && !this.hideLogin) && (index.h("pn-marketweb-siteheader-login", { loginDialog: this.loginDialog, endpoint: this.endpoint, i18n: this.i18n })), (this.gotData && this.languageOptions && this.languageOptions.length) && !this.hideLanguageSelector &&
302
+ index.h("pn-site-selector-item", { heading: this.siteSelector.currentSiteTitle + ' ', description: this.siteSelector.currentSiteDescription }), (this.gotData && ((_d = this.siteSelector) === null || _d === void 0 ? void 0 : _d.siteSelections)) && this.siteSelector.siteSelections.map((site) => index.h("pn-site-selector-item", { heading: site.linkText + ' ', description: site.linkDescription, url: this.adjustSiteSelectorUrl(site.href), newwindow: site.openInNewWindow })))), index.h("div", { class: "siteheader-logocontainer" }, index.h("a", { href: this.homePageLink, title: "Home", class: "siteheader-logolink" }, index.h("svg", { class: "siteheader-logo", xmlns: "http://www.w3.org/2000/svg", width: "12.7rem", height: "2.4rem", viewBox: "0 0 141.73 26.65" }, index.h("path", { d: "M108.84,13.35c0,6.34-5.17,9-10,9S89,19.76,89,13.63c0-6.28,5.08-9,10-9S108.84,7.25,108.84,13.35Zm-6.56.18a3.4,3.4,0,1,0-6.8,0,3.29,3.29,0,0,0,3.42,3.41A3.24,3.24,0,0,0,102.28,13.54Zm-83,0c0,4.83-3.32,8.82-8.49,8.82a6.54,6.54,0,0,1-4.65-1.57v5.86H0V5.16H6.17V6.8a6.43,6.43,0,0,1,5.11-2.18C16.41,4.62,19.31,8.58,19.31,13.54Zm-6.53,0A3.27,3.27,0,0,0,9.4,10,3.28,3.28,0,0,0,6,13.54,3.29,3.29,0,0,0,9.4,16.95,3.24,3.24,0,0,0,12.78,13.54Zm103.69,0.27c0-2.54,1.54-3.32,3.6-3.32a6.56,6.56,0,0,1,2.08.3L122.3,5.1a3.92,3.92,0,0,0-1.45-.18c-3.45,0-4.38,2.18-4.38,2.18V5.16H110.3V21.84h6.17v-8ZM141.73,0V21.84h-6.16V20.21a6.43,6.43,0,0,1-5.11,2.18c-5.14,0-8-4-8-8.91s3.32-8.82,8.49-8.82a6.54,6.54,0,0,1,4.65,1.57v-5Zm-6,13.48a3.28,3.28,0,0,0-3.41-3.41A3.24,3.24,0,0,0,129,13.47,3.4,3.4,0,1,0,135.75,13.47ZM81.35,4.62c-3.6,0-4.9,2.18-4.9,2.18V5.16H70.29V21.84h6.16V13.29c0-2.11.79-3.08,2.69-3.08s2.18,1.57,2.18,3.57v8.07h6.22V11.6C87.55,7,85.34,4.62,81.35,4.62ZM64.07,1.42H57.9V21.84h6.16V10.36H67l2.81-5.2H64.07V1.42ZM50.26,11.21c-2-.3-2.87-0.3-2.87-1.09s0.81-.94,2.42-0.94a16.15,16.15,0,0,1,5.11.91L56,5.41a24.56,24.56,0,0,0-6.13-.75c-5.89,0-9,2.27-9,5.89,0,2.81,1.66,4.47,6.53,5.11,2.06,0.27,2.81.39,2.81,1.15s-0.82,1-2.24,1a16.67,16.67,0,0,1-6-1.3L40.77,21.3a22.14,22.14,0,0,0,6.68,1c6.35,0,9.28-2.24,9.28-5.89C56.72,13.54,55.15,12,50.26,11.21ZM40.19,13.35c0,6.34-5.17,9-10,9s-9.82-2.6-9.82-8.73c0-6.28,5.08-9,10-9S40.19,7.25,40.19,13.35Zm-6.56.18a3.4,3.4,0,1,0-6.8,0,3.28,3.28,0,0,0,3.41,3.41A3.24,3.24,0,0,0,33.63,13.54Z", fill: "#00A0D6", transform: "translate(0 0)" })))), index.h("div", { class: "siteheader-topright" }, index.h("slot", { name: "toprightstart" }), (this.gotData && this.loginDialog && !this.hideLogin) && (index.h("pn-marketweb-siteheader-login", { token: this.token, loginDialog: this.loginDialog, endpoint: this.endpoint, i18n: this.i18n })), (this.gotData && this.languageOptions && this.languageOptions.length) && !this.hideLanguageSelector &&
275
303
  index.h("pn-language-selector", { value: this.language }, this.languageOptions.map(language => index.h("pn-language-selector-option", { name: language.nativeName, code: language.twoLetterISOLanguageName, selected: language.isCurrent, url: this.getLanguageVersionUrl(language) }))), index.h("slot", { name: "toprightend" }))), index.h("div", { class: "siteheader-row" }, index.h("div", { class: "siteheader-menu" }, index.h("pn-mainnav", { market: this.market, language: this.language, onMenuOpenChange: (e) => {
276
304
  document.body.setAttribute("data-siteheader-menuopen", (e.detail + ''));
277
305
  } }, index.h("pn-mainnav-level", null, index.h("pn-mainnav-list", null, this.menuItems.map((item) => {
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-0404c97e.js');
6
6
  const MarketWebContextService = require('./MarketWebContextService-bdc46f40.js');
7
- const MarketWebLoginManager = require('./MarketWebLoginManager-8b675eb4.js');
7
+ const MarketWebLoginManager = require('./MarketWebLoginManager-859590e2.js');
8
8
 
9
9
  const translations = {
10
10
  'sv': {
@@ -31,7 +31,8 @@ let PnProfileSelector = class {
31
31
  index.registerInstance(this, hostRef);
32
32
  this.language = null; //sv
33
33
  this.returnUrl = "/"; //sv
34
- this.endpoint = "/api/userprofile/sync"; // Endpoint where we send in the current user session
34
+ // @Prop() endpoint = "/api/userprofile/sync"; // Endpoint where we send in the current user session
35
+ this.spamode = false; // Endpoint where we send in the current user session
35
36
  this.loginManager = null;
36
37
  this.loggedIn = false;
37
38
  this.i18n = translations["en"];
@@ -40,9 +41,10 @@ let PnProfileSelector = class {
40
41
  }
41
42
  componentWillLoad() {
42
43
  this.loginManager = new MarketWebLoginManager.MarketWebLoginManager({ eventTarget: this.hostElement });
43
- this.loginManager.init(true);
44
+ this.loginManager.init(this.spamode);
44
45
  this.hostElement["loginmanager"] = this.loginManager;
45
46
  this.hostElement.addEventListener(this.loginManager.events.loginstatechange, this.onLoginStateChange.bind(this));
47
+ this.checkLoggedInState();
46
48
  this.setInitialValues().then(() => {
47
49
  this.init();
48
50
  });
@@ -62,19 +64,25 @@ let PnProfileSelector = class {
62
64
  init() {
63
65
  this.setTranslations();
64
66
  }
67
+ checkLoggedInState() {
68
+ if (this.loginManager.getToken() && this.loginManager.getUserInfo()) {
69
+ this.onLoginStateChange({ detail: true });
70
+ }
71
+ }
65
72
  async onLoginStateChange(e) {
66
73
  if (this.loggedIn !== e.detail) {
67
74
  this.loggedIn = e.detail;
68
- const token = this.loginManager.getToken();
69
- if (this.loggedIn && token) {
70
- try {
71
- await fetch(this.endpoint + '?token=' + token);
72
- if (this.numberOfProfiles === 1) {
73
- this.redirectUser();
74
- }
75
- }
76
- catch (e) { }
77
- }
75
+ this.isLoading = false;
76
+ this.redirectUser();
77
+ // const token = this.loginManager.getToken();
78
+ // if (this.loggedIn && token) {
79
+ // try {
80
+ // await fetch(this.endpoint + '?token=' + token);
81
+ // if (this.numberOfProfiles === 1) {
82
+ // this.redirectUser();
83
+ // }
84
+ // } catch(e) { }
85
+ // }
78
86
  }
79
87
  }
80
88
  async onLoggedIn() {
@@ -1,6 +1,7 @@
1
1
  import { Component, Prop, h, State, Element, Host, Watch } from "@stencil/core";
2
2
  import { translations } from "./translations";
3
3
  import { MarketWebContextService } from "../../../globals/MarketWebContextService";
4
+ import { FetchHelper } from "../../../globals/FetchHelper";
4
5
  export class PnMarketwebSiteheader {
5
6
  constructor() {
6
7
  this.endpointPath = "/api/footer/footer";
@@ -12,8 +13,12 @@ export class PnMarketwebSiteheader {
12
13
  this.environment = null; //sv
13
14
  /** Specifies which endpoint domain we should load from */
14
15
  this.endpoint = null;
16
+ /** If the component should use cached requests */
17
+ this.cache = false;
15
18
  this.gotData = false;
16
19
  this.fetchingData = false;
20
+ // FetchHelper
21
+ this.fetchHelper = new FetchHelper("sitefooter");
17
22
  }
18
23
  componentWillLoad() {
19
24
  this.setInitialValues().then(() => {
@@ -65,8 +70,13 @@ export class PnMarketwebSiteheader {
65
70
  this.fetchingData = true;
66
71
  const endpointBase = (this.endpoint.lastIndexOf("/") === this.endpoint.length - 1) ? this.endpoint.substring(0, this.endpoint.length - 1) : this.endpoint;
67
72
  const fetchUrl = `${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`;
68
- const response = await fetch(fetchUrl);
69
- const data = await response.json();
73
+ const data = await this.fetchHelper.fetchJson(fetchUrl, {
74
+ 'mode': 'cors'
75
+ }, this.cache, this.onFetchRefreshed.bind(this));
76
+ await this.setStateFromData(data);
77
+ }
78
+ onFetchRefreshed(data) {
79
+ console.log('Data was updated after request', data);
70
80
  this.setStateFromData(data);
71
81
  }
72
82
  getLinkContentByType(linkType = "") {
@@ -116,6 +126,9 @@ export class PnMarketwebSiteheader {
116
126
  (this.gotData && ((_c = this.footerContent) === null || _c === void 0 ? void 0 : _c.columns)) ? this.footerContent.columns.map((column) => (h("pn-site-footer-col", null,
117
127
  h("h3", null, column.heading),
118
128
  column.links ? (h("ul", Object.assign({}, ((column.links && column.links[0] && column.links[0].linkType) && { 'class': 'social-media' })), column.links.map((link) => {
129
+ if (!link.linkHref) {
130
+ return false;
131
+ }
119
132
  let linkText = link.linkText;
120
133
  if (link.linkType) {
121
134
  linkText = this.getLinkContentByType(link.linkType);
@@ -214,6 +227,24 @@ export class PnMarketwebSiteheader {
214
227
  "attribute": "endpoint",
215
228
  "reflect": false,
216
229
  "defaultValue": "null"
230
+ },
231
+ "cache": {
232
+ "type": "boolean",
233
+ "mutable": false,
234
+ "complexType": {
235
+ "original": "boolean",
236
+ "resolved": "boolean",
237
+ "references": {}
238
+ },
239
+ "required": false,
240
+ "optional": false,
241
+ "docs": {
242
+ "tags": [],
243
+ "text": "If the component should use cached requests"
244
+ },
245
+ "attribute": "cache",
246
+ "reflect": false,
247
+ "defaultValue": "false"
217
248
  }
218
249
  }; }
219
250
  static get states() { return {
@@ -50,10 +50,10 @@ const Template = ({ ...args }) => {
50
50
 
51
51
  export const Primary = Template.bind({});
52
52
  Primary.args = {
53
- market : "com",
54
- language: 'en',
53
+ market : "se",
54
+ language: 'sv',
55
55
  environment: "production",
56
- endpoint: "",// 'https://www.postnord.se'
56
+ endpoint: "https://com-production.postnord.com",// 'https://www.postnord.se'
57
57
  };
58
58
 
59
59