@postnord/pn-marketweb-components 1.0.21 → 1.0.23

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 (34) hide show
  1. package/cjs/loader.cjs.js +1 -1
  2. package/cjs/pn-language-selector_9.cjs.entry.js +21 -9
  3. package/cjs/pn-market-web-components.cjs.js +1 -1
  4. package/cjs/pn-marketweb-siteheader.cjs.entry.js +29 -8
  5. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.js +44 -5
  6. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-loginmanager.js +9 -5
  7. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.js +77 -8
  8. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.stories.js +18 -3
  9. package/collection/components/navigation/pn-language-selector/pn-language-selector.js +19 -2
  10. package/custom-elements/index.js +53 -20
  11. package/esm/loader.js +1 -1
  12. package/esm/pn-language-selector_9.entry.js +22 -10
  13. package/esm/pn-market-web-components.js +1 -1
  14. package/esm/pn-marketweb-siteheader.entry.js +29 -8
  15. package/esm-es5/loader.js +1 -1
  16. package/esm-es5/pn-language-selector_9.entry.js +1 -1
  17. package/esm-es5/pn-market-web-components.js +1 -1
  18. package/esm-es5/pn-marketweb-siteheader.entry.js +1 -1
  19. package/package.json +1 -1
  20. package/pn-market-web-components/p-25bdf3f8.system.js +1 -1
  21. package/pn-market-web-components/p-8680c074.entry.js +1 -0
  22. package/pn-market-web-components/p-88ab0d91.system.entry.js +1 -0
  23. package/pn-market-web-components/p-d7441208.entry.js +1 -0
  24. package/pn-market-web-components/p-dd22803d.system.entry.js +1 -0
  25. package/pn-market-web-components/pn-market-web-components.esm.js +1 -1
  26. package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.d.ts +3 -0
  27. package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-loginmanager.d.ts +7 -2
  28. package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.d.ts +8 -1
  29. package/types/components/navigation/pn-language-selector/pn-language-selector.d.ts +2 -0
  30. package/types/components.d.ts +20 -0
  31. package/pn-market-web-components/p-2da203c9.system.entry.js +0 -1
  32. package/pn-market-web-components/p-363a27ff.entry.js +0 -1
  33. package/pn-market-web-components/p-582dbd9c.entry.js +0 -1
  34. package/pn-market-web-components/p-ecfabe25.system.entry.js +0 -1
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"],"i18n":[32],"gotData":[32],"fetchingData":[32],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[32],"loginDialog":[32],"minimizeSearch":[32]},[[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-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-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":[513],"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"],"loginDialog":[1040],"loginManager":[32],"loggedIn":[32],"toggleButtonText":[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]}]]],["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]}]]]], options);
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],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[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-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-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]}],[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]}]]],["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]}]]]], options);
18
18
  });
19
19
  };
20
20
 
