@gem-sdk/core 1.5.17 → 1.5.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/dist/cjs/components/AddOn.js +7 -7
  2. package/dist/cjs/components/ComponentWrapper.js +14 -8
  3. package/dist/cjs/components/ComponentWrapperPreview.js +55 -46
  4. package/dist/cjs/components/Empty.js +1 -1
  5. package/dist/cjs/components/Render.js +50 -13
  6. package/dist/cjs/components/Render.liquid.js +81 -57
  7. package/dist/cjs/components/RenderBlock.js +41 -8
  8. package/dist/cjs/components/RenderPreview.js +51 -13
  9. package/dist/cjs/components/RenderSection.js +11 -7
  10. package/dist/cjs/components/constant.js +24 -24
  11. package/dist/cjs/contexts/AddonContext.js +25 -14
  12. package/dist/cjs/contexts/BuilderComponent.js +23 -19
  13. package/dist/cjs/contexts/BuilderContext.js +25 -19
  14. package/dist/cjs/contexts/BuilderPreviewContext.js +349 -341
  15. package/dist/cjs/contexts/CartLineContext.js +19 -14
  16. package/dist/cjs/contexts/CollectionContext.js +21 -13
  17. package/dist/cjs/contexts/ProductContext.js +136 -115
  18. package/dist/cjs/contexts/ProductListContext.js +21 -13
  19. package/dist/cjs/contexts/SectionContext.js +41 -37
  20. package/dist/cjs/contexts/ShopContext.js +54 -31
  21. package/dist/cjs/graphql/fragments/analytic.generated.js +1 -1
  22. package/dist/cjs/graphql/fragments/collection-detail.generated.js +1 -1
  23. package/dist/cjs/graphql/fragments/collection-product.generated.js +1 -1
  24. package/dist/cjs/graphql/fragments/custom-code.generated.js +1 -1
  25. package/dist/cjs/graphql/fragments/data-seo.generated.js +1 -1
  26. package/dist/cjs/graphql/fragments/media.generated.js +1 -1
  27. package/dist/cjs/graphql/fragments/product-little.generated.js +1 -1
  28. package/dist/cjs/graphql/fragments/product-option-value.generated.js +1 -1
  29. package/dist/cjs/graphql/fragments/product-option.generated.js +1 -1
  30. package/dist/cjs/graphql/fragments/product.generated.js +1 -1
  31. package/dist/cjs/graphql/fragments/published-custom-section.generated.js +1 -1
  32. package/dist/cjs/graphql/fragments/published-page-section.generated.js +1 -1
  33. package/dist/cjs/graphql/fragments/published-theme-page.generated.js +1 -1
  34. package/dist/cjs/graphql/fragments/published-theme-style.generated.js +1 -1
  35. package/dist/cjs/graphql/fragments/selected-option.generated.js +1 -1
  36. package/dist/cjs/graphql/fragments/variant.generated.js +1 -1
  37. package/dist/cjs/graphql/mutations/page-view-up.generated.js +1 -1
  38. package/dist/cjs/graphql/queries/products.generated.js +1 -1
  39. package/dist/cjs/graphql/queries/store-property.generated.js +1 -1
  40. package/dist/cjs/helpers/GlobalEvent.js +12 -10
  41. package/dist/cjs/helpers/background.js +96 -96
  42. package/dist/cjs/helpers/borders.js +123 -127
  43. package/dist/cjs/helpers/clone-deep.js +1 -1
  44. package/dist/cjs/helpers/cls.js +11 -15
  45. package/dist/cjs/helpers/colors.js +121 -156
  46. package/dist/cjs/helpers/compose-advance-style.js +115 -121
  47. package/dist/cjs/helpers/constant.js +16 -11
  48. package/dist/cjs/helpers/css-variable.js +2 -2
  49. package/dist/cjs/helpers/email.js +3 -3
  50. package/dist/cjs/helpers/flatten-connection.js +4 -5
  51. package/dist/cjs/helpers/get-resonsive-value.js +24 -25
  52. package/dist/cjs/helpers/get-shortname.js +87 -87
  53. package/dist/cjs/helpers/is-browser.js +2 -2
  54. package/dist/cjs/helpers/is-defined.js +2 -2
  55. package/dist/cjs/helpers/is-empty-children.js +2 -2
  56. package/dist/cjs/helpers/layout.js +9 -10
  57. package/dist/cjs/helpers/load-script.js +26 -27
  58. package/dist/cjs/helpers/make-style.js +77 -86
  59. package/dist/cjs/helpers/normalize-builder-data.js +18 -12
  60. package/dist/cjs/helpers/prefetch-queries.js +72 -52
  61. package/dist/cjs/helpers/product.js +25 -29
  62. package/dist/cjs/helpers/queries/get-collection.js +179 -167
  63. package/dist/cjs/helpers/queries/get-product-by-slug.js +103 -94
  64. package/dist/cjs/helpers/queries/get-product.js +121 -106
  65. package/dist/cjs/helpers/queries/get-products.js +137 -125
  66. package/dist/cjs/helpers/radius.js +78 -81
  67. package/dist/cjs/helpers/render.js +56 -56
  68. package/dist/cjs/helpers/shadow.js +38 -38
  69. package/dist/cjs/helpers/size.js +12 -13
  70. package/dist/cjs/helpers/spacing.js +35 -37
  71. package/dist/cjs/helpers/tracking/fpixel.js +21 -22
  72. package/dist/cjs/helpers/tracking/gtag.js +84 -90
  73. package/dist/cjs/helpers/tracking/tiktokpixel.js +12 -12
  74. package/dist/cjs/helpers/typography.js +2 -2
  75. package/dist/cjs/hooks/cart/use-add-to-cart.js +10 -10
  76. package/dist/cjs/hooks/cart/use-cart-data.js +18 -16
  77. package/dist/cjs/hooks/cart/use-cart-discount-codes-update.js +10 -10
  78. package/dist/cjs/hooks/cart/use-cart-note-update.js +10 -10
  79. package/dist/cjs/hooks/cart/use-create-cart.js +12 -12
  80. package/dist/cjs/hooks/cart/use-remove-cart-item.js +10 -10
  81. package/dist/cjs/hooks/cart/use-update-cart-item.js +10 -10
  82. package/dist/cjs/hooks/shop/use-collection-query.js +12 -6
  83. package/dist/cjs/hooks/shop/use-product-query.js +12 -6
  84. package/dist/cjs/hooks/shop/use-products-query.js +14 -6
  85. package/dist/cjs/hooks/shop.js +86 -67
  86. package/dist/cjs/hooks/use-current-device.js +14 -16
  87. package/dist/cjs/hooks/use-lazy-video.js +7 -7
  88. package/dist/cjs/hooks/useCartId.js +35 -27
  89. package/dist/cjs/hooks/useCartLine.js +2 -2
  90. package/dist/cjs/hooks/useCartUI.js +37 -31
  91. package/dist/cjs/hooks/useCollection.js +2 -2
  92. package/dist/cjs/hooks/useFetchHandle.js +6 -6
  93. package/dist/cjs/hooks/useFormatMoney.js +11 -7
  94. package/dist/cjs/hooks/useIsomorphicLayoutEffect.js +1 -1
  95. package/dist/cjs/hooks/useLoadScript.js +22 -20
  96. package/dist/cjs/hooks/useMoney.js +59 -42
  97. package/dist/cjs/hooks/usePrevious.js +12 -10
  98. package/dist/cjs/hooks/useProduct.js +92 -69
  99. package/dist/cjs/hooks/useProductList.js +11 -11
  100. package/dist/cjs/hooks/useSuspenseFetch.js +20 -17
  101. package/dist/cjs/hooks/useSwatchesOptions.js +32 -30
  102. package/dist/cjs/types/global-style.js +9 -2
  103. package/dist/esm/components/AddOn.js +7 -7
  104. package/dist/esm/components/ComponentWrapper.js +14 -8
  105. package/dist/esm/components/ComponentWrapperPreview.js +55 -46
  106. package/dist/esm/components/Empty.js +1 -1
  107. package/dist/esm/components/Render.js +50 -13
  108. package/dist/esm/components/Render.liquid.js +81 -57
  109. package/dist/esm/components/RenderBlock.js +41 -8
  110. package/dist/esm/components/RenderPreview.js +51 -13
  111. package/dist/esm/components/RenderSection.js +11 -7
  112. package/dist/esm/components/constant.js +24 -24
  113. package/dist/esm/contexts/AddonContext.js +26 -15
  114. package/dist/esm/contexts/BuilderComponent.js +24 -20
  115. package/dist/esm/contexts/BuilderContext.js +26 -20
  116. package/dist/esm/contexts/BuilderPreviewContext.js +350 -342
  117. package/dist/esm/contexts/CartLineContext.js +20 -15
  118. package/dist/esm/contexts/CollectionContext.js +22 -14
  119. package/dist/esm/contexts/ProductContext.js +137 -116
  120. package/dist/esm/contexts/ProductListContext.js +22 -14
  121. package/dist/esm/contexts/SectionContext.js +42 -38
  122. package/dist/esm/contexts/ShopContext.js +55 -32
  123. package/dist/esm/graphql/fragments/analytic.generated.js +1 -1
  124. package/dist/esm/graphql/fragments/collection-detail.generated.js +1 -1
  125. package/dist/esm/graphql/fragments/collection-product.generated.js +1 -1
  126. package/dist/esm/graphql/fragments/custom-code.generated.js +1 -1
  127. package/dist/esm/graphql/fragments/data-seo.generated.js +1 -1
  128. package/dist/esm/graphql/fragments/media.generated.js +1 -1
  129. package/dist/esm/graphql/fragments/product-little.generated.js +1 -1
  130. package/dist/esm/graphql/fragments/product-option-value.generated.js +1 -1
  131. package/dist/esm/graphql/fragments/product-option.generated.js +1 -1
  132. package/dist/esm/graphql/fragments/product.generated.js +1 -1
  133. package/dist/esm/graphql/fragments/published-custom-section.generated.js +1 -1
  134. package/dist/esm/graphql/fragments/published-page-section.generated.js +1 -1
  135. package/dist/esm/graphql/fragments/published-theme-page.generated.js +1 -1
  136. package/dist/esm/graphql/fragments/published-theme-style.generated.js +1 -1
  137. package/dist/esm/graphql/fragments/selected-option.generated.js +1 -1
  138. package/dist/esm/graphql/fragments/variant.generated.js +1 -1
  139. package/dist/esm/graphql/mutations/page-view-up.generated.js +1 -1
  140. package/dist/esm/graphql/queries/products.generated.js +1 -1
  141. package/dist/esm/graphql/queries/store-property.generated.js +1 -1
  142. package/dist/esm/helpers/GlobalEvent.js +12 -10
  143. package/dist/esm/helpers/background.js +96 -96
  144. package/dist/esm/helpers/borders.js +123 -127
  145. package/dist/esm/helpers/clone-deep.js +1 -1
  146. package/dist/esm/helpers/cls.js +11 -15
  147. package/dist/esm/helpers/colors.js +121 -156
  148. package/dist/esm/helpers/compose-advance-style.js +115 -121
  149. package/dist/esm/helpers/constant.js +16 -11
  150. package/dist/esm/helpers/css-variable.js +2 -2
  151. package/dist/esm/helpers/email.js +3 -3
  152. package/dist/esm/helpers/flatten-connection.js +4 -5
  153. package/dist/esm/helpers/get-resonsive-value.js +24 -25
  154. package/dist/esm/helpers/get-shortname.js +87 -87
  155. package/dist/esm/helpers/is-browser.js +2 -2
  156. package/dist/esm/helpers/is-defined.js +2 -2
  157. package/dist/esm/helpers/is-empty-children.js +2 -2
  158. package/dist/esm/helpers/layout.js +9 -10
  159. package/dist/esm/helpers/load-script.js +26 -27
  160. package/dist/esm/helpers/make-style.js +77 -86
  161. package/dist/esm/helpers/normalize-builder-data.js +18 -12
  162. package/dist/esm/helpers/prefetch-queries.js +72 -52
  163. package/dist/esm/helpers/product.js +25 -29
  164. package/dist/esm/helpers/queries/get-collection.js +179 -167
  165. package/dist/esm/helpers/queries/get-product-by-slug.js +103 -94
  166. package/dist/esm/helpers/queries/get-product.js +121 -106
  167. package/dist/esm/helpers/queries/get-products.js +137 -125
  168. package/dist/esm/helpers/radius.js +78 -81
  169. package/dist/esm/helpers/render.js +56 -56
  170. package/dist/esm/helpers/shadow.js +38 -38
  171. package/dist/esm/helpers/size.js +12 -13
  172. package/dist/esm/helpers/spacing.js +35 -37
  173. package/dist/esm/helpers/tracking/fpixel.js +21 -22
  174. package/dist/esm/helpers/tracking/gtag.js +84 -90
  175. package/dist/esm/helpers/tracking/tiktokpixel.js +12 -12
  176. package/dist/esm/helpers/typography.js +2 -2
  177. package/dist/esm/hooks/cart/use-add-to-cart.js +10 -10
  178. package/dist/esm/hooks/cart/use-cart-data.js +18 -16
  179. package/dist/esm/hooks/cart/use-cart-discount-codes-update.js +10 -10
  180. package/dist/esm/hooks/cart/use-cart-note-update.js +10 -10
  181. package/dist/esm/hooks/cart/use-create-cart.js +12 -12
  182. package/dist/esm/hooks/cart/use-remove-cart-item.js +10 -10
  183. package/dist/esm/hooks/cart/use-update-cart-item.js +10 -10
  184. package/dist/esm/hooks/shop/use-collection-query.js +12 -6
  185. package/dist/esm/hooks/shop/use-product-query.js +12 -6
  186. package/dist/esm/hooks/shop/use-products-query.js +14 -6
  187. package/dist/esm/hooks/shop.js +86 -67
  188. package/dist/esm/hooks/use-current-device.js +14 -16
  189. package/dist/esm/hooks/use-lazy-video.js +7 -7
  190. package/dist/esm/hooks/useCartId.js +35 -27
  191. package/dist/esm/hooks/useCartLine.js +2 -2
  192. package/dist/esm/hooks/useCartUI.js +37 -31
  193. package/dist/esm/hooks/useCollection.js +2 -2
  194. package/dist/esm/hooks/useFetchHandle.js +6 -6
  195. package/dist/esm/hooks/useFormatMoney.js +11 -7
  196. package/dist/esm/hooks/useIsomorphicLayoutEffect.js +1 -1
  197. package/dist/esm/hooks/useLoadScript.js +22 -20
  198. package/dist/esm/hooks/useMoney.js +59 -42
  199. package/dist/esm/hooks/usePrevious.js +12 -10
  200. package/dist/esm/hooks/useProduct.js +92 -69
  201. package/dist/esm/hooks/useProductList.js +11 -11
  202. package/dist/esm/hooks/useSuspenseFetch.js +20 -17
  203. package/dist/esm/hooks/useSwatchesOptions.js +32 -30
  204. package/dist/esm/types/global-style.js +9 -2
  205. package/dist/types/index.d.ts +30 -2
  206. package/package.json +1 -1
