orionplace-react 0.1.0 → 0.2.1

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 (633) hide show
  1. package/README.md +332 -38
  2. package/bin/orionplace-react.mjs +4 -1
  3. package/package.json +18 -5
  4. package/runtime/app.d.mts +6 -0
  5. package/runtime/app.mjs +48 -0
  6. package/runtime/marketplace.d.mts +13 -8
  7. package/runtime/marketplace.mjs +287 -211
  8. package/src/project-readme.mjs +95 -35
  9. package/src/setup.mjs +36 -13
  10. package/templates/app/StorefrontShell.tsx +435 -0
  11. package/templates/app/[[...path]]/page.app.tsx +11 -0
  12. package/templates/app/_storefront/ActivityPage.tsx +23 -0
  13. package/templates/app/_storefront/AddressesPage.tsx +29 -0
  14. package/templates/app/_storefront/AppRoutes.tsx +182 -0
  15. package/templates/app/_storefront/ArticlePage.tsx +81 -0
  16. package/templates/app/_storefront/CartPage.tsx +53 -0
  17. package/templates/app/_storefront/CatalogPage.tsx +37 -0
  18. package/templates/app/_storefront/CategoryPage.tsx +64 -0
  19. package/templates/app/_storefront/ContactPage.tsx +32 -0
  20. package/templates/app/_storefront/HomePage.tsx +140 -0
  21. package/templates/app/_storefront/JournalPage.tsx +36 -0
  22. package/templates/app/_storefront/LogoutPage.tsx +91 -0
  23. package/templates/app/_storefront/ManufacturersPage.tsx +64 -0
  24. package/templates/app/_storefront/OrdersPage.tsx +129 -0
  25. package/templates/app/_storefront/ProductPage.tsx +105 -0
  26. package/templates/app/_storefront/ProfilePage.tsx +75 -0
  27. package/templates/app/_storefront/PromoPage.tsx +66 -0
  28. package/templates/app/_storefront/PromocodesPage.tsx +17 -0
  29. package/templates/app/_storefront/SearchPage.tsx +220 -0
  30. package/templates/app/_storefront/SellersPage.tsx +160 -0
  31. package/templates/app/_storefront/StorefrontErrorRoute.tsx +42 -0
  32. package/templates/app/_storefront/StorefrontPageMetadata.tsx +74 -0
  33. package/templates/app/_storefront/StorefrontPageStatus.tsx +61 -0
  34. package/templates/app/_storefront/StoresPage.tsx +53 -0
  35. package/templates/app/_storefront/SubscriptionsPage.tsx +62 -0
  36. package/templates/app/_storefront/SupportPage.tsx +141 -0
  37. package/templates/app/_storefront/TariffsPage.tsx +180 -0
  38. package/templates/app/_storefront/UnsubscribePage.tsx +29 -0
  39. package/templates/app/_storefront/WalletPage.tsx +78 -0
  40. package/templates/app/_storefront/WishlistPage.tsx +79 -0
  41. package/templates/app/_storefront/storefrontRoutes.tsx +738 -0
  42. package/templates/app/_storefront/useAccountWallet.ts +27 -0
  43. package/templates/app/_storefront/useBlogComments.ts +389 -0
  44. package/templates/app/_storefront/useProductSearch.ts +171 -0
  45. package/templates/app/_storefront/useStorefrontNavigation.ts +36 -0
  46. package/templates/app/activity/page.tsx +9 -0
  47. package/templates/app/addresses/page.tsx +9 -0
  48. package/templates/app/api/[...orionplace]/route.ts +11 -4
  49. package/templates/app/browse/page.tsx +27 -0
  50. package/templates/app/cart/page.tsx +9 -0
  51. package/templates/app/catalog/page.tsx +9 -0
  52. package/templates/app/category/[id]/page.tsx +9 -0
  53. package/templates/app/contact/page.tsx +9 -0
  54. package/templates/app/error.tsx +7 -0
  55. package/templates/app/featured/page.tsx +9 -0
  56. package/templates/app/global-error.tsx +61 -0
  57. package/templates/app/globals.css +50 -2
  58. package/templates/app/journal/[id]/page.tsx +9 -0
  59. package/templates/app/journal/page.tsx +9 -0
  60. package/templates/app/layout.app.tsx +20 -0
  61. package/templates/app/layout.tsx +44 -10
  62. package/templates/app/logout/page.tsx +9 -0
  63. package/templates/app/manufacturers/page.tsx +9 -0
  64. package/templates/app/not-found.tsx +5 -0
  65. package/templates/app/orders/page.tsx +9 -0
  66. package/templates/app/page.module.css +12 -8
  67. package/templates/app/page.tsx +8 -79
  68. package/templates/app/product/[id]/page.tsx +9 -0
  69. package/templates/app/profile/page.tsx +9 -0
  70. package/templates/app/promo/[id]/page.tsx +9 -0
  71. package/templates/app/promocodes/page.tsx +9 -0
  72. package/templates/app/ps3/blog/[...orionplace]/route.ts +13 -0
  73. package/templates/app/sellers/page.tsx +9 -0
  74. package/templates/app/storefront.module.css +406 -0
  75. package/templates/app/stores/page.tsx +9 -0
  76. package/templates/app/subscriptions/page.tsx +9 -0
  77. package/templates/app/tariffs/[slug]/[id]/page.tsx +9 -0
  78. package/templates/app/tariffs/page.tsx +9 -0
  79. package/templates/app/tickets/page.tsx +9 -0
  80. package/templates/app/unsubscribe/page.tsx +9 -0
  81. package/templates/app/wallet/page.tsx +9 -0
  82. package/templates/app/wishlist/page.tsx +9 -0
  83. package/templates/components/orionplace/account/AccountActivity.README.md +70 -0
  84. package/templates/components/orionplace/account/AccountActivity.module.css +16 -0
  85. package/templates/components/orionplace/account/AccountActivity.tsx +94 -0
  86. package/templates/components/orionplace/account/AccountPromocodes.README.md +70 -0
  87. package/templates/components/orionplace/account/AccountPromocodes.module.css +92 -0
  88. package/templates/components/orionplace/account/AccountPromocodes.tsx +257 -0
  89. package/templates/components/orionplace/account/AccountSection.README.md +46 -0
  90. package/templates/components/orionplace/account/AccountSection.module.css +110 -0
  91. package/templates/components/orionplace/account/AccountSection.tsx +109 -0
  92. package/templates/components/orionplace/account/ProfileAvatar.README.md +48 -0
  93. package/templates/components/orionplace/account/ProfileAvatar.module.css +31 -0
  94. package/templates/components/orionplace/account/ProfileAvatar.tsx +138 -0
  95. package/templates/components/orionplace/account/ProfileDeleteAccount.README.md +59 -0
  96. package/templates/components/orionplace/account/ProfileDeleteAccount.module.css +51 -0
  97. package/templates/components/orionplace/account/ProfileDeleteAccount.tsx +171 -0
  98. package/templates/components/orionplace/account/ProfileDetailsForm.README.md +44 -0
  99. package/templates/components/orionplace/account/ProfileDetailsForm.module.css +35 -0
  100. package/templates/components/orionplace/account/ProfileDetailsForm.tsx +178 -0
  101. package/templates/components/orionplace/account/ProfileEmailSettings.README.md +52 -0
  102. package/templates/components/orionplace/account/ProfileEmailSettings.module.css +51 -0
  103. package/templates/components/orionplace/account/ProfileEmailSettings.tsx +276 -0
  104. package/templates/components/orionplace/account/ProfilePasswordForm.README.md +45 -0
  105. package/templates/components/orionplace/account/ProfilePasswordForm.module.css +43 -0
  106. package/templates/components/orionplace/account/ProfilePasswordForm.tsx +227 -0
  107. package/templates/components/orionplace/account/ProfileSignIn.README.md +64 -0
  108. package/templates/components/orionplace/account/ProfileSignIn.module.css +86 -0
  109. package/templates/components/orionplace/account/ProfileSignIn.tsx +463 -0
  110. package/templates/components/orionplace/account/SignInHistory.README.md +52 -0
  111. package/templates/components/orionplace/account/SignInHistory.module.css +81 -0
  112. package/templates/components/orionplace/account/SignInHistory.tsx +231 -0
  113. package/templates/components/orionplace/account/StorefrontLogout.README.md +48 -0
  114. package/templates/components/orionplace/account/StorefrontLogout.module.css +166 -0
  115. package/templates/components/orionplace/account/StorefrontLogout.tsx +73 -0
  116. package/templates/components/orionplace/account/StorefrontProfile.README.md +71 -0
  117. package/templates/components/orionplace/account/StorefrontProfile.module.css +65 -0
  118. package/templates/components/orionplace/account/StorefrontProfile.tsx +189 -0
  119. package/templates/components/orionplace/account/account.module.css +1180 -0
  120. package/templates/components/orionplace/account/profile.module.css +696 -0
  121. package/templates/components/orionplace/address/AddressForm.README.md +152 -0
  122. package/templates/components/orionplace/address/AddressForm.module.css +336 -0
  123. package/templates/components/orionplace/address/AddressForm.tsx +827 -0
  124. package/templates/components/orionplace/address/StorefrontAddresses.README.md +99 -0
  125. package/templates/components/orionplace/address/StorefrontAddresses.module.css +271 -0
  126. package/templates/components/orionplace/address/StorefrontAddresses.tsx +438 -0
  127. package/templates/components/orionplace/banners/MainBanner.README.md +65 -0
  128. package/templates/components/orionplace/banners/MainBanner.module.css +112 -0
  129. package/templates/components/orionplace/banners/MainBanner.tsx +159 -0
  130. package/templates/components/orionplace/blog/BlogArticle.README.md +143 -0
  131. package/templates/components/orionplace/blog/BlogArticle.module.css +304 -0
  132. package/templates/components/orionplace/blog/BlogArticle.tsx +371 -0
  133. package/templates/components/orionplace/blog/BlogCommentForm.README.md +51 -0
  134. package/templates/components/orionplace/blog/BlogCommentForm.module.css +93 -0
  135. package/templates/components/orionplace/blog/BlogCommentForm.tsx +125 -0
  136. package/templates/components/orionplace/blog/BlogComments.README.md +98 -0
  137. package/templates/components/orionplace/blog/BlogComments.module.css +151 -0
  138. package/templates/components/orionplace/blog/BlogComments.tsx +590 -0
  139. package/templates/components/orionplace/blog/BlogPostCard.README.md +51 -0
  140. package/templates/components/orionplace/blog/BlogPostCard.module.css +167 -0
  141. package/templates/components/orionplace/blog/BlogPostCard.tsx +177 -0
  142. package/templates/components/orionplace/blog/BlogPostGroup.README.md +49 -0
  143. package/templates/components/orionplace/blog/BlogPostGroup.module.css +37 -0
  144. package/templates/components/orionplace/blog/BlogPostGroup.tsx +129 -0
  145. package/templates/components/orionplace/blog/StorefrontJournal.README.md +105 -0
  146. package/templates/components/orionplace/blog/StorefrontJournal.module.css +387 -0
  147. package/templates/components/orionplace/blog/StorefrontJournal.tsx +548 -0
  148. package/templates/components/orionplace/branding/BrandLogos.README.md +29 -0
  149. package/templates/components/orionplace/branding/BrandLogos.module.css +7 -0
  150. package/templates/components/orionplace/branding/BrandLogos.tsx +30 -0
  151. package/templates/components/orionplace/cart/CartCheckoutDetails.README.md +92 -0
  152. package/templates/components/orionplace/cart/CartCheckoutDetails.module.css +159 -0
  153. package/templates/components/orionplace/cart/CartCheckoutDetails.tsx +370 -0
  154. package/templates/components/orionplace/cart/CartDeliverySelector.README.md +166 -0
  155. package/templates/components/orionplace/cart/CartDeliverySelector.module.css +105 -0
  156. package/templates/components/orionplace/cart/CartDeliverySelector.tsx +679 -0
  157. package/templates/components/orionplace/cart/CartItemOptions.README.md +172 -0
  158. package/templates/components/orionplace/cart/CartItemOptions.module.css +113 -0
  159. package/templates/components/orionplace/cart/CartItemOptions.tsx +503 -0
  160. package/templates/components/orionplace/cart/CartLineItem.README.md +138 -0
  161. package/templates/components/orionplace/cart/CartLineItem.module.css +57 -0
  162. package/templates/components/orionplace/cart/CartLineItem.tsx +263 -0
  163. package/templates/components/orionplace/cart/CartPreview.README.md +99 -0
  164. package/templates/components/orionplace/cart/CartPreview.module.css +225 -0
  165. package/templates/components/orionplace/cart/CartPreview.tsx +188 -0
  166. package/templates/components/orionplace/cart/DeliveryMap.README.md +65 -0
  167. package/templates/components/orionplace/cart/DeliveryMap.module.css +32 -0
  168. package/templates/components/orionplace/cart/DeliveryMap.tsx +131 -0
  169. package/templates/components/orionplace/cart/StorefrontCart.README.md +281 -0
  170. package/templates/components/orionplace/cart/StorefrontCart.module.css +460 -0
  171. package/templates/components/orionplace/cart/StorefrontCart.tsx +937 -0
  172. package/templates/components/orionplace/catalog/CatalogHeader.README.md +136 -0
  173. package/templates/components/orionplace/catalog/CatalogHeader.module.css +387 -0
  174. package/templates/components/orionplace/catalog/CatalogHeader.tsx +644 -0
  175. package/templates/components/orionplace/catalog/CatalogRepresentative.README.md +68 -0
  176. package/templates/components/orionplace/catalog/CatalogRepresentative.tsx +51 -0
  177. package/templates/components/orionplace/catalog/StorefrontCatalog.README.md +120 -0
  178. package/templates/components/orionplace/catalog/StorefrontCatalog.module.css +179 -0
  179. package/templates/components/orionplace/catalog/StorefrontCatalog.tsx +304 -0
  180. package/templates/components/orionplace/categories/CategoryGroup.README.md +68 -0
  181. package/templates/components/orionplace/categories/CategoryGroup.module.css +110 -0
  182. package/templates/components/orionplace/categories/CategoryGroup.tsx +123 -0
  183. package/templates/components/orionplace/categories/StorefrontCategory.README.md +155 -0
  184. package/templates/components/orionplace/categories/StorefrontCategory.module.css +148 -0
  185. package/templates/components/orionplace/categories/StorefrontCategory.tsx +225 -0
  186. package/templates/components/orionplace/contact/AboutPage.README.md +40 -0
  187. package/templates/components/orionplace/contact/AboutPage.module.css +216 -0
  188. package/templates/components/orionplace/contact/AboutPage.tsx +191 -0
  189. package/templates/components/orionplace/contact/ContactForm.README.md +93 -0
  190. package/templates/components/orionplace/contact/ContactForm.module.css +264 -0
  191. package/templates/components/orionplace/contact/ContactForm.tsx +382 -0
  192. package/templates/components/orionplace/contact/EmailUnsubscribe.README.md +67 -0
  193. package/templates/components/orionplace/contact/EmailUnsubscribe.module.css +94 -0
  194. package/templates/components/orionplace/contact/EmailUnsubscribe.tsx +130 -0
  195. package/templates/components/orionplace/contact/StorefrontContact.README.md +73 -0
  196. package/templates/components/orionplace/contact/StorefrontContact.module.css +101 -0
  197. package/templates/components/orionplace/contact/StorefrontContact.tsx +62 -0
  198. package/templates/components/orionplace/currencies/MainCurrencySwitcher.README.md +37 -0
  199. package/templates/components/orionplace/currencies/MainCurrencySwitcher.tsx +68 -0
  200. package/templates/components/orionplace/events/EventEnrollmentDialog.README.md +108 -0
  201. package/templates/components/orionplace/events/EventEnrollmentDialog.module.css +110 -0
  202. package/templates/components/orionplace/events/EventEnrollmentDialog.tsx +315 -0
  203. package/templates/components/orionplace/events/EventsBlock.README.md +58 -0
  204. package/templates/components/orionplace/events/EventsBlock.module.css +101 -0
  205. package/templates/components/orionplace/events/EventsBlock.tsx +109 -0
  206. package/templates/components/orionplace/locale/MainLanguageSwitcher.README.md +46 -0
  207. package/templates/components/orionplace/locale/MainLanguageSwitcher.module.css +196 -0
  208. package/templates/components/orionplace/locale/MainLanguageSwitcher.tsx +387 -0
  209. package/templates/components/orionplace/manufacturers/ManufacturerIndex.README.md +83 -0
  210. package/templates/components/orionplace/manufacturers/ManufacturerIndex.module.css +271 -0
  211. package/templates/components/orionplace/manufacturers/ManufacturerIndex.tsx +218 -0
  212. package/templates/components/orionplace/manufacturers/StorefrontManufacturers.README.md +122 -0
  213. package/templates/components/orionplace/manufacturers/StorefrontManufacturers.module.css +92 -0
  214. package/templates/components/orionplace/manufacturers/StorefrontManufacturers.tsx +455 -0
  215. package/templates/components/orionplace/orders/OrderDetails.README.md +116 -0
  216. package/templates/components/orionplace/orders/OrderDetails.module.css +730 -0
  217. package/templates/components/orionplace/orders/OrderDetails.tsx +693 -0
  218. package/templates/components/orionplace/orders/OrderPaymentForm.README.md +92 -0
  219. package/templates/components/orionplace/orders/OrderPaymentForm.module.css +105 -0
  220. package/templates/components/orionplace/orders/OrderPaymentForm.tsx +90 -0
  221. package/templates/components/orionplace/orders/StorefrontOrders.README.md +131 -0
  222. package/templates/components/orionplace/orders/StorefrontOrders.module.css +633 -0
  223. package/templates/components/orionplace/orders/StorefrontOrders.tsx +922 -0
  224. package/templates/components/orionplace/payments/PaymentPanel.README.md +114 -0
  225. package/templates/components/orionplace/payments/PaymentPanel.module.css +134 -0
  226. package/templates/components/orionplace/payments/PaymentPanel.tsx +76 -0
  227. package/templates/components/orionplace/products/HoverImageViewer.README.md +62 -0
  228. package/templates/components/orionplace/products/HoverImageViewer.module.css +88 -0
  229. package/templates/components/orionplace/products/HoverImageViewer.tsx +179 -0
  230. package/templates/components/orionplace/products/ProductCard.README.md +152 -0
  231. package/templates/components/orionplace/products/ProductCard.module.css +333 -0
  232. package/templates/components/orionplace/products/ProductCard.tsx +716 -0
  233. package/templates/components/orionplace/products/ProductCardActions.README.md +84 -0
  234. package/templates/components/orionplace/products/ProductCardActions.module.css +146 -0
  235. package/templates/components/orionplace/products/ProductCardActions.tsx +311 -0
  236. package/templates/components/orionplace/products/ProductCardBadges.README.md +44 -0
  237. package/templates/components/orionplace/products/ProductCardBadges.module.css +15 -0
  238. package/templates/components/orionplace/products/ProductCardBadges.tsx +78 -0
  239. package/templates/components/orionplace/products/ProductCardDescription.README.md +33 -0
  240. package/templates/components/orionplace/products/ProductCardDescription.module.css +6 -0
  241. package/templates/components/orionplace/products/ProductCardDescription.tsx +43 -0
  242. package/templates/components/orionplace/products/ProductCardFavorite.README.md +52 -0
  243. package/templates/components/orionplace/products/ProductCardFavorite.module.css +64 -0
  244. package/templates/components/orionplace/products/ProductCardFavorite.tsx +90 -0
  245. package/templates/components/orionplace/products/ProductCardPrice.README.md +33 -0
  246. package/templates/components/orionplace/products/ProductCardPrice.module.css +22 -0
  247. package/templates/components/orionplace/products/ProductCardPrice.tsx +50 -0
  248. package/templates/components/orionplace/products/ProductCardRating.README.md +33 -0
  249. package/templates/components/orionplace/products/ProductCardRating.module.css +7 -0
  250. package/templates/components/orionplace/products/ProductCardRating.tsx +56 -0
  251. package/templates/components/orionplace/products/ProductCardSeller.README.md +36 -0
  252. package/templates/components/orionplace/products/ProductCardSeller.module.css +31 -0
  253. package/templates/components/orionplace/products/ProductCardSeller.tsx +61 -0
  254. package/templates/components/orionplace/products/ProductCardStockNotice.README.md +36 -0
  255. package/templates/components/orionplace/products/ProductCardStockNotice.module.css +8 -0
  256. package/templates/components/orionplace/products/ProductCardStockNotice.tsx +35 -0
  257. package/templates/components/orionplace/products/ProductCardTitle.README.md +30 -0
  258. package/templates/components/orionplace/products/ProductCardTitle.module.css +13 -0
  259. package/templates/components/orionplace/products/ProductCardTitle.tsx +31 -0
  260. package/templates/components/orionplace/products/ProductCardVariants.README.md +77 -0
  261. package/templates/components/orionplace/products/ProductCardVariants.module.css +97 -0
  262. package/templates/components/orionplace/products/ProductCardVariants.tsx +350 -0
  263. package/templates/components/orionplace/products/ProductGroup.README.md +89 -0
  264. package/templates/components/orionplace/products/ProductGroup.module.css +64 -0
  265. package/templates/components/orionplace/products/ProductGroup.tsx +183 -0
  266. package/templates/components/orionplace/products/ProductPreorderDialog.README.md +89 -0
  267. package/templates/components/orionplace/products/ProductPreorderDialog.module.css +320 -0
  268. package/templates/components/orionplace/products/ProductPreorderDialog.tsx +346 -0
  269. package/templates/components/orionplace/products/ProductReviewForm.README.md +72 -0
  270. package/templates/components/orionplace/products/ProductReviewForm.module.css +217 -0
  271. package/templates/components/orionplace/products/ProductReviewForm.tsx +288 -0
  272. package/templates/components/orionplace/products/ProductReviewGallery.README.md +61 -0
  273. package/templates/components/orionplace/products/ProductReviewGallery.module.css +108 -0
  274. package/templates/components/orionplace/products/ProductReviewGallery.tsx +110 -0
  275. package/templates/components/orionplace/products/ProductReviewImageViewer.README.md +49 -0
  276. package/templates/components/orionplace/products/ProductReviewImageViewer.module.css +50 -0
  277. package/templates/components/orionplace/products/ProductReviewImageViewer.tsx +260 -0
  278. package/templates/components/orionplace/products/ProductReviews.README.md +137 -0
  279. package/templates/components/orionplace/products/ProductReviews.module.css +602 -0
  280. package/templates/components/orionplace/products/ProductReviews.tsx +944 -0
  281. package/templates/components/orionplace/products/ProductSecondaryVariantModal.README.md +67 -0
  282. package/templates/components/orionplace/products/ProductSecondaryVariantModal.module.css +79 -0
  283. package/templates/components/orionplace/products/ProductSecondaryVariantModal.tsx +324 -0
  284. package/templates/components/orionplace/products/ProductSpecificationsDialog.README.md +52 -0
  285. package/templates/components/orionplace/products/ProductSpecificationsDialog.module.css +138 -0
  286. package/templates/components/orionplace/products/ProductSpecificationsDialog.tsx +117 -0
  287. package/templates/components/orionplace/products/StorefrontProduct.README.md +200 -0
  288. package/templates/components/orionplace/products/StorefrontProduct.module.css +767 -0
  289. package/templates/components/orionplace/products/StorefrontProduct.tsx +1339 -0
  290. package/templates/components/orionplace/products/StorefrontWishlist.README.md +162 -0
  291. package/templates/components/orionplace/products/StorefrontWishlist.module.css +71 -0
  292. package/templates/components/orionplace/products/StorefrontWishlist.tsx +402 -0
  293. package/templates/components/orionplace/promo/PromoProducts.README.md +133 -0
  294. package/templates/components/orionplace/promo/PromoProducts.module.css +68 -0
  295. package/templates/components/orionplace/promo/PromoProducts.tsx +345 -0
  296. package/templates/components/orionplace/search/MainSearch.README.md +73 -0
  297. package/templates/components/orionplace/search/MainSearch.module.css +202 -0
  298. package/templates/components/orionplace/search/MainSearch.tsx +217 -0
  299. package/templates/components/orionplace/search/ProductSearchResults.README.md +166 -0
  300. package/templates/components/orionplace/search/ProductSearchResults.module.css +358 -0
  301. package/templates/components/orionplace/search/ProductSearchResults.tsx +308 -0
  302. package/templates/components/orionplace/search/SearchFilters.README.md +109 -0
  303. package/templates/components/orionplace/search/SearchFilters.module.css +274 -0
  304. package/templates/components/orionplace/search/SearchFilters.tsx +439 -0
  305. package/templates/components/orionplace/sellers/SellerFilters.README.md +66 -0
  306. package/templates/components/orionplace/sellers/SellerFilters.module.css +232 -0
  307. package/templates/components/orionplace/sellers/SellerFilters.tsx +201 -0
  308. package/templates/components/orionplace/sellers/SellerPhotoGallery.README.md +72 -0
  309. package/templates/components/orionplace/sellers/SellerPhotoGallery.module.css +314 -0
  310. package/templates/components/orionplace/sellers/SellerPhotoGallery.tsx +335 -0
  311. package/templates/components/orionplace/sellers/SellerSummary.README.md +62 -0
  312. package/templates/components/orionplace/sellers/SellerSummary.module.css +182 -0
  313. package/templates/components/orionplace/sellers/SellerSummary.tsx +107 -0
  314. package/templates/components/orionplace/sellers/StorefrontSellers.README.md +120 -0
  315. package/templates/components/orionplace/sellers/StorefrontSellers.module.css +147 -0
  316. package/templates/components/orionplace/sellers/StorefrontSellers.tsx +360 -0
  317. package/templates/components/orionplace/shared/OrionplaceAvatar.README.md +35 -0
  318. package/templates/components/orionplace/shared/OrionplaceAvatar.module.css +35 -0
  319. package/templates/components/orionplace/shared/OrionplaceAvatar.tsx +61 -0
  320. package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.README.md +33 -0
  321. package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.module.css +81 -0
  322. package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.tsx +91 -0
  323. package/templates/components/orionplace/shared/OrionplaceEmptyState.README.md +37 -0
  324. package/templates/components/orionplace/shared/OrionplaceEmptyState.module.css +126 -0
  325. package/templates/components/orionplace/shared/OrionplaceEmptyState.tsx +78 -0
  326. package/templates/components/orionplace/shared/OrionplaceImage.README.md +45 -0
  327. package/templates/components/orionplace/shared/OrionplaceImage.module.css +22 -0
  328. package/templates/components/orionplace/shared/OrionplaceImage.tsx +96 -0
  329. package/templates/components/orionplace/shared/OrionplaceInfoHint.README.md +31 -0
  330. package/templates/components/orionplace/shared/OrionplaceInfoHint.module.css +59 -0
  331. package/templates/components/orionplace/shared/OrionplaceInfoHint.tsx +126 -0
  332. package/templates/components/orionplace/shared/OrionplacePasswordInput.README.md +39 -0
  333. package/templates/components/orionplace/shared/OrionplacePasswordInput.module.css +79 -0
  334. package/templates/components/orionplace/shared/OrionplacePasswordInput.tsx +103 -0
  335. package/templates/components/orionplace/shared/OrionplaceSearchSelect.README.md +97 -0
  336. package/templates/components/orionplace/shared/OrionplaceSearchSelect.module.css +246 -0
  337. package/templates/components/orionplace/shared/OrionplaceSearchSelect.tsx +367 -0
  338. package/templates/components/orionplace/shared/OrionplaceSelect.README.md +69 -0
  339. package/templates/components/orionplace/shared/OrionplaceSelect.module.css +233 -0
  340. package/templates/components/orionplace/shared/OrionplaceSelect.tsx +439 -0
  341. package/templates/components/orionplace/shared/StorefrontErrorPage.README.md +52 -0
  342. package/templates/components/orionplace/shared/StorefrontErrorPage.module.css +141 -0
  343. package/templates/components/orionplace/shared/StorefrontErrorPage.tsx +103 -0
  344. package/templates/components/orionplace/shared/StorefrontPagination.README.md +39 -0
  345. package/templates/components/orionplace/shared/StorefrontPagination.module.css +69 -0
  346. package/templates/components/orionplace/shared/StorefrontPagination.tsx +102 -0
  347. package/templates/components/orionplace/shared/dialogs.css +36 -0
  348. package/templates/components/orionplace/shared/emptyStateArt.ts +231 -0
  349. package/templates/components/orionplace/shared/features.module.css +162 -0
  350. package/templates/components/orionplace/social/SocialLinks.README.md +16 -0
  351. package/templates/components/orionplace/social/SocialLinks.module.css +36 -0
  352. package/templates/components/orionplace/social/SocialLinks.tsx +59 -0
  353. package/templates/components/orionplace/storefront/StorefrontAccount.README.md +59 -0
  354. package/templates/components/orionplace/storefront/StorefrontAccount.module.css +159 -0
  355. package/templates/components/orionplace/storefront/StorefrontAccount.tsx +303 -0
  356. package/templates/components/orionplace/storefront/StorefrontCartButton.README.md +47 -0
  357. package/templates/components/orionplace/storefront/StorefrontCartButton.module.css +88 -0
  358. package/templates/components/orionplace/storefront/StorefrontCartButton.tsx +54 -0
  359. package/templates/components/orionplace/storefront/StorefrontFooter.README.md +55 -0
  360. package/templates/components/orionplace/storefront/StorefrontFooter.module.css +118 -0
  361. package/templates/components/orionplace/storefront/StorefrontFooter.tsx +165 -0
  362. package/templates/components/orionplace/storefront/StorefrontHeader.README.md +150 -0
  363. package/templates/components/orionplace/storefront/StorefrontHeader.module.css +186 -0
  364. package/templates/components/orionplace/storefront/StorefrontHeader.tsx +389 -0
  365. package/templates/components/orionplace/storefront/StorefrontHome.README.md +138 -0
  366. package/templates/components/orionplace/storefront/StorefrontHome.module.css +116 -0
  367. package/templates/components/orionplace/storefront/StorefrontHome.tsx +282 -0
  368. package/templates/components/orionplace/storefront/StorefrontWishlistButton.README.md +51 -0
  369. package/templates/components/orionplace/storefront/StorefrontWishlistButton.module.css +95 -0
  370. package/templates/components/orionplace/storefront/StorefrontWishlistButton.tsx +80 -0
  371. package/templates/components/orionplace/stores/StorefrontStores.README.md +87 -0
  372. package/templates/components/orionplace/stores/StorefrontStores.module.css +218 -0
  373. package/templates/components/orionplace/stores/StorefrontStores.tsx +396 -0
  374. package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.README.md +183 -0
  375. package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.module.css +347 -0
  376. package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.tsx +884 -0
  377. package/templates/components/orionplace/subscriptions/StorefrontTariff.README.md +111 -0
  378. package/templates/components/orionplace/subscriptions/StorefrontTariff.module.css +311 -0
  379. package/templates/components/orionplace/subscriptions/StorefrontTariff.tsx +474 -0
  380. package/templates/components/orionplace/subscriptions/StorefrontTariffs.README.md +102 -0
  381. package/templates/components/orionplace/subscriptions/StorefrontTariffs.module.css +219 -0
  382. package/templates/components/orionplace/subscriptions/StorefrontTariffs.tsx +350 -0
  383. package/templates/components/orionplace/subscriptions/SubscriptionCancelDialog.README.md +67 -0
  384. package/templates/components/orionplace/subscriptions/SubscriptionCancelDialog.tsx +175 -0
  385. package/templates/components/orionplace/subscriptions/SubscriptionChangeDialog.README.md +95 -0
  386. package/templates/components/orionplace/subscriptions/SubscriptionChangeDialog.tsx +634 -0
  387. package/templates/components/orionplace/subscriptions/SubscriptionDialog.module.css +453 -0
  388. package/templates/components/orionplace/subscriptions/SubscriptionExtendDialog.README.md +75 -0
  389. package/templates/components/orionplace/subscriptions/SubscriptionExtendDialog.tsx +384 -0
  390. package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.README.md +116 -0
  391. package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.module.css +168 -0
  392. package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.tsx +236 -0
  393. package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.README.md +123 -0
  394. package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.module.css +57 -0
  395. package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.tsx +101 -0
  396. package/templates/components/orionplace/subscriptions/SubscriptionRenewalDialog.README.md +109 -0
  397. package/templates/components/orionplace/subscriptions/SubscriptionRenewalDialog.tsx +253 -0
  398. package/templates/components/orionplace/support/StorefrontSupport.README.md +157 -0
  399. package/templates/components/orionplace/support/StorefrontSupport.tsx +1040 -0
  400. package/templates/components/orionplace/support/Support.module.css +1133 -0
  401. package/templates/components/orionplace/support/TicketConversation.README.md +105 -0
  402. package/templates/components/orionplace/support/TicketConversation.tsx +502 -0
  403. package/templates/components/orionplace/support/TicketImage.README.md +52 -0
  404. package/templates/components/orionplace/support/TicketImage.tsx +254 -0
  405. package/templates/components/orionplace/support/TicketItemCard.README.md +66 -0
  406. package/templates/components/orionplace/support/TicketItemCard.tsx +140 -0
  407. package/templates/components/orionplace/support/TicketMessageForm.README.md +88 -0
  408. package/templates/components/orionplace/support/TicketMessageForm.tsx +261 -0
  409. package/templates/components/orionplace/support/TicketSubscriptionCard.README.md +53 -0
  410. package/templates/components/orionplace/support/TicketSubscriptionCard.tsx +118 -0
  411. package/templates/components/orionplace/tariffs/TariffCard.README.md +108 -0
  412. package/templates/components/orionplace/tariffs/TariffCard.module.css +86 -0
  413. package/templates/components/orionplace/tariffs/TariffCard.tsx +218 -0
  414. package/templates/components/orionplace/tariffs/TariffCardDescription.README.md +40 -0
  415. package/templates/components/orionplace/tariffs/TariffCardDescription.module.css +72 -0
  416. package/templates/components/orionplace/tariffs/TariffCardDescription.tsx +58 -0
  417. package/templates/components/orionplace/tariffs/TariffCardFeatures.README.md +58 -0
  418. package/templates/components/orionplace/tariffs/TariffCardFeatures.module.css +60 -0
  419. package/templates/components/orionplace/tariffs/TariffCardFeatures.tsx +140 -0
  420. package/templates/components/orionplace/tariffs/TariffCardImage.README.md +36 -0
  421. package/templates/components/orionplace/tariffs/TariffCardImage.module.css +8 -0
  422. package/templates/components/orionplace/tariffs/TariffCardImage.tsx +32 -0
  423. package/templates/components/orionplace/tariffs/TariffCardPrices.README.md +74 -0
  424. package/templates/components/orionplace/tariffs/TariffCardPrices.module.css +142 -0
  425. package/templates/components/orionplace/tariffs/TariffCardPrices.tsx +181 -0
  426. package/templates/components/orionplace/tariffs/TariffCardTitle.README.md +32 -0
  427. package/templates/components/orionplace/tariffs/TariffCardTitle.module.css +9 -0
  428. package/templates/components/orionplace/tariffs/TariffCardTitle.tsx +29 -0
  429. package/templates/components/orionplace/tariffs/TariffCards.README.md +88 -0
  430. package/templates/components/orionplace/tariffs/TariffCards.module.css +24 -0
  431. package/templates/components/orionplace/tariffs/TariffCards.tsx +44 -0
  432. package/templates/components/orionplace/tariffs/TariffSubscriptionModal.README.md +92 -0
  433. package/templates/components/orionplace/tariffs/TariffSubscriptionModal.module.css +214 -0
  434. package/templates/components/orionplace/tariffs/TariffSubscriptionModal.tsx +299 -0
  435. package/templates/components/orionplace/theme/OrionplaceThemeProvider.README.md +30 -0
  436. package/templates/components/orionplace/theme/OrionplaceThemeProvider.module.css +8 -0
  437. package/templates/components/orionplace/theme/OrionplaceThemeProvider.tsx +32 -0
  438. package/templates/components/orionplace/units/UnitSwitcher.README.md +35 -0
  439. package/templates/components/orionplace/units/UnitSwitcher.tsx +58 -0
  440. package/templates/components/orionplace/wallet/StorefrontWallet.README.md +154 -0
  441. package/templates/components/orionplace/wallet/StorefrontWallet.module.css +507 -0
  442. package/templates/components/orionplace/wallet/StorefrontWallet.tsx +915 -0
  443. package/templates/components/orionplace/wallet/WalletBalance.README.md +46 -0
  444. package/templates/components/orionplace/wallet/WalletBalance.module.css +46 -0
  445. package/templates/components/orionplace/wallet/WalletBalance.tsx +51 -0
  446. package/templates/components/orionplace/wallet/WalletTopUpForm.README.md +54 -0
  447. package/templates/components/orionplace/wallet/WalletTopUpForm.module.css +152 -0
  448. package/templates/components/orionplace/wallet/WalletTopUpForm.tsx +181 -0
  449. package/templates/hooks/useAccountActivity.ts +251 -0
  450. package/templates/hooks/useAccountAddresses.ts +81 -0
  451. package/templates/hooks/useAccountPromocodes.ts +91 -0
  452. package/templates/hooks/useOrionplaceActionMenu.ts +118 -0
  453. package/templates/hooks/useOrionplaceAddressForm.ts +262 -0
  454. package/templates/hooks/useOrionplaceApi.ts +98 -0
  455. package/templates/hooks/useOrionplaceAppLoad.ts +38 -6
  456. package/templates/hooks/useOrionplaceBlogReading.ts +351 -0
  457. package/templates/hooks/useOrionplaceDialog.ts +85 -0
  458. package/templates/hooks/useOrionplaceHomeProducts.ts +97 -0
  459. package/templates/hooks/useOrionplaceMap.tsx +230 -0
  460. package/templates/hooks/useOrionplaceMediaFormat.ts +33 -0
  461. package/templates/hooks/useOrionplaceProduct.ts +28 -0
  462. package/templates/hooks/useOrionplaceProfile.ts +347 -0
  463. package/templates/hooks/useOrionplaceReviews.ts +352 -0
  464. package/templates/hooks/useOrionplaceStableHeight.ts +65 -0
  465. package/templates/hooks/useOrionplaceStorefront.tsx +575 -0
  466. package/templates/hooks/useOrionplaceTariffPurchase.ts +152 -0
  467. package/templates/interfaces/orionplace/accounts/IContact.ts +21 -0
  468. package/templates/interfaces/orionplace/accounts/IEmailNotificationLocale.ts +17 -0
  469. package/templates/interfaces/orionplace/accounts/IEmailVerification.ts +59 -0
  470. package/templates/interfaces/orionplace/accounts/IProfileActions.ts +38 -0
  471. package/templates/interfaces/orionplace/accounts/IProfileData.ts +123 -0
  472. package/templates/interfaces/orionplace/accounts/IProfileMedia.ts +17 -0
  473. package/templates/interfaces/orionplace/accounts/IStorefrontProfile.ts +54 -0
  474. package/templates/interfaces/orionplace/address/IAddressCitySuggestion.ts +19 -0
  475. package/templates/interfaces/orionplace/address/IAddressEditor.ts +9 -0
  476. package/templates/interfaces/orionplace/address/IAddressLocationSuggestion.ts +22 -0
  477. package/templates/interfaces/orionplace/address/IAddressRegionSearch.ts +30 -0
  478. package/templates/interfaces/orionplace/address/IAddressSuggestion.ts +20 -0
  479. package/templates/interfaces/orionplace/address/IUserAddress.ts +87 -0
  480. package/templates/interfaces/orionplace/appBase/IAppLoad.ts +4 -3
  481. package/templates/interfaces/orionplace/appBase/IAppLoadCommon.ts +22 -31
  482. package/templates/interfaces/orionplace/appBase/IApploadUserProfile.ts +1 -1
  483. package/templates/interfaces/orionplace/appBase/IForm.ts +1 -1
  484. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonBanner.ts +7 -7
  485. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonPath.ts +2 -2
  486. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonSEO.ts +20 -7
  487. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonTariff.ts +2 -2
  488. package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonVariables.ts +1 -0
  489. package/templates/interfaces/orionplace/blog/IBlogApi.ts +247 -0
  490. package/templates/interfaces/orionplace/blog/IBlogPostPreview.ts +30 -0
  491. package/templates/interfaces/orionplace/cart/ICartActions.ts +67 -0
  492. package/templates/interfaces/orionplace/cart/ICartData.ts +382 -0
  493. package/templates/interfaces/orionplace/cart/ICartDeliveryActions.ts +68 -0
  494. package/templates/interfaces/orionplace/cart/ICartModal.ts +22 -0
  495. package/templates/interfaces/orionplace/cart/IDeliveryMap.ts +29 -0
  496. package/templates/interfaces/orionplace/catalog/ICatalogDirectory.ts +75 -0
  497. package/templates/interfaces/orionplace/category/ICategory.ts +2 -1
  498. package/templates/interfaces/orionplace/domains/IDomain.ts +2 -2
  499. package/templates/interfaces/orionplace/forms/ICustomerSubfilter.ts +19 -0
  500. package/templates/interfaces/orionplace/index.ts +64 -30
  501. package/templates/interfaces/orionplace/marketing/IPromoActions.ts +51 -0
  502. package/templates/interfaces/orionplace/orders/IOrderActions.ts +99 -0
  503. package/templates/interfaces/orionplace/orders/IOrderHistory.ts +259 -0
  504. package/templates/interfaces/orionplace/orders/IProductPreorder.ts +31 -0
  505. package/templates/interfaces/orionplace/payments/IInvoice.ts +147 -0
  506. package/templates/interfaces/orionplace/products/IProduct.ts +178 -151
  507. package/templates/interfaces/orionplace/products/IProductFeedbackApi.ts +218 -0
  508. package/templates/interfaces/orionplace/products/IProductSearchApi.ts +146 -0
  509. package/templates/interfaces/orionplace/products/IProductSearchFacets.ts +35 -0
  510. package/templates/interfaces/orionplace/products/IProductSecondaryVariantRequest.ts +15 -0
  511. package/templates/interfaces/orionplace/products/IProductSpecification.ts +14 -0
  512. package/templates/interfaces/orionplace/products/IWishlist.ts +22 -0
  513. package/templates/interfaces/orionplace/sellers/ISellerDirectory.ts +70 -0
  514. package/templates/interfaces/orionplace/shared/IBreadcrumb.ts +10 -0
  515. package/templates/interfaces/orionplace/shared/IStorefrontControls.ts +6 -0
  516. package/templates/interfaces/orionplace/state.ts +1 -1
  517. package/templates/interfaces/orionplace/stores/IStoreDirectory.ts +63 -0
  518. package/templates/interfaces/orionplace/subscribeTariff/ISubscribeTariff.ts +41 -31
  519. package/templates/interfaces/orionplace/subscribeTariff/ITariffSelection.ts +11 -0
  520. package/templates/interfaces/orionplace/subscribes/ISubscribe.ts +1 -1
  521. package/templates/interfaces/orionplace/subscribes/ISubscriptionApi.ts +125 -0
  522. package/templates/interfaces/orionplace/tickets/ICustomerTicketApi.ts +223 -0
  523. package/templates/interfaces/orionplace/transport.ts +7 -3
  524. package/templates/lib/orionplace/accountLabels.ts +22 -0
  525. package/templates/lib/orionplace/activityLabels.ts +65 -0
  526. package/templates/lib/orionplace/activityPresentation.ts +9 -0
  527. package/templates/lib/orionplace/addressChanges.ts +26 -0
  528. package/templates/lib/orionplace/addressPresentation.ts +58 -0
  529. package/templates/lib/orionplace/api.ts +326 -0
  530. package/templates/lib/orionplace/appLoadClient.ts +63 -21
  531. package/templates/lib/orionplace/appLoadResult.ts +75 -21
  532. package/templates/lib/orionplace/appLoadServer.ts +66 -21
  533. package/templates/lib/orionplace/blogArticle.ts +97 -0
  534. package/templates/lib/orionplace/blogArticleHtml.ts +370 -0
  535. package/templates/lib/orionplace/blogComments.ts +102 -0
  536. package/templates/lib/orionplace/blogJournal.ts +115 -0
  537. package/templates/lib/orionplace/blogLabels.ts +108 -0
  538. package/templates/lib/orionplace/blogPresentation.ts +67 -0
  539. package/templates/lib/orionplace/browseLabels.ts +98 -0
  540. package/templates/lib/orionplace/cartAddress.ts +86 -0
  541. package/templates/lib/orionplace/cartController.ts +104 -0
  542. package/templates/lib/orionplace/cartLabels.ts +261 -0
  543. package/templates/lib/orionplace/cartOptions.ts +115 -0
  544. package/templates/lib/orionplace/cartPreview.ts +120 -0
  545. package/templates/lib/orionplace/cartPromo.ts +150 -0
  546. package/templates/lib/orionplace/cartShipment.ts +61 -0
  547. package/templates/lib/orionplace/cartSnapshot.ts +21 -0
  548. package/templates/lib/orionplace/catalog.ts +150 -0
  549. package/templates/lib/orionplace/categoryLabels.ts +21 -0
  550. package/templates/lib/orionplace/contact.ts +47 -0
  551. package/templates/lib/orionplace/contactLabels.ts +102 -0
  552. package/templates/lib/orionplace/currency.ts +128 -0
  553. package/templates/lib/orionplace/deliveryMap.ts +86 -0
  554. package/templates/lib/orionplace/directoryLabels.ts +133 -0
  555. package/templates/lib/orionplace/domain.ts +11 -6
  556. package/templates/lib/orionplace/errorPageLabels.ts +74 -0
  557. package/templates/lib/orionplace/eventEnrollment.ts +22 -0
  558. package/templates/lib/orionplace/featureData.ts +28 -0
  559. package/templates/lib/orionplace/featureLabels.ts +271 -0
  560. package/templates/lib/orionplace/featuredLabels.ts +28 -0
  561. package/templates/lib/orionplace/footerLabels.ts +35 -0
  562. package/templates/lib/orionplace/guestSession.ts +55 -0
  563. package/templates/lib/orionplace/headerLabels.ts +68 -0
  564. package/templates/lib/orionplace/homeContent.ts +193 -0
  565. package/templates/lib/orionplace/homeLabels.ts +52 -0
  566. package/templates/lib/orionplace/htmlText.ts +51 -0
  567. package/templates/lib/orionplace/manufacturerDirectory.ts +71 -0
  568. package/templates/lib/orionplace/manufacturerIndex.ts +92 -0
  569. package/templates/lib/orionplace/modalWindow.ts +109 -0
  570. package/templates/lib/orionplace/nativeApp.ts +365 -0
  571. package/templates/lib/orionplace/navigation.tsx +121 -0
  572. package/templates/lib/orionplace/notice.ts +22 -0
  573. package/templates/lib/orionplace/orderLabels.ts +311 -0
  574. package/templates/lib/orionplace/orderPresentation.ts +574 -0
  575. package/templates/lib/orionplace/pageMetadata.ts +247 -0
  576. package/templates/lib/orionplace/pageSeo.ts +274 -0
  577. package/templates/lib/orionplace/paginationScroll.ts +131 -0
  578. package/templates/lib/orionplace/phone.ts +22 -0
  579. package/templates/lib/orionplace/presentation.ts +84 -0
  580. package/templates/lib/orionplace/productActionLabels.ts +60 -0
  581. package/templates/lib/orionplace/productAvailability.ts +30 -0
  582. package/templates/lib/orionplace/productGallery.ts +64 -0
  583. package/templates/lib/orionplace/productLabels.ts +82 -0
  584. package/templates/lib/orionplace/productPage.ts +308 -0
  585. package/templates/lib/orionplace/productPhotos.ts +67 -0
  586. package/templates/lib/orionplace/productSearch.ts +232 -0
  587. package/templates/lib/orionplace/productSeller.ts +56 -0
  588. package/templates/lib/orionplace/profile.ts +157 -0
  589. package/templates/lib/orionplace/profileLabels.ts +151 -0
  590. package/templates/lib/orionplace/promoLabels.ts +75 -0
  591. package/templates/lib/orionplace/promoPresentation.ts +381 -0
  592. package/templates/lib/orionplace/reviewLabels.ts +172 -0
  593. package/templates/lib/orionplace/reviewPresentation.ts +64 -0
  594. package/templates/lib/orionplace/reviewScope.ts +38 -0
  595. package/templates/lib/orionplace/searchFilters.ts +99 -0
  596. package/templates/lib/orionplace/searchHistory.ts +144 -0
  597. package/templates/lib/orionplace/sellerDirectory.ts +120 -0
  598. package/templates/lib/orionplace/seo.ts +52 -0
  599. package/templates/lib/orionplace/serverApi.ts +158 -0
  600. package/templates/lib/orionplace/serverLocale.ts +29 -0
  601. package/templates/lib/orionplace/serverMetadata.ts +86 -0
  602. package/templates/lib/orionplace/serverRecords.ts +25 -0
  603. package/templates/lib/orionplace/serverRoute.tsx +51 -0
  604. package/templates/lib/orionplace/sessionLabels.ts +27 -0
  605. package/templates/lib/orionplace/signInReturn.ts +89 -0
  606. package/templates/lib/orionplace/storeDirectory.ts +47 -0
  607. package/templates/lib/orionplace/storefrontRecords.ts +29 -0
  608. package/templates/lib/orionplace/subscriptionChanges.ts +120 -0
  609. package/templates/lib/orionplace/subscriptionLabels.ts +67 -0
  610. package/templates/lib/orionplace/subscriptionManageLabels.ts +306 -0
  611. package/templates/lib/orionplace/subscriptionPlans.ts +122 -0
  612. package/templates/lib/orionplace/subscriptionRemote.ts +85 -0
  613. package/templates/lib/orionplace/subscriptionUsage.ts +58 -0
  614. package/templates/lib/orionplace/tariffLabels.ts +123 -0
  615. package/templates/lib/orionplace/tariffPage.ts +54 -0
  616. package/templates/lib/orionplace/tariffVariables.ts +136 -0
  617. package/templates/lib/orionplace/tariffs.ts +192 -0
  618. package/templates/lib/orionplace/ticketItems.ts +75 -0
  619. package/templates/lib/orionplace/ticketLabels.ts +335 -0
  620. package/templates/lib/orionplace/ticketLocation.ts +79 -0
  621. package/templates/lib/orionplace/ticketRequests.ts +70 -0
  622. package/templates/lib/orionplace/walletTransaction.ts +105 -0
  623. package/templates/orionplace/COMPONENT-DOWNLOAD.md +66 -0
  624. package/templates/orionplace/COMPONENTS.md +35 -0
  625. package/templates/providers/OrionplaceProvider.tsx +164 -12
  626. package/templates/proxy.ts +8 -3
  627. package/templates/stores/orionplace.ts +212 -49
  628. package/templates/stores/orionplaceBrowse.ts +89 -0
  629. package/templates/stores/orionplaceCatalog.ts +144 -0
  630. package/templates/stores/orionplaceProducts.ts +389 -0
  631. package/templates/stores/orionplaceScope.ts +104 -0
  632. package/templates/stores/orionplaceSelections.ts +130 -0
  633. package/templates/themes/orionplace.ts +106 -0
