hemfixarna-web-components 1.1.2 → 1.1.4
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.
- package/dist/cjs/hemfixarna-address_20.cjs.entry.js +48 -36
- package/dist/cjs/hemfixarna-address_20.cjs.entry.js.map +1 -1
- package/dist/cjs/hemfixarna-components.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/hemfixarna-byggmax/hemfixarna-byggmax.js +23 -4
- package/dist/collection/components/hemfixarna-byggmax/hemfixarna-byggmax.js.map +1 -1
- package/dist/collection/components/hemfixarna-component/hemfixarna-component.js +45 -19
- package/dist/collection/components/hemfixarna-component/hemfixarna-component.js.map +1 -1
- package/dist/collection/components/hemfixarna-demo/hemfixarna-demo.js +14 -10
- package/dist/collection/components/hemfixarna-demo/hemfixarna-demo.js.map +1 -1
- package/dist/collection/components/hemfixarna-hornbach/hemfixarna-hornbach.js +4 -4
- package/dist/collection/components/hemfixarna-hornbach/hemfixarna-hornbach.js.map +1 -1
- package/dist/collection/components/hemfixarna-kund/hemfixarna-kund.js +4 -4
- package/dist/collection/components/hemfixarna-kund/hemfixarna-kund.js.map +1 -1
- package/dist/collection/components/hemfixarna-skanska/hemfixarna-skanska.js +4 -4
- package/dist/collection/components/hemfixarna-skanska/hemfixarna-skanska.js.map +1 -1
- package/dist/collection/components/hemfixarna-string/hemfixarna-string-furniture.js +4 -4
- package/dist/collection/components/hemfixarna-string/hemfixarna-string-furniture.js.map +1 -1
- package/dist/esm/hemfixarna-address_20.entry.js +48 -36
- package/dist/esm/hemfixarna-address_20.entry.js.map +1 -1
- package/dist/esm/hemfixarna-components.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/hemfixarna-components/hemfixarna-components.esm.js +1 -1
- package/dist/hemfixarna-components/p-fad272a5.entry.js +2 -0
- package/dist/types/components/hemfixarna-byggmax/hemfixarna-byggmax.d.ts +2 -1
- package/dist/types/components/hemfixarna-component/hemfixarna-component.d.ts +3 -1
- package/dist/types/components/hemfixarna-hornbach/hemfixarna-hornbach.d.ts +1 -1
- package/dist/types/components/hemfixarna-kund/hemfixarna-kund.d.ts +1 -1
- package/dist/types/components/hemfixarna-skanska/hemfixarna-skanska.d.ts +1 -1
- package/dist/types/components/hemfixarna-string/hemfixarna-string-furniture.d.ts +1 -1
- package/dist/types/components.d.ts +16 -12
- package/package.json +1 -1
- package/dist/hemfixarna-components/p-063de59e.entry.js +0 -2
- /package/dist/hemfixarna-components/{p-063de59e.entry.js.map → p-fad272a5.entry.js.map} +0 -0
|
@@ -521,11 +521,12 @@ const MyComponent$5 = class {
|
|
|
521
521
|
index.registerInstance(this, hostRef);
|
|
522
522
|
this.tree = null;
|
|
523
523
|
this.slug = undefined;
|
|
524
|
-
this.
|
|
524
|
+
this.id = undefined;
|
|
525
525
|
this.customer = undefined;
|
|
526
|
+
this.forceNewTree = false;
|
|
526
527
|
}
|
|
527
528
|
render() {
|
|
528
|
-
return index.h("hemfixarna-component", {
|
|
529
|
+
return (index.h("hemfixarna-component", { forceNewTree: this.forceNewTree, id: this.id, slug: this.slug, business: Business.byggmax, topCategory: TopCategory.byggmax }));
|
|
529
530
|
}
|
|
530
531
|
};
|
|
531
532
|
MyComponent$5.style = hemfixarnaByggmaxCss;
|
|
@@ -725,12 +726,16 @@ const HemfixarnaComponent = class {
|
|
|
725
726
|
this.showModal = false;
|
|
726
727
|
this.tree = null;
|
|
727
728
|
this.product = null;
|
|
729
|
+
this.proppedProduct = null;
|
|
728
730
|
this.slug = undefined;
|
|
729
|
-
this.
|
|
731
|
+
this.id = undefined;
|
|
730
732
|
this.business = undefined;
|
|
731
733
|
this.topCategory = undefined;
|
|
734
|
+
this.forceNewTree = undefined;
|
|
732
735
|
}
|
|
733
736
|
loadCategoryOrProduct(id) {
|
|
737
|
+
state.selectedCustomerCategory = null;
|
|
738
|
+
state.selectedProduct = null;
|
|
734
739
|
if (id.startsWith('c-')) {
|
|
735
740
|
const categories = [...state.customer.categories, ...state.customer.categories.map(c => { var _a; return (_a = c.sub_categories) !== null && _a !== void 0 ? _a : []; })].flat();
|
|
736
741
|
const category = categories.find(c => c && c.id === id.replace('c-', ''));
|
|
@@ -748,6 +753,7 @@ const HemfixarnaComponent = class {
|
|
|
748
753
|
if (product) {
|
|
749
754
|
state.selectedProduct = product.fields;
|
|
750
755
|
state.step = 4;
|
|
756
|
+
this.proppedProduct = product.fields;
|
|
751
757
|
}
|
|
752
758
|
}
|
|
753
759
|
}
|
|
@@ -791,20 +797,22 @@ const HemfixarnaComponent = class {
|
|
|
791
797
|
getRut(),
|
|
792
798
|
getRot(),
|
|
793
799
|
]);
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
800
|
+
if (this.business !== Business.byggmax || this.id || this.forceNewTree) {
|
|
801
|
+
try {
|
|
802
|
+
const customer = await getCustomer(this.business);
|
|
803
|
+
if ((customer === null || customer === void 0 ? void 0 : customer.code) === 'not_found') {
|
|
804
|
+
console.warn('customer not found');
|
|
805
|
+
}
|
|
806
|
+
else if (customer) {
|
|
807
|
+
state.customer = customer;
|
|
808
|
+
if (this.id) {
|
|
809
|
+
this.loadCategoryOrProduct(this.id);
|
|
810
|
+
}
|
|
803
811
|
}
|
|
804
812
|
}
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
813
|
+
catch (error) {
|
|
814
|
+
console.warn('customer not found');
|
|
815
|
+
}
|
|
808
816
|
}
|
|
809
817
|
if ((tree === null || tree === void 0 ? void 0 : tree.code) === 'not_found') ;
|
|
810
818
|
else if (tree) {
|
|
@@ -879,15 +887,15 @@ const HemfixarnaComponent = class {
|
|
|
879
887
|
return state.cart.reduce((acc, curr) => acc + curr.amount, 0);
|
|
880
888
|
}
|
|
881
889
|
render() {
|
|
882
|
-
var _a, _b;
|
|
890
|
+
var _a, _b, _c;
|
|
883
891
|
const logo = index.getAssetPath(`./assets/hemfixarna.svg`);
|
|
884
|
-
return (index.h("div", { class: "hemfixarna" }, index.h("div", { class: "hemfixarna_box" }, index.h("div", null, index.h("div", null, index.h("p", null, ((_a = this.product) === null || _a === void 0 ? void 0 : _a.post_title) || (index.h("span", null, "Montering", index.h("wbr", null), "/Installation p\u00E5 plats - ", index.h("strong", null, "se priser h\u00E4r"))), this.product && ((
|
|
892
|
+
return (index.h("div", { class: "hemfixarna" }, index.h("div", { class: "hemfixarna_box" }, index.h("div", null, index.h("div", null, index.h("p", null, ((_a = this.product) === null || _a === void 0 ? void 0 : _a.post_title) || ((_b = this.proppedProduct) === null || _b === void 0 ? void 0 : _b.post_title) || (index.h("span", null, "Montering", index.h("wbr", null), "/Installation p\u00E5 plats - ", index.h("strong", null, "se priser h\u00E4r"))), (this.product && ((_c = this.slug) === null || _c === void 0 ? void 0 : _c.includes('product'))) || this.proppedProduct ? (index.h("span", null, ' från', " ", index.h("strong", null, getProductPriceWithRotAndRut(this.proppedProduct || this.product), "kr"))) : null)), index.h("img", { src: logo, width: 104 })), index.h("button", { onClick: () => this.openModal(), class: "hemfixarna_btn" }, "Till montering", this.getCartLength() > 0 && index.h("span", null, this.getCartLength()))), this.modal && (index.h("div", null, index.h("div", { class: `hemfixarna_modal ${this.showModal ? 'hemfixarna_modal--open' : ''}` }, state.modal && (index.h("div", { class: "hemfixarna_infomodal" }, state.modal.title && index.h("h2", null, state.modal.title), state.modal.text.map((t) => (index.h("p", { innerHTML: t }))), index.h("div", null, index.h("button", { onClick: () => (state.modal = null) }, "St\u00E4ng")))), (this.tree || state.customer) && index.h("hemfixarna-breadcrumbs", { closeModal: () => this.closeModal(), tree: this.tree }), !state.customer || this.slug ? (index.h("div", { class: `hemfixarna_content hemfixarna_content--${state.step}` }, state.step === 1 && this.tree && index.h("hemfixarna-start", { tree: this.tree }), state.step === 2 && state.selectedCategory && index.h("hemfixarna-category", null), state.step === 3 && state.selectedService && index.h("hemfixarna-service", null), state.step === 4 && state.selectedProduct && index.h("hemfixarna-product", null), state.step === 5 && index.h("hemfixarna-cart", { tree: this.tree }), state.step === 6 && index.h("hemfixarna-order", { tree: this.tree }))) : (index.h("div", { class: `hemfixarna_content hemfixarna_content--${state.step}` }, state.step < 4 && index.h("hemfixarna-start", null), state.step === 4 && state.selectedProduct && index.h("hemfixarna-product", null), state.step === 5 && index.h("hemfixarna-cart", { tree: this.tree }), state.step === 6 && index.h("hemfixarna-order", { tree: this.tree })))), index.h("div", { class: `hemfixarna_backdrop ${this.showModal ? 'hemfixarna_backdrop--open' : ''}` })))));
|
|
885
893
|
}
|
|
886
894
|
static get assetsDirs() { return ["assets"]; }
|
|
887
895
|
get el() { return index.getElement(this); }
|
|
888
896
|
static get watchers() { return {
|
|
889
897
|
"slug": ["watchSlugChange"],
|
|
890
|
-
"
|
|
898
|
+
"id": ["watchIdChange"]
|
|
891
899
|
}; }
|
|
892
900
|
};
|
|
893
901
|
HemfixarnaComponent.style = hemfixarnaCss;
|
|
@@ -905,7 +913,7 @@ const MyComponent$4 = class {
|
|
|
905
913
|
this.customer = null;
|
|
906
914
|
}
|
|
907
915
|
getTopLevelCategory() {
|
|
908
|
-
switch ("
|
|
916
|
+
switch ("byggmax") {
|
|
909
917
|
case Business.byggmax:
|
|
910
918
|
return TopCategory.byggmax;
|
|
911
919
|
default:
|
|
@@ -913,18 +921,22 @@ const MyComponent$4 = class {
|
|
|
913
921
|
}
|
|
914
922
|
}
|
|
915
923
|
async componentWillLoad() {
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
924
|
+
if (process.env.FORCE_OLD_TREE) {
|
|
925
|
+
const tree = await getTaxonomy(this.getTopLevelCategory());
|
|
926
|
+
if ((tree === null || tree === void 0 ? void 0 : tree.code) === 'not_found') ;
|
|
927
|
+
else if (tree) {
|
|
928
|
+
this.tree = tree;
|
|
929
|
+
}
|
|
919
930
|
}
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
931
|
+
else {
|
|
932
|
+
const customer = await getCustomer("byggmax");
|
|
933
|
+
if (customer.code !== 'not_found' && customer) {
|
|
934
|
+
this.customer = customer;
|
|
935
|
+
}
|
|
924
936
|
}
|
|
925
937
|
}
|
|
926
938
|
getExample() {
|
|
927
|
-
return `<hemfixarna-${"
|
|
939
|
+
return `<hemfixarna-${"byggmax"}${this.selectedSlug ? ` slug="${this.selectedSlug}" ` : ''}${this.selectedID ? ` id="${this.selectedID}" ` : ''}></hemfixarna-${"byggmax"}>`;
|
|
928
940
|
}
|
|
929
941
|
copyExample() {
|
|
930
942
|
navigator.clipboard.writeText(this.getExample());
|
|
@@ -949,7 +961,7 @@ const MyComponent$4 = class {
|
|
|
949
961
|
}
|
|
950
962
|
render() {
|
|
951
963
|
const copy = index.getAssetPath(`./assets/copy.png`);
|
|
952
|
-
return (index.h("div", null, index.h("div", null, index.h("div", { onClick: () => this.copyExample(), class: "hemfixarna_example" }, index.h("p", null, this.getExample()), index.h("img", { src: copy, height: 20 }), index.h("span", { class: "hemfixarna_example--tooltip" }, this.tooltipText)), "
|
|
964
|
+
return (index.h("div", null, index.h("div", null, index.h("div", { onClick: () => this.copyExample(), class: "hemfixarna_example" }, index.h("p", null, this.getExample()), index.h("img", { src: copy, height: 20 }), index.h("span", { class: "hemfixarna_example--tooltip" }, this.tooltipText)), "byggmax" === Business.byggmax && (index.h("hemfixarna-byggmax", { forceNewTree: Boolean(process.env.FORCE_NEW_TREE), slug: this.selectedSlug, id: this.selectedID })), "byggmax" === Business.skanska && index.h("hemfixarna-skanska", { id: this.selectedID }), "byggmax" === Business.string && index.h("hemfixarna-string-furniture", { id: this.selectedID }), "byggmax" === Business.hornbach && index.h("hemfixarna-hornbach", { id: this.selectedID }), "byggmax" === Business.kund && index.h("hemfixarna-kund", { id: this.selectedID }), index.h("div", { class: "hemfixarna_install" }, index.h("div", { onClick: () => this.copyCdn(), class: "hemfixarna_example" }, index.h("p", null, this.cdnLink), index.h("span", { class: "hemfixarna_example--tooltip" }, this.tooltipText), index.h("img", { src: copy, height: 20 })))), index.h("ul", { class: "hemfixarna_categories" }, this.customer ? (index.h("div", null, this.customer.categories.map(c => (index.h("li", null, index.h("div", { class: "hemfixarna_categories--label hemfixarna_categories--label--big" }, index.h("div", null, index.h("p", null, c.name), index.h("span", null, `c-${c.id}`)), index.h("div", null, index.h("button", { onClick: () => navigator.clipboard.writeText(`c-${c.id}`) }, "Kopiera ID"), index.h("button", { onClick: () => (this.selectedID = `c-${c.id}`) }, "Ladda kategori"))), c.show_products && c.products ? (index.h("ul", null, c.products.map(p => (index.h("li", null, index.h("div", { class: "hemfixarna_categories--label hemfixarna_product--label" }, index.h("div", null, index.h("p", null, p.fields.post_title), index.h("span", null, p.fields.ID)), index.h("div", null, index.h("button", { onClick: () => navigator.clipboard.writeText(String(p.fields.ID)) }, "Kopiera ID"), index.h("button", { onClick: () => (this.selectedID = String(p.fields.ID)) }, "Ladda produkt")))))))) : (index.h("ul", null, c.sub_categories &&
|
|
953
965
|
c.sub_categories.map(sc => (index.h("li", null, index.h("div", { class: "hemfixarna_categories--label" }, index.h("div", null, index.h("p", null, sc.name), index.h("span", null, `c-${sc.id}`)), index.h("div", null, index.h("button", { onClick: () => navigator.clipboard.writeText(`c-${sc.id}`) }, "Kopiera ID"), index.h("button", { onClick: () => (this.selectedID = `c-${sc.id}`) }, "Ladda kategori"))), index.h("ul", null, sc.products.map(p => (index.h("li", null, index.h("div", { class: "hemfixarna_categories--label hemfixarna_product--label" }, index.h("div", null, index.h("p", null, p.fields.post_title), index.h("span", null, p.fields.ID)), index.h("div", null, index.h("button", { onClick: () => navigator.clipboard.writeText(String(p.fields.ID)) }, "Kopiera ID"), index.h("button", { onClick: () => (this.selectedID = String(p.fields.ID)) }, "Ladda produkt"))))))))))))))))) : (index.h("div", null, this.tree.sub_cats.map(c => (index.h("li", null, index.h("div", { class: "hemfixarna_categories--label hemfixarna_categories--label--big" }, index.h("div", null, index.h("p", null, c.name), index.h("span", null, `category/${c.slug}`)), index.h("div", null, index.h("button", { onClick: () => navigator.clipboard.writeText(`category/${c.slug}`) }, "Kopiera slug"), index.h("button", { onClick: () => (this.selectedSlug = `category/${c.slug}`) }, "Ladda kategori"))), index.h("ul", null, c.services.map(sc => (index.h("li", null, index.h("div", { class: "hemfixarna_categories--label" }, index.h("div", null, index.h("p", null, sc.post_title), index.h("span", null, `service/${sc.post_name}`)), index.h("div", null, index.h("button", { onClick: () => navigator.clipboard.writeText(`service/${sc.post_name}`) }, "Kopiera slug"), index.h("button", { onClick: () => (this.selectedSlug = `service/${sc.post_name}`) }, "Ladda kategori"))), index.h("ul", null, sc.products.map(sc => (index.h("li", null, index.h("div", { class: "hemfixarna_categories--label" }, index.h("div", null, index.h("p", null, sc.post_title), index.h("span", null, `product/${sc.post_name}`)), index.h("div", null, index.h("button", { onClick: () => navigator.clipboard.writeText(`product/${sc.post_name}`) }, "Kopiera slug"), index.h("button", { onClick: () => (this.selectedSlug = `product/${sc.post_name}`) }, "Ladda kategori")))))))))))))))))));
|
|
954
966
|
}
|
|
955
967
|
};
|
|
@@ -1682,11 +1694,11 @@ const hemfixarnaHornbachCss = "";
|
|
|
1682
1694
|
const MyComponent$3 = class {
|
|
1683
1695
|
constructor(hostRef) {
|
|
1684
1696
|
index.registerInstance(this, hostRef);
|
|
1685
|
-
this.
|
|
1697
|
+
this.id = undefined;
|
|
1686
1698
|
this.customer = undefined;
|
|
1687
1699
|
}
|
|
1688
1700
|
render() {
|
|
1689
|
-
return index.h("hemfixarna-component", {
|
|
1701
|
+
return index.h("hemfixarna-component", { id: this.id, business: Business.hornbach });
|
|
1690
1702
|
}
|
|
1691
1703
|
};
|
|
1692
1704
|
MyComponent$3.style = hemfixarnaHornbachCss;
|
|
@@ -1713,11 +1725,11 @@ const HemfixarnaInfo = class {
|
|
|
1713
1725
|
const MyComponent$2 = class {
|
|
1714
1726
|
constructor(hostRef) {
|
|
1715
1727
|
index.registerInstance(this, hostRef);
|
|
1716
|
-
this.
|
|
1728
|
+
this.id = undefined;
|
|
1717
1729
|
this.customer = undefined;
|
|
1718
1730
|
}
|
|
1719
1731
|
render() {
|
|
1720
|
-
return index.h("hemfixarna-component", {
|
|
1732
|
+
return index.h("hemfixarna-component", { id: this.id, business: Business.kund });
|
|
1721
1733
|
}
|
|
1722
1734
|
};
|
|
1723
1735
|
|
|
@@ -1934,11 +1946,11 @@ const hemfixarnaSkanskaCss = "";
|
|
|
1934
1946
|
const MyComponent$1 = class {
|
|
1935
1947
|
constructor(hostRef) {
|
|
1936
1948
|
index.registerInstance(this, hostRef);
|
|
1937
|
-
this.
|
|
1949
|
+
this.id = undefined;
|
|
1938
1950
|
this.customer = undefined;
|
|
1939
1951
|
}
|
|
1940
1952
|
render() {
|
|
1941
|
-
return index.h("hemfixarna-component", {
|
|
1953
|
+
return index.h("hemfixarna-component", { id: this.id, business: Business.skanska });
|
|
1942
1954
|
}
|
|
1943
1955
|
};
|
|
1944
1956
|
MyComponent$1.style = hemfixarnaSkanskaCss;
|
|
@@ -1973,11 +1985,11 @@ const hemfixarnaStringCss = "";
|
|
|
1973
1985
|
const MyComponent = class {
|
|
1974
1986
|
constructor(hostRef) {
|
|
1975
1987
|
index.registerInstance(this, hostRef);
|
|
1976
|
-
this.
|
|
1988
|
+
this.id = undefined;
|
|
1977
1989
|
this.customer = undefined;
|
|
1978
1990
|
}
|
|
1979
1991
|
render() {
|
|
1980
|
-
return index.h("hemfixarna-component", {
|
|
1992
|
+
return index.h("hemfixarna-component", { id: this.id, business: Business.string });
|
|
1981
1993
|
}
|
|
1982
1994
|
};
|
|
1983
1995
|
MyComponent.style = hemfixarnaStringCss;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"hemfixarna-address.hemfixarna-box.hemfixarna-breadcrumbs.hemfixarna-byggmax.hemfixarna-cart.hemfixarna-category.hemfixarna-checkout.hemfixarna-component.hemfixarna-demo.hemfixarna-getuser.hemfixarna-hornbach.hemfixarna-info.hemfixarna-kund.hemfixarna-order.hemfixarna-orderrows.hemfixarna-product.hemfixarna-service.hemfixarna-skanska.hemfixarna-start.hemfixarna-string-furniture.entry.cjs.js","mappings":"
|
|
1
|
+
{"file":"hemfixarna-address.hemfixarna-box.hemfixarna-breadcrumbs.hemfixarna-byggmax.hemfixarna-cart.hemfixarna-category.hemfixarna-checkout.hemfixarna-component.hemfixarna-demo.hemfixarna-getuser.hemfixarna-hornbach.hemfixarna-info.hemfixarna-kund.hemfixarna-order.hemfixarna-orderrows.hemfixarna-product.hemfixarna-service.hemfixarna-skanska.hemfixarna-start.hemfixarna-string-furniture.entry.cjs.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
|
|
@@ -20,7 +20,7 @@ const patchBrowser = () => {
|
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
patchBrowser().then(options => {
|
|
23
|
-
return index.bootstrapLazy([["hemfixarna-address_20.cjs",[[1,"hemfixarna-demo",{"selectedSlug":[32],"selectedID":[32],"tooltipText":[32],"tree":[32],"customer":[32]}],[1,"hemfixarna-byggmax",{"slug":[1],"
|
|
23
|
+
return index.bootstrapLazy([["hemfixarna-address_20.cjs",[[1,"hemfixarna-demo",{"selectedSlug":[32],"selectedID":[32],"tooltipText":[32],"tree":[32],"customer":[32]}],[1,"hemfixarna-byggmax",{"slug":[1],"id":[1],"customer":[1],"forceNewTree":[4,"force-new-tree"],"tree":[32]}],[1,"hemfixarna-hornbach",{"id":[1],"customer":[1]}],[1,"hemfixarna-kund",{"id":[1],"customer":[1]}],[1,"hemfixarna-skanska",{"id":[1],"customer":[1]}],[1,"hemfixarna-string-furniture",{"id":[1],"customer":[1]}],[1,"hemfixarna-component",{"slug":[1],"id":[1],"business":[1],"topCategory":[1,"top-category"],"forceNewTree":[4,"force-new-tree"],"modal":[32],"showModal":[32],"tree":[32],"product":[32],"proppedProduct":[32]},[[0,"click","handleClick"]]],[0,"hemfixarna-cart",{"tree":[16]}],[0,"hemfixarna-category"],[0,"hemfixarna-order",{"tree":[16]}],[0,"hemfixarna-service"],[0,"hemfixarna-start",{"tree":[16],"slug":[1]}],[0,"hemfixarna-product",{"amount":[32],"hideDescription":[32]}],[0,"hemfixarna-breadcrumbs",{"tree":[16],"closeModal":[16]}],[0,"hemfixarna-checkout",{"date":[32],"dateError":[32],"generalError":[32]}],[0,"hemfixarna-address",{"street":[32],"streetError":[32],"zip":[32],"zipError":[32],"town":[32],"townError":[32]}],[0,"hemfixarna-getuser",{"email":[32],"emailError":[32],"phone":[32],"phoneError":[32],"ssn":[32],"ssnError":[32]}],[0,"hemfixarna-orderrows",{"cart":[4],"tree":[16]}],[0,"hemfixarna-box",{"post":[16],"category":[16],"icon":[1],"postTitle":[1,"post-title"]}],[0,"hemfixarna-info",{"list":[16]}]]]], options);
|
|
24
24
|
});
|
|
25
25
|
|
|
26
26
|
exports.setNonce = index.setNonce;
|
package/dist/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([["hemfixarna-address_20.cjs",[[1,"hemfixarna-demo",{"selectedSlug":[32],"selectedID":[32],"tooltipText":[32],"tree":[32],"customer":[32]}],[1,"hemfixarna-byggmax",{"slug":[1],"
|
|
17
|
+
return index.bootstrapLazy([["hemfixarna-address_20.cjs",[[1,"hemfixarna-demo",{"selectedSlug":[32],"selectedID":[32],"tooltipText":[32],"tree":[32],"customer":[32]}],[1,"hemfixarna-byggmax",{"slug":[1],"id":[1],"customer":[1],"forceNewTree":[4,"force-new-tree"],"tree":[32]}],[1,"hemfixarna-hornbach",{"id":[1],"customer":[1]}],[1,"hemfixarna-kund",{"id":[1],"customer":[1]}],[1,"hemfixarna-skanska",{"id":[1],"customer":[1]}],[1,"hemfixarna-string-furniture",{"id":[1],"customer":[1]}],[1,"hemfixarna-component",{"slug":[1],"id":[1],"business":[1],"topCategory":[1,"top-category"],"forceNewTree":[4,"force-new-tree"],"modal":[32],"showModal":[32],"tree":[32],"product":[32],"proppedProduct":[32]},[[0,"click","handleClick"]]],[0,"hemfixarna-cart",{"tree":[16]}],[0,"hemfixarna-category"],[0,"hemfixarna-order",{"tree":[16]}],[0,"hemfixarna-service"],[0,"hemfixarna-start",{"tree":[16],"slug":[1]}],[0,"hemfixarna-product",{"amount":[32],"hideDescription":[32]}],[0,"hemfixarna-breadcrumbs",{"tree":[16],"closeModal":[16]}],[0,"hemfixarna-checkout",{"date":[32],"dateError":[32],"generalError":[32]}],[0,"hemfixarna-address",{"street":[32],"streetError":[32],"zip":[32],"zipError":[32],"town":[32],"townError":[32]}],[0,"hemfixarna-getuser",{"email":[32],"emailError":[32],"phone":[32],"phoneError":[32],"ssn":[32],"ssnError":[32]}],[0,"hemfixarna-orderrows",{"cart":[4],"tree":[16]}],[0,"hemfixarna-box",{"post":[16],"category":[16],"icon":[1],"postTitle":[1,"post-title"]}],[0,"hemfixarna-info",{"list":[16]}]]]], options);
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
20
|
|
|
@@ -4,11 +4,12 @@ export class MyComponent {
|
|
|
4
4
|
constructor() {
|
|
5
5
|
this.tree = null;
|
|
6
6
|
this.slug = undefined;
|
|
7
|
-
this.
|
|
7
|
+
this.id = undefined;
|
|
8
8
|
this.customer = undefined;
|
|
9
|
+
this.forceNewTree = false;
|
|
9
10
|
}
|
|
10
11
|
render() {
|
|
11
|
-
return h("hemfixarna-component", {
|
|
12
|
+
return (h("hemfixarna-component", { forceNewTree: this.forceNewTree, id: this.id, slug: this.slug, business: Business.byggmax, topCategory: TopCategory.byggmax }));
|
|
12
13
|
}
|
|
13
14
|
static get is() { return "hemfixarna-byggmax"; }
|
|
14
15
|
static get encapsulation() { return "shadow"; }
|
|
@@ -41,7 +42,7 @@ export class MyComponent {
|
|
|
41
42
|
"attribute": "slug",
|
|
42
43
|
"reflect": false
|
|
43
44
|
},
|
|
44
|
-
"
|
|
45
|
+
"id": {
|
|
45
46
|
"type": "string",
|
|
46
47
|
"mutable": false,
|
|
47
48
|
"complexType": {
|
|
@@ -55,7 +56,7 @@ export class MyComponent {
|
|
|
55
56
|
"tags": [],
|
|
56
57
|
"text": ""
|
|
57
58
|
},
|
|
58
|
-
"attribute": "
|
|
59
|
+
"attribute": "id",
|
|
59
60
|
"reflect": false
|
|
60
61
|
},
|
|
61
62
|
"customer": {
|
|
@@ -74,6 +75,24 @@ export class MyComponent {
|
|
|
74
75
|
},
|
|
75
76
|
"attribute": "customer",
|
|
76
77
|
"reflect": false
|
|
78
|
+
},
|
|
79
|
+
"forceNewTree": {
|
|
80
|
+
"type": "boolean",
|
|
81
|
+
"mutable": false,
|
|
82
|
+
"complexType": {
|
|
83
|
+
"original": "boolean",
|
|
84
|
+
"resolved": "boolean",
|
|
85
|
+
"references": {}
|
|
86
|
+
},
|
|
87
|
+
"required": false,
|
|
88
|
+
"optional": true,
|
|
89
|
+
"docs": {
|
|
90
|
+
"tags": [],
|
|
91
|
+
"text": ""
|
|
92
|
+
},
|
|
93
|
+
"attribute": "force-new-tree",
|
|
94
|
+
"reflect": false,
|
|
95
|
+
"defaultValue": "false"
|
|
77
96
|
}
|
|
78
97
|
};
|
|
79
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hemfixarna-byggmax.js","sourceRoot":"","sources":["../../../src/components/hemfixarna-byggmax/hemfixarna-byggmax.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAY,WAAW,EAAE,MAAM,aAAa,CAAC;AAO9D,MAAM,OAAO,WAAW;;gBACY,IAAI
|
|
1
|
+
{"version":3,"file":"hemfixarna-byggmax.js","sourceRoot":"","sources":["../../../src/components/hemfixarna-byggmax/hemfixarna-byggmax.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAY,WAAW,EAAE,MAAM,aAAa,CAAC;AAO9D,MAAM,OAAO,WAAW;;gBACY,IAAI;;;;wBAIL,KAAK;;EAEtC,MAAM;IACJ,OAAO,CACL,4BAAsB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,OAAO,GAAyB,CAC3K,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Prop, State, h } from '@stencil/core';\nimport { Business, Category, TopCategory } from '../../types';\n\n@Component({\n tag: 'hemfixarna-byggmax',\n styleUrl: 'hemfixarna-byggmax.scss',\n shadow: true,\n})\nexport class MyComponent {\n @State() tree?: Category | null = null;\n @Prop() slug?: string;\n @Prop() id?: string;\n @Prop() customer?: string;\n @Prop() forceNewTree?: boolean = false;\n\n render() {\n return (\n <hemfixarna-component forceNewTree={this.forceNewTree} id={this.id} slug={this.slug} business={Business.byggmax} topCategory={TopCategory.byggmax}></hemfixarna-component>\n );\n }\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getAssetPath, h } from '@stencil/core';
|
|
2
2
|
import state from '../../store';
|
|
3
|
+
import { Business } from '../../types';
|
|
3
4
|
import { getCustomer, getOptions, getRot, getRut, getTaxonomy } from '../../utils/api';
|
|
4
5
|
import { getProductPriceWithRotAndRut } from '../../utils/calc';
|
|
5
6
|
import { scrollToTop } from '../../utils/scroll';
|
|
@@ -13,12 +14,16 @@ export class HemfixarnaComponent {
|
|
|
13
14
|
this.showModal = false;
|
|
14
15
|
this.tree = null;
|
|
15
16
|
this.product = null;
|
|
17
|
+
this.proppedProduct = null;
|
|
16
18
|
this.slug = undefined;
|
|
17
|
-
this.
|
|
19
|
+
this.id = undefined;
|
|
18
20
|
this.business = undefined;
|
|
19
21
|
this.topCategory = undefined;
|
|
22
|
+
this.forceNewTree = undefined;
|
|
20
23
|
}
|
|
21
24
|
loadCategoryOrProduct(id) {
|
|
25
|
+
state.selectedCustomerCategory = null;
|
|
26
|
+
state.selectedProduct = null;
|
|
22
27
|
if (id.startsWith('c-')) {
|
|
23
28
|
const categories = [...state.customer.categories, ...state.customer.categories.map(c => { var _a; return (_a = c.sub_categories) !== null && _a !== void 0 ? _a : []; })].flat();
|
|
24
29
|
const category = categories.find(c => c && c.id === id.replace('c-', ''));
|
|
@@ -36,6 +41,7 @@ export class HemfixarnaComponent {
|
|
|
36
41
|
if (product) {
|
|
37
42
|
state.selectedProduct = product.fields;
|
|
38
43
|
state.step = 4;
|
|
44
|
+
this.proppedProduct = product.fields;
|
|
39
45
|
}
|
|
40
46
|
}
|
|
41
47
|
}
|
|
@@ -79,20 +85,22 @@ export class HemfixarnaComponent {
|
|
|
79
85
|
getRut(),
|
|
80
86
|
getRot(),
|
|
81
87
|
]);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
if (this.business !== Business.byggmax || this.id || this.forceNewTree) {
|
|
89
|
+
try {
|
|
90
|
+
const customer = await getCustomer(this.business);
|
|
91
|
+
if ((customer === null || customer === void 0 ? void 0 : customer.code) === 'not_found') {
|
|
92
|
+
console.warn('customer not found');
|
|
93
|
+
}
|
|
94
|
+
else if (customer) {
|
|
95
|
+
state.customer = customer;
|
|
96
|
+
if (this.id) {
|
|
97
|
+
this.loadCategoryOrProduct(this.id);
|
|
98
|
+
}
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.warn('customer not found');
|
|
103
|
+
}
|
|
96
104
|
}
|
|
97
105
|
if ((tree === null || tree === void 0 ? void 0 : tree.code) === 'not_found') {
|
|
98
106
|
// console.warn('tree not found');
|
|
@@ -169,9 +177,9 @@ export class HemfixarnaComponent {
|
|
|
169
177
|
return state.cart.reduce((acc, curr) => acc + curr.amount, 0);
|
|
170
178
|
}
|
|
171
179
|
render() {
|
|
172
|
-
var _a, _b;
|
|
180
|
+
var _a, _b, _c;
|
|
173
181
|
const logo = getAssetPath(`./assets/hemfixarna.svg`);
|
|
174
|
-
return (h("div", { class: "hemfixarna" }, h("div", { class: "hemfixarna_box" }, h("div", null, h("div", null, h("p", null, ((_a = this.product) === null || _a === void 0 ? void 0 : _a.post_title) || (h("span", null, "Montering", h("wbr", null), "/Installation p\u00E5 plats - ", h("strong", null, "se priser h\u00E4r"))), this.product && ((
|
|
182
|
+
return (h("div", { class: "hemfixarna" }, h("div", { class: "hemfixarna_box" }, h("div", null, h("div", null, h("p", null, ((_a = this.product) === null || _a === void 0 ? void 0 : _a.post_title) || ((_b = this.proppedProduct) === null || _b === void 0 ? void 0 : _b.post_title) || (h("span", null, "Montering", h("wbr", null), "/Installation p\u00E5 plats - ", h("strong", null, "se priser h\u00E4r"))), (this.product && ((_c = this.slug) === null || _c === void 0 ? void 0 : _c.includes('product'))) || this.proppedProduct ? (h("span", null, ' från', " ", h("strong", null, getProductPriceWithRotAndRut(this.proppedProduct || this.product), "kr"))) : null)), h("img", { src: logo, width: 104 })), h("button", { onClick: () => this.openModal(), class: "hemfixarna_btn" }, "Till montering", this.getCartLength() > 0 && h("span", null, this.getCartLength()))), this.modal && (h("div", null, h("div", { class: `hemfixarna_modal ${this.showModal ? 'hemfixarna_modal--open' : ''}` }, state.modal && (h("div", { class: "hemfixarna_infomodal" }, state.modal.title && h("h2", null, state.modal.title), state.modal.text.map((t) => (h("p", { innerHTML: t }))), h("div", null, h("button", { onClick: () => (state.modal = null) }, "St\u00E4ng")))), (this.tree || state.customer) && h("hemfixarna-breadcrumbs", { closeModal: () => this.closeModal(), tree: this.tree }), !state.customer || this.slug ? (h("div", { class: `hemfixarna_content hemfixarna_content--${state.step}` }, state.step === 1 && this.tree && h("hemfixarna-start", { tree: this.tree }), state.step === 2 && state.selectedCategory && h("hemfixarna-category", null), state.step === 3 && state.selectedService && h("hemfixarna-service", null), state.step === 4 && state.selectedProduct && h("hemfixarna-product", null), state.step === 5 && h("hemfixarna-cart", { tree: this.tree }), state.step === 6 && h("hemfixarna-order", { tree: this.tree }))) : (h("div", { class: `hemfixarna_content hemfixarna_content--${state.step}` }, state.step < 4 && h("hemfixarna-start", null), state.step === 4 && state.selectedProduct && h("hemfixarna-product", null), state.step === 5 && h("hemfixarna-cart", { tree: this.tree }), state.step === 6 && h("hemfixarna-order", { tree: this.tree })))), h("div", { class: `hemfixarna_backdrop ${this.showModal ? 'hemfixarna_backdrop--open' : ''}` })))));
|
|
175
183
|
}
|
|
176
184
|
static get is() { return "hemfixarna-component"; }
|
|
177
185
|
static get encapsulation() { return "shadow"; }
|
|
@@ -205,7 +213,7 @@ export class HemfixarnaComponent {
|
|
|
205
213
|
"attribute": "slug",
|
|
206
214
|
"reflect": false
|
|
207
215
|
},
|
|
208
|
-
"
|
|
216
|
+
"id": {
|
|
209
217
|
"type": "string",
|
|
210
218
|
"mutable": false,
|
|
211
219
|
"complexType": {
|
|
@@ -219,7 +227,7 @@ export class HemfixarnaComponent {
|
|
|
219
227
|
"tags": [],
|
|
220
228
|
"text": ""
|
|
221
229
|
},
|
|
222
|
-
"attribute": "
|
|
230
|
+
"attribute": "id",
|
|
223
231
|
"reflect": false
|
|
224
232
|
},
|
|
225
233
|
"business": {
|
|
@@ -265,6 +273,23 @@ export class HemfixarnaComponent {
|
|
|
265
273
|
},
|
|
266
274
|
"attribute": "top-category",
|
|
267
275
|
"reflect": false
|
|
276
|
+
},
|
|
277
|
+
"forceNewTree": {
|
|
278
|
+
"type": "boolean",
|
|
279
|
+
"mutable": false,
|
|
280
|
+
"complexType": {
|
|
281
|
+
"original": "boolean",
|
|
282
|
+
"resolved": "boolean",
|
|
283
|
+
"references": {}
|
|
284
|
+
},
|
|
285
|
+
"required": false,
|
|
286
|
+
"optional": true,
|
|
287
|
+
"docs": {
|
|
288
|
+
"tags": [],
|
|
289
|
+
"text": ""
|
|
290
|
+
},
|
|
291
|
+
"attribute": "force-new-tree",
|
|
292
|
+
"reflect": false
|
|
268
293
|
}
|
|
269
294
|
};
|
|
270
295
|
}
|
|
@@ -273,7 +298,8 @@ export class HemfixarnaComponent {
|
|
|
273
298
|
"modal": {},
|
|
274
299
|
"showModal": {},
|
|
275
300
|
"tree": {},
|
|
276
|
-
"product": {}
|
|
301
|
+
"product": {},
|
|
302
|
+
"proppedProduct": {}
|
|
277
303
|
};
|
|
278
304
|
}
|
|
279
305
|
static get elementRef() { return "el"; }
|
|
@@ -282,7 +308,7 @@ export class HemfixarnaComponent {
|
|
|
282
308
|
"propName": "slug",
|
|
283
309
|
"methodName": "watchSlugChange"
|
|
284
310
|
}, {
|
|
285
|
-
"propName": "
|
|
311
|
+
"propName": "id",
|
|
286
312
|
"methodName": "watchIdChange"
|
|
287
313
|
}];
|
|
288
314
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hemfixarna-component.js","sourceRoot":"","sources":["../../../src/components/hemfixarna-component/hemfixarna-component.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Listen, Prop, State, Watch, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { Business, Category, Product, Service, TopCategory } from '../../types';\nimport { getCustomer, getOptions, getRot, getRut, getTaxonomy } from '../../utils/api';\nimport { getProductPriceWithRotAndRut } from '../../utils/calc';\nimport { scrollToTop } from '../../utils/scroll';\n\n@Component({\n tag: 'hemfixarna-component',\n styleUrl: 'hemfixarna.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class HemfixarnaComponent {\n @State() modal: boolean = false;\n @State() showModal: boolean = false;\n @State() tree: Category | null = null;\n @State() product: Product | null = null;\n\n @Element() private el: HTMLElement;\n\n @Prop() slug?: string;\n @Prop() categoryId?: string;\n @Prop() business: Business;\n @Prop() topCategory?: TopCategory;\n\n loadCategoryOrProduct(id: string) {\n if (id.startsWith('c-')) {\n const categories = [...state.customer.categories, ...state.customer.categories.map(c => c.sub_categories ?? [])].flat();\n const category = categories.find(c => c && c.id === id.replace('c-', ''));\n if (category) {\n state.selectedCustomerCategory = category;\n state.step = 2;\n }\n } else {\n const products = state.customer.categories\n .map(c => (c.show_products ? c.products : c.sub_categories ? c.sub_categories.map(c => c.products) : []))\n .flat()\n .flat();\n const product = products.find(p => p && p.fields.ID === parseInt(id));\n if (product) {\n state.selectedProduct = product.fields;\n state.step = 4;\n }\n }\n }\n\n @Watch('slug')\n async watchSlugChange(newValue: string) {\n this.fetchNewTaxonomy(newValue);\n }\n\n @Watch('categoryId')\n async watchIdChange(id: string) {\n if (id && state.customer) {\n this.loadCategoryOrProduct(id);\n }\n }\n\n async fetchNewTaxonomy(slug: string) {\n state.selectedCategory = null;\n state.selectedProduct = null;\n state.selectedService = null;\n\n const res = await getTaxonomy(slug);\n if (res?.code === 'not_found' || res?.code === 'rest_no_route') {\n console.log('taxonomy not found');\n } else if (res) {\n this.setTaxonomy(res);\n if ((res as Product)?.post_type === 'ikea_product') {\n this.product = res as Product;\n }\n }\n }\n\n async componentWillLoad() {\n state.business = this.business;\n const cart = window.sessionStorage.getItem(`hemfixarna-${this.business}-cart`);\n if (cart) {\n state.cart = JSON.parse(cart);\n }\n const user = window.sessionStorage.getItem(`hemfixarna-${this.business}-user`);\n if (user) {\n state.user = JSON.parse(user);\n }\n\n const [tree, res, options, rut, rot] = await Promise.all([\n this.topCategory ? getTaxonomy(this.topCategory) : null,\n this.slug ? getTaxonomy(this.slug) : Promise.resolve(null),\n getOptions(),\n getRut(),\n getRot(),\n ]);\n\n try {\n const customer = await getCustomer(this.business);\n if (customer?.code === 'not_found') {\n console.warn('customer not found');\n } else if (customer) {\n state.customer = customer;\n if (this.categoryId) {\n this.loadCategoryOrProduct(this.categoryId);\n }\n }\n } catch (error) {\n console.warn('customer not found');\n }\n\n if (tree?.code === 'not_found') {\n // console.warn('tree not found');\n } else if (tree) {\n this.tree = tree;\n }\n\n if (res?.code === 'not_found') {\n console.log('taxonomy not found');\n } else if (res) {\n this.setTaxonomy(res);\n if ((res as Product)?.post_type === 'ikea_product') {\n this.product = res as Product;\n }\n }\n\n state.rotOptions = rot;\n state.rutOptions = rut;\n state.options = options;\n }\n\n triggerScrollTotop = () => {\n const el = this.el.shadowRoot.querySelector('.hemfixarna_content');\n scrollToTop(el);\n };\n\n setTaxonomy(taxonomy: Category | Service | Product) {\n if (taxonomy) {\n if ((taxonomy as Category)?.taxonomy === 'service_cat') {\n state.selectedCategory = taxonomy as Category;\n state.step = 2;\n } else if ((taxonomy as Service)?.post_type === 'service') {\n state.selectedService = taxonomy as Service;\n state.selectedCategory = this.tree.sub_cats.find(c => c.services.find(s => s.ID === (taxonomy as Service).ID));\n state.step = 3;\n } else if ((taxonomy as Product)?.post_type === 'ikea_product') {\n state.selectedProduct = taxonomy as Product;\n state.selectedService = this.tree.sub_cats\n .map(c => c.services)\n .flat()\n .find(s => s.products.find(p => p.ID === state.selectedProduct.ID));\n state.selectedCategory = this.tree.sub_cats.find(c => c.services.find(s => s.ID === state.selectedService.ID));\n state.step = 4;\n }\n this.triggerScrollTotop();\n }\n }\n\n // Open close modal && click outside event\n openModal() {\n this.modal = true;\n setTimeout(() => {\n this.showModal = true;\n }, 50);\n }\n closeModal() {\n this.showModal = false;\n setTimeout(() => {\n this.modal = false;\n }, 200);\n }\n @Listen('click')\n handleClick(e: Event) {\n const el = this.el.shadowRoot.querySelector('.hemfixarna_modal');\n if (el) {\n const isClickInside = el.contains(e.composedPath()[0] as HTMLInputElement);\n if (!isClickInside) {\n this.closeModal();\n }\n }\n const infomodal = this.el.shadowRoot.querySelector('.hemfixarna_infomodal');\n if (infomodal) {\n const isClickInside = infomodal.contains(e.composedPath()[0] as HTMLInputElement);\n if (!isClickInside) {\n state.modal = null;\n }\n }\n }\n\n getCartLength() {\n return state.cart.reduce((acc, curr) => acc + curr.amount, 0);\n }\n\n render() {\n const logo = getAssetPath(`./assets/hemfixarna.svg`);\n\n return (\n <div class=\"hemfixarna\">\n <div class=\"hemfixarna_box\">\n <div>\n <div>\n <p>\n {this.product?.post_title || (\n <span>\n Montering\n <wbr />\n /Installation på plats - <strong>se priser här</strong>\n </span>\n )}\n {this.product && this.slug?.includes('product') ? (\n <span>\n {' från'} <strong>{getProductPriceWithRotAndRut(this.product)}kr</strong>\n </span>\n ) : null}\n </p>\n </div>\n <img src={logo} width={104} />\n </div>\n <button onClick={() => this.openModal()} class=\"hemfixarna_btn\">\n Till montering\n {this.getCartLength() > 0 && <span>{this.getCartLength()}</span>}\n </button>\n </div>\n {this.modal && (\n <div>\n <div class={`hemfixarna_modal ${this.showModal ? 'hemfixarna_modal--open' : ''}`}>\n {state.modal && (\n <div class=\"hemfixarna_infomodal\">\n {state.modal.title && <h2>{state.modal.title}</h2>}\n {state.modal.text.map((t: string) => (\n <p innerHTML={t}></p>\n ))}\n <div>\n <button onClick={() => (state.modal = null)}>Stäng</button>\n </div>\n </div>\n )}\n {(this.tree || state.customer) && <hemfixarna-breadcrumbs closeModal={() => this.closeModal()} tree={this.tree} />}\n {!state.customer ? (\n <div class={`hemfixarna_content hemfixarna_content--${state.step}`}>\n {/* // IF AT TOP LEVEL (step 1) */}\n {state.step === 1 && this.tree && <hemfixarna-start tree={this.tree} />}\n {/* // IF SELECTED CATEGORY (step 2) */}\n {state.step === 2 && state.selectedCategory && <hemfixarna-category />}\n {/* // IF SELECTED SERVICE (step 3) */}\n {state.step === 3 && state.selectedService && <hemfixarna-service />}\n {/* // IF SELECTED PRODUCT (step 4) */}\n {state.step === 4 && state.selectedProduct && <hemfixarna-product />}\n {/* // IF CHECKOUT (step 5) */}\n {state.step === 5 && <hemfixarna-cart tree={this.tree} />}\n {/* // IF ORDER CONFIRM (step 6) */}\n {state.step === 6 && <hemfixarna-order tree={this.tree} />}\n </div>\n ) : (\n <div class={`hemfixarna_content hemfixarna_content--${state.step}`}>\n {state.step < 4 && <hemfixarna-start />}\n {/* // IF SELECTED PRODUCT (step 4) */}\n {state.step === 4 && state.selectedProduct && <hemfixarna-product />}\n {/* // IF CHECKOUT (step 5) */}\n {state.step === 5 && <hemfixarna-cart tree={this.tree} />}\n {/* // IF ORDER CONFIRM (step 6) */}\n {state.step === 6 && <hemfixarna-order tree={this.tree} />}\n </div>\n )}\n </div>\n <div class={`hemfixarna_backdrop ${this.showModal ? 'hemfixarna_backdrop--open' : ''}`}></div>\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"hemfixarna-component.js","sourceRoot":"","sources":["../../../src/components/hemfixarna-component/hemfixarna-component.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Listen, Prop, State, Watch, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { Business, Category, Product, Service, TopCategory } from '../../types';\nimport { getCustomer, getOptions, getRot, getRut, getTaxonomy } from '../../utils/api';\nimport { getProductPriceWithRotAndRut } from '../../utils/calc';\nimport { scrollToTop } from '../../utils/scroll';\n\n@Component({\n tag: 'hemfixarna-component',\n styleUrl: 'hemfixarna.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class HemfixarnaComponent {\n @State() modal: boolean = false;\n @State() showModal: boolean = false;\n @State() tree: Category | null = null;\n @State() product: Product | null = null;\n @State() proppedProduct: Product | null = null;\n\n @Element() private el: HTMLElement;\n\n @Prop() slug?: string;\n @Prop() id?: string;\n @Prop() business: Business;\n @Prop() topCategory?: TopCategory;\n @Prop() forceNewTree?: boolean;\n\n loadCategoryOrProduct(id: string) {\n state.selectedCustomerCategory = null;\n state.selectedProduct = null;\n if (id.startsWith('c-')) {\n const categories = [...state.customer.categories, ...state.customer.categories.map(c => c.sub_categories ?? [])].flat();\n const category = categories.find(c => c && c.id === id.replace('c-', ''));\n if (category) {\n state.selectedCustomerCategory = category;\n state.step = 2;\n }\n } else {\n const products = state.customer.categories\n .map(c => (c.show_products ? c.products : c.sub_categories ? c.sub_categories.map(c => c.products) : []))\n .flat()\n .flat();\n const product = products.find(p => p && p.fields.ID === parseInt(id));\n if (product) {\n state.selectedProduct = product.fields;\n state.step = 4;\n this.proppedProduct = product.fields;\n }\n }\n }\n\n @Watch('slug')\n async watchSlugChange(newValue: string) {\n this.fetchNewTaxonomy(newValue);\n }\n\n @Watch('id')\n async watchIdChange(id: string) {\n if (id && state.customer) {\n this.loadCategoryOrProduct(id);\n }\n }\n\n async fetchNewTaxonomy(slug: string) {\n state.selectedCategory = null;\n state.selectedProduct = null;\n state.selectedService = null;\n\n const res = await getTaxonomy(slug);\n if (res?.code === 'not_found' || res?.code === 'rest_no_route') {\n console.log('taxonomy not found');\n } else if (res) {\n this.setTaxonomy(res);\n if ((res as Product)?.post_type === 'ikea_product') {\n this.product = res as Product;\n }\n }\n }\n\n async componentWillLoad() {\n state.business = this.business;\n const cart = window.sessionStorage.getItem(`hemfixarna-${this.business}-cart`);\n if (cart) {\n state.cart = JSON.parse(cart);\n }\n const user = window.sessionStorage.getItem(`hemfixarna-${this.business}-user`);\n if (user) {\n state.user = JSON.parse(user);\n }\n\n const [tree, res, options, rut, rot] = await Promise.all([\n this.topCategory ? getTaxonomy(this.topCategory) : null,\n this.slug ? getTaxonomy(this.slug) : Promise.resolve(null),\n getOptions(),\n getRut(),\n getRot(),\n ]);\n\n if (this.business !== Business.byggmax || this.id || this.forceNewTree) {\n try {\n const customer = await getCustomer(this.business);\n if (customer?.code === 'not_found') {\n console.warn('customer not found');\n } else if (customer) {\n state.customer = customer;\n if (this.id) {\n this.loadCategoryOrProduct(this.id);\n }\n }\n } catch (error) {\n console.warn('customer not found');\n }\n }\n\n if (tree?.code === 'not_found') {\n // console.warn('tree not found');\n } else if (tree) {\n this.tree = tree;\n }\n\n if (res?.code === 'not_found') {\n console.log('taxonomy not found');\n } else if (res) {\n this.setTaxonomy(res);\n if ((res as Product)?.post_type === 'ikea_product') {\n this.product = res as Product;\n }\n }\n\n state.rotOptions = rot;\n state.rutOptions = rut;\n state.options = options;\n }\n\n triggerScrollTotop = () => {\n const el = this.el.shadowRoot.querySelector('.hemfixarna_content');\n scrollToTop(el);\n };\n\n setTaxonomy(taxonomy: Category | Service | Product) {\n if (taxonomy) {\n if ((taxonomy as Category)?.taxonomy === 'service_cat') {\n state.selectedCategory = taxonomy as Category;\n state.step = 2;\n } else if ((taxonomy as Service)?.post_type === 'service') {\n state.selectedService = taxonomy as Service;\n state.selectedCategory = this.tree.sub_cats.find(c => c.services.find(s => s.ID === (taxonomy as Service).ID));\n state.step = 3;\n } else if ((taxonomy as Product)?.post_type === 'ikea_product') {\n state.selectedProduct = taxonomy as Product;\n state.selectedService = this.tree.sub_cats\n .map(c => c.services)\n .flat()\n .find(s => s.products.find(p => p.ID === state.selectedProduct.ID));\n state.selectedCategory = this.tree.sub_cats.find(c => c.services.find(s => s.ID === state.selectedService.ID));\n state.step = 4;\n }\n this.triggerScrollTotop();\n }\n }\n\n // Open close modal && click outside event\n openModal() {\n this.modal = true;\n setTimeout(() => {\n this.showModal = true;\n }, 50);\n }\n closeModal() {\n this.showModal = false;\n setTimeout(() => {\n this.modal = false;\n }, 200);\n }\n @Listen('click')\n handleClick(e: Event) {\n const el = this.el.shadowRoot.querySelector('.hemfixarna_modal');\n if (el) {\n const isClickInside = el.contains(e.composedPath()[0] as HTMLInputElement);\n if (!isClickInside) {\n this.closeModal();\n }\n }\n const infomodal = this.el.shadowRoot.querySelector('.hemfixarna_infomodal');\n if (infomodal) {\n const isClickInside = infomodal.contains(e.composedPath()[0] as HTMLInputElement);\n if (!isClickInside) {\n state.modal = null;\n }\n }\n }\n\n getCartLength() {\n return state.cart.reduce((acc, curr) => acc + curr.amount, 0);\n }\n\n render() {\n const logo = getAssetPath(`./assets/hemfixarna.svg`);\n\n return (\n <div class=\"hemfixarna\">\n <div class=\"hemfixarna_box\">\n <div>\n <div>\n <p>\n {this.product?.post_title || this.proppedProduct?.post_title || (\n <span>\n Montering\n <wbr />\n /Installation på plats - <strong>se priser här</strong>\n </span>\n )}\n {(this.product && this.slug?.includes('product')) || this.proppedProduct ? (\n <span>\n {' från'} <strong>{getProductPriceWithRotAndRut(this.proppedProduct || this.product)}kr</strong>\n </span>\n ) : null}\n </p>\n </div>\n <img src={logo} width={104} />\n </div>\n <button onClick={() => this.openModal()} class=\"hemfixarna_btn\">\n Till montering\n {this.getCartLength() > 0 && <span>{this.getCartLength()}</span>}\n </button>\n </div>\n {this.modal && (\n <div>\n <div class={`hemfixarna_modal ${this.showModal ? 'hemfixarna_modal--open' : ''}`}>\n {state.modal && (\n <div class=\"hemfixarna_infomodal\">\n {state.modal.title && <h2>{state.modal.title}</h2>}\n {state.modal.text.map((t: string) => (\n <p innerHTML={t}></p>\n ))}\n <div>\n <button onClick={() => (state.modal = null)}>Stäng</button>\n </div>\n </div>\n )}\n {(this.tree || state.customer) && <hemfixarna-breadcrumbs closeModal={() => this.closeModal()} tree={this.tree} />}\n {!state.customer || this.slug ? (\n <div class={`hemfixarna_content hemfixarna_content--${state.step}`}>\n {/* // IF AT TOP LEVEL (step 1) */}\n {state.step === 1 && this.tree && <hemfixarna-start tree={this.tree} />}\n {/* // IF SELECTED CATEGORY (step 2) */}\n {state.step === 2 && state.selectedCategory && <hemfixarna-category />}\n {/* // IF SELECTED SERVICE (step 3) */}\n {state.step === 3 && state.selectedService && <hemfixarna-service />}\n {/* // IF SELECTED PRODUCT (step 4) */}\n {state.step === 4 && state.selectedProduct && <hemfixarna-product />}\n {/* // IF CHECKOUT (step 5) */}\n {state.step === 5 && <hemfixarna-cart tree={this.tree} />}\n {/* // IF ORDER CONFIRM (step 6) */}\n {state.step === 6 && <hemfixarna-order tree={this.tree} />}\n </div>\n ) : (\n <div class={`hemfixarna_content hemfixarna_content--${state.step}`}>\n {state.step < 4 && <hemfixarna-start />}\n {/* // IF SELECTED PRODUCT (step 4) */}\n {state.step === 4 && state.selectedProduct && <hemfixarna-product />}\n {/* // IF CHECKOUT (step 5) */}\n {state.step === 5 && <hemfixarna-cart tree={this.tree} />}\n {/* // IF ORDER CONFIRM (step 6) */}\n {state.step === 6 && <hemfixarna-order tree={this.tree} />}\n </div>\n )}\n </div>\n <div class={`hemfixarna_backdrop ${this.showModal ? 'hemfixarna_backdrop--open' : ''}`}></div>\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|