@@ -29,6 +29,7 @@ const pnLanguageSelectorCss = ".languageselector{position:relative}.languagesele
29
29
  let PnlanguageSelector = class {
30
30
  constructor(hostRef) {
31
31
  index.registerInstance(this, hostRef);
32
+ this.setLanguage = index.createEvent(this, "setLanguage", 7);
32
33
  /* Current language code */
33
34
  this.value = "";
34
35
  this.selectedLanguageName = "";
@@ -68,6 +69,7 @@ let PnlanguageSelector = class {
68
69
  onSetCurrentLanguage(option) {
69
70
  this.value = option.code;
70
71
  this.selectedLanguageName = option.name;
72
+ this.setLanguage.emit(this.value);
71
73
  }
72
74
  setTranslations() {
73
75
  if (translations$1[this.value]) {
@@ -426,10 +428,11 @@ class PNLoginManager {
426
428
  const params = new URLSearchParams(window.location.search);
427
429
  if (params.get("oneTimeCode")) {
428
430
  const oneTimeCode = params.get("oneTimeCode");
429
- this.getToken(oneTimeCode);
430
- const currentHref = window.location.href;
431
- const paramPrefix = (currentHref.indexOf('?oneTimeCode') !== -1) ? "?" : "&";
432
- history.replaceState({}, document.querySelector('title').innerText, currentHref.replace(`${paramPrefix}oneTimeCode=${oneTimeCode}`, ''));
431
+ this.exchangeToken(oneTimeCode).then(() => {
432
+ const currentHref = window.location.href;
433
+ const paramPrefix = (currentHref.indexOf('?oneTimeCode') !== -1) ? "?" : "&";
434
+ history.replaceState({}, document.querySelector('title').innerText, currentHref.replace(`${paramPrefix}oneTimeCode=${oneTimeCode}`, ''));
435
+ });
433
436
  }
434
437
  }
435
438
  async fetchUserInfo() {
@@ -465,7 +468,10 @@ class PNLoginManager {
465
468
  this.store.remove(this.keys.expire);
466
469
  this.store.remove(this.keys.expireDate);
467
470
  }
468
- async getToken(oneTimeCode) {
471
+ getToken() {
472
+ return this.store.get(this.keys.token);
473
+ }
474
+ async exchangeToken(oneTimeCode) {
469
475
  this.clearUserData();
470
476
  const response = await fetch(`${this.getBaseUrl()}${this.endpoints.tokenExchangeEndpoint}?oneTimeCode=${oneTimeCode}`);
471
477
  const { token } = await response.json();
@@ -505,8 +511,10 @@ const pnMarketwebSiteheaderLoginCss = "pn-marketweb-siteheader-login{padding:1re
505
511
  let PnMarketwebSiteheaderLogin = class {
506
512
  constructor(hostRef) {
507
513
  index.registerInstance(this, hostRef);
514
+ this.loginStateChange = index.createEvent(this, "loginStateChange", 7);
508
515
  /** Specifies which endpoint domain we should load from */
509
516
  this.endpoint = "";
517
+ this.emitEvents = true;
510
518
  // Login dialog
511
519
  this.loginDialog = null;
512
520
  this.loginManager = null;
@@ -515,11 +523,12 @@ let PnMarketwebSiteheaderLogin = class {
515
523
  }
516
524
  componentWillLoad() {
517
525
  this.loginManager = new PNLoginManager({ endpoint: this.endpoint, eventTarget: this.hostElement });
526
+ this.hostElement["loginmanager"] = this.loginManager;
527
+ this.hostElement.addEventListener(this.loginManager.events.loginstatechange, this.onLoginStateChange.bind(this));
518
528
  this.init();
519
529
  }
520
530
  async init() {
521
531
  this.toggleButtonText = this.loginDialog.loginMenuLinkText;
522
- this.hostElement.addEventListener(this.loginManager.events.loginstatechange, this.onLoginStateChange.bind(this));
523
532
  this.loginManager.init();
524
533
  this.setToggleButtonText();
525
534
  }
@@ -538,8 +547,11 @@ let PnMarketwebSiteheaderLogin = class {
538
547
  }
539
548
  }
540
549
  onLoginStateChange(e) {
541
- this.loggedIn = e.detail;
542
- this.setToggleButtonText();
550
+ if (this.loggedIn !== e.detail && this.emitEvents) {
551
+ this.loggedIn = e.detail;
552
+ this.loginStateChange.emit({ loggedIn: this.loggedIn, token: this.loginManager.getToken() });
553
+ this.setToggleButtonText();
554
+ }
543
555
  }
544
556
  render() {
545
557
  var _a, _b, _c;
@@ -557,7 +569,7 @@ let PnMarketwebSiteheaderLogin = class {
557
569
  :
558
570
  index.h("div", null, index.h("ul", null, this.loginDialog.loggedInLinks.map((link) => {
559
571
  const isLogoutLink = link.href.indexOf('logout');
560
- const href = (isLogoutLink) ? this.loginManager.getLogoutUrl(link.href.replace('logout', '')) : link.href;
572
+ const href = (isLogoutLink) ? this.loginManager.getLogoutUrl(link.href.replace('logout', '').replace('http://window.location.href/?', '').replace('https://window.location.href/?', '')) : link.href;
561
573
  return (index.h("li", null, index.h("a", Object.assign({ href: href }, (link.openInNewWindow && { target: '_blank' })), index.h("pn-button", { appearance: (link.primaryLinkApperance ? "dark" : "light"), onClick: () => {
562
574
  if (isLogoutLink) {
563
575
  this.loginManager.clearUserData();
@@ -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"],"i18n":[32],"gotData":[32],"fetchingData":[32],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[32],"loginDialog":[32],"minimizeSearch":[32]},[[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-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-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":[513],"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"],"loginDialog":[1040],"loginManager":[32],"loggedIn":[32],"toggleButtonText":[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]}]]],["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]}]]]], 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],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[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-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-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]}],[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]}]]],["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]}]]]], options);
59
59
  });
@@ -79,6 +79,10 @@ let PnMarketwebSiteheader = class {
79
79
  this.hideSearch = false;
80
80
  /** Hides the login if set to true*/
81
81
  this.hideLogin = false;
82
+ /** Forward session to backend */
83
+ this.sessionForward = false;
84
+ /** Event based only language switch */
85
+ this.spaMode = false;
82
86
  this.gotData = false;
83
87
  this.fetchingData = false;
84
88
  // Menu state
@@ -119,11 +123,6 @@ let PnMarketwebSiteheader = class {
119
123
  this.endpoint = "";
120
124
  }
121
125
  }
122
- // TODO
123
- //* Expose market and language attributes when changed internally
124
- //* Business logic to select market and language depending on domains / html tag.
125
- //* Property to stop language change from changeing url, throw an event instead.
126
- //* Fetch new data when langauge or market is changed
127
126
  async init() {
128
127
  this.setTranslations();
129
128
  await this.fetchData();
@@ -134,6 +133,9 @@ let PnMarketwebSiteheader = class {
134
133
  this.i18n = translations[this.language];
135
134
  }
136
135
  }
136
+ onLanguageSelectorChange(e) {
137
+ this.language = e.detail;
138
+ }
137
139
  onLanguageChange() {
138
140
  this.setTranslations();
139
141
  this.changeLanguage.emit(this.language);
@@ -153,9 +155,12 @@ let PnMarketwebSiteheader = class {
153
155
  const fetchUrl = `${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`;
154
156
  const response = await fetch(fetchUrl);
155
157
  const data = await response.json();
156
- this.setStateFromData(data);
158
+ await this.setStateFromData(data);
157
159
  }
158
160
  getLanguageVersionUrl(item) {
161
+ if (this.spaMode) {
162
+ return null;
163
+ }
159
164
  const alternativeTag = document.querySelector(`link[rel="alternate"][hreflang="${item.twoLetterISOLanguageName}"]`);
160
165
  if (alternativeTag) {
161
166
  return alternativeTag.getAttribute('href');
@@ -164,7 +169,7 @@ let PnMarketwebSiteheader = class {
164
169
  // Add trailing slash to domain if it's missing
165
170
  return siteUrl + ((siteUrl.lastIndexOf("/") !== siteUrl.length - 1) ? "/" : "") + item.twoLetterISOLanguageName;
166
171
  }
167
- setStateFromData(data) {
172
+ async setStateFromData(data) {
168
173
  if (typeof data !== "object") {
169
174
  console.warn('Data was not valid', data);
170
175
  }
@@ -188,10 +193,26 @@ let PnMarketwebSiteheader = class {
188
193
  // Set language selector
189
194
  this.languageSelector = data.languageSelectorViewModel;
190
195
  this.loginDialog = data.loginViewModel;
196
+ await this.spaModeAdjustments();
191
197
  this.gotData = true;
192
198
  this.fetchingData = true;
193
199
  window.setTimeout(() => { this.checkMenuOverflow(); }, 100);
194
200
  }
201
+ async spaModeAdjustments() {
202
+ if (!this.spaMode) {
203
+ return;
204
+ }
205
+ return;
206
+ }
207
+ onLoginStateChange(e) {
208
+ var _a, _b;
209
+ 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) {
210
+ try {
211
+ fetch('/api/userprofile/sync?token=' + e.detail.token);
212
+ }
213
+ catch (e) { }
214
+ }
215
+ }
195
216
  promotedItemId(item) {
196
217
  return "promo-" + item.linkText.replace(/[^A-Za-z0-9.\\\/]/igm, "");
197
218
  }
@@ -236,7 +257,7 @@ let PnMarketwebSiteheader = class {
236
257
  return (index.h("pn-mainnav-link", { name: childitem.name, href: childitem.href, target: (_a = childitem.linkTarget) !== null && _a !== void 0 ? _a : "_self", linkid: childitem.trackingId }));
237
258
  })), (item.promotedMenuItems && item.promotedMenuItems.length > 0) &&
238
259
  index.h("pn-mainnav-list", { heading: item.promotedMenuItemsHeader }, item.promotedMenuItems.map((childitem) => (index.h("pn-mainnav-link", { href: childitem.href, name: childitem.linkText, target: childitem.openInNewWindow ? "_blank" : "_self", linkid: this.promotedItemId(childitem) })))))));
239
- })), index.h("div", { slot: "footer", class: "siteheader-menu-footer" }, (this.gotData && this.loginDialog && !this.hideLogin) && (index.h("pn-marketweb-siteheader-login", { loginDialog: this.loginDialog, endpoint: this.endpoint, i18n: this.i18n })), (this.gotData && ((_h = this.languageSelector) === null || _h === void 0 ? void 0 : _h.languages)) && !this.hideLanguageSelector &&
260
+ })), index.h("div", { slot: "footer", class: "siteheader-menu-footer" }, (this.gotData && this.loginDialog && !this.hideLogin) && (index.h("pn-marketweb-siteheader-login", { emitEvents: false, loginDialog: this.loginDialog, endpoint: this.endpoint, i18n: this.i18n })), (this.gotData && ((_h = this.languageSelector) === null || _h === void 0 ? void 0 : _h.languages)) && !this.hideLanguageSelector &&
240
261
  index.h("pn-language-selector", { value: this.language }, this.languageSelector.languages.map(language => index.h("pn-language-selector-option", { name: language.nativeName, code: language.twoLetterISOLanguageName, selected: language.isCurrent, url: this.getLanguageVersionUrl(language) }))), !this.hideSiteSelector &&
241
262
  index.h("pn-site-selector", { language: this.language }, (this.gotData && ((_j = this.siteSelector) === null || _j === void 0 ? void 0 : _j.currentSiteTitle)) &&
242
263
  index.h("pn-site-selector-item", { heading: this.siteSelector.currentSiteTitle, description: this.siteSelector.currentSiteDescription }), (this.gotData && ((_k = this.siteSelector) === null || _k === void 0 ? void 0 : _k.siteSelections)) && this.siteSelector.siteSelections.map((site) => index.h("pn-site-selector-item", { heading: site.linkText, description: site.linkDescription, url: site.pageLink, newwindow: site.openInNewWindow })))), index.h("div", { slot: "top", class: "siteheader-menu-top" }, index.h("pn-marketweb-siteheader-search", { search: this.search, "hide-search": this.hideSearch, i18n: this.i18n }))))), index.h("pn-marketweb-siteheader-search", { search: this.search, "hide-search": this.hideSearch, "show-only-link": this.minimizeSearch, i18n: this.i18n })))));
