@ikas/storefront 0.0.25 → 0.0.27

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.
@@ -1,7 +1,10 @@
1
1
  import * as React from "react";
2
+ import { IkasThemePage } from "../../models/index";
2
3
  declare type Props = {
4
+ page?: IkasThemePage;
3
5
  pageTitle?: string | null;
4
6
  description?: string | null;
7
+ pageSpecificDataStr?: string;
5
8
  };
6
9
  export declare const IkasPageHead: React.FC<Props>;
7
10
  export {};
@@ -4,6 +4,7 @@ import { IkasPageComponentPropValue } from "../../utils/index";
4
4
  declare type Props = {
5
5
  propValues: IkasPageComponentPropValue[];
6
6
  page?: IkasThemePage;
7
+ pageSpecificDataStr?: string;
7
8
  };
8
9
  export declare const IkasPage: React.FC<Props>;
9
10
  export {};
package/build/index.es.js CHANGED
@@ -11634,7 +11634,7 @@ var IkasPageDataProvider = /** @class */ (function () {
11634
11634
  IkasPageDataProvider.isServer = function () {
11635
11635
  return typeof window === "undefined";
11636
11636
  };
11637
- IkasPageDataProvider.initPropValues = function (propValuesStr, router) {
11637
+ IkasPageDataProvider.initPropValues = function (propValuesStr, router, isBrowser) {
11638
11638
  var pageComponentPropValues = JSON.parse(propValuesStr).map(function (v) { return ({
11639
11639
  pageComponent: new IkasThemePageComponent(v.pageComponent),
11640
11640
  component: new IkasThemeComponent(v.component),
@@ -11669,7 +11669,7 @@ var IkasPageDataProvider = /** @class */ (function () {
11669
11669
  IkasPageDataProvider.initProductListPropValue(prop, propValue, pageComponentPropValue);
11670
11670
  break;
11671
11671
  case IkasThemeComponentPropType.PRODUCT_DETAIL:
11672
- IkasPageDataProvider.initProductDetailPropValue(prop, propValue, pageComponentPropValue, router);
11672
+ IkasPageDataProvider.initProductDetailPropValue(prop, propValue, pageComponentPropValue, router, isBrowser);
11673
11673
  break;
11674
11674
  case IkasThemeComponentPropType.LINK:
11675
11675
  case IkasThemeComponentPropType.LIST_OF_LINK:
@@ -11700,10 +11700,20 @@ var IkasPageDataProvider = /** @class */ (function () {
11700
11700
  var productList = new IkasProductList(propValue);
11701
11701
  pageComponentPropValue.propValues[prop.name] = productList;
11702
11702
  };
11703
- IkasPageDataProvider.initProductDetailPropValue = function (prop, propValue, pageComponentPropValue, router) {
11703
+ IkasPageDataProvider.initProductDetailPropValue = function (prop, propValue, pageComponentPropValue, router, isBrowser) {
11704
11704
  var usePageData = propValue.usePageData;
11705
11705
  var _propValue = propValue;
11706
11706
  var productDetail = new IkasProductDetail(_propValue.product, _propValue.selectedVariantValues);
11707
+ if (isBrowser) {
11708
+ var urlParams = new URLSearchParams(window.location.search);
11709
+ var vid_1 = urlParams.get("vid");
11710
+ if (vid_1) {
11711
+ var variant = productDetail.product.variants.find(function (v) { return v.id === vid_1; });
11712
+ if (variant) {
11713
+ productDetail.selectedVariantValues = variant.variantValues;
11714
+ }
11715
+ }
11716
+ }
11707
11717
  pageComponentPropValue.propValues[prop.name] = new IkasProductDetail(productDetail.product, productDetail.selectedVariantValues, usePageData, router);
11708
11718
  };
11709
11719
  IkasPageDataProvider.initLinkPropValue = function (prop, propValue, pageComponentPropValue) {
@@ -13650,7 +13660,7 @@ var IkasProductDetail = /** @class */ (function () {
13650
13660
  var newUrl = "/" + metaData.slug + "-" + this.selectedVariantValues
13651
13661
  .map(function (vv) { return vv.slug; })
13652
13662
  .join("-");
13653
- (_a = this.router) === null || _a === void 0 ? void 0 : _a.replace(newUrl);
13663
+ (_a = this.router) === null || _a === void 0 ? void 0 : _a.replace(newUrl, undefined, { shallow: true });
13654
13664
  };
13655
13665
  return IkasProductDetail;
13656
13666
  }());
@@ -18362,7 +18372,7 @@ var IkasCustomerAPI = /** @class */ (function () {
18362
18372
  case 3:
18363
18373
  err_5 = _b.sent();
18364
18374
  console.log(err_5);
18365
- return [3 /*break*/, 4];
18375
+ return [2 /*return*/, false];
18366
18376
  case 4: return [2 /*return*/, true];
18367
18377
  }
18368
18378
  });
@@ -22672,11 +22682,62 @@ var PolicyModal = observer(function (_a) {
22672
22682
  });
22673
22683
 
22674
22684
  var IkasPageHead = observer(function (_a) {
22675
- var pageTitle = _a.pageTitle, description = _a.description;
22685
+ var page = _a.page, pageTitle = _a.pageTitle, description = _a.description, pageSpecificDataStr = _a.pageSpecificDataStr;
22686
+ var schema;
22687
+ if (pageSpecificDataStr && (page === null || page === void 0 ? void 0 : page.type) === IkasThemePageType.PRODUCT) {
22688
+ schema = createProductSchema(pageSpecificDataStr);
22689
+ }
22676
22690
  return (createElement(Head, null,
22677
22691
  createElement("title", null, pageTitle || ""),
22678
- createElement("meta", { name: "description", content: description || "" })));
22679
- });
22692
+ createElement("meta", { name: "description", content: description || "" }),
22693
+ !!schema && (createElement("script", { type: "application/ld+json", dangerouslySetInnerHTML: {
22694
+ __html: JSON.stringify(schema),
22695
+ } }))));
22696
+ });
22697
+ function createProductSchema(pageSpecificDataStr) {
22698
+ var _a;
22699
+ var productDetailParsed = JSON.parse(pageSpecificDataStr);
22700
+ var productDetail = new IkasProductDetail(productDetailParsed.product, productDetailParsed.selectedVariantValues);
22701
+ return {
22702
+ "@context": "https://schema.org/",
22703
+ "@type": "Product",
22704
+ name: productDetail.product.name,
22705
+ image: productDetail.selectedVariant.images.map(function (i) { return i.src; }),
22706
+ description: "Sleeker than ACME's Classic Anvil, the Executive Anvil is perfect for the business traveler looking for something to drop from a height.",
22707
+ sku: productDetail.selectedVariant.sku,
22708
+ mpn: "925872",
22709
+ brand: {
22710
+ "@type": "Brand",
22711
+ name: (_a = productDetail.product.brand) === null || _a === void 0 ? void 0 : _a.name,
22712
+ },
22713
+ review: {
22714
+ "@type": "Review",
22715
+ reviewRating: {
22716
+ "@type": "Rating",
22717
+ ratingValue: "4",
22718
+ bestRating: "5",
22719
+ },
22720
+ author: {
22721
+ "@type": "Person",
22722
+ name: "Fred Benson",
22723
+ },
22724
+ },
22725
+ aggregateRating: {
22726
+ "@type": "AggregateRating",
22727
+ ratingValue: "4.4",
22728
+ reviewCount: "89",
22729
+ },
22730
+ offers: {
22731
+ "@type": "Offer",
22732
+ url: "https://example.com/anvil",
22733
+ priceCurrency: productDetail.selectedVariant.price.currency,
22734
+ price: productDetail.selectedVariant.price.finalPrice,
22735
+ priceValidUntil: "2020-11-20",
22736
+ itemCondition: "https://schema.org/UsedCondition",
22737
+ availability: "https://schema.org/InStock",
22738
+ },
22739
+ };
22740
+ }
22680
22741
 
22681
22742
  var IkasCheckoutPage = observer(function (_a) {
22682
22743
  var _b, _c, _d;
@@ -22836,7 +22897,7 @@ var ThemeComponent = observer(function (_a) {
22836
22897
 
22837
22898
  var IkasPage = observer(function (_a) {
22838
22899
  var _b, _c;
22839
- var propValues = _a.propValues, page = _a.page;
22900
+ var propValues = _a.propValues, page = _a.page, pageSpecificDataStr = _a.pageSpecificDataStr;
22840
22901
  var renderComponent = function (pageComponent, index) {
22841
22902
  var pageComponentPropValue = propValues.find(function (pv) { return pv.pageComponent.id === pageComponent.id; });
22842
22903
  return (createElement(ThemeComponent, { key: pageComponent.id, index: index, pageComponentPropValue: pageComponentPropValue, pageComponent: pageComponent }));
@@ -22849,7 +22910,7 @@ var IkasPage = observer(function (_a) {
22849
22910
  if (!page)
22850
22911
  return null;
22851
22912
  return (createElement(Fragment, null,
22852
- createElement(IkasPageHead, { pageTitle: page.pageTitle, description: page.description }),
22913
+ createElement(IkasPageHead, { page: page, pageTitle: page.pageTitle, description: page.description, pageSpecificDataStr: pageSpecificDataStr }),
22853
22914
  createElement("div", { style: pageStyle },
22854
22915
  createElement("div", null,
22855
22916
  headerComponent && renderComponent(headerComponent, -1),
@@ -23343,11 +23404,16 @@ var home = /*#__PURE__*/Object.freeze({
23343
23404
  var Page$1 = function (_a) {
23344
23405
  var page = _a.page, pageSpecificDataStr = _a.pageSpecificDataStr, propValuesStr = _a.propValuesStr;
23345
23406
  var router = useRouter();
23346
- var propValues = computed(function () {
23347
- return IkasPageDataProvider.initPropValues(propValuesStr, router);
23348
- });
23407
+ var _b = useState(false), isBrowser = _b[0], setIsBrowser = _b[1];
23408
+ var _c = useState(IkasPageDataProvider.initPropValues(propValuesStr, router)), propValues = _c[0], setPropValues = _c[1];
23409
+ useEffect(function () {
23410
+ setIsBrowser(typeof window !== "undefined");
23411
+ }, []);
23412
+ useEffect(function () {
23413
+ setPropValues(IkasPageDataProvider.initPropValues(propValuesStr, router, isBrowser));
23414
+ }, [isBrowser]);
23349
23415
  handleGTM(page, pageSpecificDataStr);
23350
- return createElement(IkasPage, { page: page, propValues: propValues.get() });
23416
+ return (createElement(IkasPage, { page: page, propValues: propValues, pageSpecificDataStr: pageSpecificDataStr }));
23351
23417
  };
23352
23418
  var index$1 = observer(Page$1);
23353
23419
  var getStaticPaths = function (context) { return __awaiter(void 0, void 0, void 0, function () {
package/build/index.js CHANGED
@@ -11647,7 +11647,7 @@ var IkasPageDataProvider = /** @class */ (function () {
11647
11647
  IkasPageDataProvider.isServer = function () {
11648
11648
  return typeof window === "undefined";
11649
11649
  };
11650
- IkasPageDataProvider.initPropValues = function (propValuesStr, router) {
11650
+ IkasPageDataProvider.initPropValues = function (propValuesStr, router, isBrowser) {
11651
11651
  var pageComponentPropValues = JSON.parse(propValuesStr).map(function (v) { return ({
11652
11652
  pageComponent: new IkasThemePageComponent(v.pageComponent),
11653
11653
  component: new IkasThemeComponent(v.component),
@@ -11682,7 +11682,7 @@ var IkasPageDataProvider = /** @class */ (function () {
11682
11682
  IkasPageDataProvider.initProductListPropValue(prop, propValue, pageComponentPropValue);
11683
11683
  break;
11684
11684
  case exports.IkasThemeComponentPropType.PRODUCT_DETAIL:
11685
- IkasPageDataProvider.initProductDetailPropValue(prop, propValue, pageComponentPropValue, router);
11685
+ IkasPageDataProvider.initProductDetailPropValue(prop, propValue, pageComponentPropValue, router, isBrowser);
11686
11686
  break;
11687
11687
  case exports.IkasThemeComponentPropType.LINK:
11688
11688
  case exports.IkasThemeComponentPropType.LIST_OF_LINK:
@@ -11713,10 +11713,20 @@ var IkasPageDataProvider = /** @class */ (function () {
11713
11713
  var productList = new IkasProductList(propValue);
11714
11714
  pageComponentPropValue.propValues[prop.name] = productList;
11715
11715
  };
11716
- IkasPageDataProvider.initProductDetailPropValue = function (prop, propValue, pageComponentPropValue, router) {
11716
+ IkasPageDataProvider.initProductDetailPropValue = function (prop, propValue, pageComponentPropValue, router, isBrowser) {
11717
11717
  var usePageData = propValue.usePageData;
11718
11718
  var _propValue = propValue;
11719
11719
  var productDetail = new IkasProductDetail(_propValue.product, _propValue.selectedVariantValues);
11720
+ if (isBrowser) {
11721
+ var urlParams = new URLSearchParams(window.location.search);
11722
+ var vid_1 = urlParams.get("vid");
11723
+ if (vid_1) {
11724
+ var variant = productDetail.product.variants.find(function (v) { return v.id === vid_1; });
11725
+ if (variant) {
11726
+ productDetail.selectedVariantValues = variant.variantValues;
11727
+ }
11728
+ }
11729
+ }
11720
11730
  pageComponentPropValue.propValues[prop.name] = new IkasProductDetail(productDetail.product, productDetail.selectedVariantValues, usePageData, router);
11721
11731
  };
11722
11732
  IkasPageDataProvider.initLinkPropValue = function (prop, propValue, pageComponentPropValue) {
@@ -13636,7 +13646,7 @@ var IkasProductDetail = /** @class */ (function () {
13636
13646
  var newUrl = "/" + metaData.slug + "-" + this.selectedVariantValues
13637
13647
  .map(function (vv) { return vv.slug; })
13638
13648
  .join("-");
13639
- (_a = this.router) === null || _a === void 0 ? void 0 : _a.replace(newUrl);
13649
+ (_a = this.router) === null || _a === void 0 ? void 0 : _a.replace(newUrl, undefined, { shallow: true });
13640
13650
  };
13641
13651
  return IkasProductDetail;
13642
13652
  }());
@@ -18346,7 +18356,7 @@ var IkasCustomerAPI = /** @class */ (function () {
18346
18356
  case 3:
18347
18357
  err_5 = _b.sent();
18348
18358
  console.log(err_5);
18349
- return [3 /*break*/, 4];
18359
+ return [2 /*return*/, false];
18350
18360
  case 4: return [2 /*return*/, true];
18351
18361
  }
18352
18362
  });
@@ -22656,11 +22666,62 @@ var PolicyModal = mobxReactLite.observer(function (_a) {
22656
22666
  });
22657
22667
 
22658
22668
  var IkasPageHead = mobxReactLite.observer(function (_a) {
22659
- var pageTitle = _a.pageTitle, description = _a.description;
22669
+ var page = _a.page, pageTitle = _a.pageTitle, description = _a.description, pageSpecificDataStr = _a.pageSpecificDataStr;
22670
+ var schema;
22671
+ if (pageSpecificDataStr && (page === null || page === void 0 ? void 0 : page.type) === exports.IkasThemePageType.PRODUCT) {
22672
+ schema = createProductSchema(pageSpecificDataStr);
22673
+ }
22660
22674
  return (React.createElement(Head__default['default'], null,
22661
22675
  React.createElement("title", null, pageTitle || ""),
22662
- React.createElement("meta", { name: "description", content: description || "" })));
22663
- });
22676
+ React.createElement("meta", { name: "description", content: description || "" }),
22677
+ !!schema && (React.createElement("script", { type: "application/ld+json", dangerouslySetInnerHTML: {
22678
+ __html: JSON.stringify(schema),
22679
+ } }))));
22680
+ });
22681
+ function createProductSchema(pageSpecificDataStr) {
22682
+ var _a;
22683
+ var productDetailParsed = JSON.parse(pageSpecificDataStr);
22684
+ var productDetail = new IkasProductDetail(productDetailParsed.product, productDetailParsed.selectedVariantValues);
22685
+ return {
22686
+ "@context": "https://schema.org/",
22687
+ "@type": "Product",
22688
+ name: productDetail.product.name,
22689
+ image: productDetail.selectedVariant.images.map(function (i) { return i.src; }),
22690
+ description: "Sleeker than ACME's Classic Anvil, the Executive Anvil is perfect for the business traveler looking for something to drop from a height.",
22691
+ sku: productDetail.selectedVariant.sku,
22692
+ mpn: "925872",
22693
+ brand: {
22694
+ "@type": "Brand",
22695
+ name: (_a = productDetail.product.brand) === null || _a === void 0 ? void 0 : _a.name,
22696
+ },
22697
+ review: {
22698
+ "@type": "Review",
22699
+ reviewRating: {
22700
+ "@type": "Rating",
22701
+ ratingValue: "4",
22702
+ bestRating: "5",
22703
+ },
22704
+ author: {
22705
+ "@type": "Person",
22706
+ name: "Fred Benson",
22707
+ },
22708
+ },
22709
+ aggregateRating: {
22710
+ "@type": "AggregateRating",
22711
+ ratingValue: "4.4",
22712
+ reviewCount: "89",
22713
+ },
22714
+ offers: {
22715
+ "@type": "Offer",
22716
+ url: "https://example.com/anvil",
22717
+ priceCurrency: productDetail.selectedVariant.price.currency,
22718
+ price: productDetail.selectedVariant.price.finalPrice,
22719
+ priceValidUntil: "2020-11-20",
22720
+ itemCondition: "https://schema.org/UsedCondition",
22721
+ availability: "https://schema.org/InStock",
22722
+ },
22723
+ };
22724
+ }
22664
22725
 
22665
22726
  var IkasCheckoutPage = mobxReactLite.observer(function (_a) {
22666
22727
  var _b, _c, _d;
@@ -22820,7 +22881,7 @@ var ThemeComponent = mobxReactLite.observer(function (_a) {
22820
22881
 
22821
22882
  var IkasPage = mobxReactLite.observer(function (_a) {
22822
22883
  var _b, _c;
22823
- var propValues = _a.propValues, page = _a.page;
22884
+ var propValues = _a.propValues, page = _a.page, pageSpecificDataStr = _a.pageSpecificDataStr;
22824
22885
  var renderComponent = function (pageComponent, index) {
22825
22886
  var pageComponentPropValue = propValues.find(function (pv) { return pv.pageComponent.id === pageComponent.id; });
22826
22887
  return (React.createElement(ThemeComponent, { key: pageComponent.id, index: index, pageComponentPropValue: pageComponentPropValue, pageComponent: pageComponent }));
@@ -22833,7 +22894,7 @@ var IkasPage = mobxReactLite.observer(function (_a) {
22833
22894
  if (!page)
22834
22895
  return null;
22835
22896
  return (React.createElement(React.Fragment, null,
22836
- React.createElement(IkasPageHead, { pageTitle: page.pageTitle, description: page.description }),
22897
+ React.createElement(IkasPageHead, { page: page, pageTitle: page.pageTitle, description: page.description, pageSpecificDataStr: pageSpecificDataStr }),
22837
22898
  React.createElement("div", { style: pageStyle },
22838
22899
  React.createElement("div", null,
22839
22900
  headerComponent && renderComponent(headerComponent, -1),
@@ -23327,11 +23388,16 @@ var home = /*#__PURE__*/Object.freeze({
23327
23388
  var Page$1 = function (_a) {
23328
23389
  var page = _a.page, pageSpecificDataStr = _a.pageSpecificDataStr, propValuesStr = _a.propValuesStr;
23329
23390
  var router$1 = router.useRouter();
23330
- var propValues = mobx.computed(function () {
23331
- return IkasPageDataProvider.initPropValues(propValuesStr, router$1);
23332
- });
23391
+ var _b = React.useState(false), isBrowser = _b[0], setIsBrowser = _b[1];
23392
+ var _c = React.useState(IkasPageDataProvider.initPropValues(propValuesStr, router$1)), propValues = _c[0], setPropValues = _c[1];
23393
+ React.useEffect(function () {
23394
+ setIsBrowser(typeof window !== "undefined");
23395
+ }, []);
23396
+ React.useEffect(function () {
23397
+ setPropValues(IkasPageDataProvider.initPropValues(propValuesStr, router$1, isBrowser));
23398
+ }, [isBrowser]);
23333
23399
  handleGTM(page, pageSpecificDataStr);
23334
- return React.createElement(IkasPage, { page: page, propValues: propValues.get() });
23400
+ return (React.createElement(IkasPage, { page: page, propValues: propValues, pageSpecificDataStr: pageSpecificDataStr }));
23335
23401
  };
23336
23402
  var index$1 = mobxReactLite.observer(Page$1);
23337
23403
  var getStaticPaths = function (context) { return __awaiter(void 0, void 0, void 0, function () {
@@ -22,13 +22,13 @@ export declare class IkasPageDataProvider {
22
22
  getPageComponentPropValue(pageComponent: IkasThemePageComponent, prop: IkasThemeComponentProp): Promise<any>;
23
23
  private setPageMetaData;
24
24
  static isServer(): boolean;
25
- static initPropValues(propValuesStr: string, router: NextRouter): IkasPageComponentPropValue[];
25
+ static initPropValues(propValuesStr: string, router: NextRouter, isBrowser?: boolean): IkasPageComponentPropValue[];
26
26
  static initBrandPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue): void;
27
27
  static initBrandListPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue): void;
28
28
  static initCategoryPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue): void;
29
29
  static initCategoryListPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue): void;
30
30
  static initProductListPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue): void;
31
- static initProductDetailPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue, router: NextRouter): void;
31
+ static initProductDetailPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue, router: NextRouter, isBrowser?: boolean): void;
32
32
  static initLinkPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue): void;
33
33
  static initImagePropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue): void;
34
34
  static initImageListPropValue(prop: IkasThemeComponentProp, propValue: any, pageComponentPropValue: IkasPageComponentPropValue): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ikas/storefront",
3
- "version": "0.0.25",
3
+ "version": "0.0.27",
4
4
  "main": "./build/index.js",
5
5
  "module": "./build/index.es.js",
6
6
  "author": "Umut Ozan Yıldırım",