@sentecacommerce-theme/lib 0.11.66 → 0.11.70

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 (25) hide show
  1. package/dist/cjs/analytics/Pixel/hooks/usePixelProductDetails.js +20 -9
  2. package/dist/cjs/analytics/Pixel/hooks/usePixelProductDetails.js.map +1 -1
  3. package/dist/cjs/analytics/Pixel/hooks/usePixelProductsImpression.js +18 -6
  4. package/dist/cjs/analytics/Pixel/hooks/usePixelProductsImpression.js.map +1 -1
  5. package/dist/cjs/analytics/Pixel/usePixel.js +11 -4
  6. package/dist/cjs/analytics/Pixel/usePixel.js.map +1 -1
  7. package/dist/cjs/listing/api/queries/useAggregateQuery.js +11 -3
  8. package/dist/cjs/listing/api/queries/useAggregateQuery.js.map +1 -1
  9. package/dist/cjs/listing/hooks/useListingCategories.js.map +1 -1
  10. package/dist/cjs/listing/hooks/useListingFilters.js.map +1 -1
  11. package/dist/cjs/listing/hooks/useListingSEOCategories.js.map +1 -1
  12. package/dist/esm/analytics/Pixel/hooks/usePixelProductDetails.js +18 -9
  13. package/dist/esm/analytics/Pixel/hooks/usePixelProductDetails.js.map +1 -1
  14. package/dist/esm/analytics/Pixel/hooks/usePixelProductsImpression.js +16 -6
  15. package/dist/esm/analytics/Pixel/hooks/usePixelProductsImpression.js.map +1 -1
  16. package/dist/esm/analytics/Pixel/usePixel.js +9 -3
  17. package/dist/esm/analytics/Pixel/usePixel.js.map +1 -1
  18. package/dist/esm/listing/api/queries/useAggregateQuery.js +2 -0
  19. package/dist/esm/listing/api/queries/useAggregateQuery.js.map +1 -1
  20. package/dist/esm/listing/hooks/useListingCategories.js.map +1 -1
  21. package/dist/esm/listing/hooks/useListingFilters.js.map +1 -1
  22. package/dist/esm/listing/hooks/useListingSEOCategories.js.map +1 -1
  23. package/dist/types/listing/api/queries/useAggregateQuery.d.ts +1 -1
  24. package/dist/types/listing/hooks/useListingFilters.d.ts +1 -1
  25. package/package.json +3 -3
@@ -26,15 +26,26 @@ var usePixelProductDetails = function usePixelProductDetails() {
26
26
 
27
27
  var pixel = (_window = window) == null ? void 0 : _window.pixel;
28
28
 
29
- if (metaData._id && selectedVariant != null && selectedVariant.sku) {
30
- !sentData && (pixel == null ? void 0 : pixel.productDetails({
31
- id: metaData._id,
32
- sku: selectedVariant == null ? void 0 : selectedVariant.sku
33
- }, {
34
- merchantKey: defaultMerchant
35
- }));
36
- setSentData.on();
37
- }
29
+ var sendProductDetails = function sendProductDetails() {
30
+ if (!window.document.title || window.document.title === 'за') {
31
+ setTimeout(function () {
32
+ return sendProductDetails();
33
+ }, 20);
34
+ return;
35
+ }
36
+
37
+ if (metaData._id && selectedVariant != null && selectedVariant.sku && !sentData) {
38
+ pixel == null ? void 0 : pixel.productDetails({
39
+ id: metaData._id,
40
+ sku: selectedVariant == null ? void 0 : selectedVariant.sku
41
+ }, {
42
+ merchantKey: defaultMerchant
43
+ });
44
+ setSentData.on();
45
+ }
46
+ };
47
+
48
+ sendProductDetails();
38
49
  }, [metaData._id, selectedVariant == null ? void 0 : selectedVariant.sku]);
39
50
  };