@@ -1,9 +1,10 @@
1
- import { Component, Prop, h, State, Element, Watch } from "@stencil/core";
1
+ import { Component, Prop, h, State, Element, Watch, Event } from "@stencil/core";
2
2
  import { PNLoginManager } from "./pn-marketweb-siteheader-loginmanager";
3
3
  export class PnMarketwebSiteheaderLogin {
4
4
  constructor() {
5
5
  /** Specifies which endpoint domain we should load from */
6
6
  this.endpoint = "";
7
+ this.emitEvents = true;
7
8
  // Login dialog
8
9
  this.loginDialog = null;
9
10
  this.loginManager = null;
@@ -12,11 +13,12 @@ export class PnMarketwebSiteheaderLogin {
12
13
  }
13
14
  componentWillLoad() {
14
15
  this.loginManager = new PNLoginManager({ endpoint: this.endpoint, eventTarget: this.hostElement });
16
+ this.hostElement["loginmanager"] = this.loginManager;
17
+ this.hostElement.addEventListener(this.loginManager.events.loginstatechange, this.onLoginStateChange.bind(this));
15
18
  this.init();
16
19
  }
17
20
  async init() {
18
21
  this.toggleButtonText = this.loginDialog.loginMenuLinkText;
19
- this.hostElement.addEventListener(this.loginManager.events.loginstatechange, this.onLoginStateChange.bind(this));
20
22
  this.loginManager.init();
21
23
  this.setToggleButtonText();
22
24
  }
@@ -35,8 +37,11 @@ export class PnMarketwebSiteheaderLogin {
35
37
  }
36
38
  }
37
39
  onLoginStateChange(e) {
38
- this.loggedIn = e.detail;
39
- this.setToggleButtonText();
40
+ if (this.loggedIn !== e.detail && this.emitEvents) {
41
+ this.loggedIn = e.detail;
42
+ this.loginStateChange.emit({ loggedIn: this.loggedIn, token: this.loginManager.getToken() });
43
+ this.setToggleButtonText();
44
+ }
40
45
  }
41
46
  render() {
42
47
  var _a, _b, _c;
@@ -64,7 +69,7 @@ export class PnMarketwebSiteheaderLogin {
64
69
  h("div", null,
65
70
  h("ul", null, this.loginDialog.loggedInLinks.map((link) => {
66
71
  const isLogoutLink = link.href.indexOf('logout');
67
- const href = (isLogoutLink) ? this.loginManager.getLogoutUrl(link.href.replace('logout', '')) : link.href;
72
+ const href = (isLogoutLink) ? this.loginManager.getLogoutUrl(link.href.replace('logout', '').replace('http://window.location.href/?', '').replace('https://window.location.href/?', '')) : link.href;
68
73
  return (h("li", null,
69
74
  h("a", Object.assign({ href: href }, (link.openInNewWindow && { target: '_blank' })),
70
75
  h("pn-button", { appearance: (link.primaryLinkApperance ? "dark" : "light"), onClick: () => { if (isLogoutLink) {
@@ -119,6 +124,24 @@ export class PnMarketwebSiteheaderLogin {
119
124
  "attribute": "i-1-8n",
120
125
  "reflect": false
121
126
  },
127
+ "emitEvents": {
128
+ "type": "boolean",
129
+ "mutable": false,
130
+ "complexType": {
131
+ "original": "boolean",
132
+ "resolved": "boolean",
133
+ "references": {}
134
+ },
135
+ "required": false,
136
+ "optional": false,
137
+ "docs": {
138
+ "tags": [],
139
+ "text": ""
140
+ },
141
+ "attribute": "emit-events",
142
+ "reflect": false,
143
+ "defaultValue": "true"
144
+ },
122
145
  "loginDialog": {
123
146
  "type": "unknown",
124
147
  "mutable": true,
@@ -146,6 +169,22 @@ export class PnMarketwebSiteheaderLogin {
146
169
  "loggedIn": {},
147
170
  "toggleButtonText": {}
148
171
  }; }
172
+ static get events() { return [{
173
+ "method": "loginStateChange",
174
+ "name": "loginStateChange",
175
+ "bubbles": true,
176
+ "cancelable": true,
177
+ "composed": true,
178
+ "docs": {
179
+ "tags": [],
180
+ "text": ""
181
+ },
182
+ "complexType": {
183
+ "original": "any",
184
+ "resolved": "any",
185
+ "references": {}
186
+ }
187
+ }]; }
149
188
  static get elementRef() { return "hostElement"; }
150
189
  static get watchers() { return [{
151
190
  "propName": "i18n",
@@ -110,10 +110,11 @@ class PNLoginManager {
110
110
  const params = new URLSearchParams(window.location.search);
111
111
  if (params.get("oneTimeCode")) {
112
112
  const oneTimeCode = params.get("oneTimeCode");
113
- this.getToken(oneTimeCode);
114
- const currentHref = window.location.href;
115
- const paramPrefix = (currentHref.indexOf('?oneTimeCode') !== -1) ? "?" : "&";
116
- history.replaceState({}, document.querySelector('title').innerText, currentHref.replace(`${paramPrefix}oneTimeCode=${oneTimeCode}`, ''));
113
+ this.exchangeToken(oneTimeCode).then(() => {
114
+ const currentHref = window.location.href;
115
+ const paramPrefix = (currentHref.indexOf('?oneTimeCode') !== -1) ? "?" : "&";
116
+ history.replaceState({}, document.querySelector('title').innerText, currentHref.replace(`${paramPrefix}oneTimeCode=${oneTimeCode}`, ''));
117
+ });
117
118
  }
118
119
  }
119
120
  async fetchUserInfo() {
@@ -149,7 +150,10 @@ class PNLoginManager {
149
150
  this.store.remove(this.keys.expire);
150
151
  this.store.remove(this.keys.expireDate);
151
152
  }
152
- async getToken(oneTimeCode) {
153
+ getToken() {
154
+ return this.store.get(this.keys.token);
155
+ }
156
+ async exchangeToken(oneTimeCode) {
153
157
  this.clearUserData();
154
158
  const response = await fetch(`${this.getBaseUrl()}${this.endpoints.tokenExchangeEndpoint}?oneTimeCode=${oneTimeCode}`);
155
159
  const { token } = await response.json();
@@ -22,6 +22,10 @@ export class PnMarketwebSiteheader {
22
22
  this.hideSearch = false;
23
23
  /** Hides the login if set to true*/
24
24
  this.hideLogin = false;
25
+ /** Forward session to backend */
26
+ this.sessionForward = false;
27
+ /** Event based only language switch */
28
+ this.spaMode = false;
25
29
  this.gotData = false;
26
30
  this.fetchingData = false;
27
31
  // Menu state
@@ -62,11 +66,6 @@ export class PnMarketwebSiteheader {
62
66
  this.endpoint = "";
63
67
  }
64
68
  }
65
- // TODO
66
- //* Expose market and language attributes when changed internally
67
- //* Business logic to select market and language depending on domains / html tag.
68
- //* Property to stop language change from changeing url, throw an event instead.
69
- //* Fetch new data when langauge or market is changed
70
69
  async init() {
71
70
  this.setTranslations();
72
71
  await this.fetchData();
@@ -77,6 +76,9 @@ export class PnMarketwebSiteheader {
77
76
  this.i18n = translations[this.language];
78
77
  }
79
78
  }
79
+ onLanguageSelectorChange(e) {
80
+ this.language = e.detail;
81
+ }
80
82
  onLanguageChange() {
81
83
  this.setTranslations();
82
84
  this.changeLanguage.emit(this.language);
@@ -96,9 +98,12 @@ export class PnMarketwebSiteheader {
96
98
  const fetchUrl = `${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`;
97
99
  const response = await fetch(fetchUrl);
98
100
  const data = await response.json();
99
- this.setStateFromData(data);
101
+ await this.setStateFromData(data);
100
102
  }
101
103
  getLanguageVersionUrl(item) {
104
+ if (this.spaMode) {
105
+ return null;
106
+ }
102
107
  const alternativeTag = document.querySelector(`link[rel="alternate"][hreflang="${item.twoLetterISOLanguageName}"]`);
103
108
  if (alternativeTag) {
104
109
  return alternativeTag.getAttribute('href');
@@ -107,7 +112,7 @@ export class PnMarketwebSiteheader {
107
112
  // Add trailing slash to domain if it's missing
108
113
  return siteUrl + ((siteUrl.lastIndexOf("/") !== siteUrl.length - 1) ? "/" : "") + item.twoLetterISOLanguageName;
109
114
  }
110
- setStateFromData(data) {
115
+ async setStateFromData(data) {
111
116
  if (typeof data !== "object") {
112
117
  console.warn('Data was not valid', data);
113
118
  }
@@ -131,10 +136,26 @@ export class PnMarketwebSiteheader {
131
136
  // Set language selector
132
137
  this.languageSelector = data.languageSelectorViewModel;
133
138
  this.loginDialog = data.loginViewModel;
139
+ await this.spaModeAdjustments();
134
140
  this.gotData = true;
135
141
  this.fetchingData = true;
136
142
  window.setTimeout(() => { this.checkMenuOverflow(); }, 100);
137
143
  }
144
+ async spaModeAdjustments() {
145
+ if (!this.spaMode) {
146
+ return;
147
+ }
148
+ return;
149
+ }
150
+ onLoginStateChange(e) {
151
+ var _a, _b;
152
+ 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) {
153
+ try {
154
+ fetch('/api/userprofile/sync?token=' + e.detail.token);
155
+ }
156
+ catch (e) { }
157
+ }
158
+ }
138
159
  promotedItemId(item) {
139
160
  return "promo-" + item.linkText.replace(/[^A-Za-z0-9.\\\/]/igm, "");
140
161
  }
@@ -204,7 +225,7 @@ export class PnMarketwebSiteheader {
204
225
  h("pn-mainnav-list", { heading: item.promotedMenuItemsHeader }, item.promotedMenuItems.map((childitem) => (h("pn-mainnav-link", { href: childitem.href, name: childitem.linkText, target: childitem.openInNewWindow ? "_blank" : "_self", linkid: this.promotedItemId(childitem) })))))));
205
226
  })),
206
227
  h("div", { slot: "footer", class: "siteheader-menu-footer" },
207
- (this.gotData && this.loginDialog && !this.hideLogin) && (h("pn-marketweb-siteheader-login", { loginDialog: this.loginDialog, endpoint: this.endpoint, i18n: this.i18n })),
228
+ (this.gotData && this.loginDialog && !this.hideLogin) && (h("pn-marketweb-siteheader-login", { emitEvents: false, loginDialog: this.loginDialog, endpoint: this.endpoint, i18n: this.i18n })),
208
229
  (this.gotData && ((_h = this.languageSelector) === null || _h === void 0 ? void 0 : _h.languages)) && !this.hideLanguageSelector &&
209
230
  h("pn-language-selector", { value: this.language }, this.languageSelector.languages.map(language => h("pn-language-selector-option", { name: language.nativeName, code: language.twoLetterISOLanguageName, selected: language.isCurrent, url: this.getLanguageVersionUrl(language) }))),
210
231
  !this.hideSiteSelector &&
@@ -367,6 +388,42 @@ export class PnMarketwebSiteheader {
367
388
  "attribute": "hide-login",
368
389
  "reflect": true,
369
390
  "defaultValue": "false"
391
+ },
392
+ "sessionForward": {
393
+ "type": "boolean",
394
+ "mutable": false,
395
+ "complexType": {
396
+ "original": "boolean",
397
+ "resolved": "boolean",
398
+ "references": {}
399
+ },
400
+ "required": false,
401
+ "optional": false,
402
+ "docs": {
403
+ "tags": [],
404
+ "text": "Forward session to backend"
405
+ },
406
+ "attribute": "session-forward",
407
+ "reflect": false,
408
+ "defaultValue": "false"
409
+ },
410
+ "spaMode": {
411
+ "type": "boolean",
412
+ "mutable": false,
413
+ "complexType": {
414
+ "original": "boolean",
415
+ "resolved": "boolean",
416
+ "references": {}
417
+ },
418
+ "required": false,
419
+ "optional": false,
420
+ "docs": {
421
+ "tags": [],
422
+ "text": "Event based only language switch"
423
+ },
424
+ "attribute": "spa-mode",
425
+ "reflect": false,
426
+ "defaultValue": "false"
370
427
  }
371
428
  }; }
372
429
  static get states() { return {
@@ -421,6 +478,18 @@ export class PnMarketwebSiteheader {
421
478
  "methodName": "onMarketChange"
422
479
  }]; }
423
480
  static get listeners() { return [{
481
+ "name": "setLanguage",
482
+ "method": "onLanguageSelectorChange",
483
+ "target": undefined,
484
+ "capture": false,
485
+ "passive": false
486
+ }, {
487
+ "name": "loginStateChange",
488
+ "method": "onLoginStateChange",
489
+ "target": undefined,
490
+ "capture": false,
491
+ "passive": false
492
+ }, {
424
493
  "name": "resize",
425
494
  "method": "handleResize",
426
495
  "target": "window",
@@ -48,7 +48,8 @@ const PrimaryTemplate = ({ ...args }) => {
48
48
  hide-site-selector="false"
49
49
  hide-language-selector="false"
50
50
  hide-search="false"
51
- hide-login="false">
51
+ hide-login="false"
52
+ session-forward="true">
52
53
  </pn-marketweb-siteheader>
53
54
  <div style="height:120vh; margin:2em; max-width:calc(100vw - 1em);background:#ccc;border:1px solid #333;">
54
55
  Content that is higher than 100% viewport height
@@ -74,11 +75,25 @@ const MinimalOptionsTemplate = ({ ...args }) => {
74
75
  `;
75
76
  };
76
77
 
77
-
78
-
79
78
  export const MinimalOptions = MinimalOptionsTemplate.bind({});
80
79
  MinimalOptionsTemplate.args = {
81
80
  market : "",
82
81
  language: '',
83
82
  endpoint: ''
84
83
  };
84
+
85
+ const SPAModeOptionsTemplate = ({ ...args }) => {
86
+ return `
87
+ <div style="background:#ddd;min-height:100vh;">
88
+ <pn-marketweb-siteheader language="sv" spa-mode="true">
89
+ </pn-marketweb-siteheader>
90
+ </div>
91
+ `;
92
+ };
93
+
94
+ export const SPAModeOptions = SPAModeOptionsTemplate.bind({});
95
+ SPAModeOptions.args = {
96
+ market : "",
97
+ language: '',
98
+ endpoint: ''
99
+ };
@@ -1,4 +1,4 @@
1
- import { Component, Prop, h, State, Host, Watch, Element } from "@stencil/core";
1
+ import { Component, Prop, h, State, Host, Watch, Element, Event } from "@stencil/core";
2
2
  import { translations } from "./translations";
3
3
  export class PnlanguageSelector {
4
4
  constructor() {
@@ -41,6 +41,7 @@ export class PnlanguageSelector {
41
41
  onSetCurrentLanguage(option) {
42
42
  this.value = option.code;
43
43
  this.selectedLanguageName = option.name;
44
+ this.setLanguage.emit(this.value);
44
45
  }
45
46
  setTranslations() {
46
47
  if (translations[this.value]) {
@@ -77,7 +78,7 @@ export class PnlanguageSelector {
77
78
  static get properties() { return {
78
79
  "value": {
79
80
  "type": "string",
80
- "mutable": false,
81
+ "mutable": true,
81
82
  "complexType": {
82
83
  "original": "string",
83
84
  "resolved": "string",
@@ -99,6 +100,22 @@ export class PnlanguageSelector {
99
100
  "options": {},
100
101
  "i18n": {}
101
102
  }; }
103
+ static get events() { return [{
104
+ "method": "setLanguage",
105
+ "name": "setLanguage",
106
+ "bubbles": true,
107
+ "cancelable": true,
108
+ "composed": true,
109
+ "docs": {
110
+ "tags": [],
111
+ "text": ""
112
+ },
113
+ "complexType": {
114
+ "original": "any",
115
+ "resolved": "any",
116
+ "references": {}
117
+ }
118
+ }]; }
102
119
  static get elementRef() { return "hostElement"; }
103
120
  static get watchers() { return [{
104
121
  "propName": "value",