@@ -0,0 +1,922 @@
1
+ 'use client';
2
+
3
+ import {
4
+ useEffect,
5
+ useRef,
6
+ useState,
7
+ } from 'react';
8
+ import {
9
+ useOrionplaceProductsStore,
10
+ useOrionplaceSelections,
11
+ } from '@/providers/OrionplaceProvider';
12
+ import type { IApiPagination } from '@/interfaces/orionplace/accounts/IProfileData';
13
+ import type {
14
+ ICartGetResponse,
15
+ ICurrencyAmounts,
16
+ IPaymentMethod,
17
+ } from '@/interfaces/orionplace/cart/ICartData';
18
+ import {
19
+ EOrderPaymentStatus,
20
+ EOrderStatus,
21
+ EOrderTab,
22
+ } from '@/interfaces/orionplace/orders/IOrderActions';
23
+ import type {
24
+ IOrder,
25
+ IOrderHistoryRequest,
26
+ IOrderHistoryResponse,
27
+ } from '@/interfaces/orionplace/orders/IOrderHistory';
28
+ import type { IStorefrontPayment } from '@/interfaces/orionplace/shared/IStorefrontControls';
29
+ import type { IProduct } from '@/interfaces/orionplace/products/IProduct';
30
+ import { cartSnapshotProducts } from '@/lib/orionplace/cartSnapshot';
31
+ import { formatCurrency } from '@/lib/orionplace/currency';
32
+ import { featureLabels } from '@/lib/orionplace/featureLabels';
33
+ import { mergePagination } from '@/lib/orionplace/featureData';
34
+ import { orderItemCount, orderLabels } from '@/lib/orionplace/orderLabels';
35
+ import {
36
+ hasOrderAmount,
37
+ orderAmount,
38
+ orderCanCancel,
39
+ orderIconPaths,
40
+ orderPaymentBadge,
41
+ orderQuantity,
42
+ orderShipmentItems,
43
+ orderShipmentProgress,
44
+ orderStatusBadge,
45
+ orderThumbnails,
46
+ } from '@/lib/orionplace/orderPresentation';
47
+ import {
48
+ getAvailableNestedValueFromObject,
49
+ safePublicUrl,
50
+ } from '@/lib/orionplace/presentation';
51
+ import { OrderDetails, type OrderDownloadKind } from './OrderDetails';
52
+ import { OrderPaymentForm } from './OrderPaymentForm';
53
+ import { PaymentPanel } from '@/components/orionplace/payments/PaymentPanel';
54
+ import { OrionplaceEmptyState } from '@/components/orionplace/shared/OrionplaceEmptyState';
55
+ import { OrionplaceImage } from '@/components/orionplace/shared/OrionplaceImage';
56
+ import { StorefrontPagination } from '@/components/orionplace/shared/StorefrontPagination';
57
+ import styles from './StorefrontOrders.module.css';
58
+ import { apiErrorMessage } from '@/lib/orionplace/api';
59
+
60
+ type OrdersPage = NonNullable<IOrderHistoryResponse['page_data']>;
61
+ type CartPage = NonNullable<ICartGetResponse['page_data']>;
62
+
63
+ export interface OrdersLoadAction {
64
+ endpoint: 'profile_orders_get';
65
+ request: IOrderHistoryRequest;
66
+ signal: AbortSignal;
67
+ }
68
+
69
+ export interface OrderCancelAction {
70
+ endpoint: 'orders_cancel';
71
+ request: Record<string, never>;
72
+ path: { order_id: number };
73
+ signal: AbortSignal;
74
+ }
75
+
76
+ export interface OrderRepeatAction {
77
+ endpoint: 'orders_repeat';
78
+ request: { order: number };
79
+ signal: AbortSignal;
80
+ }
81
+
82
+ export interface OrderCartReadAction {
83
+ endpoint: 'cart_guest_get';
84
+ request: Record<string, never>;
85
+ signal: AbortSignal;
86
+ }
87
+
88
+ export interface OrderPaymentMethodsAction {
89
+ endpoint: 'orders_payment_methods_get';
90
+ request: Record<string, never>;
91
+ path: { order_id: number };
92
+ signal: AbortSignal;
93
+ }
94
+
95
+ export interface OrderPaymentSetAction {
96
+ endpoint: 'orders_payment_methods_set';
97
+ request: { order: number; payment: number };
98
+ signal: AbortSignal;
99
+ }
100
+
101
+ export interface OrderDownloadAction {
102
+ endpoint:
103
+ | 'profile_get_orders_shipment_attachment'
104
+ | 'profile_get_orders_options_shipment_attachment'
105
+ | 'orders_optiongroup_file_get';
106
+ request: { attached_stock: number } | { option_group: number };
107
+ filename: string;
108
+ signal: AbortSignal;
109
+ }
110
+
111
+ export interface StorefrontOrdersProps {
112
+ orderId?: number;
113
+ initial?: OrdersPage;
114
+ initialError?: string;
115
+ initialTab?: EOrderTab;
116
+ loadOnMount?: boolean;
117
+ ordersHref?: (locale: string) => string;
118
+ catalogHref?: (locale: string) => string;
119
+ cartHref?: (locale: string) => string;
120
+ onLoad: (action: OrdersLoadAction) => Promise<OrdersPage> | OrdersPage;
121
+ onCancel?: (action: OrderCancelAction) => Promise<void> | void;
122
+ onRepeat?: (action: OrderRepeatAction) => Promise<void> | void;
123
+ onReadCart?: (action: OrderCartReadAction) => Promise<CartPage> | CartPage;
124
+ onLoadPaymentMethods?: (
125
+ action: OrderPaymentMethodsAction,
126
+ ) => Promise<Record<string, IPaymentMethod> | IPaymentMethod[]> |
127
+ Record<string, IPaymentMethod> |
128
+ IPaymentMethod[];
129
+ onSetPayment?: (
130
+ action: OrderPaymentSetAction,
131
+ ) => Promise<IStorefrontPayment> | IStorefrontPayment;
132
+ onDownload?: (action: OrderDownloadAction) => Promise<void> | void;
133
+ onPageChange?: (page: number) => void;
134
+ onTabChange?: (tab: EOrderTab) => void;
135
+ }
136
+
137
+ interface SummaryRow {
138
+ key: string;
139
+ label: string;
140
+ note?: string;
141
+ value: string;
142
+ tone?: 'discount' | 'total' | 'due';
143
+ }
144
+
145
+ function Icon({ name }: { name: keyof typeof orderIconPaths }) {
146
+ return (
147
+ <svg
148
+ viewBox="0 0 24 24"
149
+ fill="none"
150
+ stroke="currentColor"
151
+ strokeWidth="1.8"
152
+ strokeLinecap="round"
153
+ strokeLinejoin="round"
154
+ aria-hidden="true"
155
+ className={styles.icon}
156
+ >
157
+ <path d={orderIconPaths[name]} />
158
+ </svg>
159
+ );
160
+ }
161
+
162
+ export function StorefrontOrders({
163
+ orderId,
164
+ initial,
165
+ initialError = '',
166
+ initialTab = EOrderTab.IN_WORK,
167
+ loadOnMount = true,
168
+ ordersHref = (locale) => `/orders?locale=${encodeURIComponent(locale)}`,
169
+ catalogHref = (locale) => `/catalog?locale=${encodeURIComponent(locale)}`,
170
+ cartHref = (locale) => `/cart?locale=${encodeURIComponent(locale)}`,
171
+ onLoad,
172
+ onCancel,
173
+ onRepeat,
174
+ onReadCart,
175
+ onLoadPaymentMethods,
176
+ onSetPayment,
177
+ onDownload,
178
+ onPageChange,
179
+ onTabChange,
180
+ }: StorefrontOrdersProps) {
181
+ const locale = useOrionplaceSelections((state) => state.localeCode);
182
+ const currencyId = useOrionplaceSelections((state) => state.currencyId);
183
+ const currency = useOrionplaceSelections(
184
+ (state) => state.init?.currencies[state.currencyId],
185
+ );
186
+ const productStore = useOrionplaceProductsStore();
187
+ const labels = orderLabels(locale);
188
+ const common = featureLabels(locale);
189
+ const automaticLoad = loadOnMount && !initial && !initialError;
190
+ const activeRequest = useRef<AbortController | undefined>(undefined);
191
+ const callbacks = useRef({
192
+ onLoad,
193
+ onCancel,
194
+ onRepeat,
195
+ onReadCart,
196
+ onLoadPaymentMethods,
197
+ onSetPayment,
198
+ onDownload,
199
+ });
200
+ callbacks.current = {
201
+ onLoad,
202
+ onCancel,
203
+ onRepeat,
204
+ onReadCart,
205
+ onLoadPaymentMethods,
206
+ onSetPayment,
207
+ onDownload,
208
+ };
209
+ const [orders, setOrders] = useState(initial?.data ?? []);
210
+ const [pagination, setPagination] = useState<Partial<IApiPagination>>(
211
+ initial?.rpag ?? { page: 1 },
212
+ );
213
+ const [tab, setTab] = useState<EOrderTab>(initialTab);
214
+ const [loaded, setLoaded] = useState(Boolean(initial));
215
+ const [pending, setPending] = useState(automaticLoad);
216
+ const [error, setError] = useState(initialError);
217
+ const [needsRefresh, setNeedsRefresh] = useState(false);
218
+ const [confirmation, setConfirmation] = useState<{
219
+ id: number;
220
+ action: 'cancel' | 'repeat';
221
+ }>();
222
+ const [paymentOrder, setPaymentOrder] = useState<number>();
223
+ const [methods, setMethods] = useState<IPaymentMethod[]>([]);
224
+ const [payment, setPayment] = useState<IStorefrontPayment>();
225
+ const [repeated, setRepeated] = useState(false);
226
+
227
+ const tabs = [
228
+ { id: EOrderTab.IN_WORK, label: labels.active },
229
+ { id: EOrderTab.CANCELED, label: labels.canceled },
230
+ { id: EOrderTab.FINISHED, label: labels.finished },
231
+ { id: EOrderTab.REFUND, label: labels.refund },
232
+ ];
233
+ const disabled = pending || needsRefresh;
234
+
235
+ function requestBody(page: number): IOrderHistoryRequest {
236
+ return {
237
+ filters: orderId ? { id: orderId } : { order_tab: tab },
238
+ paginate: { page, pp_items: 5 },
239
+ };
240
+ }
241
+
242
+ async function fetchOrders(controller: AbortController, page: number) {
243
+ const result = await callbacks.current.onLoad({
244
+ endpoint: 'profile_orders_get',
245
+ request: requestBody(page),
246
+ signal: controller.signal,
247
+ });
248
+ if (controller.signal.aborted) {
249
+ return;
250
+ }
251
+ setOrders(result.data);
252
+ setPagination((previous) => mergePagination(previous, result.rpag));
253
+ setLoaded(true);
254
+ setNeedsRefresh(false);
255
+ }
256
+
257
+ async function run(work: (controller: AbortController) => Promise<void>) {
258
+ if (activeRequest.current) {
259
+ return;
260
+ }
261
+ const controller = new AbortController();
262
+ activeRequest.current = controller;
263
+ setPending(true);
264
+ setError('');
265
+ try {
266
+ await work(controller);
267
+ } catch (reason) {
268
+ if (!controller.signal.aborted) {
269
+ setError(
270
+ apiErrorMessage(reason) || common.failed,
271
+ );
272
+ }
273
+ } finally {
274
+ if (activeRequest.current === controller) {
275
+ activeRequest.current = undefined;
276
+ setPending(false);
277
+ }
278
+ }
279
+ }
280
+
281
+ function load(page = pagination.page ?? 1) {
282
+ return run((controller) => fetchOrders(controller, page));
283
+ }
284
+
285
+ function selectTab(nextTab: EOrderTab) {
286
+ if (pending || nextTab === tab) {
287
+ return;
288
+ }
289
+ setTab(nextTab);
290
+ setPagination({ page: 1 });
291
+ onTabChange?.(nextTab);
292
+ return run(async (controller) => {
293
+ const result = await callbacks.current.onLoad({
294
+ endpoint: 'profile_orders_get',
295
+ request: {
296
+ filters: { order_tab: nextTab },
297
+ paginate: { page: 1, pp_items: 5 },
298
+ },
299
+ signal: controller.signal,
300
+ });
301
+ if (!controller.signal.aborted) {
302
+ setOrders(result.data);
303
+ setPagination(mergePagination({ page: 1 }, result.rpag));
304
+ setLoaded(true);
305
+ setNeedsRefresh(false);
306
+ }
307
+ });
308
+ }
309
+
310
+ function changePage(page: number) {
311
+ onPageChange?.(page);
312
+ void load(page);
313
+ }
314
+
315
+ function cancel(order: IOrder) {
316
+ if (!callbacks.current.onCancel) {
317
+ return;
318
+ }
319
+ return run(async (controller) => {
320
+ await callbacks.current.onCancel?.({
321
+ endpoint: 'orders_cancel',
322
+ request: {},
323
+ path: { order_id: order.id },
324
+ signal: controller.signal,
325
+ });
326
+ if (controller.signal.aborted) {
327
+ return;
328
+ }
329
+ setNeedsRefresh(true);
330
+ await fetchOrders(controller, pagination.page ?? 1);
331
+ });
332
+ }
333
+
334
+ function repeat(order: IOrder) {
335
+ if (!callbacks.current.onRepeat) {
336
+ return;
337
+ }
338
+ return run(async (controller) => {
339
+ await callbacks.current.onRepeat?.({
340
+ endpoint: 'orders_repeat',
341
+ request: { order: order.id },
342
+ signal: controller.signal,
343
+ });
344
+ if (controller.signal.aborted) {
345
+ return;
346
+ }
347
+ setRepeated(true);
348
+ if (callbacks.current.onReadCart) {
349
+ const cart = await callbacks.current.onReadCart({
350
+ endpoint: 'cart_guest_get',
351
+ request: {},
352
+ signal: controller.signal,
353
+ });
354
+ if (!controller.signal.aborted) {
355
+ productStore.getState().setProductCounters({
356
+ c_cart_positions: cart.cart.c_cart_positions,
357
+ });
358
+ productStore.getState().synchronizeProductCart(
359
+ cartSnapshotProducts(cart),
360
+ );
361
+ }
362
+ }
363
+ });
364
+ }
365
+
366
+ function confirm(order: IOrder) {
367
+ const action = confirmation?.action;
368
+ setConfirmation(undefined);
369
+ if (action === 'cancel') {
370
+ void cancel(order);
371
+ } else if (action === 'repeat') {
372
+ void repeat(order);
373
+ }
374
+ }
375
+
376
+ function openPayment(order: IOrder) {
377
+ if (!callbacks.current.onLoadPaymentMethods) {
378
+ return;
379
+ }
380
+ return run(async (controller) => {
381
+ const result = await callbacks.current.onLoadPaymentMethods?.({
382
+ endpoint: 'orders_payment_methods_get',
383
+ request: {},
384
+ path: { order_id: order.id },
385
+ signal: controller.signal,
386
+ });
387
+ if (!controller.signal.aborted && result) {
388
+ setMethods(Array.isArray(result) ? result : Object.values(result));
389
+ setPaymentOrder(order.id);
390
+ }
391
+ });
392
+ }
393
+
394
+ function pay(method: number) {
395
+ if (
396
+ !paymentOrder ||
397
+ needsRefresh ||
398
+ !methods.some((item) => item.id === method) ||
399
+ !callbacks.current.onSetPayment
400
+ ) {
401
+ return;
402
+ }
403
+ return run(async (controller) => {
404
+ const result = await callbacks.current.onSetPayment?.({
405
+ endpoint: 'orders_payment_methods_set',
406
+ request: { payment: method, order: paymentOrder },
407
+ signal: controller.signal,
408
+ });
409
+ if (controller.signal.aborted || !result) {
410
+ return;
411
+ }
412
+ setPayment(result);
413
+ setPaymentOrder(undefined);
414
+ setNeedsRefresh(true);
415
+ await fetchOrders(controller, pagination.page ?? 1);
416
+ });
417
+ }
418
+
419
+ function download(
420
+ kind: OrderDownloadKind,
421
+ id: number,
422
+ filename: string,
423
+ ) {
424
+ if (!callbacks.current.onDownload) {
425
+ return;
426
+ }
427
+ const endpoint = {
428
+ product: 'profile_get_orders_shipment_attachment',
429
+ option: 'profile_get_orders_options_shipment_attachment',
430
+ group: 'orders_optiongroup_file_get',
431
+ } as const;
432
+ void run(async (controller) => {
433
+ await callbacks.current.onDownload?.({
434
+ endpoint: endpoint[kind],
435
+ request: kind === 'group'
436
+ ? { option_group: id }
437
+ : { attached_stock: id },
438
+ filename,
439
+ signal: controller.signal,
440
+ });
441
+ });
442
+ }
443
+
444
+ function closePayment() {
445
+ setPayment(undefined);
446
+ void load();
447
+ }
448
+
449
+ function money(amounts: ICurrencyAmounts | null | undefined) {
450
+ return formatCurrency(orderAmount(amounts, currencyId), currency, locale);
451
+ }
452
+
453
+ function hasMoney(amounts: ICurrencyAmounts | null | undefined) {
454
+ return hasOrderAmount(amounts, currencyId);
455
+ }
456
+
457
+ function canPay(order: IOrder) {
458
+ const due = Number(
459
+ order.prices.order_total_paid_left?.[currencyId]?.transform_value,
460
+ );
461
+ return order.status.int === EOrderStatus.CREATED &&
462
+ !order.prices.delivery_price_is_estimate &&
463
+ !orderShipmentProgress(order).sent &&
464
+ (
465
+ order.payment_status.int === EOrderPaymentStatus.NOT_PAID ||
466
+ due > 0
467
+ );
468
+ }
469
+
470
+ function paymentMinutes(order: IOrder) {
471
+ const minutes = Number(order.cancel_in_minutes);
472
+ return canPay(order) && Number.isFinite(minutes) && minutes > 0
473
+ ? `${Math.ceil(minutes)} ${labels.minutes}`
474
+ : '';
475
+ }
476
+
477
+ function summaryRows(order: IOrder): SummaryRow[] {
478
+ const price = order.prices;
479
+ const code = order.promocode;
480
+ const rows: SummaryRow[] = [{
481
+ key: 'subtotal',
482
+ label: labels.subtotal,
483
+ value: money(price.total_price_no_discount),
484
+ }];
485
+ if (hasMoney(price.discount_value)) {
486
+ rows.push({
487
+ key: 'discount',
488
+ label: labels.discount,
489
+ value: `−${money(price.discount_value)}`,
490
+ tone: 'discount',
491
+ });
492
+ }
493
+ if (hasMoney(price.promo_value)) {
494
+ rows.push({
495
+ key: 'promo',
496
+ label: labels.promo,
497
+ note: code,
498
+ value: `−${money(price.promo_value)}`,
499
+ tone: 'discount',
500
+ });
501
+ }
502
+ if (hasMoney(price.delivery_discount)) {
503
+ rows.push({
504
+ key: 'delivery-discount',
505
+ label: labels.deliveryDiscount,
506
+ note: code,
507
+ value: `−${money(price.delivery_discount)}`,
508
+ tone: 'discount',
509
+ });
510
+ }
511
+ rows.push({
512
+ key: 'delivery',
513
+ label: labels.shippingCost,
514
+ value: price.delivery_price_is_estimate
515
+ ? labels.calculating
516
+ : money(price.total_delivery_price_after_promo),
517
+ });
518
+ rows.push({
519
+ key: 'total',
520
+ label: labels.total,
521
+ value: money(price.order_total),
522
+ tone: 'total',
523
+ });
524
+ if (hasMoney(price.order_total_paid)) {
525
+ rows.push({ key: 'paid', label: labels.paid, value: money(price.order_total_paid) });
526
+ }
527
+ if (hasMoney(price.order_total_paid_left)) {
528
+ rows.push({
529
+ key: 'left',
530
+ label: labels.left,
531
+ value: money(price.order_total_paid_left),
532
+ tone: 'due',
533
+ });
534
+ }
535
+ if (paymentMinutes(order)) {
536
+ rows.push({
537
+ key: 'payment-time',
538
+ label: labels.paymentTime,
539
+ value: paymentMinutes(order),
540
+ });
541
+ }
542
+ if (hasMoney(price.total_refund_price_to_pay)) {
543
+ rows.push({
544
+ key: 'refund-to-pay',
545
+ label: labels.refundToPay,
546
+ value: money(price.total_refund_price_to_pay),
547
+ });
548
+ }
549
+ if (hasMoney(price.total_refund_price_paid)) {
550
+ rows.push({
551
+ key: 'refunded',
552
+ label: labels.refunded,
553
+ value: money(price.total_refund_price_paid),
554
+ });
555
+ }
556
+ return rows;
557
+ }
558
+
559
+ function productName(product: IProduct | null) {
560
+ return getAvailableNestedValueFromObject(
561
+ product?.locale,
562
+ locale,
563
+ 'product_name',
564
+ ) || `#${product?.id ?? ''}`;
565
+ }
566
+
567
+ function deliveryMethods(order: IOrder) {
568
+ const names = (order.delivery_froms ?? []).map((shipment) => {
569
+ if (!shipment.delivery_method) {
570
+ return shipment.store?.virtual_goods ? labels.digitalDelivery : '';
571
+ }
572
+ return getAvailableNestedValueFromObject(
573
+ shipment.delivery_method.locales,
574
+ locale,
575
+ 'tariff_name',
576
+ ) ?? '';
577
+ });
578
+ return [...new Set(names.filter(Boolean))].join(', ');
579
+ }
580
+
581
+ function expectedDelivery(order: IOrder) {
582
+ if (
583
+ order.status.int !== EOrderStatus.CREATED &&
584
+ order.status.int !== EOrderStatus.SENT
585
+ ) {
586
+ return '';
587
+ }
588
+ const shipment = (order.delivery_froms ?? []).find((entry) =>
589
+ entry.estimate.delivery_date_from?.date ||
590
+ entry.estimate.delivery_date_to?.date,
591
+ );
592
+ return [...new Set([
593
+ shipment?.estimate.delivery_date_from?.date,
594
+ shipment?.estimate.delivery_date_to?.date,
595
+ ].filter(Boolean))].join(' — ');
596
+ }
597
+
598
+ function shippedCount(order: IOrder) {
599
+ const progress = orderShipmentProgress(order);
600
+ return progress.sent && progress.total
601
+ ? `${progress.sent} ${labels.of} ${progress.total}`
602
+ : '';
603
+ }
604
+
605
+ useEffect(() => {
606
+ if (automaticLoad) {
607
+ void load(1);
608
+ }
609
+ // Clear the cancelled request too: React's development mode mounts
610
+ // twice, and a remount that still saw it would never load.
611
+ return () => {
612
+ activeRequest.current?.abort();
613
+ activeRequest.current = undefined;
614
+ };
615
+ }, []);
616
+
617
+ // Another order or the list opens clean, as in Nuxt and Svelte: a repeat
618
+ // notice, a confirmation or a payment form belongs to the page it was made on.
619
+ const shownOrder = useRef(orderId);
620
+ useEffect(() => {
621
+ if (shownOrder.current === orderId) {
622
+ return;
623
+ }
624
+ shownOrder.current = orderId;
625
+ // The last page's request would answer for the wrong order.
626
+ activeRequest.current?.abort();
627
+ activeRequest.current = undefined;
628
+ setRepeated(false);
629
+ setConfirmation(undefined);
630
+ setPaymentOrder(undefined);
631
+ setPayment(undefined);
632
+ void load(1);
633
+ }, [orderId]);
634
+
635
+ return (
636
+ <section
637
+ className={styles.root}
638
+ aria-busy={pending}
639
+ data-feature-part="StorefrontOrders"
640
+ >
641
+ <header className={styles.heading}>
642
+ <div>
643
+ {orderId ? (
644
+ <a className={styles.link} href={safePublicUrl(ordersHref(locale))}>
645
+ <span aria-hidden="true">←</span> {labels.allOrders}
646
+ </a>
647
+ ) : null}
648
+ <h1>{labels.title}</h1>
649
+ </div>
650
+ <button
651
+ className={styles.refresh}
652
+ type="button"
653
+ disabled={pending}
654
+ onClick={() => void load()}
655
+ >
656
+ {common.refresh}
657
+ </button>
658
+ </header>
659
+
660
+ {!orderId ? (
661
+ <nav className={styles.tabs} aria-label={labels.tabs}>
662
+ {tabs.map((item) => (
663
+ <button
664
+ key={item.id}
665
+ type="button"
666
+ aria-current={tab === item.id ? 'page' : undefined}
667
+ disabled={pending}
668
+ onClick={() => void selectTab(item.id)}
669
+ >
670
+ {item.label}
671
+ </button>
672
+ ))}
673
+ </nav>
674
+ ) : null}
675
+
676
+ {pending ? (
677
+ <p className="op-feature-loading" role="status">
678
+ <span className={styles.screenReaderOnly}>{labels.loading}</span>
679
+ </p>
680
+ ) : null}
681
+ {error ? <p className={styles.error} role="alert">{error}</p> : null}
682
+ {needsRefresh ? (
683
+ <p className={styles.notice} role="alert">{labels.refreshRequired}</p>
684
+ ) : null}
685
+ {repeated ? (
686
+ <div className={styles.success} role="status">
687
+ <p>{labels.repeated}</p>
688
+ <a className={styles.link} href={safePublicUrl(cartHref(locale))}>
689
+ {labels.openCart}
690
+ </a>
691
+ </div>
692
+ ) : null}
693
+ {payment?.link ? (
694
+ <PaymentPanel
695
+ payment={payment}
696
+ pending={pending}
697
+ onRefresh={() => void load()}
698
+ onClose={closePayment}
699
+ />
700
+ ) : null}
701
+
702
+ {!loaded ? (
703
+ pending ? (
704
+ <div className={styles.placeholders} aria-hidden="true">
705
+ <div data-order-placeholder />
706
+ <div data-order-placeholder />
707
+ </div>
708
+ ) : <p className={styles.notice} role="status">{common.failed}</p>
709
+ ) : !orders.length ? (
710
+ <OrionplaceEmptyState
711
+ kind="orders"
712
+ messageTag="h2"
713
+ message={labels.empty}
714
+ description={labels.emptyHint}
715
+ >
716
+ <a className={styles.primary} href={safePublicUrl(catalogHref(locale))}>
717
+ {labels.catalog}
718
+ </a>
719
+ </OrionplaceEmptyState>
720
+ ) : orders.map((order) => {
721
+ const status = orderStatusBadge(order);
722
+ const paymentStatus = orderPaymentBadge(order, currencyId);
723
+ const thumbnails = orderThumbnails(orderShipmentItems(order));
724
+ const placed = [order.time_submited?.date, order.time_submited?.time]
725
+ .filter(Boolean)
726
+ .join(', ');
727
+ return (
728
+ <article
729
+ key={order.id}
730
+ className={styles.card}
731
+ data-order-card
732
+ aria-labelledby={`order-${order.id}-title`}
733
+ >
734
+ <header className={styles.cardHeading}>
735
+ <div>
736
+ <h2 id={`order-${order.id}-title`}>
737
+ {labels.order} № {order.id}
738
+ </h2>
739
+ {placed ? <p>{labels.placed} <time>{placed}</time></p> : null}
740
+ </div>
741
+ <dl className={styles.badges}>
742
+ <div>
743
+ <dt className={styles.screenReaderOnly}>{labels.statusOrder}</dt>
744
+ <dd>
745
+ <span
746
+ className={styles.badge}
747
+ data-tone={status.tone}
748
+ data-order-status={order.status.int}
749
+ >
750
+ <Icon name={status.icon} />{labels.statuses[status.key]}
751
+ </span>
752
+ </dd>
753
+ </div>
754
+ <div>
755
+ <dt className={styles.screenReaderOnly}>{labels.statusPayment}</dt>
756
+ <dd>
757
+ <span
758
+ className={styles.badge}
759
+ data-tone={paymentStatus.tone}
760
+ data-payment-status={order.payment_status.int}
761
+ >
762
+ <Icon name={paymentStatus.icon} />
763
+ {labels.payments[paymentStatus.key]}
764
+ </span>
765
+ </dd>
766
+ </div>
767
+ </dl>
768
+ </header>
769
+
770
+ <div className={styles.cardBody}>
771
+ <section>
772
+ <h3>{labels.items}</h3>
773
+ {thumbnails.items.length ? (
774
+ <ul className={styles.thumbnails}>
775
+ {thumbnails.items.map((item) => (
776
+ <li key={item.id}>
777
+ <OrionplaceImage
778
+ src={item.product?.images?.small?.[0]}
779
+ alt={productName(item.product)}
780
+ width={64}
781
+ height={64}
782
+ />
783
+ </li>
784
+ ))}
785
+ {thumbnails.extra ? (
786
+ <li className={styles.more} data-order-more>
787
+ +{thumbnails.extra}
788
+ </li>
789
+ ) : null}
790
+ </ul>
791
+ ) : null}
792
+ <p>{orderItemCount(locale, orderQuantity(order))}</p>
793
+ </section>
794
+ <section>
795
+ <h3>{labels.delivery}</h3>
796
+ <dl className={styles.pairs}>
797
+ {deliveryMethods(order) ? (
798
+ <div><dt>{labels.method}</dt><dd>{deliveryMethods(order)}</dd></div>
799
+ ) : null}
800
+ {shippedCount(order) ? (
801
+ <div><dt>{labels.sentDate}</dt><dd>{shippedCount(order)}</dd></div>
802
+ ) : null}
803
+ {expectedDelivery(order) ? (
804
+ <div><dt>{labels.estimate}</dt><dd>{expectedDelivery(order)}</dd></div>
805
+ ) : null}
806
+ {order.prices.delivery_price_is_estimate ? (
807
+ <div><dt>{labels.shippingCost}</dt><dd>{labels.calculating}</dd></div>
808
+ ) : null}
809
+ </dl>
810
+ </section>
811
+ <section data-order-summary>
812
+ <h3>{labels.summary}</h3>
813
+ <dl className={`${styles.pairs} ${styles.amounts}`}>
814
+ {summaryRows(order).map((row) => (
815
+ <div
816
+ key={row.key}
817
+ data-order-summary-row={row.key}
818
+ data-tone={row.tone}
819
+ >
820
+ <dt>{row.label}{row.note ? ` ${row.note}` : ''}</dt>
821
+ <dd>{row.value}</dd>
822
+ </div>
823
+ ))}
824
+ </dl>
825
+ </section>
826
+ </div>
827
+
828
+ {order.prices.delivery_price_is_estimate ? (
829
+ <p className={styles.notice} role="status">{labels.estimated}</p>
830
+ ) : null}
831
+
832
+ <div className={styles.cardActions}>
833
+ <div role="group" aria-label={labels.actions}>
834
+ {canPay(order) ? (
835
+ <button
836
+ type="button"
837
+ className={styles.primary}
838
+ data-order-pay
839
+ disabled={disabled}
840
+ aria-label={labels.payHint}
841
+ onClick={() => void openPayment(order)}
842
+ >
843
+ <Icon name="card" />{labels.pay}
844
+ </button>
845
+ ) : null}
846
+ <button
847
+ type="button"
848
+ disabled={disabled || repeated}
849
+ aria-label={labels.repeatHint}
850
+ onClick={() => setConfirmation({ id: order.id, action: 'repeat' })}
851
+ >
852
+ {labels.repeat}
853
+ </button>
854
+ {orderCanCancel(order) ? (
855
+ <button
856
+ type="button"
857
+ disabled={disabled}
858
+ aria-label={labels.cancelHint}
859
+ onClick={() => setConfirmation({ id: order.id, action: 'cancel' })}
860
+ >
861
+ {labels.cancel}
862
+ </button>
863
+ ) : null}
864
+ </div>
865
+
866
+ {confirmation?.id === order.id ? (
867
+ <div className={styles.confirmation}>
868
+ <p>
869
+ {confirmation.action === 'cancel'
870
+ ? labels.cancelQuestion
871
+ : labels.repeatQuestion}
872
+ </p>
873
+ <div>
874
+ <button
875
+ type="button"
876
+ className={styles.primary}
877
+ disabled={disabled}
878
+ onClick={() => confirm(order)}
879
+ >
880
+ {common.continue}
881
+ </button>
882
+ <button
883
+ type="button"
884
+ disabled={disabled}
885
+ onClick={() => setConfirmation(undefined)}
886
+ >
887
+ {common.back}
888
+ </button>
889
+ </div>
890
+ </div>
891
+ ) : null}
892
+
893
+ {paymentOrder === order.id ? (
894
+ <OrderPaymentForm
895
+ methods={methods}
896
+ pending={disabled}
897
+ onSubmit={(method) => void pay(method)}
898
+ onCancel={() => setPaymentOrder(undefined)}
899
+ />
900
+ ) : null}
901
+ </div>
902
+
903
+ <details open={Boolean(orderId)} className={styles.disclosure} data-order-details>
904
+ <summary>{labels.details}</summary>
905
+ <OrderDetails
906
+ order={order}
907
+ pending={pending}
908
+ onDownload={download}
909
+ />
910
+ </details>
911
+ </article>
912
+ );
913
+ })}
914
+
915
+ <StorefrontPagination
916
+ pagination={pagination}
917
+ pending={pending}
918
+ onChange={changePage}
919
+ />
920
+ </section>
921
+ );
922
+ }