40
51
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/analytics/Pixel/hooks/usePixelProductDetails.tsx"],"names":["usePixelProductDetails","sentData","setSentData","defaultMerchant","metaData","selectedVariant","React","useEffect","pixel","window","_id","sku","productDetails","id","merchantKey","on"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,IAAMA,sBAAsB,GAAG,SAAzBA,sBAAyB,GAAM;AAAA,oBACV,wBADU;AAAA,MACnCC,QADmC;AAAA,MACzBC,WADyB;;AAAA,wBAEd,4BAFc;AAAA,MAElCC,eAFkC,mBAElCA,eAFkC;;AAAA,yBAGJ,6BAHI;AAAA,MAGlCC,QAHkC,oBAGlCA,QAHkC;AAAA,MAGxBC,eAHwB,oBAGxBA,eAHwB;;AAK1CC,oBAAMC,SAAN,CAAgB,YAAM;AAAA;;AACpB,QAAMC,KAAK,cAAIC,MAAJ,qBAAG,QAAiBD,KAA/B;;AACA,QAAIJ,QAAQ,CAACM,GAAT,IAAgBL,eAAhB,YAAgBA,eAAe,CAAEM,GAArC,EAA0C;AACxC,OAACV,QAAD,KACEO,KADF,oBACEA,KAAK,CAAEI,cAAP,CACE;AACEC,QAAAA,EAAE,EAAET,QAAQ,CAACM,GADf;AAEEC,QAAAA,GAAG,EAAEN,eAAF,oBAAEA,eAAe,CAAEM;AAFxB,OADF,EAKE;AACEG,QAAAA,WAAW,EAAEX;AADf,OALF,CADF;AAUAD,MAAAA,WAAW,CAACa,EAAZ;AACD;AACF,GAfD,EAeG,CAACX,QAAQ,CAACM,GAAV,EAAeL,eAAf,oBAAeA,eAAe,CAAEM,GAAhC,CAfH;AAgBD,CArBM","sourcesContent":["import React from 'react'\nimport { useConfigState, useProductState, useBoolean } from '../../../index'\n\nexport const usePixelProductDetails = () => {\n const [sentData, setSentData] = useBoolean()\n const { defaultMerchant } = useConfigState()\n const { metaData, selectedVariant } = useProductState()\n\n React.useEffect(() => {\n const pixel = (window as any)?.pixel\n if (metaData._id && selectedVariant?.sku) {\n !sentData &&\n pixel?.productDetails(\n {\n id: metaData._id as string,\n sku: selectedVariant?.sku as string,\n },\n {\n merchantKey: defaultMerchant,\n }\n )\n setSentData.on()\n }\n }, [metaData._id, selectedVariant?.sku])\n}\n"],"file":"usePixelProductDetails.js"}
1
+ {"version":3,"sources":["../../../../../src/analytics/Pixel/hooks/usePixelProductDetails.tsx"],"names":["usePixelProductDetails","sentData","setSentData","defaultMerchant","metaData","selectedVariant","React","useEffect","pixel","window","sendProductDetails","document","title","setTimeout","_id","sku","productDetails","id","merchantKey","on"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,IAAMA,sBAAsB,GAAG,SAAzBA,sBAAyB,GAAM;AAAA,oBACV,wBADU;AAAA,MACnCC,QADmC;AAAA,MACzBC,WADyB;;AAAA,wBAEd,4BAFc;AAAA,MAElCC,eAFkC,mBAElCA,eAFkC;;AAAA,yBAGJ,6BAHI;AAAA,MAGlCC,QAHkC,oBAGlCA,QAHkC;AAAA,MAGxBC,eAHwB,oBAGxBA,eAHwB;;AAK1CC,oBAAMC,SAAN,CAAgB,YAAM;AAAA;;AACpB,QAAMC,KAAK,cAAIC,MAAJ,qBAAG,QAAiBD,KAA/B;;AAEA,QAAME,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/B,UAAI,CAACD,MAAM,CAACE,QAAP,CAAgBC,KAAjB,IAA0BH,MAAM,CAACE,QAAP,CAAgBC,KAAhB,KAA0B,IAAxD,EAA8D;AAC5DC,QAAAA,UAAU,CAAC;AAAA,iBAAMH,kBAAkB,EAAxB;AAAA,SAAD,EAA6B,EAA7B,CAAV;AACA;AACD;;AACD,UAAIN,QAAQ,CAACU,GAAT,IAAgBT,eAAhB,YAAgBA,eAAe,CAAEU,GAAjC,IAAwC,CAACd,QAA7C,EAAuD;AACnDO,QAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEQ,cAAP,CACE;AACEC,UAAAA,EAAE,EAAEb,QAAQ,CAACU,GADf;AAEEC,UAAAA,GAAG,EAAEV,eAAF,oBAAEA,eAAe,CAAEU;AAFxB,SADF,EAKE;AACEG,UAAAA,WAAW,EAAEf;AADf,SALF;AASFD,QAAAA,WAAW,CAACiB,EAAZ;AACD;AACF,KAjBD;;AAmBAT,IAAAA,kBAAkB;AACnB,GAvBD,EAuBG,CAACN,QAAQ,CAACU,GAAV,EAAeT,eAAf,oBAAeA,eAAe,CAAEU,GAAhC,CAvBH;AAwBD,CA7BM","sourcesContent":["import React from 'react'\nimport { useConfigState, useProductState, useBoolean } from '../../../index'\n\nexport const usePixelProductDetails = () => {\n const [sentData, setSentData] = useBoolean()\n const { defaultMerchant } = useConfigState()\n const { metaData, selectedVariant } = useProductState()\n\n React.useEffect(() => {\n const pixel = (window as any)?.pixel\n\n const sendProductDetails = () => {\n if (!window.document.title || window.document.title === 'за') {\n setTimeout(() => sendProductDetails(), 20)\n return\n }\n if (metaData._id && selectedVariant?.sku && !sentData) {\n pixel?.productDetails(\n {\n id: metaData._id as string,\n sku: selectedVariant?.sku as string,\n },\n {\n merchantKey: defaultMerchant,\n }\n )\n setSentData.on()\n }\n }\n\n sendProductDetails()\n }, [metaData._id, selectedVariant?.sku])\n}\n"],"file":"usePixelProductDetails.js"}
@@ -38,12 +38,24 @@ var usePixelProductsImpression = function usePixelProductsImpression(_ref) {
38
38
 
39
39
  if (typeof window !== undefined && !((_productsData$product = productsData.products) != null && (_productsData$product2 = _productsData$product[0]) != null && _productsData$product2.isPlaceholder) && (productsData == null ? void 0 : productsData.length) > 0) {
40
40
  var pixel = window.pixel;
41
- pixel == null ? void 0 : pixel.productsImpression(!isCarousel ? [{
42
- listName: _Releva.PageTypeMap[router.route],
43
- products: products
44
- }] : productsData, {
45
- merchantKey: defaultMerchant
46
- });
41
+
42
+ var sendImpressions = function sendImpressions() {
43
+ if (!window.document.title || window.document.title === 'за') {
44
+ setTimeout(function () {
45
+ return sendImpressions();
46
+ }, 20);
47
+ return;
48
+ }
49
+
50
+ pixel == null ? void 0 : pixel.productsImpression(!isCarousel ? [{
51
+ listName: _Releva.PageTypeMap[router.route],
52
+ products: products
53
+ }] : productsData, {
54
+ merchantKey: defaultMerchant
55
+ });
56
+ };
57
+
58
+ sendImpressions();
47
59
  setSentAlready.on();
48
60
  }
49
61
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/analytics/Pixel/hooks/usePixelProductsImpression.tsx"],"names":["usePixelProductsImpression","productsData","isCarousel","sentAlready","setSentAlready","defaultMerchant","router","products","React","useEffect","events","on","window","undefined","isPlaceholder","length","pixel","productsImpression","listName","PageTypeMap","route","merchantKey"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAEO,IAAMA,0BAA0B,GAAG,SAA7BA,0BAA6B,OAMpC;AAAA,MALJC,YAKI,QALJA,YAKI;AAAA,MAJJC,UAII,QAJJA,UAII;;AAAA,oBACkC,uBAAW,KAAX,CADlC;AAAA,MACGC,WADH;AAAA,MACgBC,cADhB;;AAAA,wBAEwB,4BAFxB;AAAA,MAEIC,eAFJ,mBAEIA,eAFJ;;AAGJ,MAAMC,MAAM,GAAG,wBAAf;AAEA,MAAIC,QAAuB,GAAG,EAA9B;;AAEA,MAAI,CAACL,UAAL,EAAiB;AACfK,IAAAA,QAAQ,GAAG,kCAAqBN,YAAY,CAACM,QAAlC,CAAX;AACD;;AAEDC,oBAAMC,SAAN,CAAgB,YAAM;AACpB,QAAIN,WAAJ,EAAiB;AACjBG,IAAAA,MAAM,CAACI,MAAP,CAAcC,EAAd,CAAiB,qBAAjB,EAAwC,YAAM;AAAA;;AAC5C,UACE,OAAOC,MAAP,KAAkBC,SAAlB,IACA,2BAACZ,YAAY,CAACM,QAAd,uCAAC,sBAAwB,CAAxB,CAAD,aAAC,uBAA4BO,aAA7B,CADA,IAEA,CAAAb,YAAY,QAAZ,YAAAA,YAAY,CAAEc,MAAd,IAAuB,CAHzB,EAIE;AACA,YAAMC,KAAK,GAAIJ,MAAD,CAAgBI,KAA9B;AAEAA,QAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEC,kBAAP,CACE,CAACf,UAAD,GACI,CAAC;AAAEgB,UAAAA,QAAQ,EAAEC,oBAAYb,MAAM,CAACc,KAAnB,CAAZ;AAAuCb,UAAAA,QAAQ,EAARA;AAAvC,SAAD,CADJ,GAEIN,YAHN,EAIE;AACEoB,UAAAA,WAAW,EAAEhB;AADf,SAJF;AAQAD,QAAAA,cAAc,CAACO,EAAf;AACD;AACF,KAlBD;AAmBD,GArBD,EAqBG,CAACL,MAAM,CAACc,KAAR,CArBH;AAsBD,CAvCM","sourcesContent":["import React from 'react'\nimport { useRouter } from 'next/router'\nimport { useConfigState, useBoolean } from '../../../index'\nimport { ProductType } from '../types'\nimport { createMappedProducts, PageTypeMap } from '../../Releva'\n\nexport const usePixelProductsImpression = ({\n productsData,\n isCarousel,\n}: {\n productsData: any\n isCarousel?: boolean\n}) => {\n const [sentAlready, setSentAlready] = useBoolean(false)\n const { defaultMerchant } = useConfigState()\n const router = useRouter()\n\n let products: ProductType[] = []\n\n if (!isCarousel) {\n products = createMappedProducts(productsData.products)\n }\n\n React.useEffect(() => {\n if (sentAlready) return\n router.events.on('routeChangeComplete', () => {\n if (\n typeof window !== undefined &&\n !productsData.products?.[0]?.isPlaceholder &&\n productsData?.length > 0\n ) {\n const pixel = (window as any).pixel\n\n pixel?.productsImpression(\n !isCarousel\n ? [{ listName: PageTypeMap[router.route], products }]\n : productsData,\n {\n merchantKey: defaultMerchant,\n }\n )\n setSentAlready.on()\n }\n })\n }, [router.route])\n}\n"],"file":"usePixelProductsImpression.js"}
1
+ {"version":3,"sources":["../../../../../src/analytics/Pixel/hooks/usePixelProductsImpression.tsx"],"names":["usePixelProductsImpression","productsData","isCarousel","sentAlready","setSentAlready","defaultMerchant","router","products","React","useEffect","events","on","window","undefined","isPlaceholder","length","pixel","sendImpressions","document","title","setTimeout","productsImpression","listName","PageTypeMap","route","merchantKey"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAEO,IAAMA,0BAA0B,GAAG,SAA7BA,0BAA6B,OAMpC;AAAA,MALJC,YAKI,QALJA,YAKI;AAAA,MAJJC,UAII,QAJJA,UAII;;AAAA,oBACkC,uBAAW,KAAX,CADlC;AAAA,MACGC,WADH;AAAA,MACgBC,cADhB;;AAAA,wBAEwB,4BAFxB;AAAA,MAEIC,eAFJ,mBAEIA,eAFJ;;AAGJ,MAAMC,MAAM,GAAG,wBAAf;AAEA,MAAIC,QAAuB,GAAG,EAA9B;;AAEA,MAAI,CAACL,UAAL,EAAiB;AACfK,IAAAA,QAAQ,GAAG,kCAAqBN,YAAY,CAACM,QAAlC,CAAX;AACD;;AAEDC,oBAAMC,SAAN,CAAgB,YAAM;AACpB,QAAIN,WAAJ,EAAiB;AAEjBG,IAAAA,MAAM,CAACI,MAAP,CAAcC,EAAd,CAAiB,qBAAjB,EAAwC,YAAM;AAAA;;AAC5C,UACE,OAAOC,MAAP,KAAkBC,SAAlB,IACA,2BAACZ,YAAY,CAACM,QAAd,uCAAC,sBAAwB,CAAxB,CAAD,aAAC,uBAA4BO,aAA7B,CADA,IAEA,CAAAb,YAAY,QAAZ,YAAAA,YAAY,CAAEc,MAAd,IAAuB,CAHzB,EAIE;AACA,YAAMC,KAAK,GAAIJ,MAAD,CAAgBI,KAA9B;;AAEA,YAAMC,eAAe,GAAG,SAAlBA,eAAkB,GAAM;AAC5B,cAAI,CAACL,MAAM,CAACM,QAAP,CAAgBC,KAAjB,IAA0BP,MAAM,CAACM,QAAP,CAAgBC,KAAhB,KAA0B,IAAxD,EAA8D;AAC5DC,YAAAA,UAAU,CAAC;AAAA,qBAAMH,eAAe,EAArB;AAAA,aAAD,EAA0B,EAA1B,CAAV;AACA;AACD;;AACDD,UAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEK,kBAAP,CACE,CAACnB,UAAD,GACI,CAAC;AAAEoB,YAAAA,QAAQ,EAAEC,oBAAYjB,MAAM,CAACkB,KAAnB,CAAZ;AAAuCjB,YAAAA,QAAQ,EAARA;AAAvC,WAAD,CADJ,GAEIN,YAHN,EAIE;AACEwB,YAAAA,WAAW,EAAEpB;AADf,WAJF;AAQD,SAbD;;AAcAY,QAAAA,eAAe;AACfb,QAAAA,cAAc,CAACO,EAAf;AACD;AACF,KAzBD;AA0BD,GA7BD,EA6BG,CAACL,MAAM,CAACkB,KAAR,CA7BH;AA8BD,CA/CM","sourcesContent":["import React from 'react'\nimport { useRouter } from 'next/router'\nimport { useConfigState, useBoolean } from '../../../index'\nimport { ProductType } from '../types'\nimport { createMappedProducts, PageTypeMap } from '../../Releva'\n\nexport const usePixelProductsImpression = ({\n productsData,\n isCarousel,\n}: {\n productsData: any\n isCarousel?: boolean\n}) => {\n const [sentAlready, setSentAlready] = useBoolean(false)\n const { defaultMerchant } = useConfigState()\n const router = useRouter()\n\n let products: ProductType[] = []\n\n if (!isCarousel) {\n products = createMappedProducts(productsData.products)\n }\n\n React.useEffect(() => {\n if (sentAlready) return\n\n router.events.on('routeChangeComplete', () => {\n if (\n typeof window !== undefined &&\n !productsData.products?.[0]?.isPlaceholder &&\n productsData?.length > 0\n ) {\n const pixel = (window as any).pixel\n\n const sendImpressions = () => {\n if (!window.document.title || window.document.title === 'за') {\n setTimeout(() => sendImpressions(), 20)\n return\n }\n pixel?.productsImpression(\n !isCarousel\n ? [{ listName: PageTypeMap[router.route], products }]\n : productsData,\n {\n merchantKey: defaultMerchant,\n }\n )\n }\n sendImpressions()\n setSentAlready.on()\n }\n })\n }, [router.route])\n}\n"],"file":"usePixelProductsImpression.js"}
@@ -11,14 +11,21 @@ var _index = require("../../index");
11
11
 
12
12
  var _utils = require("../Releva/utils");
13
13
 
14
- var _types = require("../Releva/types");
15
-
16
14
  var pixelChangeRoute = function pixelChangeRoute() {
17
15
  if (typeof window !== undefined) {
18
16
  var pixel = window.pixel;
19
- pixel == null ? void 0 : pixel.changeRoute({
17
+ var title = window.document.title;
18
+
19
+ if (!title || title === 'за') {
20
+ setTimeout(function () {
21
+ return pixelChangeRoute();
22
+ }, 20);
23
+ return;
24
+ }
25
+
26
+ return pixel == null ? void 0 : pixel.changeRoute({
20
27
  path: _router["default"].router.asPath,
21
- title: window.document.title || _types.PageTypeMap[_router["default"].router.route] || 'Error',
28
+ title: title || 'Error',
22
29
  location: window.location.href
23
30
  });
24
31
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/analytics/Pixel/usePixel.tsx"],"names":["pixelChangeRoute","window","undefined","pixel","changeRoute","path","Router","router","asPath","title","document","PageTypeMap","route","location","href","usePixel","defaultMerchant","orderId","pixelAddLineItem","product","currencyCode","addLineItem","merchantKey","pixelRemoveLineItem","removeLineItem","pixelCheckoutStep","stepNumber","checkoutStep","pixelCheckoutStepOption","option","checkoutStepOption","pixelPurchase","purchase"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AACA;;AAGO,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAmB,GAAM;AACpC,MAAI,OAAOC,MAAP,KAAkBC,SAAtB,EAAiC;AAC/B,QAAMC,KAAK,GAAIF,MAAD,CAAgBE,KAA9B;AACAA,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEC,WAAP,CAAmB;AACjBC,MAAAA,IAAI,EAAEC,mBAAOC,MAAP,CAAeC,MADJ;AAEjBC,MAAAA,KAAK,EACHR,MAAM,CAACS,QAAP,CAAgBD,KAAhB,IAAyBE,mBAAYL,mBAAOC,MAAP,CAAeK,KAA3B,CAAzB,IAA8D,OAH/C;AAIjBC,MAAAA,QAAQ,EAAEZ,MAAM,CAACY,QAAP,CAAgBC;AAJT,KAAnB;AAMD;AACF,CAVM;;;;AAYA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAM;AAC5B,MAAMZ,KAAK,GAAIF,MAAD,CAAgBE,KAA9B;;AAD4B,wBAEA,4BAFA;AAAA,MAEpBa,eAFoB,mBAEpBA,eAFoB;;AAG5B,MAAMC,OAAO,GAAG,yBAAhB;;AAEA,MAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,OAMnB;AAAA,QALJC,OAKI,QALJA,OAKI;AAAA,QAJJC,YAII,QAJJA,YAII;AACJjB,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEkB,WAAP,CAAmBF,OAAnB,EAA4B;AAC1BC,MAAAA,YAAY,EAAZA,YAD0B;AAE1BE,MAAAA,WAAW,EAAEN;AAFa,KAA5B;AAID,GAXD;;AAaA,MAAMO,mBAAmB,GAAG,SAAtBA,mBAAsB,QAMtB;AAAA,QALJJ,OAKI,SALJA,OAKI;AAAA,QAJJC,YAII,SAJJA,YAII;AACJjB,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEqB,cAAP,CAAsBL,OAAtB,EAA+B;AAC7BC,MAAAA,YAAY,EAAZA,YAD6B;AAE7BE,MAAAA,WAAW,EAAEN;AAFgB,KAA/B;AAID,GAXD;;AAaA,MAAMS,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,UAAD,EAAwB;AAChD,QAAIvB,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAEwB,YAAP,CAAoBV,OAApB,EAA6BS,UAA7B;AACZ,GAFD;;AAIA,MAAME,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACF,UAAD,EAAqBG,MAArB,EAAwC;AACtE,QAAI1B,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAE2B,kBAAP,CAA0Bb,OAA1B,EAAmCS,UAAnC,EAA+CG,MAA/C,EAD2D,CACJ;AACnE,GAFD;;AAIA,MAAME,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B,QAAI5B,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAE6B,QAAP,CAAgBf,OAAhB;AACZ,GAFD;;AAIA,SAAO;AACLC,IAAAA,gBAAgB,EAAhBA,gBADK;AAELK,IAAAA,mBAAmB,EAAnBA,mBAFK;AAGLE,IAAAA,iBAAiB,EAAjBA,iBAHK;AAILG,IAAAA,uBAAuB,EAAvBA,uBAJK;AAKLG,IAAAA,aAAa,EAAbA;AALK,GAAP;AAOD,CAlDM","sourcesContent":["import React from 'react'\nimport Router from 'next/router'\nimport { useConfigState } from '../../index'\nimport { getBasketId } from '../Releva/utils'\nimport { PageTypeMap } from '../Releva/types'\nimport { ProductType } from './types'\n\nexport const pixelChangeRoute = () => {\n if (typeof window !== undefined) {\n const pixel = (window as any).pixel\n pixel?.changeRoute({\n path: Router.router!.asPath,\n title:\n window.document.title || PageTypeMap[Router.router!.route] || 'Error',\n location: window.location.href,\n })\n }\n}\n\nexport const usePixel = () => {\n const pixel = (window as any).pixel\n const { defaultMerchant } = useConfigState()\n const orderId = getBasketId()\n\n const pixelAddLineItem = ({\n product,\n currencyCode,\n }: {\n product: ProductType\n currencyCode: string\n }) => {\n pixel?.addLineItem(product, {\n currencyCode,\n merchantKey: defaultMerchant,\n })\n }\n\n const pixelRemoveLineItem = ({\n product,\n currencyCode,\n }: {\n product: ProductType\n currencyCode: string\n }) => {\n pixel?.removeLineItem(product, {\n currencyCode,\n merchantKey: defaultMerchant,\n })\n }\n\n const pixelCheckoutStep = (stepNumber: number) => {\n if (pixel) pixel?.checkoutStep(orderId, stepNumber)\n }\n\n const pixelCheckoutStepOption = (stepNumber: number, option: string) => {\n if (pixel) pixel?.checkoutStepOption(orderId, stepNumber, option) // order id, stepNumber and the selected shipping or payment option\n }\n\n const pixelPurchase = () => {\n if (pixel) pixel?.purchase(orderId)\n }\n\n return {\n pixelAddLineItem,\n pixelRemoveLineItem,\n pixelCheckoutStep,\n pixelCheckoutStepOption,\n pixelPurchase,\n }\n}\n"],"file":"usePixel.js"}
1
+ {"version":3,"sources":["../../../../src/analytics/Pixel/usePixel.tsx"],"names":["pixelChangeRoute","window","undefined","pixel","title","document","setTimeout","changeRoute","path","Router","router","asPath","location","href","usePixel","defaultMerchant","orderId","pixelAddLineItem","product","currencyCode","addLineItem","merchantKey","pixelRemoveLineItem","removeLineItem","pixelCheckoutStep","stepNumber","checkoutStep","pixelCheckoutStepOption","option","checkoutStepOption","pixelPurchase","purchase"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AAGO,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAmB,GAAY;AAC1C,MAAI,OAAOC,MAAP,KAAkBC,SAAtB,EAAiC;AAC/B,QAAMC,KAAK,GAAIF,MAAD,CAAgBE,KAA9B;AAEA,QAAMC,KAAK,GAAGH,MAAM,CAACI,QAAP,CAAgBD,KAA9B;;AAEA,QAAI,CAACA,KAAD,IAAUA,KAAK,KAAK,IAAxB,EAA8B;AAC5BE,MAAAA,UAAU,CAAC;AAAA,eAAMN,gBAAgB,EAAtB;AAAA,OAAD,EAA2B,EAA3B,CAAV;AACA;AACD;;AAED,WAAOG,KAAP,oBAAOA,KAAK,CAAEI,WAAP,CAAmB;AACxBC,MAAAA,IAAI,EAAEC,mBAAOC,MAAP,CAAeC,MADG;AAExBP,MAAAA,KAAK,EAAEA,KAAK,IAAI,OAFQ;AAGxBQ,MAAAA,QAAQ,EAAEX,MAAM,CAACW,QAAP,CAAgBC;AAHF,KAAnB,CAAP;AAKD;AACF,CAjBM;;;;AAmBA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAM;AAC5B,MAAMX,KAAK,GAAIF,MAAD,CAAgBE,KAA9B;;AAD4B,wBAEA,4BAFA;AAAA,MAEpBY,eAFoB,mBAEpBA,eAFoB;;AAG5B,MAAMC,OAAO,GAAG,yBAAhB;;AAEA,MAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,OAMnB;AAAA,QALJC,OAKI,QALJA,OAKI;AAAA,QAJJC,YAII,QAJJA,YAII;AACJhB,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEiB,WAAP,CAAmBF,OAAnB,EAA4B;AAC1BC,MAAAA,YAAY,EAAZA,YAD0B;AAE1BE,MAAAA,WAAW,EAAEN;AAFa,KAA5B;AAID,GAXD;;AAaA,MAAMO,mBAAmB,GAAG,SAAtBA,mBAAsB,QAMtB;AAAA,QALJJ,OAKI,SALJA,OAKI;AAAA,QAJJC,YAII,SAJJA,YAII;AACJhB,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEoB,cAAP,CAAsBL,OAAtB,EAA+B;AAC7BC,MAAAA,YAAY,EAAZA,YAD6B;AAE7BE,MAAAA,WAAW,EAAEN;AAFgB,KAA/B;AAID,GAXD;;AAaA,MAAMS,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,UAAD,EAAwB;AAChD,QAAItB,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAEuB,YAAP,CAAoBV,OAApB,EAA6BS,UAA7B;AACZ,GAFD;;AAIA,MAAME,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACF,UAAD,EAAqBG,MAArB,EAAwC;AACtE,QAAIzB,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAE0B,kBAAP,CAA0Bb,OAA1B,EAAmCS,UAAnC,EAA+CG,MAA/C,EAD2D,CACJ;AACnE,GAFD;;AAIA,MAAME,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B,QAAI3B,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAE4B,QAAP,CAAgBf,OAAhB;AACZ,GAFD;;AAIA,SAAO;AACLC,IAAAA,gBAAgB,EAAhBA,gBADK;AAELK,IAAAA,mBAAmB,EAAnBA,mBAFK;AAGLE,IAAAA,iBAAiB,EAAjBA,iBAHK;AAILG,IAAAA,uBAAuB,EAAvBA,uBAJK;AAKLG,IAAAA,aAAa,EAAbA;AALK,GAAP;AAOD,CAlDM","sourcesContent":["import React from 'react'\nimport Router from 'next/router'\nimport { useConfigState } from '../../index'\nimport { getBasketId } from '../Releva/utils'\nimport { ProductType } from './types'\n\nexport const pixelChangeRoute = (): void => {\n if (typeof window !== undefined) {\n const pixel = (window as any).pixel\n\n const title = window.document.title\n\n if (!title || title === 'за') {\n setTimeout(() => pixelChangeRoute(), 20)\n return\n }\n\n return pixel?.changeRoute({\n path: Router.router!.asPath,\n title: title || 'Error',\n location: window.location.href,\n })\n }\n}\n\nexport const usePixel = () => {\n const pixel = (window as any).pixel\n const { defaultMerchant } = useConfigState()\n const orderId = getBasketId()\n\n const pixelAddLineItem = ({\n product,\n currencyCode,\n }: {\n product: ProductType\n currencyCode: string\n }) => {\n pixel?.addLineItem(product, {\n currencyCode,\n merchantKey: defaultMerchant,\n })\n }\n\n const pixelRemoveLineItem = ({\n product,\n currencyCode,\n }: {\n product: ProductType\n currencyCode: string\n }) => {\n pixel?.removeLineItem(product, {\n currencyCode,\n merchantKey: defaultMerchant,\n })\n }\n\n const pixelCheckoutStep = (stepNumber: number) => {\n if (pixel) pixel?.checkoutStep(orderId, stepNumber)\n }\n\n const pixelCheckoutStepOption = (stepNumber: number, option: string) => {\n if (pixel) pixel?.checkoutStepOption(orderId, stepNumber, option) // order id, stepNumber and the selected shipping or payment option\n }\n\n const pixelPurchase = () => {\n if (pixel) pixel?.purchase(orderId)\n }\n\n return {\n pixelAddLineItem,\n pixelRemoveLineItem,\n pixelCheckoutStep,\n pixelCheckoutStepOption,\n pixelPurchase,\n }\n}\n"],"file":"usePixel.js"}
@@ -57,6 +57,14 @@ var useAggregateQuery = function useAggregateQuery(aggregates, request) {
57
57
  while (1) {
58
58
  switch (_context.prev = _context.next) {
59
59
  case 0:
60
+ if (aggregates[0]) {
61
+ _context.next = 2;
62
+ break;
63
+ }
64
+
65
+ return _context.abrupt("return");
66
+
67
+ case 2:
60
68
  query = prepareAggregateQuery({
61
69
  request: request,
62
70
  aggregates: aggregates,
@@ -66,14 +74,14 @@ var useAggregateQuery = function useAggregateQuery(aggregates, request) {
66
74
  slug: slug,
67
75
  filterExtension: config.filterExtension
68
76
  });
69
- _context.next = 3;
77
+ _context.next = 5;
70
78
  return (0, _sdk.CatalogAggregate)(query);
71
79
 
72
- case 3:
80
+ case 5:
73
81
  response = _context.sent;
74
82
  return _context.abrupt("return", response);
75
83
 
76
- case 5:
84
+ case 7:
77
85
  case "end":
78
86
  return _context.stop();
79
87
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/listing/api/queries/useAggregateQuery.ts"],"names":["AggregateRequestEnum","useAggregateQuery","aggregates","request","router","slug","predicate","data","config","postFilter","getPostFilters","aggregateKeys","generateAggregateKey","predicateId","_id","queryKeys","toString","query","prepareAggregateQuery","filterExtension","response","refetchOnMount","refetchOnWindowFocus","enabled","isQueryEnabled","keepPreviousData","staleTime","pageType","Categories","type","aggregationType","term","aggregationDefinition","aggValue","filter","ListingTypesEnum","Brand","applyBrandsPostFilter","cat","applyAttributePageFilter","Category","Filters","filters","queryType","Search","val","View","aggregatesMap","reduce","map","agg","aggregateType","aggregationTerm","aggregate","join","Array","isArray","hasCategory","includes","filtersArr","split","res","i"],"mappings":"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","sourcesContent":["import { useQuery } from 'react-query'\nimport {\n CatalogAggregate,\n RangeAggregationResult,\n TermAggregationResult,\n RangeAggregation,\n TermAggregation,\n StatAggregation,\n} from '@sentecacommerce/sdk'\nimport { NextRouter, useRouter } from 'next/router'\nimport { usePredicate, PredicateType } from './usePredicate'\nimport { useListingConfig, useListingSlug } from '../../hooks'\nimport { ListingTypesEnum } from '../../types'\nimport { extendFilter, getListingPageType } from '../../utils'\nimport { Aggregate } from '../../types'\nimport { getAttributePageType } from '../../hooks/utils'\nimport { canUseDOM } from '../../../utils'\n\nexport type AggregationResultType = RangeAggregationResult &\n TermAggregationResult &\n RangeAggregationResult\n\nexport type AggregateType = TermAggregation & StatAggregation & RangeAggregation\n\nexport enum AggregateRequestEnum {\n Filters = 'filters',\n Categories = 'categories',\n}\n\nexport const useAggregateQuery = (\n aggregates: Aggregate[],\n request: AggregateRequestEnum\n) => {\n const router = useRouter()\n const slug = useListingSlug()\n const { data: predicate } = usePredicate()\n const config = useListingConfig()\n const postFilter = getPostFilters(router)\n const aggregateKeys = generateAggregateKey(aggregates)\n const predicateId = predicate?._id\n\n const queryKeys = [request.toString(), aggregateKeys, slug, postFilter]\n\n return useQuery(\n queryKeys,\n async () => {\n const query = prepareAggregateQuery({\n request,\n aggregates,\n predicate,\n router,\n postFilter,\n slug,\n filterExtension: config.filterExtension,\n })\n\n const response = await CatalogAggregate(query)\n\n return response\n },\n {\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n enabled: isQueryEnabled(router, predicateId),\n keepPreviousData: true,\n staleTime: 30000,\n }\n )\n}\n\nexport function prepareAggregateQuery({\n request,\n predicate,\n aggregates,\n router,\n postFilter,\n slug,\n filterExtension,\n}: {\n request: AggregateRequestEnum\n aggregates: Aggregate[]\n router: NextRouter\n postFilter: string | undefined\n predicate?: PredicateType\n filterExtension?: string\n slug: string\n}) {\n const pageType = getListingPageType(router)\n\n switch (request) {\n case AggregateRequestEnum.Categories: {\n const type = aggregates[0]?.aggregationType\n const term = aggregates?.[0].aggregationDefinition\n const aggValue =\n predicate?._id && term !== 'categories'\n ? `${term}:${predicate?._id}`\n : term\n\n return {\n [type]: aggValue,\n ...(filterExtension && {\n filter: filterExtension + `${postFilter ?? ''}`,\n }),\n ...(pageType === ListingTypesEnum.Brand && {\n filter: `brand;eq;\"${predicate?._id}\"${applyBrandsPostFilter({\n postFilter,\n })}`,\n }),\n ...(pageType === ListingTypesEnum.Brand &&\n router.query.cat && {\n filter:\n `brand;eq;\"${predicate?._id}\"` +\n `${applyBrandsPostFilter({\n postFilter,\n })}&` +\n applyAttributePageFilter(router),\n }),\n ...(pageType === ListingTypesEnum.Category &&\n (router.query.cat\n ? {\n filter:\n extendFilter(\n applyAttributePageFilter(router),\n filterExtension\n ) + `${postFilter ? '&' + postFilter : ''}`,\n }\n : {\n filter: `${postFilter ?? ''}`,\n })),\n // ...(router.query.cat && {\n // filter: extendFilter(\n // applyAttributePageFilter(router),\n // filterExtension\n // ),\n // }),\n // Using this to conditionally apply the postFilter\n // as it will fail if you do postFilter=undefined\n } as any\n }\n case AggregateRequestEnum.Filters: {\n const query = predicate?.filters || predicate?._id || slug\n\n const queryType = pageType === ListingTypesEnum.Search ? 'text' : pageType\n\n let filter = `${queryType};eq;\"${query}\"`\n if (router.query.cat) {\n const [type, val] = getAttributePageType(router)\n filter += `&attr.${type};eq;${val}`\n }\n if (pageType === ListingTypesEnum.View) {\n filter = query\n }\n\n const aggregatesMap = aggregates?.reduce((map, agg) => {\n const aggregateType = agg.aggregationType\n const aggregationTerm = agg.aggregationDefinition\n if (map[aggregateType]) {\n return {\n ...map,\n [aggregateType]: `${map[aggregateType]}&${aggregationTerm}`,\n }\n }\n\n return {\n ...map,\n [aggregateType]: `${aggregationTerm}`,\n }\n }, {})\n\n return {\n ...aggregatesMap,\n filter: extendFilter(filter, filterExtension),\n ...(router.query?.filter && { postFilter }),\n // Using this to conditionally apply the postFilter\n // as it will fail if you do postFilter=undefined\n } as any\n }\n }\n}\n\nexport function generateAggregateKey(aggregates?: Aggregate[]) {\n return aggregates\n ?.map((aggregate) => aggregate?.aggregationDefinition)\n ?.join('&')\n}\n\nfunction getPostFilters(router: NextRouter) {\n const { query } = router\n return query && Array.isArray(query.filter)\n ? query?.filter?.join('&')\n : (query?.filter as string)\n}\n\nfunction isQueryEnabled(router: NextRouter, predicate?: string) {\n const pageType = getListingPageType(router)\n\n if (pageType === ListingTypesEnum.Search) {\n return canUseDOM()\n }\n\n return !!predicate && canUseDOM()\n}\n\nfunction applyAttributePageFilter(router: NextRouter) {\n const [type, val] = getAttributePageType(router)\n return `attr.${type};eq;${val}`\n}\n\nconst applyBrandsPostFilter = ({ postFilter }: { postFilter?: string }) => {\n if (postFilter) {\n const hasCategory = postFilter.includes('category')\n const filtersArr = postFilter.split('&')\n\n const filters = filtersArr.reduce((res, val, i) => {\n if (val.includes('category')) return res\n\n if (i === 0 && hasCategory) {\n return (res += `${val}`)\n } else {\n return (res += `&${val}`)\n }\n }, '')\n\n return `${filters}`\n }\n\n return ''\n}\n"],"file":"useAggregateQuery.js"}
1
+ {"version":3,"sources":["../../../../../src/listing/api/queries/useAggregateQuery.ts"],"names":["AggregateRequestEnum","useAggregateQuery","aggregates","request","router","slug","predicate","data","config","postFilter","getPostFilters","aggregateKeys","generateAggregateKey","predicateId","_id","queryKeys","toString","query","prepareAggregateQuery","filterExtension","response","refetchOnMount","refetchOnWindowFocus","enabled","isQueryEnabled","keepPreviousData","staleTime","pageType","Categories","type","aggregationType","term","aggregationDefinition","aggValue","filter","ListingTypesEnum","Brand","applyBrandsPostFilter","cat","applyAttributePageFilter","Category","Filters","filters","queryType","Search","val","View","aggregatesMap","reduce","map","agg","aggregateType","aggregationTerm","aggregate","join","Array","isArray","hasCategory","includes","filtersArr","split","res","i"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AAQA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;IAQYA,oB;;;WAAAA,oB;AAAAA,EAAAA,oB;AAAAA,EAAAA,oB;GAAAA,oB,oCAAAA,oB;;AAKL,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAC/BC,UAD+B,EAE/BC,OAF+B,EAG5B;AACH,MAAMC,MAAM,GAAG,wBAAf;AACA,MAAMC,IAAI,GAAG,4BAAb;;AAFG,sBAGyB,kCAHzB;AAAA,MAGWC,SAHX,iBAGKC,IAHL;;AAIH,MAAMC,MAAM,GAAG,8BAAf;AACA,MAAMC,UAAU,GAAGC,cAAc,CAACN,MAAD,CAAjC;AACA,MAAMO,aAAa,GAAGC,oBAAoB,CAACV,UAAD,CAA1C;AACA,MAAMW,WAAW,GAAGP,SAAH,oBAAGA,SAAS,CAAEQ,GAA/B;AAEA,MAAMC,SAAS,GAAG,CAACZ,OAAO,CAACa,QAAR,EAAD,EAAqBL,aAArB,EAAoCN,IAApC,EAA0CI,UAA1C,CAAlB;AAEA,SAAO,0BACLM,SADK,6FAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAEOb,UAAU,CAAC,CAAD,CAFjB;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAIQe,YAAAA,KAJR,GAIgBC,qBAAqB,CAAC;AAClCf,cAAAA,OAAO,EAAPA,OADkC;AAElCD,cAAAA,UAAU,EAAVA,UAFkC;AAGlCI,cAAAA,SAAS,EAATA,SAHkC;AAIlCF,cAAAA,MAAM,EAANA,MAJkC;AAKlCK,cAAAA,UAAU,EAAVA,UALkC;AAMlCJ,cAAAA,IAAI,EAAJA,IANkC;AAOlCc,cAAAA,eAAe,EAAEX,MAAM,CAACW;AAPU,aAAD,CAJrC;AAAA;AAAA,mBAcyB,2BAAiBF,KAAjB,CAdzB;;AAAA;AAcQG,YAAAA,QAdR;AAAA,6CAgBSA,QAhBT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAFK,IAoBL;AACEC,IAAAA,cAAc,EAAE,KADlB;AAEEC,IAAAA,oBAAoB,EAAE,KAFxB;AAGEC,IAAAA,OAAO,EAAEC,cAAc,CAACpB,MAAD,EAASS,WAAT,CAHzB;AAIEY,IAAAA,gBAAgB,EAAE,IAJpB;AAKEC,IAAAA,SAAS,EAAE;AALb,GApBK,CAAP;AA4BD,CA1CM;;;;AA4CA,SAASR,qBAAT,QAgBJ;AAAA,MAfDf,OAeC,SAfDA,OAeC;AAAA,MAdDG,SAcC,SAdDA,SAcC;AAAA,MAbDJ,UAaC,SAbDA,UAaC;AAAA,MAZDE,MAYC,SAZDA,MAYC;AAAA,MAXDK,UAWC,SAXDA,UAWC;AAAA,MAVDJ,IAUC,SAVDA,IAUC;AAAA,MATDc,eASC,SATDA,eASC;AACD,MAAMQ,QAAQ,GAAG,+BAAmBvB,MAAnB,CAAjB;;AAEA,UAAQD,OAAR;AACE,SAAKH,oBAAoB,CAAC4B,UAA1B;AAAsC;AAAA;;AACpC,YAAMC,IAAI,mBAAG3B,UAAU,CAAC,CAAD,CAAb,qBAAG,aAAe4B,eAA5B;AACA,YAAMC,IAAI,GAAG7B,UAAH,oBAAGA,UAAU,CAAG,CAAH,CAAV,CAAgB8B,qBAA7B;AACA,YAAMC,QAAQ,GACZ3B,SAAS,QAAT,IAAAA,SAAS,CAAEQ,GAAX,IAAkBiB,IAAI,KAAK,YAA3B,GACOA,IADP,UACezB,SADf,oBACeA,SAAS,CAAEQ,GAD1B,IAEIiB,IAHN;AAKA,oEACGF,IADH,IACUI,QADV,cAEMd,eAAe,IAAI;AACrBe,UAAAA,MAAM,EAAEf,eAAe,UAAMV,UAAN,WAAMA,UAAN,GAAoB,EAApB;AADF,SAFzB,EAKMkB,QAAQ,KAAKQ,wBAAiBC,KAA9B,IAAuC;AACzCF,UAAAA,MAAM,mBAAe5B,SAAf,oBAAeA,SAAS,CAAEQ,GAA1B,WAAiCuB,qBAAqB,CAAC;AAC3D5B,YAAAA,UAAU,EAAVA;AAD2D,WAAD;AADnB,SAL7C,EAUMkB,QAAQ,KAAKQ,wBAAiBC,KAA9B,IACFhC,MAAM,CAACa,KAAP,CAAaqB,GADX,IACkB;AAClBJ,UAAAA,MAAM,EACJ,iBAAa5B,SAAb,oBAAaA,SAAS,CAAEQ,GAAxB,YACGuB,qBAAqB,CAAC;AACvB5B,YAAAA,UAAU,EAAVA;AADuB,WAAD,CADxB,UAIA8B,wBAAwB,CAACnC,MAAD;AANR,SAXxB,EAmBMuB,QAAQ,KAAKQ,wBAAiBK,QAA9B,KACDpC,MAAM,CAACa,KAAP,CAAaqB,GAAb,GACG;AACEJ,UAAAA,MAAM,EACJ,yBACEK,wBAAwB,CAACnC,MAAD,CAD1B,EAEEe,eAFF,WAGOV,UAAU,GAAG,MAAMA,UAAT,GAAsB,EAHvC;AAFJ,SADH,GAQG;AACEyB,UAAAA,MAAM,QAAKzB,UAAL,WAAKA,UAAL,GAAmB,EAAnB;AADR,SATF,CAnBN;AAwCD;;AACD,SAAKT,oBAAoB,CAACyC,OAA1B;AAAmC;AAAA;;AACjC,YAAMxB,KAAK,GAAG,CAAAX,SAAS,QAAT,YAAAA,SAAS,CAAEoC,OAAX,MAAsBpC,SAAtB,oBAAsBA,SAAS,CAAEQ,GAAjC,KAAwCT,IAAtD;AAEA,YAAMsC,SAAS,GAAGhB,QAAQ,KAAKQ,wBAAiBS,MAA9B,GAAuC,MAAvC,GAAgDjB,QAAlE;AAEA,YAAIO,MAAM,GAAMS,SAAN,cAAuB1B,KAAvB,OAAV;;AACA,YAAIb,MAAM,CAACa,KAAP,CAAaqB,GAAjB,EAAsB;AAAA,sCACA,kCAAqBlC,MAArB,CADA;AAAA,cACbyB,KADa;AAAA,cACPgB,GADO;;AAEpBX,UAAAA,MAAM,eAAaL,KAAb,YAAwBgB,GAA9B;AACD;;AACD,YAAIlB,QAAQ,KAAKQ,wBAAiBW,IAAlC,EAAwC;AACtCZ,UAAAA,MAAM,GAAGjB,KAAT;AACD;;AAED,YAAM8B,aAAa,GAAG7C,UAAH,oBAAGA,UAAU,CAAE8C,MAAZ,CAAmB,UAACC,GAAD,EAAMC,GAAN,EAAc;AAAA;;AACrD,cAAMC,aAAa,GAAGD,GAAG,CAACpB,eAA1B;AACA,cAAMsB,eAAe,GAAGF,GAAG,CAAClB,qBAA5B;;AACA,cAAIiB,GAAG,CAACE,aAAD,CAAP,EAAwB;AAAA;;AACtB,iDACKF,GADL,6BAEGE,aAFH,IAEsBF,GAAG,CAACE,aAAD,CAFzB,SAE4CC,eAF5C;AAID;;AAED,+CACKH,GADL,6BAEGE,aAFH,SAEsBC,eAFtB;AAID,SAdqB,EAcnB,EAdmB,CAAtB;AAgBA,6CACKL,aADL;AAEEb,UAAAA,MAAM,EAAE,yBAAaA,MAAb,EAAqBf,eAArB;AAFV,WAGM,kBAAAf,MAAM,CAACa,KAAP,mCAAciB,MAAd,KAAwB;AAAEzB,UAAAA,UAAU,EAAVA;AAAF,SAH9B;AAOD;AAvFH;AAyFD;;AAEM,SAASG,oBAAT,CAA8BV,UAA9B,EAAwD;AAAA;;AAC7D,SAAOA,UAAP,uCAAOA,UAAU,CACb+C,GADG,CACC,UAACI,SAAD;AAAA,WAAeA,SAAf,oBAAeA,SAAS,CAAErB,qBAA1B;AAAA,GADD,CAAP,qBAAO,gBAEHsB,IAFG,CAEE,GAFF,CAAP;AAGD;;AAED,SAAS5C,cAAT,CAAwBN,MAAxB,EAA4C;AAAA;;AAAA,MAClCa,KADkC,GACxBb,MADwB,CAClCa,KADkC;AAE1C,SAAOA,KAAK,IAAIsC,KAAK,CAACC,OAAN,CAAcvC,KAAK,CAACiB,MAApB,CAAT,GACHjB,KADG,qCACHA,KAAK,CAAEiB,MADJ,qBACH,cAAeoB,IAAf,CAAoB,GAApB,CADG,GAEFrC,KAFE,oBAEFA,KAAK,CAAEiB,MAFZ;AAGD;;AAED,SAASV,cAAT,CAAwBpB,MAAxB,EAA4CE,SAA5C,EAAgE;AAC9D,MAAMqB,QAAQ,GAAG,+BAAmBvB,MAAnB,CAAjB;;AAEA,MAAIuB,QAAQ,KAAKQ,wBAAiBS,MAAlC,EAA0C;AACxC,WAAO,wBAAP;AACD;;AAED,SAAO,CAAC,CAACtC,SAAF,IAAe,wBAAtB;AACD;;AAED,SAASiC,wBAAT,CAAkCnC,MAAlC,EAAsD;AAAA,+BAChC,kCAAqBA,MAArB,CADgC;AAAA,MAC7CyB,IAD6C;AAAA,MACvCgB,GADuC;;AAEpD,mBAAehB,IAAf,YAA0BgB,GAA1B;AACD;;AAED,IAAMR,qBAAqB,GAAG,SAAxBA,qBAAwB,QAA6C;AAAA,MAA1C5B,UAA0C,SAA1CA,UAA0C;;AACzE,MAAIA,UAAJ,EAAgB;AACd,QAAMgD,WAAW,GAAGhD,UAAU,CAACiD,QAAX,CAAoB,UAApB,CAApB;AACA,QAAMC,UAAU,GAAGlD,UAAU,CAACmD,KAAX,CAAiB,GAAjB,CAAnB;AAEA,QAAMlB,OAAO,GAAGiB,UAAU,CAACX,MAAX,CAAkB,UAACa,GAAD,EAAMhB,GAAN,EAAWiB,CAAX,EAAiB;AACjD,UAAIjB,GAAG,CAACa,QAAJ,CAAa,UAAb,CAAJ,EAA8B,OAAOG,GAAP;;AAE9B,UAAIC,CAAC,KAAK,CAAN,IAAWL,WAAf,EAA4B;AAC1B,eAAQI,GAAG,SAAOhB,GAAlB;AACD,OAFD,MAEO;AACL,eAAQgB,GAAG,UAAQhB,GAAnB;AACD;AACF,KARe,EAQb,EARa,CAAhB;AAUA,gBAAUH,OAAV;AACD;;AAED,SAAO,EAAP;AACD,CAnBD","sourcesContent":["import { useQuery } from 'react-query'\nimport {\n CatalogAggregate,\n RangeAggregationResult,\n TermAggregationResult,\n RangeAggregation,\n TermAggregation,\n StatAggregation,\n} from '@sentecacommerce/sdk'\nimport { NextRouter, useRouter } from 'next/router'\nimport { usePredicate, PredicateType } from './usePredicate'\nimport { useListingConfig, useListingSlug } from '../../hooks'\nimport { ListingTypesEnum } from '../../types'\nimport { extendFilter, getListingPageType } from '../../utils'\nimport { Aggregate } from '../../types'\nimport { getAttributePageType } from '../../hooks/utils'\nimport { canUseDOM } from '../../../utils'\n\nexport type AggregationResultType = RangeAggregationResult &\n TermAggregationResult &\n RangeAggregationResult\n\nexport type AggregateType = TermAggregation & StatAggregation & RangeAggregation\n\nexport enum AggregateRequestEnum {\n Filters = 'filters',\n Categories = 'categories',\n}\n\nexport const useAggregateQuery = (\n aggregates: Aggregate[],\n request: AggregateRequestEnum\n) => {\n const router = useRouter()\n const slug = useListingSlug()\n const { data: predicate } = usePredicate()\n const config = useListingConfig()\n const postFilter = getPostFilters(router)\n const aggregateKeys = generateAggregateKey(aggregates)\n const predicateId = predicate?._id\n\n const queryKeys = [request.toString(), aggregateKeys, slug, postFilter]\n\n return useQuery(\n queryKeys,\n async () => {\n // prevents an error in the case where a value of undefined is passed before hydration\n if (!aggregates[0]) return\n\n const query = prepareAggregateQuery({\n request,\n aggregates,\n predicate,\n router,\n postFilter,\n slug,\n filterExtension: config.filterExtension,\n })\n\n const response = await CatalogAggregate(query)\n\n return response\n },\n {\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n enabled: isQueryEnabled(router, predicateId),\n keepPreviousData: true,\n staleTime: 30000,\n }\n )\n}\n\nexport function prepareAggregateQuery({\n request,\n predicate,\n aggregates,\n router,\n postFilter,\n slug,\n filterExtension,\n}: {\n request: AggregateRequestEnum\n aggregates: Aggregate[]\n router: NextRouter\n postFilter: string | undefined\n predicate?: PredicateType\n filterExtension?: string\n slug: string\n}) {\n const pageType = getListingPageType(router)\n\n switch (request) {\n case AggregateRequestEnum.Categories: {\n const type = aggregates[0]?.aggregationType\n const term = aggregates?.[0].aggregationDefinition\n const aggValue =\n predicate?._id && term !== 'categories'\n ? `${term}:${predicate?._id}`\n : term\n\n return {\n [type]: aggValue,\n ...(filterExtension && {\n filter: filterExtension + `${postFilter ?? ''}`,\n }),\n ...(pageType === ListingTypesEnum.Brand && {\n filter: `brand;eq;\"${predicate?._id}\"${applyBrandsPostFilter({\n postFilter,\n })}`,\n }),\n ...(pageType === ListingTypesEnum.Brand &&\n router.query.cat && {\n filter:\n `brand;eq;\"${predicate?._id}\"` +\n `${applyBrandsPostFilter({\n postFilter,\n })}&` +\n applyAttributePageFilter(router),\n }),\n ...(pageType === ListingTypesEnum.Category &&\n (router.query.cat\n ? {\n filter:\n extendFilter(\n applyAttributePageFilter(router),\n filterExtension\n ) + `${postFilter ? '&' + postFilter : ''}`,\n }\n : {\n filter: `${postFilter ?? ''}`,\n })),\n // ...(router.query.cat && {\n // filter: extendFilter(\n // applyAttributePageFilter(router),\n // filterExtension\n // ),\n // }),\n // Using this to conditionally apply the postFilter\n // as it will fail if you do postFilter=undefined\n } as any\n }\n case AggregateRequestEnum.Filters: {\n const query = predicate?.filters || predicate?._id || slug\n\n const queryType = pageType === ListingTypesEnum.Search ? 'text' : pageType\n\n let filter = `${queryType};eq;\"${query}\"`\n if (router.query.cat) {\n const [type, val] = getAttributePageType(router)\n filter += `&attr.${type};eq;${val}`\n }\n if (pageType === ListingTypesEnum.View) {\n filter = query\n }\n\n const aggregatesMap = aggregates?.reduce((map, agg) => {\n const aggregateType = agg.aggregationType\n const aggregationTerm = agg.aggregationDefinition\n if (map[aggregateType]) {\n return {\n ...map,\n [aggregateType]: `${map[aggregateType]}&${aggregationTerm}`,\n }\n }\n\n return {\n ...map,\n [aggregateType]: `${aggregationTerm}`,\n }\n }, {})\n\n return {\n ...aggregatesMap,\n filter: extendFilter(filter, filterExtension),\n ...(router.query?.filter && { postFilter }),\n // Using this to conditionally apply the postFilter\n // as it will fail if you do postFilter=undefined\n } as any\n }\n }\n}\n\nexport function generateAggregateKey(aggregates?: Aggregate[]) {\n return aggregates\n ?.map((aggregate) => aggregate?.aggregationDefinition)\n ?.join('&')\n}\n\nfunction getPostFilters(router: NextRouter) {\n const { query } = router\n return query && Array.isArray(query.filter)\n ? query?.filter?.join('&')\n : (query?.filter as string)\n}\n\nfunction isQueryEnabled(router: NextRouter, predicate?: string) {\n const pageType = getListingPageType(router)\n\n if (pageType === ListingTypesEnum.Search) {\n return canUseDOM()\n }\n\n return !!predicate && canUseDOM()\n}\n\nfunction applyAttributePageFilter(router: NextRouter) {\n const [type, val] = getAttributePageType(router)\n return `attr.${type};eq;${val}`\n}\n\nconst applyBrandsPostFilter = ({ postFilter }: { postFilter?: string }) => {\n if (postFilter) {\n const hasCategory = postFilter.includes('category')\n const filtersArr = postFilter.split('&')\n\n const filters = filtersArr.reduce((res, val, i) => {\n if (val.includes('category')) return res\n\n if (i === 0 && hasCategory) {\n return (res += `${val}`)\n } else {\n return (res += `&${val}`)\n }\n }, '')\n\n return `${filters}`\n }\n\n return ''\n}\n"],"file":"useAggregateQuery.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/listing/hooks/useListingCategories.tsx"],"names":["ListingCategoriesStateContext","React","createContext","undefined","ListingCategoriesProvider","children","router","categoryTreeConfig","AggregateRequestEnum","Categories","aggData","data","isLoading","currentCategory","generateCurrentUrl","type","term","useMemo","response","nodes","map","current","buildNodes","categoryTree","buildCategories","useListingCategories","context","useContext","Error","generateUrl","suffix","typeToSuffix","pageType","res","ListingTypesEnum","Brand","query","slug","cat","Category","meta","View","Search","filter","Array","isArray","idx","findIndex","x","includes","key","join","parentId","name","url","categories","node","roots","i","length","hasOwnProperty","selectedNode","push"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { NextRouter, useRouter } from 'next/router'\n\nimport { useListingConfig } from './useListingConfig'\nimport { getTranslatableField, typeToSuffix } from '../../utils'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregationResultType,\n} from '../api'\n\nimport { processCategoriesResponse, getAggregateTypeAndTerm } from './utils'\nimport { Aggregate, ListingTypesEnum } from '../types'\nimport { getListingPageType, getPostFilters } from '../utils'\n\nexport type Node = {\n children?: Node[]\n key: string\n parentId: string\n name: string\n url: string\n}\n\nexport type UseListingCategoriesResult = {\n data: Node[] | null\n isLoading: boolean\n currentCategory: string\n}\n\nconst ListingCategoriesStateContext = React.createContext<\n UseListingCategoriesResult | undefined\n>(undefined)\n\nexport function ListingCategoriesProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const router = useRouter()\n const { categoryTreeConfig } = useListingConfig()\n const { data: aggData, isLoading } = useAggregateQuery(\n [categoryTreeConfig as Aggregate],\n AggregateRequestEnum.Categories\n )\n const currentCategory = generateCurrentUrl(router)\n const { type, term } = getAggregateTypeAndTerm(categoryTreeConfig)\n\n const data = React.useMemo(() => {\n if (aggData) {\n const response = processCategoriesResponse(aggData, type, term)\n\n const nodes = response.map((current) => buildNodes(current, router))\n\n const categoryTree = buildCategories(nodes)\n\n return categoryTree\n }\n return null\n }, [aggData, router])\n\n return (\n <ListingCategoriesStateContext.Provider\n value={{ data, isLoading, currentCategory }}\n >\n {children}\n </ListingCategoriesStateContext.Provider>\n )\n}\n\nexport const useListingCategories = () => {\n const context = React.useContext(ListingCategoriesStateContext)\n if (context === undefined) {\n throw new Error(\n 'useListingFilters must be used within a ListingFiltersProvider'\n )\n }\n return context\n}\n\nfunction generateUrl(current: AggregationResultType, router: NextRouter) {\n const suffix = typeToSuffix[getListingPageType(router)]\n const pageType = getListingPageType(router)\n let res\n\n if (pageType === ListingTypesEnum.Brand) {\n res = `/${router.query.slug}/${suffix}`\n if (router.query.cat) {\n res = `/${router.query.slug}/${router.query.cat}/${suffix}`\n }\n }\n if (pageType === ListingTypesEnum.Category) {\n res = `/${getTranslatableField(current.meta.slug)}/${suffix}`\n if (router.query.cat) {\n res = `/${router.query.slug}/${getTranslatableField(\n current.meta.slug\n )}/${suffix}`\n }\n }\n if (pageType === ListingTypesEnum.View) {\n res = `/${router.query.slug}/${getTranslatableField(\n current.meta.slug\n )}/${suffix}`\n }\n\n if (pageType === ListingTypesEnum.Search) {\n res = `/${getTranslatableField(current.meta.slug)}/c`\n }\n\n let filter = router.query.filter as any\n\n if (suffix === 'b') {\n if (filter) {\n if (Array.isArray(filter)) {\n filter = [...filter]\n const idx = filter.findIndex((x: any) => x.includes('category'))\n filter[idx] = `category;eq;\"${current.key}\"`\n } else {\n if (filter.includes('category')) {\n filter = `category;eq;\"${current.key}\"`\n } else {\n filter = [filter, `category;eq;\"${current.key}\"`]\n }\n }\n } else {\n filter = `category;eq;\"${current.key}\"`\n }\n }\n\n if (filter) {\n if (Array.isArray(filter)) {\n res += '?filter=' + filter.join('&filter=')\n } else {\n res += '?filter=' + filter\n }\n }\n\n return res as string\n}\n\nfunction generateCurrentUrl(router: NextRouter) {\n const suffix = typeToSuffix[getListingPageType(router)]\n let res = `/${router.query.slug}/${suffix}`\n\n if (router.query.cat) {\n res = `/${router.query.slug}/${router.query.cat}/${suffix}`\n }\n\n if (router.query?.filter) {\n res += '?filter=' + getPostFilters(router)\n }\n return res\n}\n\nfunction buildNodes(\n current: AggregationResultType,\n\n router: NextRouter\n): Node {\n return {\n parentId: current.meta.parentId,\n key: current.key,\n children: [],\n name: getTranslatableField(current.meta.name),\n url: generateUrl(current, router),\n }\n}\n\nfunction buildCategories(categories: Node[]): Node[] {\n const map = {}\n let node\n const roots = []\n let i\n\n for (i = 0; i < categories?.length; i += 1) {\n map[categories[i].key] = i\n categories[i].children = []\n }\n\n for (i = 0; i < categories?.length; i += 1) {\n node = categories[i]\n // ? map[node.parent.resourceId] handles the case when a product has specified categories\n // ? without any of the ancestor ones eg. have Man > Shoes > Loafers the product\n // ? has specified only Loafers or Shoes > Loafers.\n if (node.parentId && map.hasOwnProperty(node.parentId)) {\n if (node.key !== node.parentId) {\n const selectedNode = categories[map[node?.parentId]]\n selectedNode?.children?.push(node)\n }\n } else {\n roots.push(node)\n }\n }\n\n return roots\n}\n"],"file":"useListingCategories.js"}
1
+ {"version":3,"sources":["../../../../src/listing/hooks/useListingCategories.tsx"],"names":["ListingCategoriesStateContext","React","createContext","undefined","ListingCategoriesProvider","children","router","categoryTreeConfig","AggregateRequestEnum","Categories","aggData","data","isLoading","currentCategory","generateCurrentUrl","type","term","useMemo","response","nodes","map","current","buildNodes","categoryTree","buildCategories","useListingCategories","context","useContext","Error","generateUrl","suffix","typeToSuffix","pageType","res","ListingTypesEnum","Brand","query","slug","cat","Category","meta","View","Search","filter","Array","isArray","idx","findIndex","x","includes","key","join","parentId","name","url","categories","node","roots","i","length","hasOwnProperty","selectedNode","push"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { NextRouter, useRouter } from 'next/router'\n\nimport { useListingConfig } from './useListingConfig'\nimport { getTranslatableField, typeToSuffix } from '../../utils'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregationResultType,\n} from '../api'\n\nimport { processCategoriesResponse, getAggregateTypeAndTerm } from './utils'\nimport { Aggregate, ListingTypesEnum } from '../types'\nimport { getListingPageType, getPostFilters } from '../utils'\n\nexport type Node = {\n children?: Node[]\n key: string\n parentId: string\n name: string\n url: string\n}\n\nexport type UseListingCategoriesResult = {\n data: Node[] | null\n isLoading: boolean\n currentCategory: string\n}\n\nconst ListingCategoriesStateContext = React.createContext<\n UseListingCategoriesResult | undefined\n>(undefined)\n\nexport function ListingCategoriesProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const router = useRouter()\n const { categoryTreeConfig } = useListingConfig()\n\n const { data: aggData, isLoading } = useAggregateQuery(\n [categoryTreeConfig as Aggregate],\n AggregateRequestEnum.Categories\n )\n const currentCategory = generateCurrentUrl(router)\n const { type, term } = getAggregateTypeAndTerm(categoryTreeConfig)\n\n const data = React.useMemo(() => {\n if (aggData) {\n const response = processCategoriesResponse(aggData, type, term)\n\n const nodes = response.map((current) => buildNodes(current, router))\n\n const categoryTree = buildCategories(nodes)\n\n return categoryTree\n }\n return null\n }, [aggData, router])\n\n return (\n <ListingCategoriesStateContext.Provider\n value={{ data, isLoading, currentCategory }}\n >\n {children}\n </ListingCategoriesStateContext.Provider>\n )\n}\n\nexport const useListingCategories = () => {\n const context = React.useContext(ListingCategoriesStateContext)\n if (context === undefined) {\n throw new Error(\n 'useListingFilters must be used within a ListingFiltersProvider'\n )\n }\n return context\n}\n\nfunction generateUrl(current: AggregationResultType, router: NextRouter) {\n const suffix = typeToSuffix[getListingPageType(router)]\n const pageType = getListingPageType(router)\n let res\n\n if (pageType === ListingTypesEnum.Brand) {\n res = `/${router.query.slug}/${suffix}`\n if (router.query.cat) {\n res = `/${router.query.slug}/${router.query.cat}/${suffix}`\n }\n }\n if (pageType === ListingTypesEnum.Category) {\n res = `/${getTranslatableField(current.meta.slug)}/${suffix}`\n if (router.query.cat) {\n res = `/${router.query.slug}/${getTranslatableField(\n current.meta.slug\n )}/${suffix}`\n }\n }\n if (pageType === ListingTypesEnum.View) {\n res = `/${router.query.slug}/${getTranslatableField(\n current.meta.slug\n )}/${suffix}`\n }\n\n if (pageType === ListingTypesEnum.Search) {\n res = `/${getTranslatableField(current.meta.slug)}/c`\n }\n\n let filter = router.query.filter as any\n\n if (suffix === 'b') {\n if (filter) {\n if (Array.isArray(filter)) {\n filter = [...filter]\n const idx = filter.findIndex((x: any) => x.includes('category'))\n filter[idx] = `category;eq;\"${current.key}\"`\n } else {\n if (filter.includes('category')) {\n filter = `category;eq;\"${current.key}\"`\n } else {\n filter = [filter, `category;eq;\"${current.key}\"`]\n }\n }\n } else {\n filter = `category;eq;\"${current.key}\"`\n }\n }\n\n if (filter) {\n if (Array.isArray(filter)) {\n res += '?filter=' + filter.join('&filter=')\n } else {\n res += '?filter=' + filter\n }\n }\n\n return res as string\n}\n\nfunction generateCurrentUrl(router: NextRouter) {\n const suffix = typeToSuffix[getListingPageType(router)]\n let res = `/${router.query.slug}/${suffix}`\n\n if (router.query.cat) {\n res = `/${router.query.slug}/${router.query.cat}/${suffix}`\n }\n\n if (router.query?.filter) {\n res += '?filter=' + getPostFilters(router)\n }\n return res\n}\n\nfunction buildNodes(\n current: AggregationResultType,\n\n router: NextRouter\n): Node {\n return {\n parentId: current.meta.parentId,\n key: current.key,\n children: [],\n name: getTranslatableField(current.meta.name),\n url: generateUrl(current, router),\n }\n}\n\nfunction buildCategories(categories: Node[]): Node[] {\n const map = {}\n let node\n const roots = []\n let i\n\n for (i = 0; i < categories?.length; i += 1) {\n map[categories[i].key] = i\n categories[i].children = []\n }\n\n for (i = 0; i < categories?.length; i += 1) {\n node = categories[i]\n // ? map[node.parent.resourceId] handles the case when a product has specified categories\n // ? without any of the ancestor ones eg. have Man > Shoes > Loafers the product\n // ? has specified only Loafers or Shoes > Loafers.\n if (node.parentId && map.hasOwnProperty(node.parentId)) {\n if (node.key !== node.parentId) {\n const selectedNode = categories[map[node?.parentId]]\n selectedNode?.children?.push(node)\n }\n } else {\n roots.push(node)\n }\n }\n\n return roots\n}\n"],"file":"useListingCategories.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/listing/hooks/useListingFilters.tsx"],"names":["ListingFiltersStateContext","React","createContext","undefined","ListingFiltersProvider","children","aggregates","pageType","type","AggregateRequestEnum","Filters","aggData","data","isLoading","isFetching","router","slug","useMemo","result","sort","a","b","order","map","currentAggregate","aggregationType","toString","term","aggregationDefinition","split","filter","filterDefinition","current","find","agg","name","generatedFilters","generateFilters","rawFilters","selectedCount","reduce","count","res","selected","attributeResult","label","component","items","raw","clearAll","push","pathname","query","filterByType","clearAllFilters","selectedFilters","useListingFilters","context","useContext","Error","results","currentTerm","filterKey","mapKey","includes","filtersOperatorsMap","meta","onClick","createAggregateQuery","aggType","aggKey","aggOperator","ranges","stats","terms","r","keysMap","key","from","to","manageFilter","pair","remove","stripped","q","replace","aggPair","ListingTypesEnum","Search","cat","typeToSuffix","filters","filterName"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { useRouter } from 'next/router'\nimport { NextRouter } from 'next/router'\nimport { useListingConfig } from './useListingConfig'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregateType,\n AggregationResultType,\n} from '../api'\n\nimport { Aggregate, ListingTypesEnum } from '../types'\nimport { useListingSlug } from './useListingSlug'\n\nimport { stripQueryProps } from '../../utils/generateQueryFromRouter'\nimport { typeToSuffix } from '../../utils/typeToSuffix'\nimport { generateQueryStringFromQuery } from '../../utils/generateQueryStringFromQuery'\nimport { RangeAggregation, StatAggregation, TermAggregation } from '@sentecacommerce/sdk'\nimport { getSelectedFilters } from '../../utils'\nexport { RangeAggregation, StatAggregation, TermAggregation } from '@sentecacommerce/sdk'\n\ntype AggPair = {\n aggType: string\n aggKey: string\n aggOperator: string\n}\n\nexport type ListingAggregationResultType = {\n selected: boolean\n data: AggregationResultType\n meta: any\n aggregationType?: string\n onClick: () => void\n}\n\nexport type ListingAggregateType = {\n name: string\n component: string\n type: string\n selectedCount: number\n items: ListingAggregationResultType[]\n clearAll: () => void\n raw: StatAggregation | RangeAggregation | TermAggregation\n}\n\nexport type UseListingFiltersResult = {\n data?: ListingAggregateType[]\n clearAllFilters: () => void\n selectedFilters: ListingAggregationResultType[]\n isLoading: boolean\n isFetching: boolean\n}\n\nconst ListingFiltersStateContext = React.createContext<\n UseListingFiltersResult | undefined\n>(undefined)\n\nexport function ListingFiltersProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const { aggregates, type: pageType } = useListingConfig()\n const { data: aggData, isLoading, isFetching } = useAggregateQuery(\n aggregates as Aggregate[],\n AggregateRequestEnum.Filters\n )\n\n const router = useRouter()\n const slug = useListingSlug()\n\n const data = React.useMemo(() => {\n if (!isLoading && aggData) {\n const result = aggregates\n ?.sort((a, b) => a.order - b.order)\n .map((currentAggregate) => {\n const type = currentAggregate.aggregationType.toString()\n const term = currentAggregate.aggregationDefinition.split(':')[0]\n const filter = currentAggregate.filterDefinition\n const current: AggregateType = aggData[type].find(\n (agg: AggregateType) => agg.name === term\n )\n\n const generatedFilters = generateFilters({\n rawFilters: current,\n filter,\n router,\n type,\n slug,\n pageType,\n })\n\n const selectedCount = generatedFilters?.reduce((count, res) => {\n if (res.selected) count++\n return count\n }, 0)\n\n const attributeResult = ({\n name: currentAggregate.label,\n component: currentAggregate.component,\n items: generatedFilters,\n selectedCount,\n raw: current,\n clearAll: () =>\n router.push({\n pathname: router.pathname,\n query: {\n ...router.query,\n filter: filterByType(router.query.filter, filter),\n },\n }),\n type: type,\n } as unknown) as ListingAggregateType\n\n return attributeResult\n })\n\n return result\n }\n return undefined\n }, [aggData, router])\n\n const clearAllFilters = () => {\n const query = { ...router.query }\n delete query.filter\n\n router.push({\n pathname: router.pathname,\n query,\n })\n }\n\n const selectedFilters = React.useMemo(() => {\n return getSelectedFilters(router, data as any) as any\n }, [router, data])\n\n return (\n <ListingFiltersStateContext.Provider\n value={{ data, clearAllFilters, selectedFilters, isLoading, isFetching }}\n >\n {children}\n </ListingFiltersStateContext.Provider>\n )\n}\n\nexport function useListingFilters() {\n const context = React.useContext(ListingFiltersStateContext)\n if (context === undefined) {\n throw new Error(\n 'useListingFilters must be used within a ListingFiltersProvider'\n )\n }\n return context\n}\n\nfunction generateFilters({\n rawFilters,\n type,\n filter,\n slug,\n router,\n pageType,\n}: {\n rawFilters: AggregateType\n type: string\n filter: string\n slug: string\n router: NextRouter\n pageType: ListingTypesEnum\n}) {\n return rawFilters.results\n ?.filter((res) => res.count > 0)\n ?.map((currentTerm) => {\n const filterKey = mapKey(currentTerm, type)\n\n const selected = !!router.query?.filter?.includes(\n `${filter};${filtersOperatorsMap[type]};${filterKey}`\n )\n\n return {\n data: currentTerm,\n selected,\n meta: currentTerm.meta,\n onClick: () => {\n router.push(\n createAggregateQuery(\n pageType,\n slug,\n {\n aggType: filter,\n aggKey: filterKey,\n aggOperator: filtersOperatorsMap[type],\n },\n selected,\n router\n )\n )\n },\n }\n })\n}\n\nexport const filtersOperatorsMap = {\n ranges: 'range',\n stats: 'range',\n terms: 'eq',\n}\n\nfunction mapKey(r: any, type: any) {\n const keysMap = {\n terms: `\"${r.key}\"`,\n ranges: `${r.from},${r.to}`,\n }\n if (!keysMap[type]) return r.key\n\n return keysMap[type]\n}\n\nfunction manageFilter(pair: AggPair, query: any, remove: boolean) {\n const stripped = stripQueryProps(query, ['page']) // reset pagination on filter\n let q = generateQueryStringFromQuery(stripped)\n let filter = `filter=${pair.aggType};${pair.aggOperator};${pair.aggKey}`\n if (remove) {\n q = q\n .replace(`&${filter}`, '')\n .replace(`${filter}&`, '')\n .replace(filter, '')\n filter = ''\n }\n const result = `${q ? q : ''}${filter ? `${q ? '&' : ''}${filter}` : ''}`\n return result\n}\n\nfunction createAggregateQuery(\n type: ListingTypesEnum,\n slug: string,\n aggPair: AggPair,\n remove: boolean,\n router: NextRouter\n) {\n if (type === ListingTypesEnum.Search) {\n return `/search?q=${slug}&${manageFilter(aggPair, router.query, remove)}`\n }\n\n if (router.query.cat) {\n return `/${router.query.slug}/${router.query.cat}/${\n typeToSuffix[type]\n }?${manageFilter(aggPair, router.query, remove)}`\n }\n\n return `/${slug}/${typeToSuffix[type]}?${manageFilter(\n aggPair,\n router.query,\n remove\n )}`\n}\n\nfunction filterByType(\n filters: string | string[] | undefined,\n filterName: string\n) {\n if (!filters) return\n\n if (typeof filters === 'string') {\n if (filters.includes(filterName)) return\n\n return filters\n }\n\n return filters.filter((filter) => !filter.includes(filterName))\n}\n"],"file":"useListingFilters.js"}
1
+ {"version":3,"sources":["../../../../src/listing/hooks/useListingFilters.tsx"],"names":["ListingFiltersStateContext","React","createContext","undefined","ListingFiltersProvider","children","aggregates","pageType","type","AggregateRequestEnum","Filters","aggData","data","isLoading","isFetching","router","slug","useMemo","result","sort","a","b","order","map","currentAggregate","aggregationType","toString","term","aggregationDefinition","split","filter","filterDefinition","current","find","agg","name","generatedFilters","generateFilters","rawFilters","selectedCount","reduce","count","res","selected","attributeResult","label","component","items","raw","clearAll","push","pathname","query","filterByType","clearAllFilters","selectedFilters","useListingFilters","context","useContext","Error","results","currentTerm","filterKey","mapKey","includes","filtersOperatorsMap","meta","onClick","createAggregateQuery","aggType","aggKey","aggOperator","ranges","stats","terms","r","keysMap","key","from","to","manageFilter","pair","remove","stripped","q","replace","aggPair","ListingTypesEnum","Search","cat","typeToSuffix","filters","filterName"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { useRouter } from 'next/router'\nimport { NextRouter } from 'next/router'\nimport { useListingConfig } from './useListingConfig'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregateType,\n AggregationResultType,\n} from '../api'\n\nimport { Aggregate, ListingTypesEnum } from '../types'\nimport { useListingSlug } from './useListingSlug'\n\nimport { stripQueryProps } from '../../utils/generateQueryFromRouter'\nimport { typeToSuffix } from '../../utils/typeToSuffix'\nimport { generateQueryStringFromQuery } from '../../utils/generateQueryStringFromQuery'\nimport {\n RangeAggregation,\n StatAggregation,\n TermAggregation,\n} from '@sentecacommerce/sdk'\nimport { getSelectedFilters } from '../../utils'\nexport {\n RangeAggregation,\n StatAggregation,\n TermAggregation,\n} from '@sentecacommerce/sdk'\n\ntype AggPair = {\n aggType: string\n aggKey: string\n aggOperator: string\n}\n\nexport type ListingAggregationResultType = {\n selected: boolean\n data: AggregationResultType\n meta: any\n aggregationType?: string\n onClick: () => void\n}\n\nexport type ListingAggregateType = {\n name: string\n component: string\n type: string\n selectedCount: number\n items: ListingAggregationResultType[]\n clearAll: () => void\n raw: StatAggregation | RangeAggregation | TermAggregation\n}\n\nexport type UseListingFiltersResult = {\n data?: ListingAggregateType[]\n clearAllFilters: () => void\n selectedFilters: ListingAggregationResultType[]\n isLoading: boolean\n isFetching: boolean\n}\n\nconst ListingFiltersStateContext = React.createContext<\n UseListingFiltersResult | undefined\n>(undefined)\n\nexport function ListingFiltersProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const { aggregates, type: pageType } = useListingConfig()\n\n const { data: aggData, isLoading, isFetching } = useAggregateQuery(\n aggregates as Aggregate[],\n AggregateRequestEnum.Filters\n )\n\n const router = useRouter()\n const slug = useListingSlug()\n\n const data = React.useMemo(() => {\n if (!isLoading && aggData) {\n const result = aggregates\n ?.sort((a, b) => a.order - b.order)\n .map((currentAggregate) => {\n const type = currentAggregate.aggregationType.toString()\n const term = currentAggregate.aggregationDefinition.split(':')[0]\n const filter = currentAggregate.filterDefinition\n const current: AggregateType = aggData[type].find(\n (agg: AggregateType) => agg.name === term\n )\n\n const generatedFilters = generateFilters({\n rawFilters: current,\n filter,\n router,\n type,\n slug,\n pageType,\n })\n\n const selectedCount = generatedFilters?.reduce((count, res) => {\n if (res.selected) count++\n return count\n }, 0)\n\n const attributeResult = ({\n name: currentAggregate.label,\n component: currentAggregate.component,\n items: generatedFilters,\n selectedCount,\n raw: current,\n clearAll: () =>\n router.push({\n pathname: router.pathname,\n query: {\n ...router.query,\n filter: filterByType(router.query.filter, filter),\n },\n }),\n type: type,\n } as unknown) as ListingAggregateType\n\n return attributeResult\n })\n\n return result\n }\n return undefined\n }, [aggData, router])\n\n const clearAllFilters = () => {\n const query = { ...router.query }\n delete query.filter\n\n router.push({\n pathname: router.pathname,\n query,\n })\n }\n\n const selectedFilters = React.useMemo(() => {\n return getSelectedFilters(router, data as any) as any\n }, [router, data])\n\n return (\n <ListingFiltersStateContext.Provider\n value={{ data, clearAllFilters, selectedFilters, isLoading, isFetching }}\n >\n {children}\n </ListingFiltersStateContext.Provider>\n )\n}\n\nexport function useListingFilters() {\n const context = React.useContext(ListingFiltersStateContext)\n if (context === undefined) {\n throw new Error(\n 'useListingFilters must be used within a ListingFiltersProvider'\n )\n }\n return context\n}\n\nfunction generateFilters({\n rawFilters,\n type,\n filter,\n slug,\n router,\n pageType,\n}: {\n rawFilters: AggregateType\n type: string\n filter: string\n slug: string\n router: NextRouter\n pageType: ListingTypesEnum\n}) {\n return rawFilters.results\n ?.filter((res) => res.count > 0)\n ?.map((currentTerm) => {\n const filterKey = mapKey(currentTerm, type)\n\n const selected = !!router.query?.filter?.includes(\n `${filter};${filtersOperatorsMap[type]};${filterKey}`\n )\n\n return {\n data: currentTerm,\n selected,\n meta: currentTerm.meta,\n onClick: () => {\n router.push(\n createAggregateQuery(\n pageType,\n slug,\n {\n aggType: filter,\n aggKey: filterKey,\n aggOperator: filtersOperatorsMap[type],\n },\n selected,\n router\n )\n )\n },\n }\n })\n}\n\nexport const filtersOperatorsMap = {\n ranges: 'range',\n stats: 'range',\n terms: 'eq',\n}\n\nfunction mapKey(r: any, type: any) {\n const keysMap = {\n terms: `\"${r.key}\"`,\n ranges: `${r.from},${r.to}`,\n }\n if (!keysMap[type]) return r.key\n\n return keysMap[type]\n}\n\nfunction manageFilter(pair: AggPair, query: any, remove: boolean) {\n const stripped = stripQueryProps(query, ['page']) // reset pagination on filter\n let q = generateQueryStringFromQuery(stripped)\n let filter = `filter=${pair.aggType};${pair.aggOperator};${pair.aggKey}`\n if (remove) {\n q = q\n .replace(`&${filter}`, '')\n .replace(`${filter}&`, '')\n .replace(filter, '')\n filter = ''\n }\n const result = `${q ? q : ''}${filter ? `${q ? '&' : ''}${filter}` : ''}`\n return result\n}\n\nfunction createAggregateQuery(\n type: ListingTypesEnum,\n slug: string,\n aggPair: AggPair,\n remove: boolean,\n router: NextRouter\n) {\n if (type === ListingTypesEnum.Search) {\n return `/search?q=${slug}&${manageFilter(aggPair, router.query, remove)}`\n }\n\n if (router.query.cat) {\n return `/${router.query.slug}/${router.query.cat}/${\n typeToSuffix[type]\n }?${manageFilter(aggPair, router.query, remove)}`\n }\n\n return `/${slug}/${typeToSuffix[type]}?${manageFilter(\n aggPair,\n router.query,\n remove\n )}`\n}\n\nfunction filterByType(\n filters: string | string[] | undefined,\n filterName: string\n) {\n if (!filters) return\n\n if (typeof filters === 'string') {\n if (filters.includes(filterName)) return\n\n return filters\n }\n\n return filters.filter((filter) => !filter.includes(filterName))\n}\n"],"file":"useListingFilters.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/listing/hooks/useListingSEOCategories.tsx"],"names":["slugTypeToUrl","category","collection","brand","useListingSEOCategories","seoAggregates","AggregateRequestEnum","Categories","aggData","data","isLoading","isIdle","isFetching","router","filterDefinition","React","useMemo","type","term","response","name","label","component","items","map","current","buildFilter","filter","meta","url","slug","query","cat"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAMA;;AACA;;AAEA;;AAEA,IAAMA,aAAa,GAAG;AACpBC,EAAAA,QAAQ,EAAE,IADU;AAEpBC,EAAAA,UAAU,EAAE,KAFQ;AAGpBC,EAAAA,KAAK,EAAE;AAHa,CAAtB;;AAsBO,IAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,GAA0C;AAAA,0BACrD,0CADqD;AAAA,MACvEC,aADuE,qBACvEA,aADuE;;AAAA,2BAEtB,4BACvD,CAACA,aAAD,CADuD,EAEvDC,0BAAqBC,UAFkC,CAFsB;AAAA,MAEjEC,OAFiE,sBAEvEC,IAFuE;AAAA,MAExDC,SAFwD,sBAExDA,SAFwD;AAAA,MAE7CC,MAF6C,sBAE7CA,MAF6C;AAAA,MAErCC,UAFqC,sBAErCA,UAFqC;;AAM/E,MAAMC,MAAM,GAAG,wBAAf;AACA,MAAMC,gBAAgB,GAAGT,aAAH,oBAAGA,aAAa,CAAES,gBAAxC;;AAEA,MAAML,IAAwB,GAAGM,kBAAMC,OAAN,CAAc,YAAM;AACnD,QAAIN,SAAS,IAAI,CAACF,OAAlB,EAA2B;AACzB,aAAO,IAAP;AACD;;AAHkD,gCAK5B,qCAAwBH,aAAxB,CAL4B;AAAA,QAK3CY,IAL2C,yBAK3CA,IAL2C;AAAA,QAKrCC,IALqC,yBAKrCA,IALqC;;AAOnD,QAAMC,QAAQ,GAAG,uCAA0BX,OAA1B,EAAmCS,IAAnC,EAAyCC,IAAzC,CAAjB;AAEA,WAAO,CACL;AACEE,MAAAA,IAAI,EAAEf,aAAF,oBAAEA,aAAa,CAAEgB,KADvB;AAEEC,MAAAA,SAAS,EAAEjB,aAAF,oBAAEA,aAAa,CAAEiB,SAF5B;AAGEC,MAAAA,KAAK,EAAEJ,QAAF,oBAAEA,QAAQ,CAAEK,GAAV,CAAc,UAACC,OAAD;AAAA,eACnBC,WAAW,CAACD,OAAD,EAAUX,gBAAV,EAA4BD,MAA5B,CADQ;AAAA,OAAd;AAHT,KADK,CAAP;AASD,GAlBgC,EAkB9B,CAACD,UAAD,EAAaC,MAAb,CAlB8B,CAAjC;;AAoBA,SAAO;AAAEJ,IAAAA,IAAI,EAAJA,IAAF;AAAQC,IAAAA,SAAS,EAATA,SAAR;AAAmBE,IAAAA,UAAU,EAAVA,UAAnB;AAA+BD,IAAAA,MAAM,EAANA;AAA/B,GAAP;AACD,CA9BM;;;;AAgCP,SAASe,WAAT,CACED,OADF,EAEEE,MAFF,EAGEd,MAHF,EAIE;AACA,MAAMO,IAAI,GAAG,iCAAqBK,OAAO,CAACG,IAAR,CAAaR,IAAlC,CAAb;AACA,MAAIS,GAAG,SAAO,iCAAqBJ,OAAO,CAACG,IAAR,CAAaE,IAAlC,CAAP,GACL9B,aAAa,CAAC2B,MAAD,CADf;;AAGA,MAAId,MAAM,CAACkB,KAAP,CAAaC,GAAjB,EAAsB;AACpBH,IAAAA,GAAG,SAAOhB,MAAM,CAACkB,KAAP,CAAaD,IAApB,SAA4B,iCAAqBL,OAAO,CAACG,IAAR,CAAaE,IAAlC,CAA5B,GACD9B,aAAa,CAAC2B,MAAD,CADf;AAGD;;AACD,SAAO;AACLP,IAAAA,IAAI,EAAJA,IADK;AAELS,IAAAA,GAAG,EAAHA;AAFK,GAAP;AAID","sourcesContent":["import React from 'react'\nimport { NextRouter, useRouter } from 'next/router'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregationResultType,\n} from '../api'\nimport { Aggregate } from '../types'\nimport { useListingConfig } from './useListingConfig'\nimport { getTranslatableField } from '../../utils'\n\nimport { processCategoriesResponse, getAggregateTypeAndTerm } from './utils'\n\nconst slugTypeToUrl = {\n category: '/c',\n collection: '/ct',\n brand: '/b',\n}\n\nexport type SeoFilter = {\n name?: string\n component?: string\n items?: {\n name: string\n url: string\n }[]\n}\n\nexport type UseListingSEOCategoriesPropsResult = {\n data: SeoFilter[] | null\n isLoading: boolean\n isFetching: boolean\n isIdle: boolean\n}\n\nexport const useListingSEOCategories = (): UseListingSEOCategoriesPropsResult => {\n const { seoAggregates } = useListingConfig()\n const { data: aggData, isLoading, isIdle, isFetching } = useAggregateQuery(\n [seoAggregates as Aggregate],\n AggregateRequestEnum.Categories\n )\n const router = useRouter()\n const filterDefinition = seoAggregates?.filterDefinition as string\n\n const data: SeoFilter[] | null = React.useMemo(() => {\n if (isLoading && !aggData) {\n return null\n }\n\n const { type, term } = getAggregateTypeAndTerm(seoAggregates)\n\n const response = processCategoriesResponse(aggData, type, term)\n\n return [\n {\n name: seoAggregates?.label,\n component: seoAggregates?.component,\n items: response?.map((current) =>\n buildFilter(current, filterDefinition, router)\n ),\n },\n ]\n }, [isFetching, router])\n\n return { data, isLoading, isFetching, isIdle }\n}\n\nfunction buildFilter(\n current: AggregationResultType,\n filter: string,\n router: NextRouter\n) {\n const name = getTranslatableField(current.meta.name)\n let url = `/${getTranslatableField(current.meta.slug)}${\n slugTypeToUrl[filter]\n }`\n if (router.query.cat) {\n url = `/${router.query.slug}/${getTranslatableField(current.meta.slug)}${\n slugTypeToUrl[filter]\n }`\n }\n return {\n name,\n url,\n }\n}\n"],"file":"useListingSEOCategories.js"}
1
+ {"version":3,"sources":["../../../../src/listing/hooks/useListingSEOCategories.tsx"],"names":["slugTypeToUrl","category","collection","brand","useListingSEOCategories","seoAggregates","AggregateRequestEnum","Categories","aggData","data","isLoading","isIdle","isFetching","router","filterDefinition","React","useMemo","type","term","response","name","label","component","items","map","current","buildFilter","filter","meta","url","slug","query","cat"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAMA;;AACA;;AAEA;;AAEA,IAAMA,aAAa,GAAG;AACpBC,EAAAA,QAAQ,EAAE,IADU;AAEpBC,EAAAA,UAAU,EAAE,KAFQ;AAGpBC,EAAAA,KAAK,EAAE;AAHa,CAAtB;;AAsBO,IAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,GAA0C;AAAA,0BACrD,0CADqD;AAAA,MACvEC,aADuE,qBACvEA,aADuE;;AAAA,2BAGtB,4BACvD,CAACA,aAAD,CADuD,EAEvDC,0BAAqBC,UAFkC,CAHsB;AAAA,MAGjEC,OAHiE,sBAGvEC,IAHuE;AAAA,MAGxDC,SAHwD,sBAGxDA,SAHwD;AAAA,MAG7CC,MAH6C,sBAG7CA,MAH6C;AAAA,MAGrCC,UAHqC,sBAGrCA,UAHqC;;AAO/E,MAAMC,MAAM,GAAG,wBAAf;AACA,MAAMC,gBAAgB,GAAGT,aAAH,oBAAGA,aAAa,CAAES,gBAAxC;;AAEA,MAAML,IAAwB,GAAGM,kBAAMC,OAAN,CAAc,YAAM;AACnD,QAAIN,SAAS,IAAI,CAACF,OAAlB,EAA2B;AACzB,aAAO,IAAP;AACD;;AAHkD,gCAK5B,qCAAwBH,aAAxB,CAL4B;AAAA,QAK3CY,IAL2C,yBAK3CA,IAL2C;AAAA,QAKrCC,IALqC,yBAKrCA,IALqC;;AAOnD,QAAMC,QAAQ,GAAG,uCAA0BX,OAA1B,EAAmCS,IAAnC,EAAyCC,IAAzC,CAAjB;AAEA,WAAO,CACL;AACEE,MAAAA,IAAI,EAAEf,aAAF,oBAAEA,aAAa,CAAEgB,KADvB;AAEEC,MAAAA,SAAS,EAAEjB,aAAF,oBAAEA,aAAa,CAAEiB,SAF5B;AAGEC,MAAAA,KAAK,EAAEJ,QAAF,oBAAEA,QAAQ,CAAEK,GAAV,CAAc,UAACC,OAAD;AAAA,eACnBC,WAAW,CAACD,OAAD,EAAUX,gBAAV,EAA4BD,MAA5B,CADQ;AAAA,OAAd;AAHT,KADK,CAAP;AASD,GAlBgC,EAkB9B,CAACD,UAAD,EAAaC,MAAb,CAlB8B,CAAjC;;AAoBA,SAAO;AAAEJ,IAAAA,IAAI,EAAJA,IAAF;AAAQC,IAAAA,SAAS,EAATA,SAAR;AAAmBE,IAAAA,UAAU,EAAVA,UAAnB;AAA+BD,IAAAA,MAAM,EAANA;AAA/B,GAAP;AACD,CA/BM;;;;AAiCP,SAASe,WAAT,CACED,OADF,EAEEE,MAFF,EAGEd,MAHF,EAIE;AACA,MAAMO,IAAI,GAAG,iCAAqBK,OAAO,CAACG,IAAR,CAAaR,IAAlC,CAAb;AACA,MAAIS,GAAG,SAAO,iCAAqBJ,OAAO,CAACG,IAAR,CAAaE,IAAlC,CAAP,GACL9B,aAAa,CAAC2B,MAAD,CADf;;AAGA,MAAId,MAAM,CAACkB,KAAP,CAAaC,GAAjB,EAAsB;AACpBH,IAAAA,GAAG,SAAOhB,MAAM,CAACkB,KAAP,CAAaD,IAApB,SAA4B,iCAAqBL,OAAO,CAACG,IAAR,CAAaE,IAAlC,CAA5B,GACD9B,aAAa,CAAC2B,MAAD,CADf;AAGD;;AACD,SAAO;AACLP,IAAAA,IAAI,EAAJA,IADK;AAELS,IAAAA,GAAG,EAAHA;AAFK,GAAP;AAID","sourcesContent":["import React from 'react'\nimport { NextRouter, useRouter } from 'next/router'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregationResultType,\n} from '../api'\nimport { Aggregate } from '../types'\nimport { useListingConfig } from './useListingConfig'\nimport { getTranslatableField } from '../../utils'\n\nimport { processCategoriesResponse, getAggregateTypeAndTerm } from './utils'\n\nconst slugTypeToUrl = {\n category: '/c',\n collection: '/ct',\n brand: '/b',\n}\n\nexport type SeoFilter = {\n name?: string\n component?: string\n items?: {\n name: string\n url: string\n }[]\n}\n\nexport type UseListingSEOCategoriesPropsResult = {\n data: SeoFilter[] | null\n isLoading: boolean\n isFetching: boolean\n isIdle: boolean\n}\n\nexport const useListingSEOCategories = (): UseListingSEOCategoriesPropsResult => {\n const { seoAggregates } = useListingConfig()\n\n const { data: aggData, isLoading, isIdle, isFetching } = useAggregateQuery(\n [seoAggregates as Aggregate],\n AggregateRequestEnum.Categories\n )\n const router = useRouter()\n const filterDefinition = seoAggregates?.filterDefinition as string\n\n const data: SeoFilter[] | null = React.useMemo(() => {\n if (isLoading && !aggData) {\n return null\n }\n\n const { type, term } = getAggregateTypeAndTerm(seoAggregates)\n\n const response = processCategoriesResponse(aggData, type, term)\n\n return [\n {\n name: seoAggregates?.label,\n component: seoAggregates?.component,\n items: response?.map((current) =>\n buildFilter(current, filterDefinition, router)\n ),\n },\n ]\n }, [isFetching, router])\n\n return { data, isLoading, isFetching, isIdle }\n}\n\nfunction buildFilter(\n current: AggregationResultType,\n filter: string,\n router: NextRouter\n) {\n const name = getTranslatableField(current.meta.name)\n let url = `/${getTranslatableField(current.meta.slug)}${\n slugTypeToUrl[filter]\n }`\n if (router.query.cat) {\n url = `/${router.query.slug}/${getTranslatableField(current.meta.slug)}${\n slugTypeToUrl[filter]\n }`\n }\n return {\n name,\n url,\n }\n}\n"],"file":"useListingSEOCategories.js"}
@@ -14,15 +14,24 @@ export var usePixelProductDetails = () => {
14
14
 
15
15
  var pixel = (_window = window) == null ? void 0 : _window.pixel;
16
16
 
17
- if (metaData._id && selectedVariant != null && selectedVariant.sku) {
18
- !sentData && (pixel == null ? void 0 : pixel.productDetails({
19
- id: metaData._id,
20
- sku: selectedVariant == null ? void 0 : selectedVariant.sku
21
- }, {
22
- merchantKey: defaultMerchant
23
- }));
24
- setSentData.on();
25
- }
17
+ var sendProductDetails = () => {
18
+ if (!window.document.title || window.document.title === 'за') {
19
+ setTimeout(() => sendProductDetails(), 20);
20
+ return;
21
+ }
22
+
23
+ if (metaData._id && selectedVariant != null && selectedVariant.sku && !sentData) {
24
+ pixel == null ? void 0 : pixel.productDetails({
25
+ id: metaData._id,
26
+ sku: selectedVariant == null ? void 0 : selectedVariant.sku
27
+ }, {
28
+ merchantKey: defaultMerchant
29
+ });
30
+ setSentData.on();
31
+ }
32
+ };
33
+
34
+ sendProductDetails();
26
35
  }, [metaData._id, selectedVariant == null ? void 0 : selectedVariant.sku]);
27
36
  };
28
37
  //# sourceMappingURL=usePixelProductDetails.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/analytics/Pixel/hooks/usePixelProductDetails.tsx"],"names":["React","useConfigState","useProductState","useBoolean","usePixelProductDetails","sentData","setSentData","defaultMerchant","metaData","selectedVariant","useEffect","pixel","window","_id","sku","productDetails","id","merchantKey","on"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,cAAT,EAAyBC,eAAzB,EAA0CC,UAA1C,QAA4D,gBAA5D;AAEA,OAAO,IAAMC,sBAAsB,GAAG,MAAM;AAC1C,MAAM,CAACC,QAAD,EAAWC,WAAX,IAA0BH,UAAU,EAA1C;AACA,MAAM;AAAEI,IAAAA;AAAF,MAAsBN,cAAc,EAA1C;AACA,MAAM;AAAEO,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAgCP,eAAe,EAArD;AAEAF,EAAAA,KAAK,CAACU,SAAN,CAAgB,MAAM;AAAA;;AACpB,QAAMC,KAAK,cAAIC,MAAJ,qBAAG,QAAiBD,KAA/B;;AACA,QAAIH,QAAQ,CAACK,GAAT,IAAgBJ,eAAhB,YAAgBA,eAAe,CAAEK,GAArC,EAA0C;AACxC,OAACT,QAAD,KACEM,KADF,oBACEA,KAAK,CAAEI,cAAP,CACE;AACEC,QAAAA,EAAE,EAAER,QAAQ,CAACK,GADf;AAEEC,QAAAA,GAAG,EAAEL,eAAF,oBAAEA,eAAe,CAAEK;AAFxB,OADF,EAKE;AACEG,QAAAA,WAAW,EAAEV;AADf,OALF,CADF;AAUAD,MAAAA,WAAW,CAACY,EAAZ;AACD;AACF,GAfD,EAeG,CAACV,QAAQ,CAACK,GAAV,EAAeJ,eAAf,oBAAeA,eAAe,CAAEK,GAAhC,CAfH;AAgBD,CArBM","sourcesContent":["import React from 'react'\nimport { useConfigState, useProductState, useBoolean } from '../../../index'\n\nexport const usePixelProductDetails = () => {\n const [sentData, setSentData] = useBoolean()\n const { defaultMerchant } = useConfigState()\n const { metaData, selectedVariant } = useProductState()\n\n React.useEffect(() => {\n const pixel = (window as any)?.pixel\n if (metaData._id && selectedVariant?.sku) {\n !sentData &&\n pixel?.productDetails(\n {\n id: metaData._id as string,\n sku: selectedVariant?.sku as string,\n },\n {\n merchantKey: defaultMerchant,\n }\n )\n setSentData.on()\n }\n }, [metaData._id, selectedVariant?.sku])\n}\n"],"file":"usePixelProductDetails.js"}
1
+ {"version":3,"sources":["../../../../../src/analytics/Pixel/hooks/usePixelProductDetails.tsx"],"names":["React","useConfigState","useProductState","useBoolean","usePixelProductDetails","sentData","setSentData","defaultMerchant","metaData","selectedVariant","useEffect","pixel","window","sendProductDetails","document","title","setTimeout","_id","sku","productDetails","id","merchantKey","on"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,cAAT,EAAyBC,eAAzB,EAA0CC,UAA1C,QAA4D,gBAA5D;AAEA,OAAO,IAAMC,sBAAsB,GAAG,MAAM;AAC1C,MAAM,CAACC,QAAD,EAAWC,WAAX,IAA0BH,UAAU,EAA1C;AACA,MAAM;AAAEI,IAAAA;AAAF,MAAsBN,cAAc,EAA1C;AACA,MAAM;AAAEO,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAgCP,eAAe,EAArD;AAEAF,EAAAA,KAAK,CAACU,SAAN,CAAgB,MAAM;AAAA;;AACpB,QAAMC,KAAK,cAAIC,MAAJ,qBAAG,QAAiBD,KAA/B;;AAEA,QAAME,kBAAkB,GAAG,MAAM;AAC/B,UAAI,CAACD,MAAM,CAACE,QAAP,CAAgBC,KAAjB,IAA0BH,MAAM,CAACE,QAAP,CAAgBC,KAAhB,KAA0B,IAAxD,EAA8D;AAC5DC,QAAAA,UAAU,CAAC,MAAMH,kBAAkB,EAAzB,EAA6B,EAA7B,CAAV;AACA;AACD;;AACD,UAAIL,QAAQ,CAACS,GAAT,IAAgBR,eAAhB,YAAgBA,eAAe,CAAES,GAAjC,IAAwC,CAACb,QAA7C,EAAuD;AACnDM,QAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEQ,cAAP,CACE;AACEC,UAAAA,EAAE,EAAEZ,QAAQ,CAACS,GADf;AAEEC,UAAAA,GAAG,EAAET,eAAF,oBAAEA,eAAe,CAAES;AAFxB,SADF,EAKE;AACEG,UAAAA,WAAW,EAAEd;AADf,SALF;AASFD,QAAAA,WAAW,CAACgB,EAAZ;AACD;AACF,KAjBD;;AAmBAT,IAAAA,kBAAkB;AACnB,GAvBD,EAuBG,CAACL,QAAQ,CAACS,GAAV,EAAeR,eAAf,oBAAeA,eAAe,CAAES,GAAhC,CAvBH;AAwBD,CA7BM","sourcesContent":["import React from 'react'\nimport { useConfigState, useProductState, useBoolean } from '../../../index'\n\nexport const usePixelProductDetails = () => {\n const [sentData, setSentData] = useBoolean()\n const { defaultMerchant } = useConfigState()\n const { metaData, selectedVariant } = useProductState()\n\n React.useEffect(() => {\n const pixel = (window as any)?.pixel\n\n const sendProductDetails = () => {\n if (!window.document.title || window.document.title === 'за') {\n setTimeout(() => sendProductDetails(), 20)\n return\n }\n if (metaData._id && selectedVariant?.sku && !sentData) {\n pixel?.productDetails(\n {\n id: metaData._id as string,\n sku: selectedVariant?.sku as string,\n },\n {\n merchantKey: defaultMerchant,\n }\n )\n setSentData.on()\n }\n }\n\n sendProductDetails()\n }, [metaData._id, selectedVariant?.sku])\n}\n"],"file":"usePixelProductDetails.js"}
@@ -25,12 +25,22 @@ export var usePixelProductsImpression = (_ref) => {
25
25
 
26
26
  if (typeof window !== undefined && !((_productsData$product = productsData.products) != null && (_productsData$product2 = _productsData$product[0]) != null && _productsData$product2.isPlaceholder) && (productsData == null ? void 0 : productsData.length) > 0) {
27
27
  var pixel = window.pixel;
28
- pixel == null ? void 0 : pixel.productsImpression(!isCarousel ? [{
29
- listName: PageTypeMap[router.route],
30
- products
31
- }] : productsData, {
32
- merchantKey: defaultMerchant
33
- });
28
+
29
+ var sendImpressions = () => {
30
+ if (!window.document.title || window.document.title === 'за') {
31
+ setTimeout(() => sendImpressions(), 20);
32
+ return;
33
+ }
34
+
35
+ pixel == null ? void 0 : pixel.productsImpression(!isCarousel ? [{
36
+ listName: PageTypeMap[router.route],
37
+ products
38
+ }] : productsData, {
39
+ merchantKey: defaultMerchant
40
+ });
41
+ };
42
+
43
+ sendImpressions();
34
44
  setSentAlready.on();
35
45
  }
36
46
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/analytics/Pixel/hooks/usePixelProductsImpression.tsx"],"names":["React","useRouter","useConfigState","useBoolean","createMappedProducts","PageTypeMap","usePixelProductsImpression","productsData","isCarousel","sentAlready","setSentAlready","defaultMerchant","router","products","useEffect","events","on","window","undefined","isPlaceholder","length","pixel","productsImpression","listName","route","merchantKey"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,cAAT,EAAyBC,UAAzB,QAA2C,gBAA3C;AAEA,SAASC,oBAAT,EAA+BC,WAA/B,QAAkD,cAAlD;AAEA,OAAO,IAAMC,0BAA0B,GAAG,UAMpC;AAAA,MANqC;AACzCC,IAAAA,YADyC;AAEzCC,IAAAA;AAFyC,GAMrC;AACJ,MAAM,CAACC,WAAD,EAAcC,cAAd,IAAgCP,UAAU,CAAC,KAAD,CAAhD;AACA,MAAM;AAAEQ,IAAAA;AAAF,MAAsBT,cAAc,EAA1C;AACA,MAAMU,MAAM,GAAGX,SAAS,EAAxB;AAEA,MAAIY,QAAuB,GAAG,EAA9B;;AAEA,MAAI,CAACL,UAAL,EAAiB;AACfK,IAAAA,QAAQ,GAAGT,oBAAoB,CAACG,YAAY,CAACM,QAAd,CAA/B;AACD;;AAEDb,EAAAA,KAAK,CAACc,SAAN,CAAgB,MAAM;AACpB,QAAIL,WAAJ,EAAiB;AACjBG,IAAAA,MAAM,CAACG,MAAP,CAAcC,EAAd,CAAiB,qBAAjB,EAAwC,MAAM;AAAA;;AAC5C,UACE,OAAOC,MAAP,KAAkBC,SAAlB,IACA,2BAACX,YAAY,CAACM,QAAd,uCAAC,sBAAwB,CAAxB,CAAD,aAAC,uBAA4BM,aAA7B,CADA,IAEA,CAAAZ,YAAY,QAAZ,YAAAA,YAAY,CAAEa,MAAd,IAAuB,CAHzB,EAIE;AACA,YAAMC,KAAK,GAAIJ,MAAD,CAAgBI,KAA9B;AAEAA,QAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEC,kBAAP,CACE,CAACd,UAAD,GACI,CAAC;AAAEe,UAAAA,QAAQ,EAAElB,WAAW,CAACO,MAAM,CAACY,KAAR,CAAvB;AAAuCX,UAAAA;AAAvC,SAAD,CADJ,GAEIN,YAHN,EAIE;AACEkB,UAAAA,WAAW,EAAEd;AADf,SAJF;AAQAD,QAAAA,cAAc,CAACM,EAAf;AACD;AACF,KAlBD;AAmBD,GArBD,EAqBG,CAACJ,MAAM,CAACY,KAAR,CArBH;AAsBD,CAvCM","sourcesContent":["import React from 'react'\nimport { useRouter } from 'next/router'\nimport { useConfigState, useBoolean } from '../../../index'\nimport { ProductType } from '../types'\nimport { createMappedProducts, PageTypeMap } from '../../Releva'\n\nexport const usePixelProductsImpression = ({\n productsData,\n isCarousel,\n}: {\n productsData: any\n isCarousel?: boolean\n}) => {\n const [sentAlready, setSentAlready] = useBoolean(false)\n const { defaultMerchant } = useConfigState()\n const router = useRouter()\n\n let products: ProductType[] = []\n\n if (!isCarousel) {\n products = createMappedProducts(productsData.products)\n }\n\n React.useEffect(() => {\n if (sentAlready) return\n router.events.on('routeChangeComplete', () => {\n if (\n typeof window !== undefined &&\n !productsData.products?.[0]?.isPlaceholder &&\n productsData?.length > 0\n ) {\n const pixel = (window as any).pixel\n\n pixel?.productsImpression(\n !isCarousel\n ? [{ listName: PageTypeMap[router.route], products }]\n : productsData,\n {\n merchantKey: defaultMerchant,\n }\n )\n setSentAlready.on()\n }\n })\n }, [router.route])\n}\n"],"file":"usePixelProductsImpression.js"}
1
+ {"version":3,"sources":["../../../../../src/analytics/Pixel/hooks/usePixelProductsImpression.tsx"],"names":["React","useRouter","useConfigState","useBoolean","createMappedProducts","PageTypeMap","usePixelProductsImpression","productsData","isCarousel","sentAlready","setSentAlready","defaultMerchant","router","products","useEffect","events","on","window","undefined","isPlaceholder","length","pixel","sendImpressions","document","title","setTimeout","productsImpression","listName","route","merchantKey"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,cAAT,EAAyBC,UAAzB,QAA2C,gBAA3C;AAEA,SAASC,oBAAT,EAA+BC,WAA/B,QAAkD,cAAlD;AAEA,OAAO,IAAMC,0BAA0B,GAAG,UAMpC;AAAA,MANqC;AACzCC,IAAAA,YADyC;AAEzCC,IAAAA;AAFyC,GAMrC;AACJ,MAAM,CAACC,WAAD,EAAcC,cAAd,IAAgCP,UAAU,CAAC,KAAD,CAAhD;AACA,MAAM;AAAEQ,IAAAA;AAAF,MAAsBT,cAAc,EAA1C;AACA,MAAMU,MAAM,GAAGX,SAAS,EAAxB;AAEA,MAAIY,QAAuB,GAAG,EAA9B;;AAEA,MAAI,CAACL,UAAL,EAAiB;AACfK,IAAAA,QAAQ,GAAGT,oBAAoB,CAACG,YAAY,CAACM,QAAd,CAA/B;AACD;;AAEDb,EAAAA,KAAK,CAACc,SAAN,CAAgB,MAAM;AACpB,QAAIL,WAAJ,EAAiB;AAEjBG,IAAAA,MAAM,CAACG,MAAP,CAAcC,EAAd,CAAiB,qBAAjB,EAAwC,MAAM;AAAA;;AAC5C,UACE,OAAOC,MAAP,KAAkBC,SAAlB,IACA,2BAACX,YAAY,CAACM,QAAd,uCAAC,sBAAwB,CAAxB,CAAD,aAAC,uBAA4BM,aAA7B,CADA,IAEA,CAAAZ,YAAY,QAAZ,YAAAA,YAAY,CAAEa,MAAd,IAAuB,CAHzB,EAIE;AACA,YAAMC,KAAK,GAAIJ,MAAD,CAAgBI,KAA9B;;AAEA,YAAMC,eAAe,GAAG,MAAM;AAC5B,cAAI,CAACL,MAAM,CAACM,QAAP,CAAgBC,KAAjB,IAA0BP,MAAM,CAACM,QAAP,CAAgBC,KAAhB,KAA0B,IAAxD,EAA8D;AAC5DC,YAAAA,UAAU,CAAC,MAAMH,eAAe,EAAtB,EAA0B,EAA1B,CAAV;AACA;AACD;;AACDD,UAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEK,kBAAP,CACE,CAAClB,UAAD,GACI,CAAC;AAAEmB,YAAAA,QAAQ,EAAEtB,WAAW,CAACO,MAAM,CAACgB,KAAR,CAAvB;AAAuCf,YAAAA;AAAvC,WAAD,CADJ,GAEIN,YAHN,EAIE;AACEsB,YAAAA,WAAW,EAAElB;AADf,WAJF;AAQD,SAbD;;AAcAW,QAAAA,eAAe;AACfZ,QAAAA,cAAc,CAACM,EAAf;AACD;AACF,KAzBD;AA0BD,GA7BD,EA6BG,CAACJ,MAAM,CAACgB,KAAR,CA7BH;AA8BD,CA/CM","sourcesContent":["import React from 'react'\nimport { useRouter } from 'next/router'\nimport { useConfigState, useBoolean } from '../../../index'\nimport { ProductType } from '../types'\nimport { createMappedProducts, PageTypeMap } from '../../Releva'\n\nexport const usePixelProductsImpression = ({\n productsData,\n isCarousel,\n}: {\n productsData: any\n isCarousel?: boolean\n}) => {\n const [sentAlready, setSentAlready] = useBoolean(false)\n const { defaultMerchant } = useConfigState()\n const router = useRouter()\n\n let products: ProductType[] = []\n\n if (!isCarousel) {\n products = createMappedProducts(productsData.products)\n }\n\n React.useEffect(() => {\n if (sentAlready) return\n\n router.events.on('routeChangeComplete', () => {\n if (\n typeof window !== undefined &&\n !productsData.products?.[0]?.isPlaceholder &&\n productsData?.length > 0\n ) {\n const pixel = (window as any).pixel\n\n const sendImpressions = () => {\n if (!window.document.title || window.document.title === 'за') {\n setTimeout(() => sendImpressions(), 20)\n return\n }\n pixel?.productsImpression(\n !isCarousel\n ? [{ listName: PageTypeMap[router.route], products }]\n : productsData,\n {\n merchantKey: defaultMerchant,\n }\n )\n }\n sendImpressions()\n setSentAlready.on()\n }\n })\n }, [router.route])\n}\n"],"file":"usePixelProductsImpression.js"}
@@ -1,13 +1,19 @@
1
1
  import Router from 'next/router';
2
2
  import { useConfigState } from '../../index';
3
3
  import { getBasketId } from '../Releva/utils';
4
- import { PageTypeMap } from '../Releva/types';
5
4
  export var pixelChangeRoute = () => {
6
5
  if (typeof window !== undefined) {
7
6
  var pixel = window.pixel;
8
- pixel == null ? void 0 : pixel.changeRoute({
7
+ var title = window.document.title;
8
+
9
+ if (!title || title === 'за') {
10
+ setTimeout(() => pixelChangeRoute(), 20);
11
+ return;
12
+ }
13
+
14
+ return pixel == null ? void 0 : pixel.changeRoute({
9
15
  path: Router.router.asPath,
10
- title: window.document.title || PageTypeMap[Router.router.route] || 'Error',
16
+ title: title || 'Error',
11
17
  location: window.location.href
12
18
  });
13
19
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/analytics/Pixel/usePixel.tsx"],"names":["Router","useConfigState","getBasketId","PageTypeMap","pixelChangeRoute","window","undefined","pixel","changeRoute","path","router","asPath","title","document","route","location","href","usePixel","defaultMerchant","orderId","pixelAddLineItem","product","currencyCode","addLineItem","merchantKey","pixelRemoveLineItem","removeLineItem","pixelCheckoutStep","stepNumber","checkoutStep","pixelCheckoutStepOption","option","checkoutStepOption","pixelPurchase","purchase"],"mappings":"AACA,OAAOA,MAAP,MAAmB,aAAnB;AACA,SAASC,cAAT,QAA+B,aAA/B;AACA,SAASC,WAAT,QAA4B,iBAA5B;AACA,SAASC,WAAT,QAA4B,iBAA5B;AAGA,OAAO,IAAMC,gBAAgB,GAAG,MAAM;AACpC,MAAI,OAAOC,MAAP,KAAkBC,SAAtB,EAAiC;AAC/B,QAAMC,KAAK,GAAIF,MAAD,CAAgBE,KAA9B;AACAA,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEC,WAAP,CAAmB;AACjBC,MAAAA,IAAI,EAAET,MAAM,CAACU,MAAP,CAAeC,MADJ;AAEjBC,MAAAA,KAAK,EACHP,MAAM,CAACQ,QAAP,CAAgBD,KAAhB,IAAyBT,WAAW,CAACH,MAAM,CAACU,MAAP,CAAeI,KAAhB,CAApC,IAA8D,OAH/C;AAIjBC,MAAAA,QAAQ,EAAEV,MAAM,CAACU,QAAP,CAAgBC;AAJT,KAAnB;AAMD;AACF,CAVM;AAYP,OAAO,IAAMC,QAAQ,GAAG,MAAM;AAC5B,MAAMV,KAAK,GAAIF,MAAD,CAAgBE,KAA9B;AACA,MAAM;AAAEW,IAAAA;AAAF,MAAsBjB,cAAc,EAA1C;AACA,MAAMkB,OAAO,GAAGjB,WAAW,EAA3B;;AAEA,MAAMkB,gBAAgB,GAAG,UAMnB;AAAA,QANoB;AACxBC,MAAAA,OADwB;AAExBC,MAAAA;AAFwB,KAMpB;AACJf,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEgB,WAAP,CAAmBF,OAAnB,EAA4B;AAC1BC,MAAAA,YAD0B;AAE1BE,MAAAA,WAAW,EAAEN;AAFa,KAA5B;AAID,GAXD;;AAaA,MAAMO,mBAAmB,GAAG,WAMtB;AAAA,QANuB;AAC3BJ,MAAAA,OAD2B;AAE3BC,MAAAA;AAF2B,KAMvB;AACJf,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEmB,cAAP,CAAsBL,OAAtB,EAA+B;AAC7BC,MAAAA,YAD6B;AAE7BE,MAAAA,WAAW,EAAEN;AAFgB,KAA/B;AAID,GAXD;;AAaA,MAAMS,iBAAiB,GAAIC,UAAD,IAAwB;AAChD,QAAIrB,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAEsB,YAAP,CAAoBV,OAApB,EAA6BS,UAA7B;AACZ,GAFD;;AAIA,MAAME,uBAAuB,GAAG,CAACF,UAAD,EAAqBG,MAArB,KAAwC;AACtE,QAAIxB,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAEyB,kBAAP,CAA0Bb,OAA1B,EAAmCS,UAAnC,EAA+CG,MAA/C,EAD2D,CACJ;AACnE,GAFD;;AAIA,MAAME,aAAa,GAAG,MAAM;AAC1B,QAAI1B,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAE2B,QAAP,CAAgBf,OAAhB;AACZ,GAFD;;AAIA,SAAO;AACLC,IAAAA,gBADK;AAELK,IAAAA,mBAFK;AAGLE,IAAAA,iBAHK;AAILG,IAAAA,uBAJK;AAKLG,IAAAA;AALK,GAAP;AAOD,CAlDM","sourcesContent":["import React from 'react'\nimport Router from 'next/router'\nimport { useConfigState } from '../../index'\nimport { getBasketId } from '../Releva/utils'\nimport { PageTypeMap } from '../Releva/types'\nimport { ProductType } from './types'\n\nexport const pixelChangeRoute = () => {\n if (typeof window !== undefined) {\n const pixel = (window as any).pixel\n pixel?.changeRoute({\n path: Router.router!.asPath,\n title:\n window.document.title || PageTypeMap[Router.router!.route] || 'Error',\n location: window.location.href,\n })\n }\n}\n\nexport const usePixel = () => {\n const pixel = (window as any).pixel\n const { defaultMerchant } = useConfigState()\n const orderId = getBasketId()\n\n const pixelAddLineItem = ({\n product,\n currencyCode,\n }: {\n product: ProductType\n currencyCode: string\n }) => {\n pixel?.addLineItem(product, {\n currencyCode,\n merchantKey: defaultMerchant,\n })\n }\n\n const pixelRemoveLineItem = ({\n product,\n currencyCode,\n }: {\n product: ProductType\n currencyCode: string\n }) => {\n pixel?.removeLineItem(product, {\n currencyCode,\n merchantKey: defaultMerchant,\n })\n }\n\n const pixelCheckoutStep = (stepNumber: number) => {\n if (pixel) pixel?.checkoutStep(orderId, stepNumber)\n }\n\n const pixelCheckoutStepOption = (stepNumber: number, option: string) => {\n if (pixel) pixel?.checkoutStepOption(orderId, stepNumber, option) // order id, stepNumber and the selected shipping or payment option\n }\n\n const pixelPurchase = () => {\n if (pixel) pixel?.purchase(orderId)\n }\n\n return {\n pixelAddLineItem,\n pixelRemoveLineItem,\n pixelCheckoutStep,\n pixelCheckoutStepOption,\n pixelPurchase,\n }\n}\n"],"file":"usePixel.js"}
1
+ {"version":3,"sources":["../../../../src/analytics/Pixel/usePixel.tsx"],"names":["Router","useConfigState","getBasketId","pixelChangeRoute","window","undefined","pixel","title","document","setTimeout","changeRoute","path","router","asPath","location","href","usePixel","defaultMerchant","orderId","pixelAddLineItem","product","currencyCode","addLineItem","merchantKey","pixelRemoveLineItem","removeLineItem","pixelCheckoutStep","stepNumber","checkoutStep","pixelCheckoutStepOption","option","checkoutStepOption","pixelPurchase","purchase"],"mappings":"AACA,OAAOA,MAAP,MAAmB,aAAnB;AACA,SAASC,cAAT,QAA+B,aAA/B;AACA,SAASC,WAAT,QAA4B,iBAA5B;AAGA,OAAO,IAAMC,gBAAgB,GAAG,MAAY;AAC1C,MAAI,OAAOC,MAAP,KAAkBC,SAAtB,EAAiC;AAC/B,QAAMC,KAAK,GAAIF,MAAD,CAAgBE,KAA9B;AAEA,QAAMC,KAAK,GAAGH,MAAM,CAACI,QAAP,CAAgBD,KAA9B;;AAEA,QAAI,CAACA,KAAD,IAAUA,KAAK,KAAK,IAAxB,EAA8B;AAC5BE,MAAAA,UAAU,CAAC,MAAMN,gBAAgB,EAAvB,EAA2B,EAA3B,CAAV;AACA;AACD;;AAED,WAAOG,KAAP,oBAAOA,KAAK,CAAEI,WAAP,CAAmB;AACxBC,MAAAA,IAAI,EAAEX,MAAM,CAACY,MAAP,CAAeC,MADG;AAExBN,MAAAA,KAAK,EAAEA,KAAK,IAAI,OAFQ;AAGxBO,MAAAA,QAAQ,EAAEV,MAAM,CAACU,QAAP,CAAgBC;AAHF,KAAnB,CAAP;AAKD;AACF,CAjBM;AAmBP,OAAO,IAAMC,QAAQ,GAAG,MAAM;AAC5B,MAAMV,KAAK,GAAIF,MAAD,CAAgBE,KAA9B;AACA,MAAM;AAAEW,IAAAA;AAAF,MAAsBhB,cAAc,EAA1C;AACA,MAAMiB,OAAO,GAAGhB,WAAW,EAA3B;;AAEA,MAAMiB,gBAAgB,GAAG,UAMnB;AAAA,QANoB;AACxBC,MAAAA,OADwB;AAExBC,MAAAA;AAFwB,KAMpB;AACJf,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEgB,WAAP,CAAmBF,OAAnB,EAA4B;AAC1BC,MAAAA,YAD0B;AAE1BE,MAAAA,WAAW,EAAEN;AAFa,KAA5B;AAID,GAXD;;AAaA,MAAMO,mBAAmB,GAAG,WAMtB;AAAA,QANuB;AAC3BJ,MAAAA,OAD2B;AAE3BC,MAAAA;AAF2B,KAMvB;AACJf,IAAAA,KAAK,QAAL,YAAAA,KAAK,CAAEmB,cAAP,CAAsBL,OAAtB,EAA+B;AAC7BC,MAAAA,YAD6B;AAE7BE,MAAAA,WAAW,EAAEN;AAFgB,KAA/B;AAID,GAXD;;AAaA,MAAMS,iBAAiB,GAAIC,UAAD,IAAwB;AAChD,QAAIrB,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAEsB,YAAP,CAAoBV,OAApB,EAA6BS,UAA7B;AACZ,GAFD;;AAIA,MAAME,uBAAuB,GAAG,CAACF,UAAD,EAAqBG,MAArB,KAAwC;AACtE,QAAIxB,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAEyB,kBAAP,CAA0Bb,OAA1B,EAAmCS,UAAnC,EAA+CG,MAA/C,EAD2D,CACJ;AACnE,GAFD;;AAIA,MAAME,aAAa,GAAG,MAAM;AAC1B,QAAI1B,KAAJ,EAAWA,KAAK,QAAL,YAAAA,KAAK,CAAE2B,QAAP,CAAgBf,OAAhB;AACZ,GAFD;;AAIA,SAAO;AACLC,IAAAA,gBADK;AAELK,IAAAA,mBAFK;AAGLE,IAAAA,iBAHK;AAILG,IAAAA,uBAJK;AAKLG,IAAAA;AALK,GAAP;AAOD,CAlDM","sourcesContent":["import React from 'react'\nimport Router from 'next/router'\nimport { useConfigState } from '../../index'\nimport { getBasketId } from '../Releva/utils'\nimport { ProductType } from './types'\n\nexport const pixelChangeRoute = (): void => {\n if (typeof window !== undefined) {\n const pixel = (window as any).pixel\n\n const title = window.document.title\n\n if (!title || title === 'за') {\n setTimeout(() => pixelChangeRoute(), 20)\n return\n }\n\n return pixel?.changeRoute({\n path: Router.router!.asPath,\n title: title || 'Error',\n location: window.location.href,\n })\n }\n}\n\nexport const usePixel = () => {\n const pixel = (window as any).pixel\n const { defaultMerchant } = useConfigState()\n const orderId = getBasketId()\n\n const pixelAddLineItem = ({\n product,\n currencyCode,\n }: {\n product: ProductType\n currencyCode: string\n }) => {\n pixel?.addLineItem(product, {\n currencyCode,\n merchantKey: defaultMerchant,\n })\n }\n\n const pixelRemoveLineItem = ({\n product,\n currencyCode,\n }: {\n product: ProductType\n currencyCode: string\n }) => {\n pixel?.removeLineItem(product, {\n currencyCode,\n merchantKey: defaultMerchant,\n })\n }\n\n const pixelCheckoutStep = (stepNumber: number) => {\n if (pixel) pixel?.checkoutStep(orderId, stepNumber)\n }\n\n const pixelCheckoutStepOption = (stepNumber: number, option: string) => {\n if (pixel) pixel?.checkoutStepOption(orderId, stepNumber, option) // order id, stepNumber and the selected shipping or payment option\n }\n\n const pixelPurchase = () => {\n if (pixel) pixel?.purchase(orderId)\n }\n\n return {\n pixelAddLineItem,\n pixelRemoveLineItem,\n pixelCheckoutStep,\n pixelCheckoutStepOption,\n pixelPurchase,\n }\n}\n"],"file":"usePixel.js"}
@@ -28,6 +28,8 @@ export var useAggregateQuery = (aggregates, request) => {
28
28
  var predicateId = predicate == null ? void 0 : predicate._id;
29
29
  var queryKeys = [request.toString(), aggregateKeys, slug, postFilter];
30
30
  return useQuery(queryKeys, /*#__PURE__*/_asyncToGenerator(function* () {
31
+ // prevents an error in the case where a value of undefined is passed before hydration
32
+ if (!aggregates[0]) return;
31
33
  var query = prepareAggregateQuery({
32
34
  request,
33
35
  aggregates,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/listing/api/queries/useAggregateQuery.ts"],"names":["useQuery","CatalogAggregate","useRouter","usePredicate","useListingConfig","useListingSlug","ListingTypesEnum","extendFilter","getListingPageType","getAttributePageType","canUseDOM","AggregateRequestEnum","useAggregateQuery","aggregates","request","router","slug","data","predicate","config","postFilter","getPostFilters","aggregateKeys","generateAggregateKey","predicateId","_id","queryKeys","toString","query","prepareAggregateQuery","filterExtension","response","refetchOnMount","refetchOnWindowFocus","enabled","isQueryEnabled","keepPreviousData","staleTime","pageType","Categories","type","aggregationType","term","aggregationDefinition","aggValue","filter","Brand","applyBrandsPostFilter","cat","applyAttributePageFilter","Category","Filters","filters","queryType","Search","val","View","aggregatesMap","reduce","map","agg","aggregateType","aggregationTerm","aggregate","join","Array","isArray","hasCategory","includes","filtersArr","split","res","i"],"mappings":"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","sourcesContent":["import { useQuery } from 'react-query'\nimport {\n CatalogAggregate,\n RangeAggregationResult,\n TermAggregationResult,\n RangeAggregation,\n TermAggregation,\n StatAggregation,\n} from '@sentecacommerce/sdk'\nimport { NextRouter, useRouter } from 'next/router'\nimport { usePredicate, PredicateType } from './usePredicate'\nimport { useListingConfig, useListingSlug } from '../../hooks'\nimport { ListingTypesEnum } from '../../types'\nimport { extendFilter, getListingPageType } from '../../utils'\nimport { Aggregate } from '../../types'\nimport { getAttributePageType } from '../../hooks/utils'\nimport { canUseDOM } from '../../../utils'\n\nexport type AggregationResultType = RangeAggregationResult &\n TermAggregationResult &\n RangeAggregationResult\n\nexport type AggregateType = TermAggregation & StatAggregation & RangeAggregation\n\nexport enum AggregateRequestEnum {\n Filters = 'filters',\n Categories = 'categories',\n}\n\nexport const useAggregateQuery = (\n aggregates: Aggregate[],\n request: AggregateRequestEnum\n) => {\n const router = useRouter()\n const slug = useListingSlug()\n const { data: predicate } = usePredicate()\n const config = useListingConfig()\n const postFilter = getPostFilters(router)\n const aggregateKeys = generateAggregateKey(aggregates)\n const predicateId = predicate?._id\n\n const queryKeys = [request.toString(), aggregateKeys, slug, postFilter]\n\n return useQuery(\n queryKeys,\n async () => {\n const query = prepareAggregateQuery({\n request,\n aggregates,\n predicate,\n router,\n postFilter,\n slug,\n filterExtension: config.filterExtension,\n })\n\n const response = await CatalogAggregate(query)\n\n return response\n },\n {\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n enabled: isQueryEnabled(router, predicateId),\n keepPreviousData: true,\n staleTime: 30000,\n }\n )\n}\n\nexport function prepareAggregateQuery({\n request,\n predicate,\n aggregates,\n router,\n postFilter,\n slug,\n filterExtension,\n}: {\n request: AggregateRequestEnum\n aggregates: Aggregate[]\n router: NextRouter\n postFilter: string | undefined\n predicate?: PredicateType\n filterExtension?: string\n slug: string\n}) {\n const pageType = getListingPageType(router)\n\n switch (request) {\n case AggregateRequestEnum.Categories: {\n const type = aggregates[0]?.aggregationType\n const term = aggregates?.[0].aggregationDefinition\n const aggValue =\n predicate?._id && term !== 'categories'\n ? `${term}:${predicate?._id}`\n : term\n\n return {\n [type]: aggValue,\n ...(filterExtension && {\n filter: filterExtension + `${postFilter ?? ''}`,\n }),\n ...(pageType === ListingTypesEnum.Brand && {\n filter: `brand;eq;\"${predicate?._id}\"${applyBrandsPostFilter({\n postFilter,\n })}`,\n }),\n ...(pageType === ListingTypesEnum.Brand &&\n router.query.cat && {\n filter:\n `brand;eq;\"${predicate?._id}\"` +\n `${applyBrandsPostFilter({\n postFilter,\n })}&` +\n applyAttributePageFilter(router),\n }),\n ...(pageType === ListingTypesEnum.Category &&\n (router.query.cat\n ? {\n filter:\n extendFilter(\n applyAttributePageFilter(router),\n filterExtension\n ) + `${postFilter ? '&' + postFilter : ''}`,\n }\n : {\n filter: `${postFilter ?? ''}`,\n })),\n // ...(router.query.cat && {\n // filter: extendFilter(\n // applyAttributePageFilter(router),\n // filterExtension\n // ),\n // }),\n // Using this to conditionally apply the postFilter\n // as it will fail if you do postFilter=undefined\n } as any\n }\n case AggregateRequestEnum.Filters: {\n const query = predicate?.filters || predicate?._id || slug\n\n const queryType = pageType === ListingTypesEnum.Search ? 'text' : pageType\n\n let filter = `${queryType};eq;\"${query}\"`\n if (router.query.cat) {\n const [type, val] = getAttributePageType(router)\n filter += `&attr.${type};eq;${val}`\n }\n if (pageType === ListingTypesEnum.View) {\n filter = query\n }\n\n const aggregatesMap = aggregates?.reduce((map, agg) => {\n const aggregateType = agg.aggregationType\n const aggregationTerm = agg.aggregationDefinition\n if (map[aggregateType]) {\n return {\n ...map,\n [aggregateType]: `${map[aggregateType]}&${aggregationTerm}`,\n }\n }\n\n return {\n ...map,\n [aggregateType]: `${aggregationTerm}`,\n }\n }, {})\n\n return {\n ...aggregatesMap,\n filter: extendFilter(filter, filterExtension),\n ...(router.query?.filter && { postFilter }),\n // Using this to conditionally apply the postFilter\n // as it will fail if you do postFilter=undefined\n } as any\n }\n }\n}\n\nexport function generateAggregateKey(aggregates?: Aggregate[]) {\n return aggregates\n ?.map((aggregate) => aggregate?.aggregationDefinition)\n ?.join('&')\n}\n\nfunction getPostFilters(router: NextRouter) {\n const { query } = router\n return query && Array.isArray(query.filter)\n ? query?.filter?.join('&')\n : (query?.filter as string)\n}\n\nfunction isQueryEnabled(router: NextRouter, predicate?: string) {\n const pageType = getListingPageType(router)\n\n if (pageType === ListingTypesEnum.Search) {\n return canUseDOM()\n }\n\n return !!predicate && canUseDOM()\n}\n\nfunction applyAttributePageFilter(router: NextRouter) {\n const [type, val] = getAttributePageType(router)\n return `attr.${type};eq;${val}`\n}\n\nconst applyBrandsPostFilter = ({ postFilter }: { postFilter?: string }) => {\n if (postFilter) {\n const hasCategory = postFilter.includes('category')\n const filtersArr = postFilter.split('&')\n\n const filters = filtersArr.reduce((res, val, i) => {\n if (val.includes('category')) return res\n\n if (i === 0 && hasCategory) {\n return (res += `${val}`)\n } else {\n return (res += `&${val}`)\n }\n }, '')\n\n return `${filters}`\n }\n\n return ''\n}\n"],"file":"useAggregateQuery.js"}
1
+ {"version":3,"sources":["../../../../../src/listing/api/queries/useAggregateQuery.ts"],"names":["useQuery","CatalogAggregate","useRouter","usePredicate","useListingConfig","useListingSlug","ListingTypesEnum","extendFilter","getListingPageType","getAttributePageType","canUseDOM","AggregateRequestEnum","useAggregateQuery","aggregates","request","router","slug","data","predicate","config","postFilter","getPostFilters","aggregateKeys","generateAggregateKey","predicateId","_id","queryKeys","toString","query","prepareAggregateQuery","filterExtension","response","refetchOnMount","refetchOnWindowFocus","enabled","isQueryEnabled","keepPreviousData","staleTime","pageType","Categories","type","aggregationType","term","aggregationDefinition","aggValue","filter","Brand","applyBrandsPostFilter","cat","applyAttributePageFilter","Category","Filters","filters","queryType","Search","val","View","aggregatesMap","reduce","map","agg","aggregateType","aggregationTerm","aggregate","join","Array","isArray","hasCategory","includes","filtersArr","split","res","i"],"mappings":"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","sourcesContent":["import { useQuery } from 'react-query'\nimport {\n CatalogAggregate,\n RangeAggregationResult,\n TermAggregationResult,\n RangeAggregation,\n TermAggregation,\n StatAggregation,\n} from '@sentecacommerce/sdk'\nimport { NextRouter, useRouter } from 'next/router'\nimport { usePredicate, PredicateType } from './usePredicate'\nimport { useListingConfig, useListingSlug } from '../../hooks'\nimport { ListingTypesEnum } from '../../types'\nimport { extendFilter, getListingPageType } from '../../utils'\nimport { Aggregate } from '../../types'\nimport { getAttributePageType } from '../../hooks/utils'\nimport { canUseDOM } from '../../../utils'\n\nexport type AggregationResultType = RangeAggregationResult &\n TermAggregationResult &\n RangeAggregationResult\n\nexport type AggregateType = TermAggregation & StatAggregation & RangeAggregation\n\nexport enum AggregateRequestEnum {\n Filters = 'filters',\n Categories = 'categories',\n}\n\nexport const useAggregateQuery = (\n aggregates: Aggregate[],\n request: AggregateRequestEnum\n) => {\n const router = useRouter()\n const slug = useListingSlug()\n const { data: predicate } = usePredicate()\n const config = useListingConfig()\n const postFilter = getPostFilters(router)\n const aggregateKeys = generateAggregateKey(aggregates)\n const predicateId = predicate?._id\n\n const queryKeys = [request.toString(), aggregateKeys, slug, postFilter]\n\n return useQuery(\n queryKeys,\n async () => {\n // prevents an error in the case where a value of undefined is passed before hydration\n if (!aggregates[0]) return\n\n const query = prepareAggregateQuery({\n request,\n aggregates,\n predicate,\n router,\n postFilter,\n slug,\n filterExtension: config.filterExtension,\n })\n\n const response = await CatalogAggregate(query)\n\n return response\n },\n {\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n enabled: isQueryEnabled(router, predicateId),\n keepPreviousData: true,\n staleTime: 30000,\n }\n )\n}\n\nexport function prepareAggregateQuery({\n request,\n predicate,\n aggregates,\n router,\n postFilter,\n slug,\n filterExtension,\n}: {\n request: AggregateRequestEnum\n aggregates: Aggregate[]\n router: NextRouter\n postFilter: string | undefined\n predicate?: PredicateType\n filterExtension?: string\n slug: string\n}) {\n const pageType = getListingPageType(router)\n\n switch (request) {\n case AggregateRequestEnum.Categories: {\n const type = aggregates[0]?.aggregationType\n const term = aggregates?.[0].aggregationDefinition\n const aggValue =\n predicate?._id && term !== 'categories'\n ? `${term}:${predicate?._id}`\n : term\n\n return {\n [type]: aggValue,\n ...(filterExtension && {\n filter: filterExtension + `${postFilter ?? ''}`,\n }),\n ...(pageType === ListingTypesEnum.Brand && {\n filter: `brand;eq;\"${predicate?._id}\"${applyBrandsPostFilter({\n postFilter,\n })}`,\n }),\n ...(pageType === ListingTypesEnum.Brand &&\n router.query.cat && {\n filter:\n `brand;eq;\"${predicate?._id}\"` +\n `${applyBrandsPostFilter({\n postFilter,\n })}&` +\n applyAttributePageFilter(router),\n }),\n ...(pageType === ListingTypesEnum.Category &&\n (router.query.cat\n ? {\n filter:\n extendFilter(\n applyAttributePageFilter(router),\n filterExtension\n ) + `${postFilter ? '&' + postFilter : ''}`,\n }\n : {\n filter: `${postFilter ?? ''}`,\n })),\n // ...(router.query.cat && {\n // filter: extendFilter(\n // applyAttributePageFilter(router),\n // filterExtension\n // ),\n // }),\n // Using this to conditionally apply the postFilter\n // as it will fail if you do postFilter=undefined\n } as any\n }\n case AggregateRequestEnum.Filters: {\n const query = predicate?.filters || predicate?._id || slug\n\n const queryType = pageType === ListingTypesEnum.Search ? 'text' : pageType\n\n let filter = `${queryType};eq;\"${query}\"`\n if (router.query.cat) {\n const [type, val] = getAttributePageType(router)\n filter += `&attr.${type};eq;${val}`\n }\n if (pageType === ListingTypesEnum.View) {\n filter = query\n }\n\n const aggregatesMap = aggregates?.reduce((map, agg) => {\n const aggregateType = agg.aggregationType\n const aggregationTerm = agg.aggregationDefinition\n if (map[aggregateType]) {\n return {\n ...map,\n [aggregateType]: `${map[aggregateType]}&${aggregationTerm}`,\n }\n }\n\n return {\n ...map,\n [aggregateType]: `${aggregationTerm}`,\n }\n }, {})\n\n return {\n ...aggregatesMap,\n filter: extendFilter(filter, filterExtension),\n ...(router.query?.filter && { postFilter }),\n // Using this to conditionally apply the postFilter\n // as it will fail if you do postFilter=undefined\n } as any\n }\n }\n}\n\nexport function generateAggregateKey(aggregates?: Aggregate[]) {\n return aggregates\n ?.map((aggregate) => aggregate?.aggregationDefinition)\n ?.join('&')\n}\n\nfunction getPostFilters(router: NextRouter) {\n const { query } = router\n return query && Array.isArray(query.filter)\n ? query?.filter?.join('&')\n : (query?.filter as string)\n}\n\nfunction isQueryEnabled(router: NextRouter, predicate?: string) {\n const pageType = getListingPageType(router)\n\n if (pageType === ListingTypesEnum.Search) {\n return canUseDOM()\n }\n\n return !!predicate && canUseDOM()\n}\n\nfunction applyAttributePageFilter(router: NextRouter) {\n const [type, val] = getAttributePageType(router)\n return `attr.${type};eq;${val}`\n}\n\nconst applyBrandsPostFilter = ({ postFilter }: { postFilter?: string }) => {\n if (postFilter) {\n const hasCategory = postFilter.includes('category')\n const filtersArr = postFilter.split('&')\n\n const filters = filtersArr.reduce((res, val, i) => {\n if (val.includes('category')) return res\n\n if (i === 0 && hasCategory) {\n return (res += `${val}`)\n } else {\n return (res += `&${val}`)\n }\n }, '')\n\n return `${filters}`\n }\n\n return ''\n}\n"],"file":"useAggregateQuery.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/listing/hooks/useListingCategories.tsx"],"names":["React","useRouter","useListingConfig","getTranslatableField","typeToSuffix","useAggregateQuery","AggregateRequestEnum","processCategoriesResponse","getAggregateTypeAndTerm","ListingTypesEnum","getListingPageType","getPostFilters","ListingCategoriesStateContext","createContext","undefined","ListingCategoriesProvider","children","router","categoryTreeConfig","data","aggData","isLoading","Categories","currentCategory","generateCurrentUrl","type","term","useMemo","response","nodes","map","current","buildNodes","categoryTree","buildCategories","useListingCategories","context","useContext","Error","generateUrl","suffix","pageType","res","Brand","query","slug","cat","Category","meta","View","Search","filter","Array","isArray","idx","findIndex","x","includes","key","join","parentId","name","url","categories","node","roots","i","length","hasOwnProperty","selectedNode","push"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAAqBC,SAArB,QAAsC,aAAtC;AAEA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,oBAAT,EAA+BC,YAA/B,QAAmD,aAAnD;AACA,SACEC,iBADF,EAEEC,oBAFF,QAIO,QAJP;AAMA,SAASC,yBAAT,EAAoCC,uBAApC,QAAmE,SAAnE;AACA,SAAoBC,gBAApB,QAA4C,UAA5C;AACA,SAASC,kBAAT,EAA6BC,cAA7B,QAAmD,UAAnD;AAgBA,IAAMC,6BAA6B,gBAAGZ,KAAK,CAACa,aAAN,CAEpCC,SAFoC,CAAtC;AAIA,OAAO,SAASC,yBAAT,OAIJ;AAAA,MAJuC;AACxCC,IAAAA;AADwC,GAIvC;AACD,MAAMC,MAAM,GAAGhB,SAAS,EAAxB;AACA,MAAM;AAAEiB,IAAAA;AAAF,MAAyBhB,gBAAgB,EAA/C;AACA,MAAM;AAAEiB,IAAAA,IAAI,EAAEC,OAAR;AAAiBC,IAAAA;AAAjB,MAA+BhB,iBAAiB,CACpD,CAACa,kBAAD,CADoD,EAEpDZ,oBAAoB,CAACgB,UAF+B,CAAtD;AAIA,MAAMC,eAAe,GAAGC,kBAAkB,CAACP,MAAD,CAA1C;AACA,MAAM;AAAEQ,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAiBlB,uBAAuB,CAACU,kBAAD,CAA9C;AAEA,MAAMC,IAAI,GAAGnB,KAAK,CAAC2B,OAAN,CAAc,MAAM;AAC/B,QAAIP,OAAJ,EAAa;AACX,UAAMQ,QAAQ,GAAGrB,yBAAyB,CAACa,OAAD,EAAUK,IAAV,EAAgBC,IAAhB,CAA1C;AAEA,UAAMG,KAAK,GAAGD,QAAQ,CAACE,GAAT,CAAcC,OAAD,IAAaC,UAAU,CAACD,OAAD,EAAUd,MAAV,CAApC,CAAd;AAEA,UAAMgB,YAAY,GAAGC,eAAe,CAACL,KAAD,CAApC;AAEA,aAAOI,YAAP;AACD;;AACD,WAAO,IAAP;AACD,GAXY,EAWV,CAACb,OAAD,EAAUH,MAAV,CAXU,CAAb;AAaA,sBACE,oBAAC,6BAAD,CAA+B,QAA/B;AACE,IAAA,KAAK,EAAE;AAAEE,MAAAA,IAAF;AAAQE,MAAAA,SAAR;AAAmBE,MAAAA;AAAnB;AADT,KAGGP,QAHH,CADF;AAOD;AAED,OAAO,IAAMmB,oBAAoB,GAAG,MAAM;AACxC,MAAMC,OAAO,GAAGpC,KAAK,CAACqC,UAAN,CAAiBzB,6BAAjB,CAAhB;;AACA,MAAIwB,OAAO,KAAKtB,SAAhB,EAA2B;AACzB,UAAM,IAAIwB,KAAJ,CACJ,gEADI,CAAN;AAGD;;AACD,SAAOF,OAAP;AACD,CARM;;AAUP,SAASG,WAAT,CAAqBR,OAArB,EAAqDd,MAArD,EAAyE;AACvE,MAAMuB,MAAM,GAAGpC,YAAY,CAACM,kBAAkB,CAACO,MAAD,CAAnB,CAA3B;AACA,MAAMwB,QAAQ,GAAG/B,kBAAkB,CAACO,MAAD,CAAnC;AACA,MAAIyB,GAAJ;;AAEA,MAAID,QAAQ,KAAKhC,gBAAgB,CAACkC,KAAlC,EAAyC;AACvCD,IAAAA,GAAG,SAAOzB,MAAM,CAAC2B,KAAP,CAAaC,IAApB,SAA4BL,MAA/B;;AACA,QAAIvB,MAAM,CAAC2B,KAAP,CAAaE,GAAjB,EAAsB;AACpBJ,MAAAA,GAAG,SAAOzB,MAAM,CAAC2B,KAAP,CAAaC,IAApB,SAA4B5B,MAAM,CAAC2B,KAAP,CAAaE,GAAzC,SAAgDN,MAAnD;AACD;AACF;;AACD,MAAIC,QAAQ,KAAKhC,gBAAgB,CAACsC,QAAlC,EAA4C;AAC1CL,IAAAA,GAAG,SAAOvC,oBAAoB,CAAC4B,OAAO,CAACiB,IAAR,CAAaH,IAAd,CAA3B,SAAkDL,MAArD;;AACA,QAAIvB,MAAM,CAAC2B,KAAP,CAAaE,GAAjB,EAAsB;AACpBJ,MAAAA,GAAG,SAAOzB,MAAM,CAAC2B,KAAP,CAAaC,IAApB,SAA4B1C,oBAAoB,CACjD4B,OAAO,CAACiB,IAAR,CAAaH,IADoC,CAAhD,SAEEL,MAFL;AAGD;AACF;;AACD,MAAIC,QAAQ,KAAKhC,gBAAgB,CAACwC,IAAlC,EAAwC;AACtCP,IAAAA,GAAG,SAAOzB,MAAM,CAAC2B,KAAP,CAAaC,IAApB,SAA4B1C,oBAAoB,CACjD4B,OAAO,CAACiB,IAAR,CAAaH,IADoC,CAAhD,SAEEL,MAFL;AAGD;;AAED,MAAIC,QAAQ,KAAKhC,gBAAgB,CAACyC,MAAlC,EAA0C;AACxCR,IAAAA,GAAG,SAAOvC,oBAAoB,CAAC4B,OAAO,CAACiB,IAAR,CAAaH,IAAd,CAA3B,OAAH;AACD;;AAED,MAAIM,MAAM,GAAGlC,MAAM,CAAC2B,KAAP,CAAaO,MAA1B;;AAEA,MAAIX,MAAM,KAAK,GAAf,EAAoB;AAClB,QAAIW,MAAJ,EAAY;AACV,UAAIC,KAAK,CAACC,OAAN,CAAcF,MAAd,CAAJ,EAA2B;AACzBA,QAAAA,MAAM,GAAG,CAAC,GAAGA,MAAJ,CAAT;AACA,YAAMG,GAAG,GAAGH,MAAM,CAACI,SAAP,CAAkBC,CAAD,IAAYA,CAAC,CAACC,QAAF,CAAW,UAAX,CAA7B,CAAZ;AACAN,QAAAA,MAAM,CAACG,GAAD,CAAN,sBAA8BvB,OAAO,CAAC2B,GAAtC;AACD,OAJD,MAIO;AACL,YAAIP,MAAM,CAACM,QAAP,CAAgB,UAAhB,CAAJ,EAAiC;AAC/BN,UAAAA,MAAM,sBAAmBpB,OAAO,CAAC2B,GAA3B,OAAN;AACD,SAFD,MAEO;AACLP,UAAAA,MAAM,GAAG,CAACA,MAAD,qBAAyBpB,OAAO,CAAC2B,GAAjC,QAAT;AACD;AACF;AACF,KAZD,MAYO;AACLP,MAAAA,MAAM,sBAAmBpB,OAAO,CAAC2B,GAA3B,OAAN;AACD;AACF;;AAED,MAAIP,MAAJ,EAAY;AACV,QAAIC,KAAK,CAACC,OAAN,CAAcF,MAAd,CAAJ,EAA2B;AACzBT,MAAAA,GAAG,IAAI,aAAaS,MAAM,CAACQ,IAAP,CAAY,UAAZ,CAApB;AACD,KAFD,MAEO;AACLjB,MAAAA,GAAG,IAAI,aAAaS,MAApB;AACD;AACF;;AAED,SAAOT,GAAP;AACD;;AAED,SAASlB,kBAAT,CAA4BP,MAA5B,EAAgD;AAAA;;AAC9C,MAAMuB,MAAM,GAAGpC,YAAY,CAACM,kBAAkB,CAACO,MAAD,CAAnB,CAA3B;AACA,MAAIyB,GAAG,SAAOzB,MAAM,CAAC2B,KAAP,CAAaC,IAApB,SAA4BL,MAAnC;;AAEA,MAAIvB,MAAM,CAAC2B,KAAP,CAAaE,GAAjB,EAAsB;AACpBJ,IAAAA,GAAG,SAAOzB,MAAM,CAAC2B,KAAP,CAAaC,IAApB,SAA4B5B,MAAM,CAAC2B,KAAP,CAAaE,GAAzC,SAAgDN,MAAnD;AACD;;AAED,uBAAIvB,MAAM,CAAC2B,KAAX,aAAI,cAAcO,MAAlB,EAA0B;AACxBT,IAAAA,GAAG,IAAI,aAAa/B,cAAc,CAACM,MAAD,CAAlC;AACD;;AACD,SAAOyB,GAAP;AACD;;AAED,SAASV,UAAT,CACED,OADF,EAGEd,MAHF,EAIQ;AACN,SAAO;AACL2C,IAAAA,QAAQ,EAAE7B,OAAO,CAACiB,IAAR,CAAaY,QADlB;AAELF,IAAAA,GAAG,EAAE3B,OAAO,CAAC2B,GAFR;AAGL1C,IAAAA,QAAQ,EAAE,EAHL;AAIL6C,IAAAA,IAAI,EAAE1D,oBAAoB,CAAC4B,OAAO,CAACiB,IAAR,CAAaa,IAAd,CAJrB;AAKLC,IAAAA,GAAG,EAAEvB,WAAW,CAACR,OAAD,EAAUd,MAAV;AALX,GAAP;AAOD;;AAED,SAASiB,eAAT,CAAyB6B,UAAzB,EAAqD;AACnD,MAAMjC,GAAG,GAAG,EAAZ;AACA,MAAIkC,IAAJ;AACA,MAAMC,KAAK,GAAG,EAAd;AACA,MAAIC,CAAJ;;AAEA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAGH,UAAH,oBAAGA,UAAU,CAAEI,MAAf,CAAb,EAAoCD,CAAC,IAAI,CAAzC,EAA4C;AAC1CpC,IAAAA,GAAG,CAACiC,UAAU,CAACG,CAAD,CAAV,CAAcR,GAAf,CAAH,GAAyBQ,CAAzB;AACAH,IAAAA,UAAU,CAACG,CAAD,CAAV,CAAclD,QAAd,GAAyB,EAAzB;AACD;;AAED,OAAKkD,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAGH,UAAH,oBAAGA,UAAU,CAAEI,MAAf,CAAb,EAAoCD,CAAC,IAAI,CAAzC,EAA4C;AAC1CF,IAAAA,IAAI,GAAGD,UAAU,CAACG,CAAD,CAAjB,CAD0C,CAE1C;AACA;AACA;;AACA,QAAIF,IAAI,CAACJ,QAAL,IAAiB9B,GAAG,CAACsC,cAAJ,CAAmBJ,IAAI,CAACJ,QAAxB,CAArB,EAAwD;AACtD,UAAII,IAAI,CAACN,GAAL,KAAaM,IAAI,CAACJ,QAAtB,EAAgC;AAAA;;AAC9B,YAAMS,YAAY,GAAGN,UAAU,CAACjC,GAAG,UAACkC,IAAD,qBAAC,MAAMJ,QAAP,CAAJ,CAA/B;AACAS,QAAAA,YAAY,QAAZ,qCAAAA,YAAY,CAAErD,QAAd,2CAAwBsD,IAAxB,CAA6BN,IAA7B;AACD;AACF,KALD,MAKO;AACLC,MAAAA,KAAK,CAACK,IAAN,CAAWN,IAAX;AACD;AACF;;AAED,SAAOC,KAAP;AACD","sourcesContent":["import React from 'react'\nimport { NextRouter, useRouter } from 'next/router'\n\nimport { useListingConfig } from './useListingConfig'\nimport { getTranslatableField, typeToSuffix } from '../../utils'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregationResultType,\n} from '../api'\n\nimport { processCategoriesResponse, getAggregateTypeAndTerm } from './utils'\nimport { Aggregate, ListingTypesEnum } from '../types'\nimport { getListingPageType, getPostFilters } from '../utils'\n\nexport type Node = {\n children?: Node[]\n key: string\n parentId: string\n name: string\n url: string\n}\n\nexport type UseListingCategoriesResult = {\n data: Node[] | null\n isLoading: boolean\n currentCategory: string\n}\n\nconst ListingCategoriesStateContext = React.createContext<\n UseListingCategoriesResult | undefined\n>(undefined)\n\nexport function ListingCategoriesProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const router = useRouter()\n const { categoryTreeConfig } = useListingConfig()\n const { data: aggData, isLoading } = useAggregateQuery(\n [categoryTreeConfig as Aggregate],\n AggregateRequestEnum.Categories\n )\n const currentCategory = generateCurrentUrl(router)\n const { type, term } = getAggregateTypeAndTerm(categoryTreeConfig)\n\n const data = React.useMemo(() => {\n if (aggData) {\n const response = processCategoriesResponse(aggData, type, term)\n\n const nodes = response.map((current) => buildNodes(current, router))\n\n const categoryTree = buildCategories(nodes)\n\n return categoryTree\n }\n return null\n }, [aggData, router])\n\n return (\n <ListingCategoriesStateContext.Provider\n value={{ data, isLoading, currentCategory }}\n >\n {children}\n </ListingCategoriesStateContext.Provider>\n )\n}\n\nexport const useListingCategories = () => {\n const context = React.useContext(ListingCategoriesStateContext)\n if (context === undefined) {\n throw new Error(\n 'useListingFilters must be used within a ListingFiltersProvider'\n )\n }\n return context\n}\n\nfunction generateUrl(current: AggregationResultType, router: NextRouter) {\n const suffix = typeToSuffix[getListingPageType(router)]\n const pageType = getListingPageType(router)\n let res\n\n if (pageType === ListingTypesEnum.Brand) {\n res = `/${router.query.slug}/${suffix}`\n if (router.query.cat) {\n res = `/${router.query.slug}/${router.query.cat}/${suffix}`\n }\n }\n if (pageType === ListingTypesEnum.Category) {\n res = `/${getTranslatableField(current.meta.slug)}/${suffix}`\n if (router.query.cat) {\n res = `/${router.query.slug}/${getTranslatableField(\n current.meta.slug\n )}/${suffix}`\n }\n }\n if (pageType === ListingTypesEnum.View) {\n res = `/${router.query.slug}/${getTranslatableField(\n current.meta.slug\n )}/${suffix}`\n }\n\n if (pageType === ListingTypesEnum.Search) {\n res = `/${getTranslatableField(current.meta.slug)}/c`\n }\n\n let filter = router.query.filter as any\n\n if (suffix === 'b') {\n if (filter) {\n if (Array.isArray(filter)) {\n filter = [...filter]\n const idx = filter.findIndex((x: any) => x.includes('category'))\n filter[idx] = `category;eq;\"${current.key}\"`\n } else {\n if (filter.includes('category')) {\n filter = `category;eq;\"${current.key}\"`\n } else {\n filter = [filter, `category;eq;\"${current.key}\"`]\n }\n }\n } else {\n filter = `category;eq;\"${current.key}\"`\n }\n }\n\n if (filter) {\n if (Array.isArray(filter)) {\n res += '?filter=' + filter.join('&filter=')\n } else {\n res += '?filter=' + filter\n }\n }\n\n return res as string\n}\n\nfunction generateCurrentUrl(router: NextRouter) {\n const suffix = typeToSuffix[getListingPageType(router)]\n let res = `/${router.query.slug}/${suffix}`\n\n if (router.query.cat) {\n res = `/${router.query.slug}/${router.query.cat}/${suffix}`\n }\n\n if (router.query?.filter) {\n res += '?filter=' + getPostFilters(router)\n }\n return res\n}\n\nfunction buildNodes(\n current: AggregationResultType,\n\n router: NextRouter\n): Node {\n return {\n parentId: current.meta.parentId,\n key: current.key,\n children: [],\n name: getTranslatableField(current.meta.name),\n url: generateUrl(current, router),\n }\n}\n\nfunction buildCategories(categories: Node[]): Node[] {\n const map = {}\n let node\n const roots = []\n let i\n\n for (i = 0; i < categories?.length; i += 1) {\n map[categories[i].key] = i\n categories[i].children = []\n }\n\n for (i = 0; i < categories?.length; i += 1) {\n node = categories[i]\n // ? map[node.parent.resourceId] handles the case when a product has specified categories\n // ? without any of the ancestor ones eg. have Man > Shoes > Loafers the product\n // ? has specified only Loafers or Shoes > Loafers.\n if (node.parentId && map.hasOwnProperty(node.parentId)) {\n if (node.key !== node.parentId) {\n const selectedNode = categories[map[node?.parentId]]\n selectedNode?.children?.push(node)\n }\n } else {\n roots.push(node)\n }\n }\n\n return roots\n}\n"],"file":"useListingCategories.js"}
1
+ {"version":3,"sources":["../../../../src/listing/hooks/useListingCategories.tsx"],"names":["React","useRouter","useListingConfig","getTranslatableField","typeToSuffix","useAggregateQuery","AggregateRequestEnum","processCategoriesResponse","getAggregateTypeAndTerm","ListingTypesEnum","getListingPageType","getPostFilters","ListingCategoriesStateContext","createContext","undefined","ListingCategoriesProvider","children","router","categoryTreeConfig","data","aggData","isLoading","Categories","currentCategory","generateCurrentUrl","type","term","useMemo","response","nodes","map","current","buildNodes","categoryTree","buildCategories","useListingCategories","context","useContext","Error","generateUrl","suffix","pageType","res","Brand","query","slug","cat","Category","meta","View","Search","filter","Array","isArray","idx","findIndex","x","includes","key","join","parentId","name","url","categories","node","roots","i","length","hasOwnProperty","selectedNode","push"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { NextRouter, useRouter } from 'next/router'\n\nimport { useListingConfig } from './useListingConfig'\nimport { getTranslatableField, typeToSuffix } from '../../utils'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregationResultType,\n} from '../api'\n\nimport { processCategoriesResponse, getAggregateTypeAndTerm } from './utils'\nimport { Aggregate, ListingTypesEnum } from '../types'\nimport { getListingPageType, getPostFilters } from '../utils'\n\nexport type Node = {\n children?: Node[]\n key: string\n parentId: string\n name: string\n url: string\n}\n\nexport type UseListingCategoriesResult = {\n data: Node[] | null\n isLoading: boolean\n currentCategory: string\n}\n\nconst ListingCategoriesStateContext = React.createContext<\n UseListingCategoriesResult | undefined\n>(undefined)\n\nexport function ListingCategoriesProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const router = useRouter()\n const { categoryTreeConfig } = useListingConfig()\n\n const { data: aggData, isLoading } = useAggregateQuery(\n [categoryTreeConfig as Aggregate],\n AggregateRequestEnum.Categories\n )\n const currentCategory = generateCurrentUrl(router)\n const { type, term } = getAggregateTypeAndTerm(categoryTreeConfig)\n\n const data = React.useMemo(() => {\n if (aggData) {\n const response = processCategoriesResponse(aggData, type, term)\n\n const nodes = response.map((current) => buildNodes(current, router))\n\n const categoryTree = buildCategories(nodes)\n\n return categoryTree\n }\n return null\n }, [aggData, router])\n\n return (\n <ListingCategoriesStateContext.Provider\n value={{ data, isLoading, currentCategory }}\n >\n {children}\n </ListingCategoriesStateContext.Provider>\n )\n}\n\nexport const useListingCategories = () => {\n const context = React.useContext(ListingCategoriesStateContext)\n if (context === undefined) {\n throw new Error(\n 'useListingFilters must be used within a ListingFiltersProvider'\n )\n }\n return context\n}\n\nfunction generateUrl(current: AggregationResultType, router: NextRouter) {\n const suffix = typeToSuffix[getListingPageType(router)]\n const pageType = getListingPageType(router)\n let res\n\n if (pageType === ListingTypesEnum.Brand) {\n res = `/${router.query.slug}/${suffix}`\n if (router.query.cat) {\n res = `/${router.query.slug}/${router.query.cat}/${suffix}`\n }\n }\n if (pageType === ListingTypesEnum.Category) {\n res = `/${getTranslatableField(current.meta.slug)}/${suffix}`\n if (router.query.cat) {\n res = `/${router.query.slug}/${getTranslatableField(\n current.meta.slug\n )}/${suffix}`\n }\n }\n if (pageType === ListingTypesEnum.View) {\n res = `/${router.query.slug}/${getTranslatableField(\n current.meta.slug\n )}/${suffix}`\n }\n\n if (pageType === ListingTypesEnum.Search) {\n res = `/${getTranslatableField(current.meta.slug)}/c`\n }\n\n let filter = router.query.filter as any\n\n if (suffix === 'b') {\n if (filter) {\n if (Array.isArray(filter)) {\n filter = [...filter]\n const idx = filter.findIndex((x: any) => x.includes('category'))\n filter[idx] = `category;eq;\"${current.key}\"`\n } else {\n if (filter.includes('category')) {\n filter = `category;eq;\"${current.key}\"`\n } else {\n filter = [filter, `category;eq;\"${current.key}\"`]\n }\n }\n } else {\n filter = `category;eq;\"${current.key}\"`\n }\n }\n\n if (filter) {\n if (Array.isArray(filter)) {\n res += '?filter=' + filter.join('&filter=')\n } else {\n res += '?filter=' + filter\n }\n }\n\n return res as string\n}\n\nfunction generateCurrentUrl(router: NextRouter) {\n const suffix = typeToSuffix[getListingPageType(router)]\n let res = `/${router.query.slug}/${suffix}`\n\n if (router.query.cat) {\n res = `/${router.query.slug}/${router.query.cat}/${suffix}`\n }\n\n if (router.query?.filter) {\n res += '?filter=' + getPostFilters(router)\n }\n return res\n}\n\nfunction buildNodes(\n current: AggregationResultType,\n\n router: NextRouter\n): Node {\n return {\n parentId: current.meta.parentId,\n key: current.key,\n children: [],\n name: getTranslatableField(current.meta.name),\n url: generateUrl(current, router),\n }\n}\n\nfunction buildCategories(categories: Node[]): Node[] {\n const map = {}\n let node\n const roots = []\n let i\n\n for (i = 0; i < categories?.length; i += 1) {\n map[categories[i].key] = i\n categories[i].children = []\n }\n\n for (i = 0; i < categories?.length; i += 1) {\n node = categories[i]\n // ? map[node.parent.resourceId] handles the case when a product has specified categories\n // ? without any of the ancestor ones eg. have Man > Shoes > Loafers the product\n // ? has specified only Loafers or Shoes > Loafers.\n if (node.parentId && map.hasOwnProperty(node.parentId)) {\n if (node.key !== node.parentId) {\n const selectedNode = categories[map[node?.parentId]]\n selectedNode?.children?.push(node)\n }\n } else {\n roots.push(node)\n }\n }\n\n return roots\n}\n"],"file":"useListingCategories.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/listing/hooks/useListingFilters.tsx"],"names":["React","useRouter","useListingConfig","useAggregateQuery","AggregateRequestEnum","ListingTypesEnum","useListingSlug","stripQueryProps","typeToSuffix","generateQueryStringFromQuery","getSelectedFilters","RangeAggregation","StatAggregation","TermAggregation","ListingFiltersStateContext","createContext","undefined","ListingFiltersProvider","children","aggregates","type","pageType","data","aggData","isLoading","isFetching","Filters","router","slug","useMemo","result","sort","a","b","order","map","currentAggregate","aggregationType","toString","term","aggregationDefinition","split","filter","filterDefinition","current","find","agg","name","generatedFilters","generateFilters","rawFilters","selectedCount","reduce","count","res","selected","attributeResult","label","component","items","raw","clearAll","push","pathname","query","filterByType","clearAllFilters","selectedFilters","useListingFilters","context","useContext","Error","results","currentTerm","filterKey","mapKey","includes","filtersOperatorsMap","meta","onClick","createAggregateQuery","aggType","aggKey","aggOperator","ranges","stats","terms","r","keysMap","key","from","to","manageFilter","pair","remove","stripped","q","replace","aggPair","Search","cat","filters","filterName"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { useRouter } from 'next/router'\nimport { NextRouter } from 'next/router'\nimport { useListingConfig } from './useListingConfig'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregateType,\n AggregationResultType,\n} from '../api'\n\nimport { Aggregate, ListingTypesEnum } from '../types'\nimport { useListingSlug } from './useListingSlug'\n\nimport { stripQueryProps } from '../../utils/generateQueryFromRouter'\nimport { typeToSuffix } from '../../utils/typeToSuffix'\nimport { generateQueryStringFromQuery } from '../../utils/generateQueryStringFromQuery'\nimport { RangeAggregation, StatAggregation, TermAggregation } from '@sentecacommerce/sdk'\nimport { getSelectedFilters } from '../../utils'\nexport { RangeAggregation, StatAggregation, TermAggregation } from '@sentecacommerce/sdk'\n\ntype AggPair = {\n aggType: string\n aggKey: string\n aggOperator: string\n}\n\nexport type ListingAggregationResultType = {\n selected: boolean\n data: AggregationResultType\n meta: any\n aggregationType?: string\n onClick: () => void\n}\n\nexport type ListingAggregateType = {\n name: string\n component: string\n type: string\n selectedCount: number\n items: ListingAggregationResultType[]\n clearAll: () => void\n raw: StatAggregation | RangeAggregation | TermAggregation\n}\n\nexport type UseListingFiltersResult = {\n data?: ListingAggregateType[]\n clearAllFilters: () => void\n selectedFilters: ListingAggregationResultType[]\n isLoading: boolean\n isFetching: boolean\n}\n\nconst ListingFiltersStateContext = React.createContext<\n UseListingFiltersResult | undefined\n>(undefined)\n\nexport function ListingFiltersProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const { aggregates, type: pageType } = useListingConfig()\n const { data: aggData, isLoading, isFetching } = useAggregateQuery(\n aggregates as Aggregate[],\n AggregateRequestEnum.Filters\n )\n\n const router = useRouter()\n const slug = useListingSlug()\n\n const data = React.useMemo(() => {\n if (!isLoading && aggData) {\n const result = aggregates\n ?.sort((a, b) => a.order - b.order)\n .map((currentAggregate) => {\n const type = currentAggregate.aggregationType.toString()\n const term = currentAggregate.aggregationDefinition.split(':')[0]\n const filter = currentAggregate.filterDefinition\n const current: AggregateType = aggData[type].find(\n (agg: AggregateType) => agg.name === term\n )\n\n const generatedFilters = generateFilters({\n rawFilters: current,\n filter,\n router,\n type,\n slug,\n pageType,\n })\n\n const selectedCount = generatedFilters?.reduce((count, res) => {\n if (res.selected) count++\n return count\n }, 0)\n\n const attributeResult = ({\n name: currentAggregate.label,\n component: currentAggregate.component,\n items: generatedFilters,\n selectedCount,\n raw: current,\n clearAll: () =>\n router.push({\n pathname: router.pathname,\n query: {\n ...router.query,\n filter: filterByType(router.query.filter, filter),\n },\n }),\n type: type,\n } as unknown) as ListingAggregateType\n\n return attributeResult\n })\n\n return result\n }\n return undefined\n }, [aggData, router])\n\n const clearAllFilters = () => {\n const query = { ...router.query }\n delete query.filter\n\n router.push({\n pathname: router.pathname,\n query,\n })\n }\n\n const selectedFilters = React.useMemo(() => {\n return getSelectedFilters(router, data as any) as any\n }, [router, data])\n\n return (\n <ListingFiltersStateContext.Provider\n value={{ data, clearAllFilters, selectedFilters, isLoading, isFetching }}\n >\n {children}\n </ListingFiltersStateContext.Provider>\n )\n}\n\nexport function useListingFilters() {\n const context = React.useContext(ListingFiltersStateContext)\n if (context === undefined) {\n throw new Error(\n 'useListingFilters must be used within a ListingFiltersProvider'\n )\n }\n return context\n}\n\nfunction generateFilters({\n rawFilters,\n type,\n filter,\n slug,\n router,\n pageType,\n}: {\n rawFilters: AggregateType\n type: string\n filter: string\n slug: string\n router: NextRouter\n pageType: ListingTypesEnum\n}) {\n return rawFilters.results\n ?.filter((res) => res.count > 0)\n ?.map((currentTerm) => {\n const filterKey = mapKey(currentTerm, type)\n\n const selected = !!router.query?.filter?.includes(\n `${filter};${filtersOperatorsMap[type]};${filterKey}`\n )\n\n return {\n data: currentTerm,\n selected,\n meta: currentTerm.meta,\n onClick: () => {\n router.push(\n createAggregateQuery(\n pageType,\n slug,\n {\n aggType: filter,\n aggKey: filterKey,\n aggOperator: filtersOperatorsMap[type],\n },\n selected,\n router\n )\n )\n },\n }\n })\n}\n\nexport const filtersOperatorsMap = {\n ranges: 'range',\n stats: 'range',\n terms: 'eq',\n}\n\nfunction mapKey(r: any, type: any) {\n const keysMap = {\n terms: `\"${r.key}\"`,\n ranges: `${r.from},${r.to}`,\n }\n if (!keysMap[type]) return r.key\n\n return keysMap[type]\n}\n\nfunction manageFilter(pair: AggPair, query: any, remove: boolean) {\n const stripped = stripQueryProps(query, ['page']) // reset pagination on filter\n let q = generateQueryStringFromQuery(stripped)\n let filter = `filter=${pair.aggType};${pair.aggOperator};${pair.aggKey}`\n if (remove) {\n q = q\n .replace(`&${filter}`, '')\n .replace(`${filter}&`, '')\n .replace(filter, '')\n filter = ''\n }\n const result = `${q ? q : ''}${filter ? `${q ? '&' : ''}${filter}` : ''}`\n return result\n}\n\nfunction createAggregateQuery(\n type: ListingTypesEnum,\n slug: string,\n aggPair: AggPair,\n remove: boolean,\n router: NextRouter\n) {\n if (type === ListingTypesEnum.Search) {\n return `/search?q=${slug}&${manageFilter(aggPair, router.query, remove)}`\n }\n\n if (router.query.cat) {\n return `/${router.query.slug}/${router.query.cat}/${\n typeToSuffix[type]\n }?${manageFilter(aggPair, router.query, remove)}`\n }\n\n return `/${slug}/${typeToSuffix[type]}?${manageFilter(\n aggPair,\n router.query,\n remove\n )}`\n}\n\nfunction filterByType(\n filters: string | string[] | undefined,\n filterName: string\n) {\n if (!filters) return\n\n if (typeof filters === 'string') {\n if (filters.includes(filterName)) return\n\n return filters\n }\n\n return filters.filter((filter) => !filter.includes(filterName))\n}\n"],"file":"useListingFilters.js"}
1
+ {"version":3,"sources":["../../../../src/listing/hooks/useListingFilters.tsx"],"names":["React","useRouter","useListingConfig","useAggregateQuery","AggregateRequestEnum","ListingTypesEnum","useListingSlug","stripQueryProps","typeToSuffix","generateQueryStringFromQuery","getSelectedFilters","RangeAggregation","StatAggregation","TermAggregation","ListingFiltersStateContext","createContext","undefined","ListingFiltersProvider","children","aggregates","type","pageType","data","aggData","isLoading","isFetching","Filters","router","slug","useMemo","result","sort","a","b","order","map","currentAggregate","aggregationType","toString","term","aggregationDefinition","split","filter","filterDefinition","current","find","agg","name","generatedFilters","generateFilters","rawFilters","selectedCount","reduce","count","res","selected","attributeResult","label","component","items","raw","clearAll","push","pathname","query","filterByType","clearAllFilters","selectedFilters","useListingFilters","context","useContext","Error","results","currentTerm","filterKey","mapKey","includes","filtersOperatorsMap","meta","onClick","createAggregateQuery","aggType","aggKey","aggOperator","ranges","stats","terms","r","keysMap","key","from","to","manageFilter","pair","remove","stripped","q","replace","aggPair","Search","cat","filters","filterName"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { useRouter } from 'next/router'\nimport { NextRouter } from 'next/router'\nimport { useListingConfig } from './useListingConfig'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregateType,\n AggregationResultType,\n} from '../api'\n\nimport { Aggregate, ListingTypesEnum } from '../types'\nimport { useListingSlug } from './useListingSlug'\n\nimport { stripQueryProps } from '../../utils/generateQueryFromRouter'\nimport { typeToSuffix } from '../../utils/typeToSuffix'\nimport { generateQueryStringFromQuery } from '../../utils/generateQueryStringFromQuery'\nimport {\n RangeAggregation,\n StatAggregation,\n TermAggregation,\n} from '@sentecacommerce/sdk'\nimport { getSelectedFilters } from '../../utils'\nexport {\n RangeAggregation,\n StatAggregation,\n TermAggregation,\n} from '@sentecacommerce/sdk'\n\ntype AggPair = {\n aggType: string\n aggKey: string\n aggOperator: string\n}\n\nexport type ListingAggregationResultType = {\n selected: boolean\n data: AggregationResultType\n meta: any\n aggregationType?: string\n onClick: () => void\n}\n\nexport type ListingAggregateType = {\n name: string\n component: string\n type: string\n selectedCount: number\n items: ListingAggregationResultType[]\n clearAll: () => void\n raw: StatAggregation | RangeAggregation | TermAggregation\n}\n\nexport type UseListingFiltersResult = {\n data?: ListingAggregateType[]\n clearAllFilters: () => void\n selectedFilters: ListingAggregationResultType[]\n isLoading: boolean\n isFetching: boolean\n}\n\nconst ListingFiltersStateContext = React.createContext<\n UseListingFiltersResult | undefined\n>(undefined)\n\nexport function ListingFiltersProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const { aggregates, type: pageType } = useListingConfig()\n\n const { data: aggData, isLoading, isFetching } = useAggregateQuery(\n aggregates as Aggregate[],\n AggregateRequestEnum.Filters\n )\n\n const router = useRouter()\n const slug = useListingSlug()\n\n const data = React.useMemo(() => {\n if (!isLoading && aggData) {\n const result = aggregates\n ?.sort((a, b) => a.order - b.order)\n .map((currentAggregate) => {\n const type = currentAggregate.aggregationType.toString()\n const term = currentAggregate.aggregationDefinition.split(':')[0]\n const filter = currentAggregate.filterDefinition\n const current: AggregateType = aggData[type].find(\n (agg: AggregateType) => agg.name === term\n )\n\n const generatedFilters = generateFilters({\n rawFilters: current,\n filter,\n router,\n type,\n slug,\n pageType,\n })\n\n const selectedCount = generatedFilters?.reduce((count, res) => {\n if (res.selected) count++\n return count\n }, 0)\n\n const attributeResult = ({\n name: currentAggregate.label,\n component: currentAggregate.component,\n items: generatedFilters,\n selectedCount,\n raw: current,\n clearAll: () =>\n router.push({\n pathname: router.pathname,\n query: {\n ...router.query,\n filter: filterByType(router.query.filter, filter),\n },\n }),\n type: type,\n } as unknown) as ListingAggregateType\n\n return attributeResult\n })\n\n return result\n }\n return undefined\n }, [aggData, router])\n\n const clearAllFilters = () => {\n const query = { ...router.query }\n delete query.filter\n\n router.push({\n pathname: router.pathname,\n query,\n })\n }\n\n const selectedFilters = React.useMemo(() => {\n return getSelectedFilters(router, data as any) as any\n }, [router, data])\n\n return (\n <ListingFiltersStateContext.Provider\n value={{ data, clearAllFilters, selectedFilters, isLoading, isFetching }}\n >\n {children}\n </ListingFiltersStateContext.Provider>\n )\n}\n\nexport function useListingFilters() {\n const context = React.useContext(ListingFiltersStateContext)\n if (context === undefined) {\n throw new Error(\n 'useListingFilters must be used within a ListingFiltersProvider'\n )\n }\n return context\n}\n\nfunction generateFilters({\n rawFilters,\n type,\n filter,\n slug,\n router,\n pageType,\n}: {\n rawFilters: AggregateType\n type: string\n filter: string\n slug: string\n router: NextRouter\n pageType: ListingTypesEnum\n}) {\n return rawFilters.results\n ?.filter((res) => res.count > 0)\n ?.map((currentTerm) => {\n const filterKey = mapKey(currentTerm, type)\n\n const selected = !!router.query?.filter?.includes(\n `${filter};${filtersOperatorsMap[type]};${filterKey}`\n )\n\n return {\n data: currentTerm,\n selected,\n meta: currentTerm.meta,\n onClick: () => {\n router.push(\n createAggregateQuery(\n pageType,\n slug,\n {\n aggType: filter,\n aggKey: filterKey,\n aggOperator: filtersOperatorsMap[type],\n },\n selected,\n router\n )\n )\n },\n }\n })\n}\n\nexport const filtersOperatorsMap = {\n ranges: 'range',\n stats: 'range',\n terms: 'eq',\n}\n\nfunction mapKey(r: any, type: any) {\n const keysMap = {\n terms: `\"${r.key}\"`,\n ranges: `${r.from},${r.to}`,\n }\n if (!keysMap[type]) return r.key\n\n return keysMap[type]\n}\n\nfunction manageFilter(pair: AggPair, query: any, remove: boolean) {\n const stripped = stripQueryProps(query, ['page']) // reset pagination on filter\n let q = generateQueryStringFromQuery(stripped)\n let filter = `filter=${pair.aggType};${pair.aggOperator};${pair.aggKey}`\n if (remove) {\n q = q\n .replace(`&${filter}`, '')\n .replace(`${filter}&`, '')\n .replace(filter, '')\n filter = ''\n }\n const result = `${q ? q : ''}${filter ? `${q ? '&' : ''}${filter}` : ''}`\n return result\n}\n\nfunction createAggregateQuery(\n type: ListingTypesEnum,\n slug: string,\n aggPair: AggPair,\n remove: boolean,\n router: NextRouter\n) {\n if (type === ListingTypesEnum.Search) {\n return `/search?q=${slug}&${manageFilter(aggPair, router.query, remove)}`\n }\n\n if (router.query.cat) {\n return `/${router.query.slug}/${router.query.cat}/${\n typeToSuffix[type]\n }?${manageFilter(aggPair, router.query, remove)}`\n }\n\n return `/${slug}/${typeToSuffix[type]}?${manageFilter(\n aggPair,\n router.query,\n remove\n )}`\n}\n\nfunction filterByType(\n filters: string | string[] | undefined,\n filterName: string\n) {\n if (!filters) return\n\n if (typeof filters === 'string') {\n if (filters.includes(filterName)) return\n\n return filters\n }\n\n return filters.filter((filter) => !filter.includes(filterName))\n}\n"],"file":"useListingFilters.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/listing/hooks/useListingSEOCategories.tsx"],"names":["React","useRouter","useAggregateQuery","AggregateRequestEnum","useListingConfig","getTranslatableField","processCategoriesResponse","getAggregateTypeAndTerm","slugTypeToUrl","category","collection","brand","useListingSEOCategories","seoAggregates","data","aggData","isLoading","isIdle","isFetching","Categories","router","filterDefinition","useMemo","type","term","response","name","label","component","items","map","current","buildFilter","filter","meta","url","slug","query","cat"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAAqBC,SAArB,QAAsC,aAAtC;AACA,SACEC,iBADF,EAEEC,oBAFF,QAIO,QAJP;AAMA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,oBAAT,QAAqC,aAArC;AAEA,SAASC,yBAAT,EAAoCC,uBAApC,QAAmE,SAAnE;AAEA,IAAMC,aAAa,GAAG;AACpBC,EAAAA,QAAQ,EAAE,IADU;AAEpBC,EAAAA,UAAU,EAAE,KAFQ;AAGpBC,EAAAA,KAAK,EAAE;AAHa,CAAtB;AAsBA,OAAO,IAAMC,uBAAuB,GAAG,MAA0C;AAC/E,MAAM;AAAEC,IAAAA;AAAF,MAAoBT,gBAAgB,EAA1C;AACA,MAAM;AAAEU,IAAAA,IAAI,EAAEC,OAAR;AAAiBC,IAAAA,SAAjB;AAA4BC,IAAAA,MAA5B;AAAoCC,IAAAA;AAApC,MAAmDhB,iBAAiB,CACxE,CAACW,aAAD,CADwE,EAExEV,oBAAoB,CAACgB,UAFmD,CAA1E;AAIA,MAAMC,MAAM,GAAGnB,SAAS,EAAxB;AACA,MAAMoB,gBAAgB,GAAGR,aAAH,oBAAGA,aAAa,CAAEQ,gBAAxC;AAEA,MAAMP,IAAwB,GAAGd,KAAK,CAACsB,OAAN,CAAc,MAAM;AACnD,QAAIN,SAAS,IAAI,CAACD,OAAlB,EAA2B;AACzB,aAAO,IAAP;AACD;;AAED,QAAM;AAAEQ,MAAAA,IAAF;AAAQC,MAAAA;AAAR,QAAiBjB,uBAAuB,CAACM,aAAD,CAA9C;AAEA,QAAMY,QAAQ,GAAGnB,yBAAyB,CAACS,OAAD,EAAUQ,IAAV,EAAgBC,IAAhB,CAA1C;AAEA,WAAO,CACL;AACEE,MAAAA,IAAI,EAAEb,aAAF,oBAAEA,aAAa,CAAEc,KADvB;AAEEC,MAAAA,SAAS,EAAEf,aAAF,oBAAEA,aAAa,CAAEe,SAF5B;AAGEC,MAAAA,KAAK,EAAEJ,QAAF,oBAAEA,QAAQ,CAAEK,GAAV,CAAeC,OAAD,IACnBC,WAAW,CAACD,OAAD,EAAUV,gBAAV,EAA4BD,MAA5B,CADN;AAHT,KADK,CAAP;AASD,GAlBgC,EAkB9B,CAACF,UAAD,EAAaE,MAAb,CAlB8B,CAAjC;AAoBA,SAAO;AAAEN,IAAAA,IAAF;AAAQE,IAAAA,SAAR;AAAmBE,IAAAA,UAAnB;AAA+BD,IAAAA;AAA/B,GAAP;AACD,CA9BM;;AAgCP,SAASe,WAAT,CACED,OADF,EAEEE,MAFF,EAGEb,MAHF,EAIE;AACA,MAAMM,IAAI,GAAGrB,oBAAoB,CAAC0B,OAAO,CAACG,IAAR,CAAaR,IAAd,CAAjC;AACA,MAAIS,GAAG,SAAO9B,oBAAoB,CAAC0B,OAAO,CAACG,IAAR,CAAaE,IAAd,CAA3B,GACL5B,aAAa,CAACyB,MAAD,CADf;;AAGA,MAAIb,MAAM,CAACiB,KAAP,CAAaC,GAAjB,EAAsB;AACpBH,IAAAA,GAAG,SAAOf,MAAM,CAACiB,KAAP,CAAaD,IAApB,SAA4B/B,oBAAoB,CAAC0B,OAAO,CAACG,IAAR,CAAaE,IAAd,CAAhD,GACD5B,aAAa,CAACyB,MAAD,CADf;AAGD;;AACD,SAAO;AACLP,IAAAA,IADK;AAELS,IAAAA;AAFK,GAAP;AAID","sourcesContent":["import React from 'react'\nimport { NextRouter, useRouter } from 'next/router'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregationResultType,\n} from '../api'\nimport { Aggregate } from '../types'\nimport { useListingConfig } from './useListingConfig'\nimport { getTranslatableField } from '../../utils'\n\nimport { processCategoriesResponse, getAggregateTypeAndTerm } from './utils'\n\nconst slugTypeToUrl = {\n category: '/c',\n collection: '/ct',\n brand: '/b',\n}\n\nexport type SeoFilter = {\n name?: string\n component?: string\n items?: {\n name: string\n url: string\n }[]\n}\n\nexport type UseListingSEOCategoriesPropsResult = {\n data: SeoFilter[] | null\n isLoading: boolean\n isFetching: boolean\n isIdle: boolean\n}\n\nexport const useListingSEOCategories = (): UseListingSEOCategoriesPropsResult => {\n const { seoAggregates } = useListingConfig()\n const { data: aggData, isLoading, isIdle, isFetching } = useAggregateQuery(\n [seoAggregates as Aggregate],\n AggregateRequestEnum.Categories\n )\n const router = useRouter()\n const filterDefinition = seoAggregates?.filterDefinition as string\n\n const data: SeoFilter[] | null = React.useMemo(() => {\n if (isLoading && !aggData) {\n return null\n }\n\n const { type, term } = getAggregateTypeAndTerm(seoAggregates)\n\n const response = processCategoriesResponse(aggData, type, term)\n\n return [\n {\n name: seoAggregates?.label,\n component: seoAggregates?.component,\n items: response?.map((current) =>\n buildFilter(current, filterDefinition, router)\n ),\n },\n ]\n }, [isFetching, router])\n\n return { data, isLoading, isFetching, isIdle }\n}\n\nfunction buildFilter(\n current: AggregationResultType,\n filter: string,\n router: NextRouter\n) {\n const name = getTranslatableField(current.meta.name)\n let url = `/${getTranslatableField(current.meta.slug)}${\n slugTypeToUrl[filter]\n }`\n if (router.query.cat) {\n url = `/${router.query.slug}/${getTranslatableField(current.meta.slug)}${\n slugTypeToUrl[filter]\n }`\n }\n return {\n name,\n url,\n }\n}\n"],"file":"useListingSEOCategories.js"}
1
+ {"version":3,"sources":["../../../../src/listing/hooks/useListingSEOCategories.tsx"],"names":["React","useRouter","useAggregateQuery","AggregateRequestEnum","useListingConfig","getTranslatableField","processCategoriesResponse","getAggregateTypeAndTerm","slugTypeToUrl","category","collection","brand","useListingSEOCategories","seoAggregates","data","aggData","isLoading","isIdle","isFetching","Categories","router","filterDefinition","useMemo","type","term","response","name","label","component","items","map","current","buildFilter","filter","meta","url","slug","query","cat"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAAqBC,SAArB,QAAsC,aAAtC;AACA,SACEC,iBADF,EAEEC,oBAFF,QAIO,QAJP;AAMA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,oBAAT,QAAqC,aAArC;AAEA,SAASC,yBAAT,EAAoCC,uBAApC,QAAmE,SAAnE;AAEA,IAAMC,aAAa,GAAG;AACpBC,EAAAA,QAAQ,EAAE,IADU;AAEpBC,EAAAA,UAAU,EAAE,KAFQ;AAGpBC,EAAAA,KAAK,EAAE;AAHa,CAAtB;AAsBA,OAAO,IAAMC,uBAAuB,GAAG,MAA0C;AAC/E,MAAM;AAAEC,IAAAA;AAAF,MAAoBT,gBAAgB,EAA1C;AAEA,MAAM;AAAEU,IAAAA,IAAI,EAAEC,OAAR;AAAiBC,IAAAA,SAAjB;AAA4BC,IAAAA,MAA5B;AAAoCC,IAAAA;AAApC,MAAmDhB,iBAAiB,CACxE,CAACW,aAAD,CADwE,EAExEV,oBAAoB,CAACgB,UAFmD,CAA1E;AAIA,MAAMC,MAAM,GAAGnB,SAAS,EAAxB;AACA,MAAMoB,gBAAgB,GAAGR,aAAH,oBAAGA,aAAa,CAAEQ,gBAAxC;AAEA,MAAMP,IAAwB,GAAGd,KAAK,CAACsB,OAAN,CAAc,MAAM;AACnD,QAAIN,SAAS,IAAI,CAACD,OAAlB,EAA2B;AACzB,aAAO,IAAP;AACD;;AAED,QAAM;AAAEQ,MAAAA,IAAF;AAAQC,MAAAA;AAAR,QAAiBjB,uBAAuB,CAACM,aAAD,CAA9C;AAEA,QAAMY,QAAQ,GAAGnB,yBAAyB,CAACS,OAAD,EAAUQ,IAAV,EAAgBC,IAAhB,CAA1C;AAEA,WAAO,CACL;AACEE,MAAAA,IAAI,EAAEb,aAAF,oBAAEA,aAAa,CAAEc,KADvB;AAEEC,MAAAA,SAAS,EAAEf,aAAF,oBAAEA,aAAa,CAAEe,SAF5B;AAGEC,MAAAA,KAAK,EAAEJ,QAAF,oBAAEA,QAAQ,CAAEK,GAAV,CAAeC,OAAD,IACnBC,WAAW,CAACD,OAAD,EAAUV,gBAAV,EAA4BD,MAA5B,CADN;AAHT,KADK,CAAP;AASD,GAlBgC,EAkB9B,CAACF,UAAD,EAAaE,MAAb,CAlB8B,CAAjC;AAoBA,SAAO;AAAEN,IAAAA,IAAF;AAAQE,IAAAA,SAAR;AAAmBE,IAAAA,UAAnB;AAA+BD,IAAAA;AAA/B,GAAP;AACD,CA/BM;;AAiCP,SAASe,WAAT,CACED,OADF,EAEEE,MAFF,EAGEb,MAHF,EAIE;AACA,MAAMM,IAAI,GAAGrB,oBAAoB,CAAC0B,OAAO,CAACG,IAAR,CAAaR,IAAd,CAAjC;AACA,MAAIS,GAAG,SAAO9B,oBAAoB,CAAC0B,OAAO,CAACG,IAAR,CAAaE,IAAd,CAA3B,GACL5B,aAAa,CAACyB,MAAD,CADf;;AAGA,MAAIb,MAAM,CAACiB,KAAP,CAAaC,GAAjB,EAAsB;AACpBH,IAAAA,GAAG,SAAOf,MAAM,CAACiB,KAAP,CAAaD,IAApB,SAA4B/B,oBAAoB,CAAC0B,OAAO,CAACG,IAAR,CAAaE,IAAd,CAAhD,GACD5B,aAAa,CAACyB,MAAD,CADf;AAGD;;AACD,SAAO;AACLP,IAAAA,IADK;AAELS,IAAAA;AAFK,GAAP;AAID","sourcesContent":["import React from 'react'\nimport { NextRouter, useRouter } from 'next/router'\nimport {\n useAggregateQuery,\n AggregateRequestEnum,\n AggregationResultType,\n} from '../api'\nimport { Aggregate } from '../types'\nimport { useListingConfig } from './useListingConfig'\nimport { getTranslatableField } from '../../utils'\n\nimport { processCategoriesResponse, getAggregateTypeAndTerm } from './utils'\n\nconst slugTypeToUrl = {\n category: '/c',\n collection: '/ct',\n brand: '/b',\n}\n\nexport type SeoFilter = {\n name?: string\n component?: string\n items?: {\n name: string\n url: string\n }[]\n}\n\nexport type UseListingSEOCategoriesPropsResult = {\n data: SeoFilter[] | null\n isLoading: boolean\n isFetching: boolean\n isIdle: boolean\n}\n\nexport const useListingSEOCategories = (): UseListingSEOCategoriesPropsResult => {\n const { seoAggregates } = useListingConfig()\n\n const { data: aggData, isLoading, isIdle, isFetching } = useAggregateQuery(\n [seoAggregates as Aggregate],\n AggregateRequestEnum.Categories\n )\n const router = useRouter()\n const filterDefinition = seoAggregates?.filterDefinition as string\n\n const data: SeoFilter[] | null = React.useMemo(() => {\n if (isLoading && !aggData) {\n return null\n }\n\n const { type, term } = getAggregateTypeAndTerm(seoAggregates)\n\n const response = processCategoriesResponse(aggData, type, term)\n\n return [\n {\n name: seoAggregates?.label,\n component: seoAggregates?.component,\n items: response?.map((current) =>\n buildFilter(current, filterDefinition, router)\n ),\n },\n ]\n }, [isFetching, router])\n\n return { data, isLoading, isFetching, isIdle }\n}\n\nfunction buildFilter(\n current: AggregationResultType,\n filter: string,\n router: NextRouter\n) {\n const name = getTranslatableField(current.meta.name)\n let url = `/${getTranslatableField(current.meta.slug)}${\n slugTypeToUrl[filter]\n }`\n if (router.query.cat) {\n url = `/${router.query.slug}/${getTranslatableField(current.meta.slug)}${\n slugTypeToUrl[filter]\n }`\n }\n return {\n name,\n url,\n }\n}\n"],"file":"useListingSEOCategories.js"}
@@ -8,7 +8,7 @@ export declare enum AggregateRequestEnum {
8
8
  Filters = "filters",
9
9
  Categories = "categories"
10
10
  }
11
- export declare const useAggregateQuery: (aggregates: Aggregate[], request: AggregateRequestEnum) => import("react-query").QueryResult<import("@sentecacommerce/sdk").CatalogAggregateResponseDTO, unknown>;
11
+ export declare const useAggregateQuery: (aggregates: Aggregate[], request: AggregateRequestEnum) => import("react-query").QueryResult<import("@sentecacommerce/sdk").CatalogAggregateResponseDTO | undefined, unknown>;
12
12
  export declare function prepareAggregateQuery({ request, predicate, aggregates, router, postFilter, slug, filterExtension, }: {
13
13
  request: AggregateRequestEnum;
14
14
  aggregates: Aggregate[];
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { AggregationResultType } from '../api';
3
3
  import { RangeAggregation, StatAggregation, TermAggregation } from '@sentecacommerce/sdk';
4
- export { RangeAggregation, StatAggregation, TermAggregation } from '@sentecacommerce/sdk';
4
+ export { RangeAggregation, StatAggregation, TermAggregation, } from '@sentecacommerce/sdk';
5
5
  export declare type ListingAggregationResultType = {
6
6
  selected: boolean;
7
7
  data: AggregationResultType;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sentecacommerce-theme/lib",
3
3
  "sideEffects": false,
4
- "version": "0.11.66",
4
+ "version": "0.11.70",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
7
7
  "types": "dist/types/index.d.ts",
@@ -27,9 +27,9 @@
27
27
  "build:cjs": "cross-env BABEL_ENV=cjs babel src --root-mode upward --extensions .ts,.tsx -d dist/cjs --source-maps",
28
28
  "build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types"
29
29
  },
30
- "gitHead": "b51655ae12016b387d23a6b24df720ff56a2f507",
30
+ "gitHead": "027c37ebc26d2e5b758d179615b6c3cf039d02b9",
31
31
  "dependencies": {
32
- "@sentecacommerce-theme/base": "^0.11.66",
32
+ "@sentecacommerce-theme/base": "^0.11.70",
33
33
  "@sentecacommerce/sdk": "^2.0.89",
34
34
  "body-scroll-lock": "^3.1.5",
35
35
  "copy-to-clipboard": "^3.3.1",