@@ -4,100 +4,109 @@ var productLittleDetail_generated = require('../../graphql/queries/product-littl
4
4
  var productMedias_generated = require('../../graphql/queries/product-medias.generated.js');
5
5
  var productVariants_generated = require('../../graphql/queries/product-variants.generated.js');
6
6
 
7
- const getProductBySlug = async (fetcher, slug) => {
8
- const [product, variants, medias] = await Promise.all([
9
- fetchProduct(fetcher, slug),
10
- fetchVariants(fetcher, slug),
11
- fetchMedias(fetcher, slug),
12
- ]);
13
- if (!product) {
14
- throw new Error('Product not found');
15
- }
16
- return {
17
- ...product,
18
- variants: {
19
- edges: variants,
20
- },
21
- medias: {
22
- edges: medias,
23
- },
24
- };
25
- };
26
- const orderBy = {
27
- field: 'UPDATED_AT',
28
- direction: 'DESC',
29
- };
30
- const fetchProduct = async (fetcher, handle) => {
31
- const variables = {
32
- orderBy,
33
- where: { handle, isStorefront: true },
34
- };
35
- const response = await fetcher([productLittleDetail_generated.ProductLittleDetailDocument, variables]);
36
- return response.product?.edges?.[0]?.node;
37
- };
38
- const fetchVariants = async (fetcher, handle) => {
39
- const initVariables = {
40
- orderBy,
41
- where: { handle, isStorefront: true },
42
- };
43
- const query = async (variables, olds) => {
44
- try {
45
- const response = await fetcher([
46
- productVariants_generated.ProductVariantsDocument,
47
- variables,
48
- ]);
49
- const product = response.variants?.edges?.[0];
50
- const items = olds?.concat(product?.node?.variants?.edges ?? []);
51
- if (product?.node?.variants?.pageInfo?.hasNextPage) {
52
- return query({
53
- ...variables,
54
- afterVariant: product?.node?.variants?.pageInfo.endCursor,
55
- }, items);
56
- }
57
- return items ?? [];
58
- }
59
- catch {
60
- return olds ?? [];
61
- }
62
- };
63
- return query(initVariables, []);
64
- };
65
- const fetchMedias = async (fetcher, handle) => {
66
- const initVariables = {
67
- orderBy,
68
- where: { handle, isStorefront: true },
69
- orderByMedia: {
70
- field: 'POSITION',
71
- direction: 'ASC',
72
- },
73
- };
74
- const query = async (variables) => {
75
- try {
76
- const response = await fetcher([
77
- productMedias_generated.ProductMediasDocument,
78
- variables,
79
- ]);
80
- const product = response.medias?.edges?.[0];
81
- const items = product?.node?.medias?.edges ?? [];
82
- if (product?.node?.medias?.pageInfo?.hasNextPage) {
83
- try {
84
- const newData = await query({
85
- ...variables,
86
- afterMedia: product?.node?.medias?.pageInfo.endCursor,
87
- });
88
- return items.concat(newData);
89
- }
90
- catch {
91
- return items;
92
- }
93
- }
94
- return items;
95
- }
96
- catch {
97
- return [];
98
- }
99
- };
100
- return query(initVariables);
7
+ const getProductBySlug = async (fetcher, slug)=>{
8
+ const [product, variants, medias] = await Promise.all([
9
+ fetchProduct(fetcher, slug),
10
+ fetchVariants(fetcher, slug),
11
+ fetchMedias(fetcher, slug)
12
+ ]);
13
+ if (!product) {
14
+ throw new Error('Product not found');
15
+ }
16
+ return {
17
+ ...product,
18
+ variants: {
19
+ edges: variants
20
+ },
21
+ medias: {
22
+ edges: medias
23
+ }
24
+ };
25
+ };
26
+ const orderBy = {
27
+ field: 'UPDATED_AT',
28
+ direction: 'DESC'
29
+ };
30
+ const fetchProduct = async (fetcher, handle)=>{
31
+ const variables = {
32
+ orderBy,
33
+ where: {
34
+ handle,
35
+ isStorefront: true
36
+ }
37
+ };
38
+ const response = await fetcher([
39
+ productLittleDetail_generated.ProductLittleDetailDocument,
40
+ variables
41
+ ]);
42
+ return response.product?.edges?.[0]?.node;
43
+ };
44
+ const fetchVariants = async (fetcher, handle)=>{
45
+ const initVariables = {
46
+ orderBy,
47
+ where: {
48
+ handle,
49
+ isStorefront: true
50
+ }
51
+ };
52
+ const query = async (variables, olds)=>{
53
+ try {
54
+ const response = await fetcher([
55
+ productVariants_generated.ProductVariantsDocument,
56
+ variables
57
+ ]);
58
+ const product = response.variants?.edges?.[0];
59
+ const items = olds?.concat(product?.node?.variants?.edges ?? []);
60
+ if (product?.node?.variants?.pageInfo?.hasNextPage) {
61
+ return query({
62
+ ...variables,
63
+ afterVariant: product?.node?.variants?.pageInfo.endCursor
64
+ }, items);
65
+ }
66
+ return items ?? [];
67
+ } catch {
68
+ return olds ?? [];
69
+ }
70
+ };
71
+ return query(initVariables, []);
72
+ };
73
+ const fetchMedias = async (fetcher, handle)=>{
74
+ const initVariables = {
75
+ orderBy,
76
+ where: {
77
+ handle,
78
+ isStorefront: true
79
+ },
80
+ orderByMedia: {
81
+ field: 'POSITION',
82
+ direction: 'ASC'
83
+ }
84
+ };
85
+ const query = async (variables)=>{
86
+ try {
87
+ const response = await fetcher([
88
+ productMedias_generated.ProductMediasDocument,
89
+ variables
90
+ ]);
91
+ const product = response.medias?.edges?.[0];
92
+ const items = product?.node?.medias?.edges ?? [];
93
+ if (product?.node?.medias?.pageInfo?.hasNextPage) {
94
+ try {
95
+ const newData = await query({
96
+ ...variables,
97
+ afterMedia: product?.node?.medias?.pageInfo.endCursor
98
+ });
99
+ return items.concat(newData);
100
+ } catch {
101
+ return items;
102
+ }
103
+ }
104
+ return items;
105
+ } catch {
106
+ return [];
107
+ }
108
+ };
109
+ return query(initVariables);
101
110
  };
102
111
 
103
112
  exports.getProductBySlug = getProductBySlug;
@@ -4,112 +4,127 @@ var productLittleDetail_generated = require('../../graphql/queries/product-littl
4
4
  var productMedias_generated = require('../../graphql/queries/product-medias.generated.js');
5
5
  var productVariants_generated = require('../../graphql/queries/product-variants.generated.js');
6
6
 
7
- const getProduct = async (fetcher, { id, isSample }) => {
8
- const [product, variants, medias] = await Promise.all([
9
- fetchProduct(fetcher, { id, isSample }),
10
- fetchVariants(fetcher, { id, isSample }),
11
- fetchMedias(fetcher, { id, isSample }),
12
- ]);
13
- if (!product) {
14
- throw new Error('Product not found');
15
- }
16
- return {
17
- ...product,
18
- variants: {
19
- edges: variants,
20
- },
21
- medias: {
22
- edges: medias,
23
- },
24
- };
25
- };
26
- const orderBy = {
27
- field: 'UPDATED_AT',
28
- direction: 'DESC',
29
- };
30
- const fetchProduct = async (fetcher, { id, isSample }) => {
31
- const variables = {
32
- orderBy,
33
- where: {
34
- isStorefront: true,
35
- isSample,
36
- ...(id && id.toLowerCase() !== 'latest' && { baseID: id }),
37
- },
38
- };
39
- const response = await fetcher([productLittleDetail_generated.ProductLittleDetailDocument, variables]);
40
- return response.product?.edges?.[0]?.node;
41
- };
42
- const fetchVariants = async (fetcher, { id, isSample }) => {
43
- const initVariables = {
44
- orderBy,
45
- where: {
46
- isStorefront: true,
47
- isSample,
48
- ...(id && id.toLowerCase() !== 'latest' && { baseID: id }),
49
- },
50
- };
51
- const query = async (variables, olds) => {
52
- try {
53
- const response = await fetcher([
54
- productVariants_generated.ProductVariantsDocument,
55
- variables,
56
- ]);
57
- const product = response.variants?.edges?.[0];
58
- const items = olds?.concat(product?.node?.variants?.edges ?? []);
59
- if (product?.node?.variants?.pageInfo?.hasNextPage) {
60
- return query({
61
- ...variables,
62
- afterVariant: product?.node?.variants?.pageInfo.endCursor,
63
- }, items);
64
- }
65
- return items ?? [];
66
- }
67
- catch {
68
- return olds ?? [];
69
- }
70
- };
71
- return query(initVariables, []);
72
- };
73
- const fetchMedias = async (fetcher, { id, isSample }) => {
74
- const initVariables = {
75
- orderBy,
76
- where: {
77
- isStorefront: true,
78
- isSample,
79
- ...(id && id.toLowerCase() !== 'latest' && { baseID: id }),
80
- },
81
- orderByMedia: {
82
- field: 'POSITION',
83
- direction: 'ASC',
84
- },
85
- };
86
- const query = async (variables) => {
87
- try {
88
- const response = await fetcher([
89
- productMedias_generated.ProductMediasDocument,
90
- variables,
91
- ]);
92
- const product = response.medias?.edges?.[0];
93
- const items = product?.node?.medias?.edges ?? [];
94
- if (product?.node?.medias?.pageInfo?.hasNextPage) {
95
- try {
96
- const newData = await query({
97
- ...variables,
98
- afterMedia: product?.node?.medias?.pageInfo.endCursor,
99
- });
100
- return items.concat(newData);
101
- }
102
- catch {
103
- return items;
104
- }
105
- }
106
- return items;
107
- }
108
- catch {
109
- return [];
110
- }
111
- };
112
- return query(initVariables);
7
+ const getProduct = async (fetcher, { id , isSample })=>{
8
+ const [product, variants, medias] = await Promise.all([
9
+ fetchProduct(fetcher, {
10
+ id,
11
+ isSample
12
+ }),
13
+ fetchVariants(fetcher, {
14
+ id,
15
+ isSample
16
+ }),
17
+ fetchMedias(fetcher, {
18
+ id,
19
+ isSample
20
+ })
21
+ ]);
22
+ if (!product) {
23
+ throw new Error('Product not found');
24
+ }
25
+ return {
26
+ ...product,
27
+ variants: {
28
+ edges: variants
29
+ },
30
+ medias: {
31
+ edges: medias
32
+ }
33
+ };
34
+ };
35
+ const orderBy = {
36
+ field: 'UPDATED_AT',
37
+ direction: 'DESC'
38
+ };
39
+ const fetchProduct = async (fetcher, { id , isSample })=>{
40
+ const variables = {
41
+ orderBy,
42
+ where: {
43
+ isStorefront: true,
44
+ isSample,
45
+ ...id && id.toLowerCase() !== 'latest' && {
46
+ baseID: id
47
+ }
48
+ }
49
+ };
50
+ const response = await fetcher([
51
+ productLittleDetail_generated.ProductLittleDetailDocument,
52
+ variables
53
+ ]);
54
+ return response.product?.edges?.[0]?.node;
55
+ };
56
+ const fetchVariants = async (fetcher, { id , isSample })=>{
57
+ const initVariables = {
58
+ orderBy,
59
+ where: {
60
+ isStorefront: true,
61
+ isSample,
62
+ ...id && id.toLowerCase() !== 'latest' && {
63
+ baseID: id
64
+ }
65
+ }
66
+ };
67
+ const query = async (variables, olds)=>{
68
+ try {
69
+ const response = await fetcher([
70
+ productVariants_generated.ProductVariantsDocument,
71
+ variables
72
+ ]);
73
+ const product = response.variants?.edges?.[0];
74
+ const items = olds?.concat(product?.node?.variants?.edges ?? []);
75
+ if (product?.node?.variants?.pageInfo?.hasNextPage) {
76
+ return query({
77
+ ...variables,
78
+ afterVariant: product?.node?.variants?.pageInfo.endCursor
79
+ }, items);
80
+ }
81
+ return items ?? [];
82
+ } catch {
83
+ return olds ?? [];
84
+ }
85
+ };
86
+ return query(initVariables, []);
87
+ };
88
+ const fetchMedias = async (fetcher, { id , isSample })=>{
89
+ const initVariables = {
90
+ orderBy,
91
+ where: {
92
+ isStorefront: true,
93
+ isSample,
94
+ ...id && id.toLowerCase() !== 'latest' && {
95
+ baseID: id
96
+ }
97
+ },
98
+ orderByMedia: {
99
+ field: 'POSITION',
100
+ direction: 'ASC'
101
+ }
102
+ };
103
+ const query = async (variables)=>{
104
+ try {
105
+ const response = await fetcher([
106
+ productMedias_generated.ProductMediasDocument,
107
+ variables
108
+ ]);
109
+ const product = response.medias?.edges?.[0];
110
+ const items = product?.node?.medias?.edges ?? [];
111
+ if (product?.node?.medias?.pageInfo?.hasNextPage) {
112
+ try {
113
+ const newData = await query({
114
+ ...variables,
115
+ afterMedia: product?.node?.medias?.pageInfo.endCursor
116
+ });
117
+ return items.concat(newData);
118
+ } catch {
119
+ return items;
120
+ }
121
+ }
122
+ return items;
123
+ } catch {
124
+ return [];
125
+ }
126
+ };
127
+ return query(initVariables);
113
128
  };
114
129
 
115
130
  exports.fetchMedias = fetchMedias;