@alphasquad/saleor-template-advance 0.1.0

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 (441) hide show
  1. package/.env.example +57 -0
  2. package/APPLE_PAY_QUICK_START.md +165 -0
  3. package/APPLE_PAY_SETUP.md +331 -0
  4. package/README.md +46 -0
  5. package/SEO_AUDIT_CHECKLIST_STATUS.md +244 -0
  6. package/SEO_AUDIT_REPORT.md +66 -0
  7. package/eslint.config.mjs +16 -0
  8. package/next-env.d.ts +5 -0
  9. package/next.config.ts +109 -0
  10. package/package.json +47 -0
  11. package/postcss.config.mjs +5 -0
  12. package/public/.well-known/apple-developer-merchantid-domain-association +1 -0
  13. package/public/Logo.png +0 -0
  14. package/public/brand-video.mp4 +0 -0
  15. package/public/favicon.ico +0 -0
  16. package/public/file.svg +1 -0
  17. package/public/footer/facebook.tsx +34 -0
  18. package/public/footer/instagram.tsx +27 -0
  19. package/public/footer/mail.tsx +5 -0
  20. package/public/footer/x.tsx +35 -0
  21. package/public/globe.svg +1 -0
  22. package/public/icons/Authorize.net.webp +0 -0
  23. package/public/icons/amex.gif +0 -0
  24. package/public/icons/appIcon.png +0 -0
  25. package/public/icons/discover.gif +0 -0
  26. package/public/icons/master.gif +0 -0
  27. package/public/icons/paypal.png +0 -0
  28. package/public/icons/stripe.png +0 -0
  29. package/public/icons/visa.gif +0 -0
  30. package/public/images/BackgroundNoise.png +0 -0
  31. package/public/images/footer-background.png +0 -0
  32. package/public/next.svg +1 -0
  33. package/public/no-image-avail-large.png +0 -0
  34. package/public/random-car-1.jpeg +0 -0
  35. package/public/random-car-2.png +0 -0
  36. package/public/random-car-3.jpg +0 -0
  37. package/public/random-car-4.jpg +0 -0
  38. package/public/random-car-5.jpg +0 -0
  39. package/public/star.svg +3 -0
  40. package/public/vercel.svg +1 -0
  41. package/public/window.svg +1 -0
  42. package/scripts/seo-audit/generate-checklist.mjs +156 -0
  43. package/src/app/(auth)/account/forgot-password/layout.tsx +16 -0
  44. package/src/app/(auth)/account/forgot-password/page.tsx +135 -0
  45. package/src/app/(auth)/account/login/layout.tsx +16 -0
  46. package/src/app/(auth)/account/login/page.tsx +288 -0
  47. package/src/app/(auth)/account/otp/layout.tsx +16 -0
  48. package/src/app/(auth)/account/otp/page.tsx +108 -0
  49. package/src/app/(auth)/account/register/layout.tsx +16 -0
  50. package/src/app/(auth)/account/register/page.tsx +431 -0
  51. package/src/app/(auth)/account/reset-password/layout.tsx +16 -0
  52. package/src/app/(auth)/account/reset-password/page.tsx +222 -0
  53. package/src/app/[slug]/page.tsx +43 -0
  54. package/src/app/about/loading.tsx +17 -0
  55. package/src/app/about/page.tsx +61 -0
  56. package/src/app/account/address/layout.tsx +15 -0
  57. package/src/app/account/address/page.tsx +166 -0
  58. package/src/app/account/head.tsx +4 -0
  59. package/src/app/account/layout.tsx +62 -0
  60. package/src/app/account/orders/[id]/layout.tsx +17 -0
  61. package/src/app/account/orders/[id]/page.tsx +115 -0
  62. package/src/app/account/orders/components/orderDetailsModal.tsx +410 -0
  63. package/src/app/account/orders/layout.tsx +15 -0
  64. package/src/app/account/orders/page.tsx +146 -0
  65. package/src/app/account/page.tsx +39 -0
  66. package/src/app/account/settings/components/editProfileSuccessModal.tsx +28 -0
  67. package/src/app/account/settings/layout.tsx +15 -0
  68. package/src/app/account/settings/page.tsx +260 -0
  69. package/src/app/api/affirm/check-status/route.ts +94 -0
  70. package/src/app/api/affirm/create-checkout/route.ts +109 -0
  71. package/src/app/api/affirm/get-config/route.ts +108 -0
  72. package/src/app/api/affirm/process-payment/route.ts +244 -0
  73. package/src/app/api/affirm/test-connection/route.ts +45 -0
  74. package/src/app/api/auth/clear/route.ts +16 -0
  75. package/src/app/api/auth/clear-cookies/route.ts +42 -0
  76. package/src/app/api/auth/set/route.ts +47 -0
  77. package/src/app/api/configuration/route.ts +18 -0
  78. package/src/app/api/dynamic-page/[slug]/route.ts +24 -0
  79. package/src/app/api/form-submission/route.ts +237 -0
  80. package/src/app/api/paypal/capture-order/route.ts +303 -0
  81. package/src/app/api/paypal/create-order/route.ts +211 -0
  82. package/src/app/api/paypal/get-config/route.ts +240 -0
  83. package/src/app/api/search-proxy/route.ts +52 -0
  84. package/src/app/authorize-net-success/layout.tsx +19 -0
  85. package/src/app/authorize-net-success/page.tsx +12 -0
  86. package/src/app/authorize-net-success/summary.tsx +486 -0
  87. package/src/app/blog/[slug]/blogContentRenderer.tsx +369 -0
  88. package/src/app/blog/[slug]/layout.tsx +17 -0
  89. package/src/app/blog/[slug]/page.tsx +151 -0
  90. package/src/app/blog/constant.tsx +147 -0
  91. package/src/app/blog/layout.tsx +31 -0
  92. package/src/app/blog/page.tsx +81 -0
  93. package/src/app/brand/[id]/BrandPageClient.tsx +188 -0
  94. package/src/app/brand/[id]/layout.tsx +17 -0
  95. package/src/app/brand/[id]/page.tsx +176 -0
  96. package/src/app/brands/components/brandsListingClient.tsx +97 -0
  97. package/src/app/brands/layout.tsx +31 -0
  98. package/src/app/brands/page.tsx +40 -0
  99. package/src/app/cancellation-policy/page.tsx +53 -0
  100. package/src/app/cart/layout.tsx +19 -0
  101. package/src/app/cart/page.tsx +752 -0
  102. package/src/app/category/[slug]/CategoryPageClient.tsx +377 -0
  103. package/src/app/category/[slug]/layout.tsx +17 -0
  104. package/src/app/category/[slug]/page.tsx +224 -0
  105. package/src/app/category/page.tsx +114 -0
  106. package/src/app/checkout/components/addNewAddressModal.tsx +474 -0
  107. package/src/app/checkout/layout.tsx +19 -0
  108. package/src/app/checkout/page.tsx +3312 -0
  109. package/src/app/components/account/AccountTabs.tsx +40 -0
  110. package/src/app/components/ads/GoogleAdSense.tsx +74 -0
  111. package/src/app/components/analytics/AnalyticsScripts.tsx +78 -0
  112. package/src/app/components/analytics/ConditionalGTMNoscript.tsx +24 -0
  113. package/src/app/components/analytics/ConditionalGoogleAnalytics.tsx +16 -0
  114. package/src/app/components/ancillary/AncillaryContent.tsx +7 -0
  115. package/src/app/components/auth/TokenExpirationHandler.tsx +8 -0
  116. package/src/app/components/blog/BlogList.tsx +112 -0
  117. package/src/app/components/checkout/AddressInformationSection.tsx +34 -0
  118. package/src/app/components/checkout/AddressManagement.tsx +571 -0
  119. package/src/app/components/checkout/CheckoutHeader.tsx +51 -0
  120. package/src/app/components/checkout/CheckoutQuestions.tsx +454 -0
  121. package/src/app/components/checkout/CheckoutTermsModal.tsx +81 -0
  122. package/src/app/components/checkout/ContactDetailsSection.tsx +52 -0
  123. package/src/app/components/checkout/DealerShippingSection.tsx +359 -0
  124. package/src/app/components/checkout/DeliveryMethodSection.tsx +249 -0
  125. package/src/app/components/checkout/OrderSummary.tsx +386 -0
  126. package/src/app/components/checkout/TermsContentRenderer.tsx +147 -0
  127. package/src/app/components/checkout/WillCallSection.tsx +133 -0
  128. package/src/app/components/checkout/affirmPayment.tsx +383 -0
  129. package/src/app/components/checkout/checkoutProcessingModal.tsx +96 -0
  130. package/src/app/components/checkout/googlePayButton.tsx +334 -0
  131. package/src/app/components/checkout/paymentStep.tsx +180 -0
  132. package/src/app/components/checkout/paypalPayment.tsx +1083 -0
  133. package/src/app/components/checkout/saleorNativePayment.tsx +1758 -0
  134. package/src/app/components/dynamicPage/DynamicPageRenderer.tsx +13 -0
  135. package/src/app/components/dynamicPage/HtmlWidgetRenderer.tsx +144 -0
  136. package/src/app/components/filtersCollapsible/index.tsx +365 -0
  137. package/src/app/components/globalSearch/index.tsx +423 -0
  138. package/src/app/components/layout/cartDropDown.tsx +628 -0
  139. package/src/app/components/layout/components/FooterNewsletter.tsx +21 -0
  140. package/src/app/components/layout/footer.tsx +283 -0
  141. package/src/app/components/layout/header/accountMenuDropdown.tsx +53 -0
  142. package/src/app/components/layout/header/components/CartBadge.tsx +18 -0
  143. package/src/app/components/layout/header/components/LoadingState.tsx +17 -0
  144. package/src/app/components/layout/header/components/MenuItemDropdown.tsx +124 -0
  145. package/src/app/components/layout/header/components/MobileNavbar.tsx +123 -0
  146. package/src/app/components/layout/header/components/NavbarActions.tsx +125 -0
  147. package/src/app/components/layout/header/components/NavbarBrand.tsx +29 -0
  148. package/src/app/components/layout/header/components/NavigationLinks.tsx +131 -0
  149. package/src/app/components/layout/header/hamMenuSlide.tsx +318 -0
  150. package/src/app/components/layout/header/header.tsx +44 -0
  151. package/src/app/components/layout/header/hooks/useDropdown.ts +45 -0
  152. package/src/app/components/layout/header/hooks/useNavbarData.ts +138 -0
  153. package/src/app/components/layout/header/hooks/useNavbarState.ts +66 -0
  154. package/src/app/components/layout/header/megaMenuDropdown.tsx +116 -0
  155. package/src/app/components/layout/header/navBar.tsx +121 -0
  156. package/src/app/components/layout/header/search.tsx +418 -0
  157. package/src/app/components/layout/header/styles/navbarStyles.ts +27 -0
  158. package/src/app/components/layout/header/topBar.tsx +214 -0
  159. package/src/app/components/layout/joinNewsletterForm/index.tsx +72 -0
  160. package/src/app/components/layout/mobileAccordian/index.tsx +92 -0
  161. package/src/app/components/layout/paymentMethods.tsx +75 -0
  162. package/src/app/components/layout/rootLayout.tsx +23 -0
  163. package/src/app/components/layout/siteInfo.tsx +103 -0
  164. package/src/app/components/layout/socialLinks.tsx +65 -0
  165. package/src/app/components/newsletterSection/emailListSection.tsx +224 -0
  166. package/src/app/components/newsletterSection/emailSectionServer.tsx +8 -0
  167. package/src/app/components/providers/ApolloWrapper.tsx +12 -0
  168. package/src/app/components/providers/AppConfigurationProvider.tsx +108 -0
  169. package/src/app/components/providers/GoogleAnalyticsProvider.tsx +149 -0
  170. package/src/app/components/providers/GoogleTagManagerProvider.tsx +31 -0
  171. package/src/app/components/providers/RecaptchaProvider.tsx +18 -0
  172. package/src/app/components/providers/ServerAppConfigurationProvider.tsx +133 -0
  173. package/src/app/components/providers/YMMStatusProvider.tsx +15 -0
  174. package/src/app/components/reuseableUI/AboutUs.tsx +115 -0
  175. package/src/app/components/reuseableUI/AddToCartClient.tsx +125 -0
  176. package/src/app/components/reuseableUI/EditorJsRenderer.tsx +219 -0
  177. package/src/app/components/reuseableUI/HeroSectionsearchByVehicle.tsx +188 -0
  178. package/src/app/components/reuseableUI/ImageWithFallback.tsx +41 -0
  179. package/src/app/components/reuseableUI/Toast.tsx +101 -0
  180. package/src/app/components/reuseableUI/blogCard.tsx +52 -0
  181. package/src/app/components/reuseableUI/brandCard.tsx +68 -0
  182. package/src/app/components/reuseableUI/breadcrumb.tsx +38 -0
  183. package/src/app/components/reuseableUI/categoryCard.tsx +37 -0
  184. package/src/app/components/reuseableUI/categorySkeleton.tsx +31 -0
  185. package/src/app/components/reuseableUI/commonButton.tsx +48 -0
  186. package/src/app/components/reuseableUI/defaultInputField/index.tsx +84 -0
  187. package/src/app/components/reuseableUI/emptyState.tsx +29 -0
  188. package/src/app/components/reuseableUI/errorTag.tsx +15 -0
  189. package/src/app/components/reuseableUI/heading/index.tsx +20 -0
  190. package/src/app/components/reuseableUI/input.tsx +117 -0
  191. package/src/app/components/reuseableUI/listCard.tsx +137 -0
  192. package/src/app/components/reuseableUI/loadingUI.tsx +12 -0
  193. package/src/app/components/reuseableUI/modalLayout.tsx +76 -0
  194. package/src/app/components/reuseableUI/newsletter/newsletterClient.tsx +622 -0
  195. package/src/app/components/reuseableUI/newsletter/newslettersHomeModal.tsx +68 -0
  196. package/src/app/components/reuseableUI/offerCard.tsx +42 -0
  197. package/src/app/components/reuseableUI/passwordRules/passwordRules.tsx +56 -0
  198. package/src/app/components/reuseableUI/primaryButton/index.tsx +34 -0
  199. package/src/app/components/reuseableUI/productCard.tsx +118 -0
  200. package/src/app/components/reuseableUI/productSkeleton.tsx +34 -0
  201. package/src/app/components/reuseableUI/searchByVehicle.tsx +187 -0
  202. package/src/app/components/reuseableUI/secondaryButton/index.tsx +34 -0
  203. package/src/app/components/reuseableUI/section.tsx +20 -0
  204. package/src/app/components/reuseableUI/select/index.tsx +98 -0
  205. package/src/app/components/reuseableUI/skeletonLoader.tsx +117 -0
  206. package/src/app/components/reuseableUI/statusTag.tsx +24 -0
  207. package/src/app/components/reuseableUI/tags/saleTag.tsx +19 -0
  208. package/src/app/components/reuseableUI/testimonialCard.tsx +93 -0
  209. package/src/app/components/richText/EditorRenderer.tsx +318 -0
  210. package/src/app/components/search/HierarchicalCategoryFilter.tsx +155 -0
  211. package/src/app/components/search/SearchFilters.tsx +155 -0
  212. package/src/app/components/search/YMMSearchSidebar.tsx +187 -0
  213. package/src/app/components/seo/ServerProductCard.tsx +91 -0
  214. package/src/app/components/seo/ServerProductGrid.tsx +45 -0
  215. package/src/app/components/shop/CategoryFilter.tsx +184 -0
  216. package/src/app/components/shop/ItemsPerPageSelect.tsx +69 -0
  217. package/src/app/components/shop/ItemsPerPageSelectClient.tsx +58 -0
  218. package/src/app/components/shop/MobileFilters.tsx +103 -0
  219. package/src/app/components/shop/ProductGridSkeleton.tsx +16 -0
  220. package/src/app/components/shop/ProductsGrid.tsx +230 -0
  221. package/src/app/components/shop/SearchFilter.tsx +218 -0
  222. package/src/app/components/shop/SearchFilterClient.tsx +122 -0
  223. package/src/app/components/shop/SearchLoadingOverlay.tsx +32 -0
  224. package/src/app/components/shop/ShopMobileFilters.tsx +205 -0
  225. package/src/app/components/showroom/VehicleSearchDropdowns.tsx +187 -0
  226. package/src/app/components/showroom/brandsSwiper.tsx +49 -0
  227. package/src/app/components/showroom/brandsSwiperClient copy.tsx +93 -0
  228. package/src/app/components/showroom/brandsSwiperClient.tsx +122 -0
  229. package/src/app/components/showroom/brandsSwiperServer.tsx +42 -0
  230. package/src/app/components/showroom/bundleProducts.tsx +120 -0
  231. package/src/app/components/showroom/categoryGrid.tsx +51 -0
  232. package/src/app/components/showroom/categoryGridServer.tsx +45 -0
  233. package/src/app/components/showroom/categorySwiper.tsx +115 -0
  234. package/src/app/components/showroom/featureStrip.tsx +139 -0
  235. package/src/app/components/showroom/offersSwiper.tsx +181 -0
  236. package/src/app/components/showroom/productGrid.tsx +56 -0
  237. package/src/app/components/showroom/productSwiper.tsx +119 -0
  238. package/src/app/components/showroom/promotion-slider.tsx +138 -0
  239. package/src/app/components/showroom/promotion.tsx +207 -0
  240. package/src/app/components/showroom/promotionsSwiper.tsx +174 -0
  241. package/src/app/components/showroom/showroomHeroCarousel.tsx +141 -0
  242. package/src/app/components/showroom/testimonialsGrid.tsx +106 -0
  243. package/src/app/components/skeletons/ContentSkeleton.tsx +14 -0
  244. package/src/app/components/sortDropdown/index.tsx +116 -0
  245. package/src/app/components/tertiaryButton/index.tsx +25 -0
  246. package/src/app/components/theme/theme-provider.tsx +82 -0
  247. package/src/app/contact/layout.tsx +32 -0
  248. package/src/app/contact/page.tsx +591 -0
  249. package/src/app/content/[slug]/layout.tsx +17 -0
  250. package/src/app/content/[slug]/page.tsx +159 -0
  251. package/src/app/content/layout.tsx +31 -0
  252. package/src/app/content/page.tsx +88 -0
  253. package/src/app/core-policies/page.tsx +55 -0
  254. package/src/app/discounts/page.tsx +54 -0
  255. package/src/app/frequently-asked-questions/page.tsx +57 -0
  256. package/src/app/globals.css +440 -0
  257. package/src/app/hooks/useDealerLocations.ts +259 -0
  258. package/src/app/hooks/useGTMEngagement.ts +71 -0
  259. package/src/app/hooks/useGoogleAnalytics.ts +145 -0
  260. package/src/app/layout.tsx +149 -0
  261. package/src/app/not-found.tsx +31 -0
  262. package/src/app/order-confirmation/layout.tsx +19 -0
  263. package/src/app/order-confirmation/page.tsx +12 -0
  264. package/src/app/order-confirmation/summary.tsx +1775 -0
  265. package/src/app/page.tsx +194 -0
  266. package/src/app/privacy-policy/loading.tsx +17 -0
  267. package/src/app/privacy-policy/page.tsx +56 -0
  268. package/src/app/product/[id]/ProductDetailClient.tsx +2448 -0
  269. package/src/app/product/[id]/components/itemInquiryModal.tsx +461 -0
  270. package/src/app/product/[id]/layout.tsx +116 -0
  271. package/src/app/product/[id]/page.tsx +200 -0
  272. package/src/app/product/layout.tsx +15 -0
  273. package/src/app/products/all/AllProductsClient.tsx +743 -0
  274. package/src/app/products/all/page.tsx +176 -0
  275. package/src/app/products/components/shopEmptyState.tsx +29 -0
  276. package/src/app/request-return/layout.tsx +36 -0
  277. package/src/app/request-return/page.tsx +597 -0
  278. package/src/app/robots.txt/route.ts +27 -0
  279. package/src/app/search/layout.tsx +16 -0
  280. package/src/app/search/page.tsx +736 -0
  281. package/src/app/shipping-returns/page.tsx +60 -0
  282. package/src/app/site-map/layout.tsx +33 -0
  283. package/src/app/site-map/page.tsx +113 -0
  284. package/src/app/sitemap-index.xml/route.ts +20 -0
  285. package/src/app/sitemap.ts +10 -0
  286. package/src/app/terms-and-conditions/loading.tsx +17 -0
  287. package/src/app/terms-and-conditions/page.tsx +56 -0
  288. package/src/app/utils/appConfiguration.ts +327 -0
  289. package/src/app/utils/branding.ts +52 -0
  290. package/src/app/utils/configurationService.ts +202 -0
  291. package/src/app/utils/constant.tsx +242 -0
  292. package/src/app/utils/editorJsUtils.tsx +249 -0
  293. package/src/app/utils/functions.ts +146 -0
  294. package/src/app/utils/googleAnalytics.ts +168 -0
  295. package/src/app/utils/googleTagManager.ts +475 -0
  296. package/src/app/utils/ipDetection.ts +270 -0
  297. package/src/app/utils/serverConfigurationService.ts +209 -0
  298. package/src/app/utils/svgs/GridIcon.tsx +45 -0
  299. package/src/app/utils/svgs/account/myAccount/listDotIcon.tsx +3 -0
  300. package/src/app/utils/svgs/account/myAccount/tickIcon.tsx +10 -0
  301. package/src/app/utils/svgs/account/orderHistory/InfoIcon.tsx +49 -0
  302. package/src/app/utils/svgs/arrowDownIcon.tsx +17 -0
  303. package/src/app/utils/svgs/arrowIcon.tsx +25 -0
  304. package/src/app/utils/svgs/arrowUpIcon.tsx +16 -0
  305. package/src/app/utils/svgs/brandsSearchIcon.tsx +25 -0
  306. package/src/app/utils/svgs/cart/cartIcon.tsx +31 -0
  307. package/src/app/utils/svgs/cart/plusIcon.tsx +13 -0
  308. package/src/app/utils/svgs/cart/subtractIcon.tsx +13 -0
  309. package/src/app/utils/svgs/cart/successTickIcon.tsx +14 -0
  310. package/src/app/utils/svgs/chevronDownIcon.tsx +21 -0
  311. package/src/app/utils/svgs/closeEyeIcon.tsx +47 -0
  312. package/src/app/utils/svgs/crossIcon.tsx +25 -0
  313. package/src/app/utils/svgs/eyeIcon.tsx +29 -0
  314. package/src/app/utils/svgs/featureTag.tsx +20 -0
  315. package/src/app/utils/svgs/filterIcon.tsx +3 -0
  316. package/src/app/utils/svgs/globleIcon.tsx +41 -0
  317. package/src/app/utils/svgs/infoIcon.tsx +34 -0
  318. package/src/app/utils/svgs/listIcon.tsx +50 -0
  319. package/src/app/utils/svgs/logOutIcon.tsx +35 -0
  320. package/src/app/utils/svgs/menuIcon.tsx +8 -0
  321. package/src/app/utils/svgs/minusIcon.tsx +18 -0
  322. package/src/app/utils/svgs/newsletterIcon.tsx +19 -0
  323. package/src/app/utils/svgs/noDataFoundIcon-.tsx +26 -0
  324. package/src/app/utils/svgs/noProductFoundIcon.tsx +43 -0
  325. package/src/app/utils/svgs/passwordIcons/errorIcon.tsx +31 -0
  326. package/src/app/utils/svgs/passwordIcons/successIcon.tsx +24 -0
  327. package/src/app/utils/svgs/paymentProcessingIcons/hourglassIcon.tsx +43 -0
  328. package/src/app/utils/svgs/paymentProcessingIcons/modalCrossIcon.tsx +23 -0
  329. package/src/app/utils/svgs/paymentProcessingIcons/paymentFailedIcon.tsx +47 -0
  330. package/src/app/utils/svgs/pencilIcon.tsx +11 -0
  331. package/src/app/utils/svgs/plusIcon.tsx +25 -0
  332. package/src/app/utils/svgs/productInquiryIcon.tsx +40 -0
  333. package/src/app/utils/svgs/searchIcon.tsx +31 -0
  334. package/src/app/utils/svgs/shoppingCart.tsx +32 -0
  335. package/src/app/utils/svgs/spinnerIcon.tsx +22 -0
  336. package/src/app/utils/svgs/spinnerLoadingIcon.tsx +26 -0
  337. package/src/app/utils/svgs/successTickIcon.tsx +40 -0
  338. package/src/app/utils/svgs/swiperArrowIconLeft.tsx +18 -0
  339. package/src/app/utils/svgs/swiperArrowIconRight.tsx +18 -0
  340. package/src/app/utils/svgs/userProfileIcon.tsx +31 -0
  341. package/src/app/utils/svgs/warningCircleIcon.tsx +15 -0
  342. package/src/app/warranty/constant.tsx +63 -0
  343. package/src/app/warranty/loading.tsx +17 -0
  344. package/src/app/warranty/page.tsx +56 -0
  345. package/src/graphql/client.ts +288 -0
  346. package/src/graphql/mutations/accountAddressCreate.ts +56 -0
  347. package/src/graphql/mutations/accountAddressDelete.ts +23 -0
  348. package/src/graphql/mutations/accountAddressUpdate.ts +55 -0
  349. package/src/graphql/mutations/accountSetDefaultAddress.ts +32 -0
  350. package/src/graphql/mutations/accountUpdate.ts +34 -0
  351. package/src/graphql/mutations/changePassword.ts +25 -0
  352. package/src/graphql/mutations/checkout.ts +117 -0
  353. package/src/graphql/mutations/checkoutAddVoucher.ts +63 -0
  354. package/src/graphql/mutations/checkoutComplete.ts +79 -0
  355. package/src/graphql/mutations/checkoutCreate.ts +131 -0
  356. package/src/graphql/mutations/checkoutCustomerAttach.ts +50 -0
  357. package/src/graphql/mutations/checkoutEmailUpdate.ts +15 -0
  358. package/src/graphql/mutations/checkoutLineMetadataUpdate.ts +52 -0
  359. package/src/graphql/mutations/checkoutPaymentCreate.ts +82 -0
  360. package/src/graphql/mutations/paymentGatewayInitialize.ts +58 -0
  361. package/src/graphql/mutations/registerAccount.ts +65 -0
  362. package/src/graphql/mutations/requestPasswordReset.ts +32 -0
  363. package/src/graphql/mutations/setPassword.ts +49 -0
  364. package/src/graphql/mutations/signIn.ts +50 -0
  365. package/src/graphql/mutations/tokenRefresh.ts +19 -0
  366. package/src/graphql/mutations/updateCheckoutMetadata.ts +49 -0
  367. package/src/graphql/mutations/updateProfile.ts +18 -0
  368. package/src/graphql/mutations/willCallDeliveryMethod.ts +81 -0
  369. package/src/graphql/queries/checkout.ts +168 -0
  370. package/src/graphql/queries/findProductByOldSlug.ts +58 -0
  371. package/src/graphql/queries/getAboutPage.ts +24 -0
  372. package/src/graphql/queries/getAboutPageId.ts +9 -0
  373. package/src/graphql/queries/getAboutUs.ts +38 -0
  374. package/src/graphql/queries/getAddressInformation.ts +38 -0
  375. package/src/graphql/queries/getAllCategories.ts +41 -0
  376. package/src/graphql/queries/getAllCategoriesTree.ts +67 -0
  377. package/src/graphql/queries/getAllCategoriesWithProducts.ts +29 -0
  378. package/src/graphql/queries/getAllCollectionsWithProducts.ts +16 -0
  379. package/src/graphql/queries/getBlogs.ts +222 -0
  380. package/src/graphql/queries/getBrands.ts +17 -0
  381. package/src/graphql/queries/getBundles.ts +43 -0
  382. package/src/graphql/queries/getCategories.ts +20 -0
  383. package/src/graphql/queries/getChannels.ts +77 -0
  384. package/src/graphql/queries/getCheckoutQuestions.ts +115 -0
  385. package/src/graphql/queries/getCheckoutTermsAndConditions.ts +37 -0
  386. package/src/graphql/queries/getContactPage.ts +117 -0
  387. package/src/graphql/queries/getContentPage.ts +191 -0
  388. package/src/graphql/queries/getDiscountOffers.ts +18 -0
  389. package/src/graphql/queries/getDynamicPageBySlug.ts +251 -0
  390. package/src/graphql/queries/getFeaturedProducts.ts +48 -0
  391. package/src/graphql/queries/getHeroMetadata.ts +23 -0
  392. package/src/graphql/queries/getMenuBySlug.ts +84 -0
  393. package/src/graphql/queries/getMyProfile.ts +23 -0
  394. package/src/graphql/queries/getNewsletter.ts +122 -0
  395. package/src/graphql/queries/getNewsletterPage.ts +111 -0
  396. package/src/graphql/queries/getPageBySlug.ts +52 -0
  397. package/src/graphql/queries/getPageTypeId.ts +27 -0
  398. package/src/graphql/queries/getPaymentMethods.ts +61 -0
  399. package/src/graphql/queries/getProducts.ts +78 -0
  400. package/src/graphql/queries/getPromotions.ts +24 -0
  401. package/src/graphql/queries/getRequestReturnPage.ts +121 -0
  402. package/src/graphql/queries/getSiteInfo.ts +54 -0
  403. package/src/graphql/queries/getSocialLinks.ts +52 -0
  404. package/src/graphql/queries/getTestimonials.ts +25 -0
  405. package/src/graphql/queries/getUserWithCheckout.ts +27 -0
  406. package/src/graphql/queries/getVehicleMakes.ts +21 -0
  407. package/src/graphql/queries/getVehicleModels.ts +21 -0
  408. package/src/graphql/queries/getVehicleYears.ts +21 -0
  409. package/src/graphql/queries/meAddresses.ts +56 -0
  410. package/src/graphql/queries/myOrders.ts +37 -0
  411. package/src/graphql/queries/orderDetail.ts +231 -0
  412. package/src/graphql/queries/productDetailsById.ts +197 -0
  413. package/src/graphql/queries/productInquiry.ts +115 -0
  414. package/src/graphql/queries/productsByCategoriesAndCollections.ts +39 -0
  415. package/src/graphql/queries/willCallCollectionPoints.ts +55 -0
  416. package/src/graphql/server-client.ts +54 -0
  417. package/src/graphql/types/categories.ts +9 -0
  418. package/src/graphql/types/checkout.ts +168 -0
  419. package/src/graphql/types/offer.ts +12 -0
  420. package/src/graphql/types/product.ts +44 -0
  421. package/src/hooks/scrollPageTop.ts +9 -0
  422. package/src/hooks/serverNavbarData.ts +79 -0
  423. package/src/hooks/useCartSync.ts +24 -0
  424. package/src/hooks/useRecaptcha.ts +33 -0
  425. package/src/hooks/useTokenExpiration.ts +81 -0
  426. package/src/hooks/useVehicleData.ts +346 -0
  427. package/src/lib/api/kount.ts +165 -0
  428. package/src/lib/api/shop.ts +1445 -0
  429. package/src/lib/saleor/getSaleorApiUrl.ts +25 -0
  430. package/src/lib/schema.ts +303 -0
  431. package/src/lib/seo/extractTextFromEditorJs.ts +58 -0
  432. package/src/lib/seo/site.ts +10 -0
  433. package/src/lib/urls/normalizeInternalUrl.ts +53 -0
  434. package/src/middleware.ts +134 -0
  435. package/src/sitemaps/README.md +105 -0
  436. package/src/sitemaps/dynamic-pages-sitemap.ts +247 -0
  437. package/src/sitemaps/sitemap-index.ts +21 -0
  438. package/src/sitemaps/static-pages-sitemap.ts +36 -0
  439. package/src/store/useGlobalStore.tsx +1656 -0
  440. package/src/types/global.d.ts +148 -0
  441. package/tsconfig.json +27 -0
