@gem-sdk/core 1.13.42 → 1.14.0-dev.286

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 (249) hide show
  1. package/dist/cjs/components/AddOn.js +1 -18
  2. package/dist/cjs/components/ComponentWrapper.js +1 -28
  3. package/dist/cjs/components/ComponentWrapperPreview.js +1 -72
  4. package/dist/cjs/components/Empty.js +1 -7
  5. package/dist/cjs/components/Render.js +1 -65
  6. package/dist/cjs/components/Render.liquid.js +15 -158
  7. package/dist/cjs/components/RenderBlock.js +1 -54
  8. package/dist/cjs/components/RenderCustomCode.js +5 -0
  9. package/dist/cjs/components/RenderPreview.js +1 -66
  10. package/dist/cjs/components/RenderSection.js +1 -23
  11. package/dist/cjs/components/constant.js +1 -39
  12. package/dist/cjs/components/src/product/helpers/variant-presets.js +1 -0
  13. package/dist/cjs/contexts/AddonContext.js +1 -36
  14. package/dist/cjs/contexts/BuilderComponent.js +1 -34
  15. package/dist/cjs/contexts/BuilderContext.js +1 -35
  16. package/dist/cjs/contexts/BuilderPreviewContext.js +1 -370
  17. package/dist/cjs/contexts/CartLineContext.js +1 -29
  18. package/dist/cjs/contexts/CollectionContext.js +1 -38
  19. package/dist/cjs/contexts/ModalContext.js +1 -47
  20. package/dist/cjs/contexts/ProductContext.js +1 -149
  21. package/dist/cjs/contexts/ProductListContext.js +1 -32
  22. package/dist/cjs/contexts/SectionContext.js +1 -53
  23. package/dist/cjs/contexts/ShopContext.js +1 -70
  24. package/dist/cjs/graphql/fragments/analytic.generated.js +2 -6
  25. package/dist/cjs/graphql/fragments/collection-detail.generated.js +2 -6
  26. package/dist/cjs/graphql/fragments/collection-product.generated.js +2 -6
  27. package/dist/cjs/graphql/fragments/collection.generated.js +2 -6
  28. package/dist/cjs/graphql/fragments/custom-code.generated.js +2 -6
  29. package/dist/cjs/graphql/fragments/data-seo.generated.js +2 -6
  30. package/dist/cjs/graphql/fragments/media.generated.js +3 -6
  31. package/dist/cjs/graphql/fragments/product-little.generated.js +2 -6
  32. package/dist/cjs/graphql/fragments/product-option-value.generated.js +2 -6
  33. package/dist/cjs/graphql/fragments/product-option.generated.js +2 -6
  34. package/dist/cjs/graphql/fragments/product.generated.js +2 -6
  35. package/dist/cjs/graphql/fragments/published-custom-section.generated.js +2 -6
  36. package/dist/cjs/graphql/fragments/published-page-section.generated.js +2 -6
  37. package/dist/cjs/graphql/fragments/published-theme-page.generated.js +2 -6
  38. package/dist/cjs/graphql/fragments/published-theme-style.generated.js +2 -6
  39. package/dist/cjs/graphql/fragments/selected-option.generated.js +2 -6
  40. package/dist/cjs/graphql/fragments/variant.generated.js +2 -6
  41. package/dist/cjs/graphql/mutations/page-view-up.generated.js +3 -7
  42. package/dist/cjs/graphql/queries/collection-detail-filter.generated.js +2 -16
  43. package/dist/cjs/graphql/queries/collection.generated.js +2 -14
  44. package/dist/cjs/graphql/queries/collections.generated.js +2 -9
  45. package/dist/cjs/graphql/queries/preview-page.generated.js +2 -14
  46. package/dist/cjs/graphql/queries/product-little-detail.generated.js +2 -11
  47. package/dist/cjs/graphql/queries/product-medias.generated.js +2 -8
  48. package/dist/cjs/graphql/queries/product-value-label.generated.js +7 -0
  49. package/dist/cjs/graphql/queries/product-variants.generated.js +2 -10
  50. package/dist/cjs/graphql/queries/products.generated.js +3 -17
  51. package/dist/cjs/graphql/queries/published-theme-pages.generated.js +2 -14
  52. package/dist/cjs/graphql/queries/store-property.generated.js +2 -6
  53. package/dist/cjs/helpers/GlobalEvent.js +1 -19
  54. package/dist/cjs/helpers/background.js +1 -109
  55. package/dist/cjs/helpers/borders.js +4 -183
  56. package/dist/cjs/helpers/clone-deep.js +1 -5
  57. package/dist/cjs/helpers/cls.js +1 -16
  58. package/dist/cjs/helpers/colors.js +1 -183
  59. package/dist/cjs/helpers/compose-advance-style.js +1 -188
  60. package/dist/cjs/helpers/constant.js +1 -23
  61. package/dist/cjs/helpers/convert.js +1 -7
  62. package/dist/cjs/helpers/css-variable.js +1 -7
  63. package/dist/cjs/helpers/email.js +1 -11
  64. package/dist/cjs/helpers/flatten-connection.js +1 -9
  65. package/dist/cjs/helpers/get-resonsive-value.js +1 -31
  66. package/dist/cjs/helpers/get-shortname.js +1 -92
  67. package/dist/cjs/helpers/is-browser.js +1 -9
  68. package/dist/cjs/helpers/is-defined.js +1 -7
  69. package/dist/cjs/helpers/is-empty-children.js +1 -12
  70. package/dist/cjs/helpers/is-safari.js +1 -9
  71. package/dist/cjs/helpers/layout.js +1 -59
  72. package/dist/cjs/helpers/load-script.js +1 -31
  73. package/dist/cjs/helpers/make-style.js +1 -128
  74. package/dist/cjs/helpers/normalize-builder-data.js +1 -23
  75. package/dist/cjs/helpers/prefetch-queries.js +1 -78
  76. package/dist/cjs/helpers/product.js +1 -45
  77. package/dist/cjs/helpers/queries/get-collection.js +1 -220
  78. package/dist/cjs/helpers/queries/get-collections.js +1 -21
  79. package/dist/cjs/helpers/queries/get-product-by-slug.js +1 -125
  80. package/dist/cjs/helpers/queries/get-product.js +1 -154
  81. package/dist/cjs/helpers/queries/get-products.js +1 -161
  82. package/dist/cjs/helpers/query.js +1 -29
  83. package/dist/cjs/helpers/radius.js +6 -134
  84. package/dist/cjs/helpers/render.js +1 -71
  85. package/dist/cjs/helpers/shadow.js +1 -56
  86. package/dist/cjs/helpers/size.js +4 -35
  87. package/dist/cjs/helpers/spacing.js +1 -43
  88. package/dist/cjs/helpers/tracking/fpixel.js +1 -28
  89. package/dist/cjs/helpers/tracking/gtag.js +1 -93
  90. package/dist/cjs/helpers/tracking/tiktokpixel.js +1 -17
  91. package/dist/cjs/helpers/typography.js +17 -105
  92. package/dist/cjs/helpers/variant.js +1 -8
  93. package/dist/cjs/hooks/cart/use-add-to-cart.js +1 -20
  94. package/dist/cjs/hooks/cart/use-cart-data.js +1 -28
  95. package/dist/cjs/hooks/cart/use-cart-discount-codes-update.js +1 -20
  96. package/dist/cjs/hooks/cart/use-cart-note-update.js +1 -20
  97. package/dist/cjs/hooks/cart/use-create-cart.js +1 -22
  98. package/dist/cjs/hooks/cart/use-remove-cart-item.js +1 -20
  99. package/dist/cjs/hooks/cart/use-update-cart-item.js +1 -20
  100. package/dist/cjs/hooks/shop/use-collection-query.js +1 -22
  101. package/dist/cjs/hooks/shop/use-collections-query.js +1 -17
  102. package/dist/cjs/hooks/shop/use-product-query.js +1 -22
  103. package/dist/cjs/hooks/shop/use-products-query.js +1 -22
  104. package/dist/cjs/hooks/shop.js +1 -126
  105. package/dist/cjs/hooks/use-current-device.js +1 -21
  106. package/dist/cjs/hooks/use-lazy-video.js +1 -15
  107. package/dist/cjs/hooks/useCartId.js +1 -44
  108. package/dist/cjs/hooks/useCartLine.js +1 -11
  109. package/dist/cjs/hooks/useCartUI.js +1 -48
  110. package/dist/cjs/hooks/useCollection.js +1 -9
  111. package/dist/cjs/hooks/useFetchHandle.js +1 -13
  112. package/dist/cjs/hooks/useFormatMoney.js +1 -58
  113. package/dist/cjs/hooks/useInitialSwatchesOptions.js +1 -0
  114. package/dist/cjs/hooks/useIsomorphicLayoutEffect.js +1 -10
  115. package/dist/cjs/hooks/useLoadScript.js +1 -32
  116. package/dist/cjs/hooks/useMoney.js +1 -84
  117. package/dist/cjs/hooks/usePrevious.js +1 -19
  118. package/dist/cjs/hooks/useProduct.js +1 -124
  119. package/dist/cjs/hooks/useProductList.js +1 -21
  120. package/dist/cjs/hooks/useSuspenseFetch.js +1 -27
  121. package/dist/cjs/hooks/useSwatchesOptions.js +1 -41
  122. package/dist/cjs/index.js +1 -291
  123. package/dist/cjs/types/global-style.js +1 -14
  124. package/dist/cjs/types/shop.js +1 -2
  125. package/dist/esm/components/AddOn.js +1 -14
  126. package/dist/esm/components/ComponentWrapper.js +1 -24
  127. package/dist/esm/components/ComponentWrapperPreview.js +1 -68
  128. package/dist/esm/components/Empty.js +1 -3
  129. package/dist/esm/components/Render.js +1 -61
  130. package/dist/esm/components/Render.liquid.js +15 -153
  131. package/dist/esm/components/RenderBlock.js +1 -50
  132. package/dist/esm/components/RenderCustomCode.js +5 -0
  133. package/dist/esm/components/RenderPreview.js +1 -62
  134. package/dist/esm/components/RenderSection.js +1 -19
  135. package/dist/esm/components/constant.js +1 -37
  136. package/dist/esm/components/src/product/helpers/variant-presets.js +1 -0
  137. package/dist/esm/contexts/AddonContext.js +1 -32
  138. package/dist/esm/contexts/BuilderComponent.js +1 -31
  139. package/dist/esm/contexts/BuilderContext.js +1 -32
  140. package/dist/esm/contexts/BuilderPreviewContext.js +1 -367
  141. package/dist/esm/contexts/CartLineContext.js +1 -26
  142. package/dist/esm/contexts/CollectionContext.js +1 -35
  143. package/dist/esm/contexts/ModalContext.js +1 -44
  144. package/dist/esm/contexts/ProductContext.js +1 -146
  145. package/dist/esm/contexts/ProductListContext.js +1 -28
  146. package/dist/esm/contexts/SectionContext.js +1 -49
  147. package/dist/esm/contexts/ShopContext.js +1 -67
  148. package/dist/esm/graphql/fragments/analytic.generated.js +2 -4
  149. package/dist/esm/graphql/fragments/collection-detail.generated.js +2 -4
  150. package/dist/esm/graphql/fragments/collection-product.generated.js +2 -4
  151. package/dist/esm/graphql/fragments/collection.generated.js +2 -4
  152. package/dist/esm/graphql/fragments/custom-code.generated.js +2 -4
  153. package/dist/esm/graphql/fragments/data-seo.generated.js +2 -4
  154. package/dist/esm/graphql/fragments/media.generated.js +3 -4
  155. package/dist/esm/graphql/fragments/product-little.generated.js +2 -4
  156. package/dist/esm/graphql/fragments/product-option-value.generated.js +2 -4
  157. package/dist/esm/graphql/fragments/product-option.generated.js +2 -4
  158. package/dist/esm/graphql/fragments/product.generated.js +2 -4
  159. package/dist/esm/graphql/fragments/published-custom-section.generated.js +2 -4
  160. package/dist/esm/graphql/fragments/published-page-section.generated.js +2 -4
  161. package/dist/esm/graphql/fragments/published-theme-page.generated.js +2 -4
  162. package/dist/esm/graphql/fragments/published-theme-style.generated.js +2 -4
  163. package/dist/esm/graphql/fragments/selected-option.generated.js +2 -4
  164. package/dist/esm/graphql/fragments/variant.generated.js +2 -4
  165. package/dist/esm/graphql/mutations/page-view-up.generated.js +3 -5
  166. package/dist/esm/graphql/queries/collection-detail-filter.generated.js +10 -22
  167. package/dist/esm/graphql/queries/collection.generated.js +8 -18
  168. package/dist/esm/graphql/queries/collections.generated.js +3 -8
  169. package/dist/esm/graphql/queries/preview-page.generated.js +8 -18
  170. package/dist/esm/graphql/queries/product-little-detail.generated.js +5 -12
  171. package/dist/esm/graphql/queries/product-medias.generated.js +2 -6
  172. package/dist/esm/graphql/queries/product-value-label.generated.js +7 -0
  173. package/dist/esm/graphql/queries/product-variants.generated.js +4 -10
  174. package/dist/esm/graphql/queries/products.generated.js +9 -20
  175. package/dist/esm/graphql/queries/published-theme-pages.generated.js +8 -18
  176. package/dist/esm/graphql/queries/store-property.generated.js +2 -4
  177. package/dist/esm/helpers/GlobalEvent.js +1 -15
  178. package/dist/esm/helpers/background.js +1 -106
  179. package/dist/esm/helpers/borders.js +4 -175
  180. package/dist/esm/helpers/clone-deep.js +1 -3
  181. package/dist/esm/helpers/cls.js +1 -14
  182. package/dist/esm/helpers/colors.js +1 -168
  183. package/dist/esm/helpers/compose-advance-style.js +1 -185
  184. package/dist/esm/helpers/constant.js +1 -19
  185. package/dist/esm/helpers/convert.js +1 -4
  186. package/dist/esm/helpers/css-variable.js +1 -5
  187. package/dist/esm/helpers/email.js +1 -6
  188. package/dist/esm/helpers/flatten-connection.js +1 -7
  189. package/dist/esm/helpers/get-resonsive-value.js +1 -27
  190. package/dist/esm/helpers/get-shortname.js +1 -90
  191. package/dist/esm/helpers/is-browser.js +1 -5
  192. package/dist/esm/helpers/is-defined.js +1 -5
  193. package/dist/esm/helpers/is-empty-children.js +1 -7
  194. package/dist/esm/helpers/is-safari.js +1 -5
  195. package/dist/esm/helpers/layout.js +1 -54
  196. package/dist/esm/helpers/load-script.js +1 -29
  197. package/dist/esm/helpers/make-style.js +1 -117
  198. package/dist/esm/helpers/normalize-builder-data.js +1 -21
  199. package/dist/esm/helpers/prefetch-queries.js +1 -76
  200. package/dist/esm/helpers/product.js +1 -41
  201. package/dist/esm/helpers/queries/get-collection.js +1 -217
  202. package/dist/esm/helpers/queries/get-collections.js +1 -19
  203. package/dist/esm/helpers/queries/get-product-by-slug.js +1 -123
  204. package/dist/esm/helpers/queries/get-product.js +1 -150
  205. package/dist/esm/helpers/queries/get-products.js +1 -159
  206. package/dist/esm/helpers/query.js +1 -25
  207. package/dist/esm/helpers/radius.js +6 -127
  208. package/dist/esm/helpers/render.js +1 -64
  209. package/dist/esm/helpers/shadow.js +1 -51
  210. package/dist/esm/helpers/size.js +4 -31
  211. package/dist/esm/helpers/spacing.js +1 -40
  212. package/dist/esm/helpers/tracking/fpixel.js +1 -24
  213. package/dist/esm/helpers/tracking/gtag.js +1 -87
  214. package/dist/esm/helpers/tracking/tiktokpixel.js +1 -15
  215. package/dist/esm/helpers/typography.js +17 -96
  216. package/dist/esm/helpers/variant.js +1 -6
  217. package/dist/esm/hooks/cart/use-add-to-cart.js +1 -18
  218. package/dist/esm/hooks/cart/use-cart-data.js +1 -26
  219. package/dist/esm/hooks/cart/use-cart-discount-codes-update.js +1 -18
  220. package/dist/esm/hooks/cart/use-cart-note-update.js +1 -18
  221. package/dist/esm/hooks/cart/use-create-cart.js +1 -20
  222. package/dist/esm/hooks/cart/use-remove-cart-item.js +1 -18
  223. package/dist/esm/hooks/cart/use-update-cart-item.js +1 -18
  224. package/dist/esm/hooks/shop/use-collection-query.js +1 -20
  225. package/dist/esm/hooks/shop/use-collections-query.js +1 -15
  226. package/dist/esm/hooks/shop/use-product-query.js +1 -20
  227. package/dist/esm/hooks/shop/use-products-query.js +1 -20
  228. package/dist/esm/hooks/shop.js +1 -111
  229. package/dist/esm/hooks/use-current-device.js +1 -19
  230. package/dist/esm/hooks/use-lazy-video.js +1 -13
  231. package/dist/esm/hooks/useCartId.js +1 -40
  232. package/dist/esm/hooks/useCartLine.js +1 -7
  233. package/dist/esm/hooks/useCartUI.js +1 -44
  234. package/dist/esm/hooks/useCollection.js +1 -7
  235. package/dist/esm/hooks/useFetchHandle.js +1 -11
  236. package/dist/esm/hooks/useFormatMoney.js +1 -56
  237. package/dist/esm/hooks/useInitialSwatchesOptions.js +1 -0
  238. package/dist/esm/hooks/useIsomorphicLayoutEffect.js +1 -6
  239. package/dist/esm/hooks/useLoadScript.js +1 -28
  240. package/dist/esm/hooks/useMoney.js +1 -80
  241. package/dist/esm/hooks/usePrevious.js +1 -17
  242. package/dist/esm/hooks/useProduct.js +1 -111
  243. package/dist/esm/hooks/useProductList.js +1 -16
  244. package/dist/esm/hooks/useSuspenseFetch.js +1 -23
  245. package/dist/esm/hooks/useSwatchesOptions.js +1 -37
  246. package/dist/esm/index.js +1 -92
  247. package/dist/esm/types/global-style.js +1 -11
  248. package/dist/types/index.d.ts +1228 -1031
  249. package/package.json +3 -3
@@ -1,76 +1 @@
1
- import { unstable_serialize } from 'swr';
2
- import { getCollection } from './queries/get-collection.js';
3
- import { getProduct } from './queries/get-product.js';
4
- import { getProducts } from './queries/get-products.js';
5
- import { generateCollectionQueryKey, generateProductsQueryKey, generateProductQueryKey } from './query.js';
6
-
7
- const prefetchQueries = (input, options)=>{
8
- const queries = [];
9
- Object.keys(input).forEach((key)=>{
10
- const item = input[key];
11
- let data = undefined;
12
- switch(item.tag){
13
- case 'Product':
14
- {
15
- if (item.settings?.isAuto) break;
16
- const variables = {
17
- id: item.settings?.productSetting?.productId ?? 'latest',
18
- isSample: options?.isSample,
19
- isStorefront: options?.isStorefront
20
- };
21
- data = {
22
- key: unstable_serialize(generateProductQueryKey(variables)),
23
- func: getProduct,
24
- variables
25
- };
26
- break;
27
- }
28
- case 'ProductList':
29
- {
30
- const productSetting = item.settings?.productSetting;
31
- if (productSetting?.productSrc === 'Collection') {
32
- const variables = {
33
- id: productSetting?.collectionId ?? 'latest',
34
- numberOfProducts: item.settings?.numberOfProducts ?? 4,
35
- orderBy: item.settings?.orderBy,
36
- isSample: options?.isSample,
37
- isStorefront: options?.isStorefront
38
- };
39
- data = {
40
- key: unstable_serialize(generateCollectionQueryKey(variables)),
41
- func: getCollection,
42
- variables
43
- };
44
- } else {
45
- const variables = {
46
- ids: [
47
- ...productSetting?.productIds ?? []
48
- ].sort(),
49
- isSample: options?.isSample,
50
- isStorefront: options?.isStorefront
51
- };
52
- data = {
53
- key: unstable_serialize(generateProductsQueryKey(variables)),
54
- func: getProducts,
55
- variables
56
- };
57
- }
58
- break;
59
- }
60
- }
61
- if (data) {
62
- queries.push(data);
63
- }
64
- });
65
- return queries.reduce((accumulator, current)=>{
66
- if (!accumulator.some((x)=>x.key === current.key)) {
67
- return [
68
- ...accumulator,
69
- current
70
- ];
71
- }
72
- return accumulator;
73
- }, []);
74
- };
75
-
76
- export { prefetchQueries };
1
+ import{unstable_serialize as e}from"swr";import{getCollection as t}from"./queries/get-collection.js";import{getProduct as r}from"./queries/get-product.js";import{getProducts as s}from"./queries/get-products.js";import{generateCollectionQueryKey as o,generateProductsQueryKey as i,generateProductQueryKey as c}from"./query.js";let prefetchQueries=(u,l)=>{let n=[];return Object.keys(u).forEach(p=>{let f;let d=u[p];switch(d.tag){case"Product":{if(d.settings?.isAuto)break;let t={id:d.settings?.productSetting?.productId??"latest",isSample:l?.isSample,isStorefront:l?.isStorefront};f={key:e(c(t)),func:r,variables:t};break}case"ProductList":{let r=d.settings?.productSetting;if(r?.productSrc==="Collection"){let s={id:r?.collectionId??"latest",numberOfProducts:d.settings?.numberOfProducts??4,orderBy:d.settings?.orderBy,isSample:l?.isSample,isStorefront:l?.isStorefront};f={key:e(o(s)),func:t,variables:s}}else{let t={ids:[...r?.productIds??[]].sort(),isSample:l?.isSample,isStorefront:l?.isStorefront};f={key:e(i(t)),func:s,variables:t}}}}f&&n.push(f)}),n.reduce((e,t)=>e.some(e=>e.key===t.key)?e:[...e,t],[])};export{prefetchQueries};
@@ -1,41 +1 @@
1
- import { checkInStock } from './variant.js';
2
-
3
- function getSelectedVariant(variants, choices) {
4
- /**
5
- * Ensure the user has selected all the required options, not just some.
6
- */ if (!variants || !variants.length || !choices || variants[0]?.selectedOptions.length !== Object.keys(choices).length) {
7
- return;
8
- }
9
- return variants.find((variant)=>{
10
- return Object.entries(choices).every(([name, value])=>{
11
- return variant?.selectedOptions.some((option)=>option.name === name && option.value === value);
12
- });
13
- });
14
- }
15
- function parseSelectedOption(options) {
16
- if (!options || options && options.length === 0) {
17
- return;
18
- }
19
- return options.reduce((acc, { name, value })=>{
20
- if (name && value) {
21
- return {
22
- ...acc,
23
- [name]: value
24
- };
25
- }
26
- return acc;
27
- }, {});
28
- }
29
- function checkAvailableVariantInStock(variants, optionId, optionValue) {
30
- return variants ? variants.some((item)=>{
31
- if (item) {
32
- const { selectedOptions } = item;
33
- const opt = selectedOptions?.some((option)=>option?.name === optionId && option.value === optionValue);
34
- const isInStock = checkInStock(item);
35
- return opt && isInStock;
36
- }
37
- return false;
38
- }) : false;
39
- }
40
-
41
- export { checkAvailableVariantInStock, getSelectedVariant, parseSelectedOption };
1
+ import{checkInStock as e}from"./variant.js";function getSelectedVariant(e,t){if(e&&e.length&&t&&e[0]?.selectedOptions.length===Object.keys(t).length)return e.find(e=>Object.entries(t).every(([t,n])=>e?.selectedOptions.some(e=>e.name===t&&e.value===n)))}function parseSelectedOption(e){if(e&&(!e||0!==e.length))return e.reduce((e,{name:t,value:n})=>t&&n?{...e,[t]:n}:e,{})}function checkAvailableVariantInStock(t,n,r){return!!t&&t.some(t=>{if(t){let{selectedOptions:a}=t,i=a?.some(e=>e?.name===n&&e.value===r),c=e(t);return i&&c}return!1})}export{checkAvailableVariantInStock,getSelectedVariant,parseSelectedOption};
@@ -1,217 +1 @@
1
- import { CollectionDetailFilterDocument } from '../../graphql/queries/collection-detail-filter.generated.js';
2
- import { ProductVariantsDocument } from '../../graphql/queries/product-variants.generated.js';
3
- import { isDefined } from '../is-defined.js';
4
-
5
- const PRODUCT_PER_PAGE = 8; // number of products per page
6
- function productSortedByOrder(key) {
7
- switch(key){
8
- case 'TITLE_ASC':
9
- return {
10
- direction: 'ASC',
11
- field: 'TITLE'
12
- };
13
- case 'TITLE_DESC':
14
- return {
15
- direction: 'DESC',
16
- field: 'TITLE'
17
- };
18
- case 'CREATED_AT_ASC':
19
- return {
20
- direction: 'ASC',
21
- field: 'CREATED_AT'
22
- };
23
- case 'CREATED_AT_DESC':
24
- return {
25
- direction: 'DESC',
26
- field: 'CREATED_AT'
27
- };
28
- case 'none':
29
- default:
30
- return {
31
- direction: 'ASC',
32
- field: 'TITLE'
33
- };
34
- }
35
- }
36
- const getCollection = async (fetcher, arg)=>{
37
- const collections = await loopFetchCollection(fetcher, arg);
38
- if (!collections) {
39
- throw new Error('collections not found');
40
- }
41
- // merge product collection variant
42
- const mergeProducts = await mergeProductCollectionVariant(fetcher, collections, arg.isSample);
43
- return mergeProducts;
44
- };
45
- const fetchCollection = async (fetcher, variables)=>{
46
- return fetcher([
47
- CollectionDetailFilterDocument,
48
- variables
49
- ]);
50
- };
51
- const calculateFirstProduct = (numberOfProducts, currentPage, productsPerPage)=>{
52
- const remainingProducts = numberOfProducts - productsPerPage * currentPage;
53
- if (numberOfProducts < productsPerPage) return numberOfProducts;
54
- return remainingProducts > 0 ? productsPerPage : productsPerPage + remainingProducts;
55
- };
56
- const chunkArray = (array, size)=>{
57
- const chunked_arr = [];
58
- let index = 0;
59
- while(index < array.length){
60
- chunked_arr.push(array.slice(index, size + index));
61
- index += size;
62
- }
63
- return chunked_arr;
64
- };
65
- const loopFetchCollection = async (fetcher, arg)=>{
66
- let variables; // variables of collection query
67
- let productAfterFetcher; // product after of collection query
68
- let dataCollection; // data of collection query
69
- let hasNextPage; //
70
- let firstCollection;
71
- let currentPage = 1;
72
- if (arg.numberOfProducts) {
73
- const pages = Math.ceil(arg.numberOfProducts / PRODUCT_PER_PAGE);
74
- while(currentPage <= pages && hasNextPage !== false){
75
- variables = {
76
- firstVariant: 1,
77
- firstMedia: 30,
78
- orderBy: {
79
- field: 'PLATFORM_CREATED_AT',
80
- direction: 'DESC'
81
- },
82
- orderByMedia: {
83
- field: 'POSITION',
84
- direction: 'ASC'
85
- },
86
- firstProduct: calculateFirstProduct(arg.numberOfProducts, currentPage, PRODUCT_PER_PAGE),
87
- ...!arg.id || arg.id.toLowerCase() === 'latest' ? {
88
- where: {
89
- hasCollectionProducts: true,
90
- isSample: arg.isSample
91
- }
92
- } : {
93
- where: {
94
- baseID: arg.id
95
- }
96
- },
97
- orderByProduct: productSortedByOrder(arg.orderBy),
98
- whereProduct: {
99
- status: 'ACTIVE',
100
- ...arg.isStorefront && {
101
- isStorefront: arg.isStorefront
102
- },
103
- isSample: arg.isSample
104
- },
105
- ...productAfterFetcher ? {
106
- productsAfter: productAfterFetcher
107
- } : undefined
108
- };
109
- const pageData = await fetchCollection(fetcher, variables);
110
- productAfterFetcher = pageData?.collections?.edges?.[0]?.node?.products?.pageInfo?.endCursor;
111
- if (currentPage === 1) {
112
- dataCollection = pageData; // set data of first page
113
- firstCollection = dataCollection?.collections?.edges?.[0];
114
- } else if (firstCollection?.node?.products && pageData?.collections?.edges?.[0]?.node?.products?.edges) {
115
- // concat new values to the old ones
116
- firstCollection.node.products = {
117
- pageInfo: pageData?.collections?.edges?.[0]?.node?.products?.pageInfo,
118
- edges: firstCollection.node?.products?.edges.concat(pageData?.collections?.edges?.[0]?.node?.products?.edges)
119
- };
120
- }
121
- currentPage++;
122
- // hasNextPage = false if there is no more pages then break the loop
123
- if (!firstCollection?.node?.products?.pageInfo?.hasNextPage) {
124
- hasNextPage = false;
125
- break;
126
- }
127
- }
128
- return dataCollection;
129
- }
130
- };
131
- const mergeProductCollectionVariant = async (fetcher, collection, isSample)=>{
132
- const node = collection?.collections?.edges?.[0]?.node;
133
- if (!node) return collection;
134
- const productList = node?.products?.edges;
135
- const listBaseId = productList?.map((product)=>product?.node?.baseID).filter(isDefined);
136
- const ProductListWithVariants = await fetchVariantsByBaseIds(fetcher, {
137
- ids: listBaseId,
138
- isSample
139
- });
140
- // mapping variant to product list in collections
141
- const newProductList = productList?.map((product)=>{
142
- const productVariants = ProductListWithVariants?.variants?.edges?.filter((productV)=>productV?.node?.id === product?.node?.id);
143
- return {
144
- ...product,
145
- node: product.node ? {
146
- ...product.node,
147
- variants: product.node?.variants ? {
148
- ...product.node?.variants,
149
- edges: productVariants?.[0]?.node?.variants?.edges ?? []
150
- } : undefined
151
- } : undefined
152
- };
153
- }) ?? [];
154
- const newCollection = {
155
- ...collection,
156
- collections: {
157
- edges: [
158
- {
159
- node: {
160
- ...node,
161
- products: {
162
- edges: newProductList
163
- }
164
- },
165
- cursor: undefined
166
- }
167
- ]
168
- }
169
- };
170
- return newCollection;
171
- };
172
- const fetchVariantsByBaseIds = async (fetcher, { ids, isSample, isStorefront })=>{
173
- const chunkedIds = chunkArray(ids ?? [], 8);
174
- const defaultEdges = [];
175
- const query = async (variables)=>{
176
- try {
177
- return await fetcher([
178
- ProductVariantsDocument,
179
- variables
180
- ]);
181
- } catch {
182
- return {};
183
- }
184
- };
185
- const promises = chunkedIds.map((chunkedId)=>{
186
- const variables = {
187
- firstVariant: 100,
188
- first: chunkedId.length,
189
- orderBy: {
190
- field: 'TITLE',
191
- direction: 'ASC'
192
- },
193
- where: {
194
- status: 'ACTIVE',
195
- isSample,
196
- ...isStorefront && {
197
- isStorefront
198
- },
199
- ...chunkedId.length && {
200
- baseIDIn: chunkedId.sort()
201
- }
202
- }
203
- };
204
- return query(variables);
205
- });
206
- const responses = await Promise.all(promises);
207
- const edges = responses?.reduce((acc, response)=>{
208
- return acc.concat(response?.variants?.edges ?? []);
209
- }, defaultEdges);
210
- return {
211
- variants: {
212
- edges
213
- }
214
- };
215
- };
216
-
217
- export { calculateFirstProduct, getCollection };
1
+ import{CollectionDetailFilterDocument as e}from"../../graphql/queries/collection-detail-filter.generated.js";import{ProductVariantsDocument as t}from"../../graphql/queries/product-variants.generated.js";import{isDefined as r}from"../is-defined.js";let PRODUCT_PER_PAGE=8;function productSortedByOrder(e){switch(e){case"TITLE_ASC":case"none":default:return{direction:"ASC",field:"TITLE"};case"TITLE_DESC":return{direction:"DESC",field:"TITLE"};case"CREATED_AT_ASC":return{direction:"ASC",field:"PLATFORM_CREATED_AT"};case"CREATED_AT_DESC":return{direction:"DESC",field:"PLATFORM_CREATED_AT"}}}let getCollection=async(e,t)=>{let r=await loopFetchCollection(e,t);if(!r)throw Error("collections not found");let o=await mergeProductCollectionVariant(e,r,t.isSample);return o},fetchCollection=async(t,r)=>t([e,r]),calculateFirstProduct=(e,t,r)=>{let o=e-r*t;return e<r?e:o>0?r:r+o},chunkArray=(e,t)=>{let r=[],o=0;for(;o<e.length;)r.push(e.slice(o,t+o)),o+=t;return r},loopFetchCollection=async(e,t)=>{let r,o,d,i,n;let s=1;if(t.numberOfProducts){let a=Math.ceil(t.numberOfProducts/8);for(;s<=a&&!1!==i;){r={firstVariant:1,firstMedia:30,orderBy:{field:"PLATFORM_UPDATED_AT",direction:"DESC"},orderByMedia:{field:"POSITION",direction:"ASC"},firstProduct:calculateFirstProduct(t.numberOfProducts,s,8),...t.id&&"latest"!==t.id.toLowerCase()?{where:{baseID:t.id}}:{where:{isSample:t.isSample}},orderByProduct:productSortedByOrder(t.orderBy),whereProduct:{status:"ACTIVE",...t.isStorefront&&{isStorefront:t.isStorefront},isSample:t.isSample},...o?{productsAfter:o}:void 0};let a=await fetchCollection(e,r);if(o=a?.collections?.edges?.[0]?.node?.products?.pageInfo?.endCursor,1===s?(d=a,n=d?.collections?.edges?.[0]):n?.node?.products&&a?.collections?.edges?.[0]?.node?.products?.edges&&(n.node.products={pageInfo:a?.collections?.edges?.[0]?.node?.products?.pageInfo,edges:n.node?.products?.edges.concat(a?.collections?.edges?.[0]?.node?.products?.edges)}),s++,!n?.node?.products?.pageInfo?.hasNextPage){i=!1;break}}return d}},mergeProductCollectionVariant=async(e,t,o)=>{let d=t?.collections?.edges?.[0]?.node;if(!d)return t;let i=d?.products?.edges,n=i?.map(e=>e?.node?.baseID).filter(r),s=await fetchVariantsByBaseIds(e,{ids:n,isSample:o}),a=i?.map(e=>{let t=s?.variants?.edges?.filter(t=>t?.node?.id===e?.node?.id);return{...e,node:e.node?{...e.node,variants:e.node?.variants?{...e.node?.variants,edges:t?.[0]?.node?.variants?.edges??[]}:void 0}:void 0}})??[],c={...t,collections:{edges:[{node:{...d,products:{edges:a}},cursor:void 0}]}};return c},fetchVariantsByBaseIds=async(e,{ids:r,isSample:o,isStorefront:d})=>{let i=chunkArray(r??[],8),n=[],s=async r=>{try{return await e([t,r])}catch{return{}}},a=i.map(e=>{let t={firstVariant:100,first:e.length,orderBy:{field:"TITLE",direction:"ASC"},where:{status:"ACTIVE",isSample:o,...d&&{isStorefront:d},...e.length&&{baseIDIn:e.sort()}}};return s(t)}),c=await Promise.all(a),l=c?.reduce((e,t)=>e.concat(t?.variants?.edges??[]),n);return{variants:{edges:l}}};export{calculateFirstProduct,getCollection};
@@ -1,19 +1 @@
1
- import { CollectionsDocument } from '../../graphql/queries/collections.generated.js';
2
-
3
- const getCollections = async (fetcher, variable)=>{
4
- const collections = await fetchCollections(fetcher, variable ?? {});
5
- if (!collections) {
6
- throw new Error('Collection not found');
7
- }
8
- return {
9
- ...collections
10
- };
11
- };
12
- const fetchCollections = async (fetcher, variables)=>{
13
- return fetcher([
14
- CollectionsDocument,
15
- variables
16
- ]);
17
- };
18
-
19
- export { getCollections };
1
+ import{CollectionsDocument as e}from"../../graphql/queries/collections.generated.js";let getCollections=async(e,o)=>{let t=await fetchCollections(e,o??{});if(!t)throw Error("Collection not found");return{...t}},fetchCollections=async(o,t)=>o([e,t]);export{getCollections};
@@ -1,123 +1 @@
1
- import { ProductLittleDetailDocument } from '../../graphql/queries/product-little-detail.generated.js';
2
- import { ProductMediasDocument } from '../../graphql/queries/product-medias.generated.js';
3
- import { ProductVariantsDocument } from '../../graphql/queries/product-variants.generated.js';
4
-
5
- const getProductBySlug = async (fetcher, slug)=>{
6
- const [product, variants, medias] = await Promise.all([
7
- fetchProduct(fetcher, slug),
8
- fetchVariants(fetcher, slug),
9
- fetchMedias(fetcher, slug)
10
- ]);
11
- if (!product) {
12
- throw new Error('Product not found');
13
- }
14
- return {
15
- ...product,
16
- variants: {
17
- edges: variants
18
- },
19
- medias: {
20
- edges: medias
21
- }
22
- };
23
- };
24
- const orderBy = {
25
- field: 'PLATFORM_UPDATED_AT',
26
- direction: 'DESC'
27
- };
28
- const fetchProduct = async (fetcher, handle, isStorefront)=>{
29
- const variables = {
30
- orderBy,
31
- where: {
32
- status: 'ACTIVE',
33
- handle,
34
- ...isStorefront && {
35
- isStorefront
36
- }
37
- }
38
- };
39
- const response = await fetcher([
40
- ProductLittleDetailDocument,
41
- variables
42
- ]);
43
- return response.product?.edges?.[0]?.node;
44
- };
45
- const fetchVariants = async (fetcher, handle, isStorefront)=>{
46
- const initVariables = {
47
- orderBy,
48
- orderByVariant: {
49
- field: 'POSITION',
50
- direction: 'ASC'
51
- },
52
- where: {
53
- status: 'ACTIVE',
54
- handle,
55
- ...isStorefront && {
56
- isStorefront
57
- }
58
- }
59
- };
60
- const query = async (variables, olds)=>{
61
- try {
62
- const response = await fetcher([
63
- ProductVariantsDocument,
64
- variables
65
- ]);
66
- const product = response.variants?.edges?.[0];
67
- const items = olds?.concat(product?.node?.variants?.edges ?? []);
68
- if (product?.node?.variants?.pageInfo?.hasNextPage) {
69
- return query({
70
- ...variables,
71
- afterVariant: product?.node?.variants?.pageInfo.endCursor
72
- }, items);
73
- }
74
- return items ?? [];
75
- } catch {
76
- return olds ?? [];
77
- }
78
- };
79
- return query(initVariables, []);
80
- };
81
- const fetchMedias = async (fetcher, handle, isStorefront)=>{
82
- const initVariables = {
83
- orderBy,
84
- where: {
85
- status: 'ACTIVE',
86
- handle,
87
- ...isStorefront && {
88
- isStorefront
89
- }
90
- },
91
- orderByMedia: {
92
- field: 'POSITION',
93
- direction: 'ASC'
94
- }
95
- };
96
- const query = async (variables)=>{
97
- try {
98
- const response = await fetcher([
99
- ProductMediasDocument,
100
- variables
101
- ]);
102
- const product = response.medias?.edges?.[0];
103
- const items = product?.node?.medias?.edges ?? [];
104
- if (product?.node?.medias?.pageInfo?.hasNextPage) {
105
- try {
106
- const newData = await query({
107
- ...variables,
108
- afterMedia: product?.node?.medias?.pageInfo.endCursor
109
- });
110
- return items.concat(newData);
111
- } catch {
112
- return items;
113
- }
114
- }
115
- return items;
116
- } catch {
117
- return [];
118
- }
119
- };
120
- return query(initVariables);
121
- };
122
-
123
- export { getProductBySlug };
1
+ import{ProductLittleDetailDocument as e}from"../../graphql/queries/product-little-detail.generated.js";import{ProductMediasDocument as r}from"../../graphql/queries/product-medias.generated.js";import{ProductVariantsDocument as t}from"../../graphql/queries/product-variants.generated.js";let getProductBySlug=async(e,r)=>{let[t,a,d]=await Promise.all([fetchProduct(e,r),fetchVariants(e,r),fetchMedias(e,r)]);if(!t)throw Error("Product not found");return{...t,variants:{edges:a},medias:{edges:d}}},orderBy={field:"PLATFORM_UPDATED_AT",direction:"DESC"},fetchProduct=async(r,t,a)=>{let d={orderBy,where:{status:"ACTIVE",handle:t,...a&&{isStorefront:a}}},n=await r([e,d]);return n.product?.edges?.[0]?.node},fetchVariants=async(e,r,a)=>{let d={orderBy,orderByVariant:{field:"POSITION",direction:"ASC"},where:{status:"ACTIVE",handle:r,...a&&{isStorefront:a}}},n=async(r,a)=>{try{let d=await e([t,r]),i=d.variants?.edges?.[0],s=a?.concat(i?.node?.variants?.edges??[]);if(i?.node?.variants?.pageInfo?.hasNextPage)return n({...r,afterVariant:i?.node?.variants?.pageInfo.endCursor},s);return s??[]}catch{return a??[]}};return n(d,[])},fetchMedias=async(e,t,a)=>{let d={orderBy,where:{status:"ACTIVE",handle:t,...a&&{isStorefront:a}},orderByMedia:{field:"POSITION",direction:"ASC"}},n=async t=>{try{let a=await e([r,t]),d=a.medias?.edges?.[0],i=d?.node?.medias?.edges??[];if(d?.node?.medias?.pageInfo?.hasNextPage)try{let e=await n({...t,afterMedia:d?.node?.medias?.pageInfo.endCursor});return i.concat(e)}catch{}return i}catch{return[]}};return n(d)};export{getProductBySlug};
@@ -1,150 +1 @@
1
- import { ProductLittleDetailDocument } from '../../graphql/queries/product-little-detail.generated.js';
2
- import { ProductMediasDocument } from '../../graphql/queries/product-medias.generated.js';
3
- import { ProductVariantsDocument } from '../../graphql/queries/product-variants.generated.js';
4
-
5
- const getProduct = async (fetcher, { id, isSample, isStorefront })=>{
6
- const [product, variants, medias] = await Promise.all([
7
- fetchProduct(fetcher, {
8
- id,
9
- isSample,
10
- isStorefront
11
- }),
12
- fetchVariants(fetcher, {
13
- id,
14
- isSample,
15
- isStorefront
16
- }),
17
- fetchMedias(fetcher, {
18
- id,
19
- isSample,
20
- isStorefront
21
- })
22
- ]);
23
- if (!product) {
24
- throw new Error('Product not found');
25
- }
26
- return {
27
- ...product,
28
- variants: {
29
- edges: variants
30
- },
31
- medias: {
32
- edges: medias
33
- }
34
- };
35
- };
36
- const orderBy = {
37
- field: 'CREATED_AT',
38
- direction: 'DESC'
39
- };
40
- const fetchProduct = async (fetcher, { id, isSample, isStorefront })=>{
41
- const variables = {
42
- orderBy,
43
- where: {
44
- isSample,
45
- ...isStorefront && {
46
- isStorefront
47
- },
48
- ...(!id || id && id.toLowerCase() == 'latest') && {
49
- status: 'ACTIVE'
50
- },
51
- ...id && id.toLowerCase() !== 'latest' && {
52
- baseID: id
53
- }
54
- }
55
- };
56
- const response = await fetcher([
57
- ProductLittleDetailDocument,
58
- variables
59
- ]);
60
- return response.product?.edges?.[0]?.node;
61
- };
62
- const fetchVariants = async (fetcher, { id, isSample, isStorefront })=>{
63
- const initVariables = {
64
- orderBy,
65
- where: {
66
- isSample,
67
- ...isStorefront && {
68
- isStorefront
69
- },
70
- ...(!id || id && id.toLowerCase() == 'latest') && {
71
- status: 'ACTIVE'
72
- },
73
- ...id && id.toLowerCase() !== 'latest' && {
74
- baseID: id
75
- }
76
- },
77
- orderByVariant: {
78
- field: 'POSITION',
79
- direction: 'ASC'
80
- }
81
- };
82
- const query = async (variables, olds)=>{
83
- try {
84
- const response = await fetcher([
85
- ProductVariantsDocument,
86
- variables
87
- ]);
88
- const product = response.variants?.edges?.[0];
89
- const items = olds?.concat(product?.node?.variants?.edges ?? []);
90
- if (product?.node?.variants?.pageInfo?.hasNextPage) {
91
- return query({
92
- ...variables,
93
- afterVariant: product?.node?.variants?.pageInfo.endCursor
94
- }, items);
95
- }
96
- return items ?? [];
97
- } catch {
98
- return olds ?? [];
99
- }
100
- };
101
- return query(initVariables, []);
102
- };
103
- const fetchMedias = async (fetcher, { id, isSample, isStorefront })=>{
104
- const initVariables = {
105
- orderBy,
106
- where: {
107
- isSample,
108
- ...isStorefront && {
109
- isStorefront
110
- },
111
- ...(!id || id && id.toLowerCase() == 'latest') && {
112
- status: 'ACTIVE'
113
- },
114
- ...id && id.toLowerCase() !== 'latest' && {
115
- baseID: id
116
- }
117
- },
118
- orderByMedia: {
119
- field: 'POSITION',
120
- direction: 'ASC'
121
- }
122
- };
123
- const query = async (variables)=>{
124
- try {
125
- const response = await fetcher([
126
- ProductMediasDocument,
127
- variables
128
- ]);
129
- const product = response.medias?.edges?.[0];
130
- const items = product?.node?.medias?.edges ?? [];
131
- if (product?.node?.medias?.pageInfo?.hasNextPage) {
132
- try {
133
- const newData = await query({
134
- ...variables,
135
- afterMedia: product?.node?.medias?.pageInfo.endCursor
136
- });
137
- return items.concat(newData);
138
- } catch {
139
- return items;
140
- }
141
- }
142
- return items;
143
- } catch {
144
- return [];
145
- }
146
- };
147
- return query(initVariables);
148
- };
149
-
150
- export { fetchMedias, fetchVariants, getProduct };
1
+ import{ProductLittleDetailDocument as e}from"../../graphql/queries/product-little-detail.generated.js";import{ProductMediasDocument as t}from"../../graphql/queries/product-medias.generated.js";import{ProductVariantsDocument as r}from"../../graphql/queries/product-variants.generated.js";let getProduct=async(e,{id:t,isSample:r,isStorefront:a})=>{let[s,o,d]=await Promise.all([fetchProduct(e,{id:t,isSample:r,isStorefront:a}),fetchVariants(e,{id:t,isSample:r,isStorefront:a}),fetchMedias(e,{id:t,isSample:r,isStorefront:a})]);if(!s)throw Error("Product not found");return{...s,variants:{edges:o},medias:{edges:d}}},orderBy={field:"CREATED_AT",direction:"DESC"},fetchProduct=async(t,{id:r,isSample:a,isStorefront:s})=>{let o={orderBy,where:{isSample:a,...s&&{isStorefront:s},...(!r||r&&"latest"==r.toLowerCase())&&{status:"ACTIVE"},...r&&"latest"!==r.toLowerCase()&&{baseID:r}}},d=await t([e,o]);return d.product?.edges?.[0]?.node},fetchVariants=async(e,{id:t,isSample:a,isStorefront:s})=>{let o={orderBy,where:{isSample:a,...s&&{isStorefront:s},...(!t||t&&"latest"==t.toLowerCase())&&{status:"ACTIVE"},...t&&"latest"!==t.toLowerCase()&&{baseID:t}},orderByVariant:{field:"POSITION",direction:"ASC"}},d=async(t,a)=>{try{let s=await e([r,t]),o=s.variants?.edges?.[0],n=a?.concat(o?.node?.variants?.edges??[]);if(o?.node?.variants?.pageInfo?.hasNextPage)return d({...t,afterVariant:o?.node?.variants?.pageInfo.endCursor},n);return n??[]}catch{return a??[]}};return d(o,[])},fetchMedias=async(e,{id:r,isSample:a,isStorefront:s})=>{let o={orderBy,where:{isSample:a,...s&&{isStorefront:s},...(!r||r&&"latest"==r.toLowerCase())&&{status:"ACTIVE"},...r&&"latest"!==r.toLowerCase()&&{baseID:r}},orderByMedia:{field:"POSITION",direction:"ASC"}},d=async r=>{try{let a=await e([t,r]),s=a.medias?.edges?.[0],o=s?.node?.medias?.edges??[];if(s?.node?.medias?.pageInfo?.hasNextPage)try{let e=await d({...r,afterMedia:s?.node?.medias?.pageInfo.endCursor});return o.concat(e)}catch{}return o}catch{return[]}};return d(o)};export{fetchMedias,fetchVariants,getProduct};