@@ -0,0 +1,288 @@
1
+ 'use client';
2
+
3
+ import { ApolloClient, InMemoryCache, createHttpLink, from } from "@apollo/client";
4
+ import { setContext } from "@apollo/client/link/context";
5
+ import { onError } from "@apollo/client/link/error";
6
+ import { Observable } from "@apollo/client/utilities";
7
+ import type { GraphQLFormattedError } from "graphql";
8
+
9
+ declare global {
10
+ interface Window {
11
+ __APOLLO_CLIENT__?: ApolloClient<unknown>;
12
+ }
13
+ }
14
+
15
+ interface GraphQLErrorExtensions {
16
+ code?: string;
17
+ exception?: {
18
+ code?: string;
19
+ stacktrace?: string[];
20
+ };
21
+ [key: string]: unknown;
22
+ }
23
+
24
+ interface TypedGraphQLError {
25
+ message: string;
26
+ extensions?: GraphQLErrorExtensions;
27
+ path?: readonly (string | number)[];
28
+ }
29
+
30
+ function normalizeGraphqlUrl(raw?: string) {
31
+ if (!raw) return undefined;
32
+ let url = raw.trim();
33
+ // If the user passed the Saleor base URL, append /graphql/
34
+ const lower = url.toLowerCase();
35
+ const hasGraphql = lower.endsWith('/graphql') || lower.endsWith('/graphql/');
36
+ if (!hasGraphql) {
37
+ url = url.replace(/\/+$/, '') + '/graphql/';
38
+ if (typeof window !== 'undefined') {
39
+ console.warn('[Apollo] NEXT_PUBLIC_API_URL did not include /graphql. Using:', url);
40
+ }
41
+ }
42
+ return url;
43
+ }
44
+
45
+ const httpLink = createHttpLink({
46
+ uri: normalizeGraphqlUrl(process.env.NEXT_PUBLIC_API_URL), // Set in .env.local
47
+ });
48
+
49
+ // Attach JWT from localStorage for client-side requests
50
+ const authLink = setContext((_, { headers }) => {
51
+ if (typeof window === "undefined") {
52
+ return { headers };
53
+ }
54
+ const token = localStorage.getItem("token");
55
+ return {
56
+ headers: {
57
+ ...headers,
58
+ Authorization: token ? `Bearer ${token}` : "",
59
+ },
60
+ };
61
+ });
62
+
63
+ // --- Token Refresh Logic ---
64
+ let isRefreshing = false;
65
+ let pendingRequests: Array<(token: string | null) => void> = [];
66
+
67
+ const resolvePendingRequests = (newToken: string | null) => {
68
+ pendingRequests.forEach((cb) => cb(newToken));
69
+ pendingRequests = [];
70
+ };
71
+
72
+ async function performTokenRefresh(endpoint: string): Promise<{ token: string | null; refreshToken: string | null }> {
73
+ const refreshToken = typeof window !== 'undefined' ? localStorage.getItem('refreshToken') : null;
74
+ if (!refreshToken) {
75
+ throw new Error('No refresh token');
76
+ }
77
+
78
+ try {
79
+ const res = await fetch(endpoint, {
80
+ method: 'POST',
81
+ headers: { 'Content-Type': 'application/json' },
82
+ body: JSON.stringify({
83
+ query: `mutation TokenRefresh($refreshToken: String!) {
84
+ tokenRefresh(refreshToken: $refreshToken) {
85
+ token
86
+ refreshToken
87
+ errors {
88
+ field
89
+ message
90
+ code
91
+ }
92
+ }
93
+ }`,
94
+ variables: { refreshToken },
95
+ }),
96
+ });
97
+
98
+ if (!res.ok) {
99
+ throw new Error(`tokenRefresh failed: ${res.status}`);
100
+ }
101
+
102
+ const json = await res.json();
103
+
104
+ const payload = json?.data?.tokenRefresh;
105
+ const errors = json.errors || payload?.errors || [];
106
+
107
+ if (errors.length) {
108
+ throw new Error(errors[0]?.message || 'Token refresh failed');
109
+ }
110
+
111
+ if (!payload?.token) {
112
+ throw new Error('No token in refresh response');
113
+ }
114
+
115
+ return {
116
+ token: payload.token,
117
+ refreshToken: payload.refreshToken || null
118
+ };
119
+ } catch (error) {
120
+ throw error;
121
+ }
122
+ }
123
+
124
+ // Helper function to handle logout and redirect
125
+ async function forceLogout() {
126
+ if (typeof window === "undefined") return;
127
+
128
+ try {
129
+ // Clear localStorage
130
+ localStorage.removeItem("token");
131
+ localStorage.removeItem("refreshToken");
132
+
133
+ // Call server to clear cookies
134
+ await fetch("/api/auth/clear", {
135
+ method: "POST",
136
+ credentials: "include",
137
+ });
138
+
139
+ // Clear Apollo cache
140
+ if (window.__APOLLO_CLIENT__) {
141
+ await window.__APOLLO_CLIENT__.clearStore().catch((e) =>
142
+ console.error("Error clearing Apollo cache:", e)
143
+ );
144
+ }
145
+
146
+ // Redirect to login
147
+ const currentPath = window.location.pathname;
148
+ const loginUrl = new URL("/account/login", window.location.origin);
149
+
150
+ if (currentPath !== "/account/login") {
151
+ loginUrl.searchParams.set("next", currentPath);
152
+ }
153
+
154
+ loginUrl.searchParams.set("sessionExpired", "true");
155
+ window.location.assign(loginUrl.toString());
156
+ } catch (error) {
157
+ console.error("Error in forceLogout:", error);
158
+ window.location.href = "/account/login?sessionExpired=true";
159
+ }
160
+ }
161
+
162
+
163
+ const errorLink = onError(({ graphQLErrors, operation, forward }) => {
164
+ // If we don't have graphQLErrors or we're on the server, do nothing
165
+ if (!graphQLErrors || typeof window === 'undefined') {
166
+ return;
167
+ }
168
+
169
+ // Type assertion for graphQLErrors
170
+ const errors: TypedGraphQLError[] = graphQLErrors.map((e: GraphQLFormattedError) => ({
171
+ message: e.message,
172
+ extensions: e.extensions as GraphQLErrorExtensions | undefined,
173
+ path: e.path
174
+ }));
175
+
176
+ const authError = errors.find((e) => {
177
+ const extensions = e.extensions;
178
+ const errorCode = extensions?.exception?.code || extensions?.code;
179
+ const isUnauthenticated = errorCode === 'UNAUTHENTICATED' || errorCode === 'ExpiredSignatureError';
180
+ const isTokenExpired = e.message?.includes('signature has expired') ||
181
+ e.message?.includes('Token is invalid or expired');
182
+ return isUnauthenticated || isTokenExpired;
183
+ });
184
+
185
+ // If not an auth error or running on server, do nothing
186
+ if (!authError || typeof window === 'undefined') {
187
+ return;
188
+ }
189
+
190
+ const endpoint = normalizeGraphqlUrl(process.env.NEXT_PUBLIC_API_URL) as string;
191
+
192
+ // If we're not already refreshing, start the refresh process
193
+ if (!isRefreshing) {
194
+ isRefreshing = true;
195
+ performTokenRefresh(endpoint)
196
+ .then(({ token, refreshToken }) => {
197
+ if (token && refreshToken) {
198
+ // Save new tokens
199
+ localStorage.setItem('token', token);
200
+ localStorage.setItem('refreshToken', refreshToken);
201
+ resolvePendingRequests(token);
202
+ } else {
203
+ // If no new tokens, log out
204
+ forceLogout();
205
+ }
206
+ })
207
+ .catch((error) => {
208
+ console.error('Token refresh failed:', error);
209
+ forceLogout();
210
+ })
211
+ .finally(() => {
212
+ isRefreshing = false;
213
+ });
214
+ }
215
+
216
+ // Return observable to handle the operation after token refresh
217
+ return new Observable((observer) => {
218
+ pendingRequests.push((newToken) => {
219
+ if (!newToken) {
220
+ // If no new token, the refresh failed
221
+ forceLogout();
222
+ observer.error(authError);
223
+ return;
224
+ }
225
+
226
+ // Retry the operation with the new token
227
+ const oldHeaders = operation.getContext().headers || {};
228
+ operation.setContext({
229
+ headers: {
230
+ ...oldHeaders,
231
+ Authorization: `Bearer ${newToken}`,
232
+ },
233
+ });
234
+
235
+ const subscriber = {
236
+ next: observer.next.bind(observer),
237
+ error: (err: Error) => {
238
+ // If we get another auth error after refresh, force logout
239
+ if (err.message?.includes('signature has expired') ||
240
+ ('graphQLErrors' in err && Array.isArray((err as { graphQLErrors?: GraphQLFormattedError[] }).graphQLErrors) &&
241
+ (err as { graphQLErrors: GraphQLFormattedError[] }).graphQLErrors.some((e: GraphQLFormattedError) =>
242
+ e.extensions?.code === 'UNAUTHENTICATED'))) {
243
+ forceLogout();
244
+ }
245
+ observer.error(err);
246
+ },
247
+ complete: observer.complete.bind(observer),
248
+ };
249
+
250
+ const subscriberHandle = forward(operation).subscribe(subscriber);
251
+
252
+ return () => {
253
+ subscriberHandle.unsubscribe();
254
+ };
255
+ });
256
+
257
+ return () => {
258
+ // Clean up pending requests if the observable is unsubscribed
259
+ pendingRequests = [];
260
+ };
261
+ });
262
+ });
263
+
264
+ // Create the Apollo client instance
265
+ const client = new ApolloClient({
266
+ link: from([errorLink, authLink, httpLink]),
267
+ cache: new InMemoryCache(),
268
+ defaultOptions: {
269
+ watchQuery: {
270
+ fetchPolicy: 'cache-first',
271
+ errorPolicy: 'all',
272
+ },
273
+ query: {
274
+ fetchPolicy: 'network-only',
275
+ errorPolicy: 'all',
276
+ },
277
+ mutate: {
278
+ errorPolicy: 'all',
279
+ },
280
+ },
281
+ });
282
+
283
+ // Store the client on the window for debugging and forceLogout access
284
+ if (typeof window !== 'undefined') {
285
+ window.__APOLLO_CLIENT__ = client;
286
+ }
287
+
288
+ export default client;
@@ -0,0 +1,56 @@
1
+ "use client";
2
+
3
+ import { gql } from "@apollo/client";
4
+
5
+ export const ACCOUNT_ADDRESS_CREATE = gql`
6
+ mutation AddAddress($input: AddressInput!) {
7
+ accountAddressCreate(input: $input) {
8
+ user { id }
9
+ address {
10
+ id
11
+ firstName
12
+ lastName
13
+ streetAddress1
14
+ city
15
+ postalCode
16
+ country { code country }
17
+ phone
18
+ }
19
+ errors { field message code }
20
+ }
21
+ }
22
+ `;
23
+
24
+ export interface AddressInput {
25
+ firstName: string;
26
+ lastName: string;
27
+ phone?: string | null;
28
+ companyName?: string | null;
29
+ streetAddress1: string;
30
+ streetAddress2?: string | null;
31
+ city: string;
32
+ postalCode: string;
33
+ country: string; // ISO code
34
+ countryArea?: string | null;
35
+ }
36
+
37
+ export interface AccountAddressCreateData {
38
+ accountAddressCreate: {
39
+ user: { id: string } | null;
40
+ address: {
41
+ id: string;
42
+ firstName: string;
43
+ lastName: string;
44
+ streetAddress1: string;
45
+ city: string;
46
+ postalCode: string;
47
+ country: { code: string; country: string };
48
+ phone?: string | null;
49
+ } | null;
50
+ errors: { field: string | null; message: string; code?: string | null }[];
51
+ };
52
+ }
53
+
54
+ export interface AccountAddressCreateVars {
55
+ input: AddressInput;
56
+ }
@@ -0,0 +1,23 @@
1
+ "use client";
2
+
3
+ import { gql } from "@apollo/client";
4
+
5
+ export const ACCOUNT_ADDRESS_DELETE = gql`
6
+ mutation DeleteAddress($id: ID!) {
7
+ accountAddressDelete(id: $id) {
8
+ user { id }
9
+ errors { field message code }
10
+ }
11
+ }
12
+ `;
13
+
14
+ export interface AccountAddressDeleteData {
15
+ accountAddressDelete: {
16
+ user: { id: string } | null;
17
+ errors: { field: string | null; message: string; code?: string | null }[];
18
+ };
19
+ }
20
+
21
+ export interface AccountAddressDeleteVars {
22
+ id: string;
23
+ }
@@ -0,0 +1,55 @@
1
+ "use client";
2
+
3
+ import { gql } from "@apollo/client";
4
+
5
+ export const ACCOUNT_ADDRESS_UPDATE = gql`
6
+ mutation UpdateAddress($id: ID!, $input: AddressInput!) {
7
+ accountAddressUpdate(id: $id, input: $input) {
8
+ address {
9
+ id
10
+ firstName
11
+ lastName
12
+ streetAddress1
13
+ city
14
+ postalCode
15
+ country { code country }
16
+ phone
17
+ }
18
+ errors { field message code }
19
+ }
20
+ }
21
+ `;
22
+
23
+ export interface AddressUpdateInput {
24
+ firstName: string;
25
+ lastName: string;
26
+ phone?: string | null;
27
+ companyName?: string | null;
28
+ streetAddress1: string;
29
+ streetAddress2?: string | null;
30
+ city: string;
31
+ postalCode: string;
32
+ country: string; // ISO code
33
+ countryArea?: string | null;
34
+ }
35
+
36
+ export interface AccountAddressUpdateData {
37
+ accountAddressUpdate: {
38
+ address: {
39
+ id: string;
40
+ firstName: string;
41
+ lastName: string;
42
+ streetAddress1: string;
43
+ city: string;
44
+ postalCode: string;
45
+ country: { code: string; country: string };
46
+ phone?: string | null;
47
+ } | null;
48
+ errors: { field: string | null; message: string; code?: string | null }[];
49
+ };
50
+ }
51
+
52
+ export interface AccountAddressUpdateVars {
53
+ id: string;
54
+ input: AddressUpdateInput;
55
+ }
@@ -0,0 +1,32 @@
1
+ "use client";
2
+
3
+ import { gql } from "@apollo/client";
4
+
5
+ export const ACCOUNT_SET_DEFAULT_ADDRESS = gql`
6
+ mutation SetDefaultAddress($id: ID!, $type: AddressTypeEnum!) {
7
+ accountSetDefaultAddress(id: $id, type: $type) {
8
+ user {
9
+ id
10
+ defaultShippingAddress { id }
11
+ defaultBillingAddress { id }
12
+ }
13
+ errors { field message code }
14
+ }
15
+ }
16
+ `;
17
+
18
+ export interface AccountSetDefaultAddressData {
19
+ accountSetDefaultAddress: {
20
+ user: {
21
+ id: string;
22
+ defaultShippingAddress: { id: string } | null;
23
+ defaultBillingAddress: { id: string } | null;
24
+ } | null;
25
+ errors: { field: string | null; message: string; code?: string | null }[];
26
+ };
27
+ }
28
+
29
+ export interface AccountSetDefaultAddressVars {
30
+ id: string;
31
+ type: "SHIPPING" | "BILLING";
32
+ }
@@ -0,0 +1,34 @@
1
+ export const ACCOUNT_UPDATE = `
2
+ mutation AccountUpdate($input: AccountInput!) {
3
+ accountUpdate(input: $input) {
4
+ user {
5
+ id
6
+ metadata {
7
+ key
8
+ value
9
+ }
10
+ }
11
+ errors {
12
+ field
13
+ message
14
+ }
15
+ }
16
+ }
17
+ `;
18
+
19
+ export const ACCOUNT_METADATA_UPDATE = `
20
+ mutation UpdateMetadata($id: ID!, $input: [MetadataInput!]!) {
21
+ updateMetadata(id: $id, input: $input) {
22
+ item {
23
+ metadata {
24
+ key
25
+ value
26
+ }
27
+ }
28
+ errors {
29
+ field
30
+ message
31
+ }
32
+ }
33
+ }
34
+ `;
@@ -0,0 +1,25 @@
1
+ import { gql } from '@apollo/client';
2
+
3
+ export const CHANGE_PASSWORD = gql`
4
+ mutation ChangePassword($oldPassword: String!, $newPassword: String!) {
5
+ passwordChange(oldPassword: $oldPassword, newPassword: $newPassword) {
6
+ user {
7
+ id
8
+ email
9
+ }
10
+ errors {
11
+ field
12
+ message
13
+ code
14
+ }
15
+ }
16
+ }
17
+ `;
18
+
19
+ export type ChangePasswordVars = { oldPassword: string; newPassword: string };
20
+ export type ChangePasswordData = {
21
+ passwordChange: {
22
+ user: { id: string; email: string } | null;
23
+ errors: Array<{ field: string | null; message: string | null; code: string }>;
24
+ } | null;
25
+ };
@@ -0,0 +1,117 @@
1
+ export const CHECKOUT_SHIPPING_ADDRESS_UPDATE = `
2
+ mutation CheckoutShippingAddressUpdate($id: ID!, $shippingAddress: AddressInput!) {
3
+ checkoutShippingAddressUpdate(id: $id, shippingAddress: $shippingAddress) {
4
+ checkout { id }
5
+ errors { field message }
6
+ }
7
+ }
8
+ `;
9
+
10
+ export const CHECKOUT_BILLING_ADDRESS_UPDATE = `
11
+ mutation CheckoutBillingAddressUpdate($id: ID!, $billingAddress: AddressInput!) {
12
+ checkoutBillingAddressUpdate(id: $id, billingAddress: $billingAddress) {
13
+ checkout { id }
14
+ errors { field message }
15
+ }
16
+ }
17
+ `;
18
+
19
+ export const CHECKOUT_DELIVERY_METHOD_UPDATE = `
20
+ mutation CheckoutDeliveryMethodUpdate($id: ID!, $deliveryMethodId: ID!) {
21
+ checkoutDeliveryMethodUpdate(id: $id, deliveryMethodId: $deliveryMethodId) {
22
+ checkout {
23
+ id
24
+ totalPrice {
25
+ gross {
26
+ amount
27
+ currency
28
+ }
29
+ net {
30
+ amount
31
+ currency
32
+ }
33
+ tax {
34
+ amount
35
+ currency
36
+ }
37
+ }
38
+ shippingPrice {
39
+ gross {
40
+ amount
41
+ currency
42
+ }
43
+ net {
44
+ amount
45
+ currency
46
+ }
47
+ tax {
48
+ amount
49
+ currency
50
+ }
51
+ }
52
+ subtotalPrice {
53
+ gross {
54
+ amount
55
+ currency
56
+ }
57
+ net {
58
+ amount
59
+ currency
60
+ }
61
+ tax {
62
+ amount
63
+ currency
64
+ }
65
+ }
66
+ }
67
+ errors { field message }
68
+ }
69
+ }
70
+ `;
71
+
72
+ export const ACCOUNT_ADDRESS_CREATE = `
73
+ mutation AddAddress($input: AddressInput!) {
74
+ accountAddressCreate(input: $input) {
75
+ address { id }
76
+ errors { field message }
77
+ }
78
+ }
79
+ `;
80
+
81
+ export const ACCOUNT_SET_DEFAULT_ADDRESS = `
82
+ mutation SetDefaultAddress($id: ID!, $type: AddressTypeEnum!) {
83
+ accountSetDefaultAddress(id: $id, type: $type) {
84
+ user { id }
85
+ errors { field message }
86
+ }
87
+ }
88
+ `;
89
+
90
+ export const CHECKOUT_PAYMENT_CREATE = `
91
+ mutation CheckoutPaymentCreate($checkoutId: ID!, $gateway: String!, $token: String!) {
92
+ checkoutPaymentCreate(
93
+ checkoutId: $checkoutId
94
+ input: { gateway: $gateway, token: $token }
95
+ ) {
96
+ payment {
97
+ id
98
+ chargeStatus
99
+ gateway
100
+ isActive
101
+ created
102
+ capturedAmount { amount currency }
103
+ total { amount currency }
104
+ }
105
+ errors { field message code }
106
+ }
107
+ }
108
+ `;
109
+
110
+ export const CHECKOUT_COMPLETE = `
111
+ mutation CheckoutComplete($checkoutId: ID!) {
112
+ checkoutComplete(checkoutId: $checkoutId) {
113
+ order { id userEmail isPaid chargeStatus paymentStatus }
114
+ errors { field message }
115
+ }
116
+ }
117
+ `;
@@ -0,0 +1,63 @@
1
+ export const ADD_VOUCHER_TO_CHECKOUT = `
2
+ mutation AddVoucherToCheckout($checkoutId: ID!, $promoCode: String!) {
3
+ checkoutAddPromoCode(checkoutId: $checkoutId, promoCode: $promoCode) {
4
+ checkout {
5
+ id
6
+ voucherCode
7
+ discount {
8
+ amount
9
+ currency
10
+ }
11
+ totalPrice {
12
+ gross {
13
+ amount
14
+ currency
15
+ }
16
+ }
17
+ subtotalPrice {
18
+ gross {
19
+ amount
20
+ currency
21
+ }
22
+ }
23
+ }
24
+ errors {
25
+ field
26
+ code
27
+ message
28
+ }
29
+ }
30
+ }
31
+ `;
32
+
33
+ export const REMOVE_VOUCHER_FROM_CHECKOUT = `
34
+ mutation RemoveVoucherFromCheckout($checkoutId: ID!, $promoCode: String!) {
35
+ checkoutRemovePromoCode(checkoutId: $checkoutId, promoCode: $promoCode) {
36
+ checkout {
37
+ id
38
+ voucherCode
39
+ discount {
40
+ amount
41
+ currency
42
+ }
43
+ totalPrice {
44
+ gross {
45
+ amount
46
+ currency
47
+ }
48
+ }
49
+ subtotalPrice {
50
+ gross {
51
+ amount
52
+ currency
53
+ }
54
+ }
55
+ }
56
+ errors {
57
+ field
58
+ code
59
+ message
60
+ }
61
+ }
62
+ }
63
+ `;