@mframework/layer-commerce 0.0.3

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 (355) hide show
  1. package/README.md +101 -0
  2. package/app/cart/useCart.ts +1 -0
  3. package/app/components/ChevronIcon/ChevronIcon.config.ts +17 -0
  4. package/app/components/DateSelect/DateSelect.config.ts +15 -0
  5. package/app/components/Field/Field.config.ts +14 -0
  6. package/app/components/FieldDate/FieldDate.config.ts +16 -0
  7. package/app/components/Form/Form.type.ts +8 -0
  8. package/app/components/Product/Product.config.ts +19 -0
  9. package/app/components/Product/Stock.config.ts +15 -0
  10. package/app/components/ProductCustomizableOption/ProductCustomizableOption.config.ts +5 -0
  11. package/app/components/ProductGallery/ProductGallery.config.ts +15 -0
  12. package/app/components/ProductReviews/ProductReviews.config.ts +8 -0
  13. package/app/composables/_types.ts +18 -0
  14. package/app/composables/adapters/abstract/cartAdapter.ts +0 -0
  15. package/app/composables/adapters/abstract/categoryAdapter.ts +0 -0
  16. package/app/composables/adapters/abstract/customerAdapter.ts +0 -0
  17. package/app/composables/adapters/abstract/inventoryAdapter.ts +0 -0
  18. package/app/composables/adapters/abstract/orderAdapter.ts +0 -0
  19. package/app/composables/adapters/abstract/productAdapter.ts +7 -0
  20. package/app/composables/cart/registry.ts +20 -0
  21. package/app/composables/cart/types.ts +18 -0
  22. package/app/composables/cart/useCart.ts +15 -0
  23. package/app/composables/config.ts +19 -0
  24. package/app/composables/defs/apiDefinitions.ts +55 -0
  25. package/app/composables/defs/extension.feature +40 -0
  26. package/app/composables/defs/extension.mocks.ts +39 -0
  27. package/app/composables/defs/extension.test.ts +280 -0
  28. package/app/composables/defs/extension.ts +236 -0
  29. package/app/composables/defs/index.ts +3 -0
  30. package/app/composables/defs/typeHelpers.ts +8 -0
  31. package/app/composables/defs/types.ts +136 -0
  32. package/app/composables/domain/product.ts +12 -0
  33. package/app/composables/featured-products.ts +20 -0
  34. package/app/composables/helpers/contextualizedNormalizers.feature +14 -0
  35. package/app/composables/helpers/contextualizedNormalizers.test.ts +85 -0
  36. package/app/composables/helpers/contextualizedNormalizers.ts +20 -0
  37. package/app/composables/helpers/index.ts +1 -0
  38. package/app/composables/index.ts +9 -0
  39. package/app/composables/methods/auth.ts +83 -0
  40. package/app/composables/methods/cart.ts +119 -0
  41. package/app/composables/methods/category.ts +27 -0
  42. package/app/composables/methods/checkout.ts +54 -0
  43. package/app/composables/methods/customer.ts +52 -0
  44. package/app/composables/methods/helpers.ts +5 -0
  45. package/app/composables/methods/index.ts +75 -0
  46. package/app/composables/methods/order.ts +39 -0
  47. package/app/composables/methods/product.ts +95 -0
  48. package/app/composables/methods/settings.ts +16 -0
  49. package/app/composables/models/cart.ts +95 -0
  50. package/app/composables/models/category.ts +13 -0
  51. package/app/composables/models/checkout.ts +17 -0
  52. package/app/composables/models/customer.ts +16 -0
  53. package/app/composables/models/facets.ts +25 -0
  54. package/app/composables/models/index.ts +94 -0
  55. package/app/composables/models/order.ts +43 -0
  56. package/app/composables/models/product.ts +73 -0
  57. package/app/composables/models/shared.ts +75 -0
  58. package/app/composables/orders.ts +69 -0
  59. package/app/composables/products/registry.ts +86 -0
  60. package/app/composables/products/types.ts +8 -0
  61. package/app/composables/products/useEvents.ts +26 -0
  62. package/app/composables/products/useGiftCards.ts +29 -0
  63. package/app/composables/products/useProducts.ts +12 -0
  64. package/app/composables/products/useSubscriptions.ts +29 -0
  65. package/app/composables/products.ts +30 -0
  66. package/app/composables/registry.ts +24 -0
  67. package/app/composables/useAuth.ts +43 -0
  68. package/app/composables/useBreakpoints/index.ts +1 -0
  69. package/app/composables/useBreakpoints/useBreakpoints.ts +28 -0
  70. package/app/composables/useCache.ts +38 -0
  71. package/app/composables/useCart/__tests__/useCart.spec.ts +11 -0
  72. package/app/composables/useCart/index.ts +1 -0
  73. package/app/composables/useCart/types.ts +17 -0
  74. package/app/composables/useCart/useCart.ts +46 -0
  75. package/app/composables/useCartShippingMethods/__tests__/useCartShippingMethods.spec.ts +11 -0
  76. package/app/composables/useCartShippingMethods/index.ts +1 -0
  77. package/app/composables/useCartShippingMethods/types.ts +17 -0
  78. package/app/composables/useCartShippingMethods/useCartShippingMethods.ts +47 -0
  79. package/app/composables/useCatalog.ts +26 -0
  80. package/app/composables/useContent.ts +26 -0
  81. package/app/composables/useCustomer/__tests__/useCustomer.spec.ts +25 -0
  82. package/app/composables/useCustomer/index.ts +2 -0
  83. package/app/composables/useCustomer/types.ts +17 -0
  84. package/app/composables/useCustomer/useCustomer.ts +40 -0
  85. package/app/composables/useCustomerAddress/__tests__/useCustomerAddress.spec.ts +11 -0
  86. package/app/composables/useCustomerAddress/index.ts +2 -0
  87. package/app/composables/useCustomerAddress/types.ts +17 -0
  88. package/app/composables/useCustomerAddress/useCustomerAddress.ts +55 -0
  89. package/app/composables/useCustomerOrder/__tests__/useCustomerOrder.spec.ts +11 -0
  90. package/app/composables/useCustomerOrder/adress.ts +10 -0
  91. package/app/composables/useCustomerOrder/index.ts +2 -0
  92. package/app/composables/useCustomerOrder/product.ts +37 -0
  93. package/app/composables/useCustomerOrder/types.ts +40 -0
  94. package/app/composables/useCustomerOrder/useCustomerOrder.ts +63 -0
  95. package/app/composables/useCustomerOrders/__tests__/useCustomerOrders.spec.ts +11 -0
  96. package/app/composables/useCustomerOrders/index.ts +2 -0
  97. package/app/composables/useCustomerOrders/types.ts +20 -0
  98. package/app/composables/useCustomerOrders/useCustomerOrders.ts +56 -0
  99. package/app/composables/useCustomerReturns/__tests__/useCustomerReturns.spec.ts +11 -0
  100. package/app/composables/useCustomerReturns/index.ts +2 -0
  101. package/app/composables/useCustomerReturns/types.ts +17 -0
  102. package/app/composables/useCustomerReturns/useCustomerReturns.ts +41 -0
  103. package/app/composables/useHandleError/index.ts +1 -0
  104. package/app/composables/useHandleError/types.ts +11 -0
  105. package/app/composables/useHandleError/useHandleError.ts +27 -0
  106. package/app/composables/useInventory.ts +29 -0
  107. package/app/composables/useLoading.ts +21 -0
  108. package/app/composables/useNotification.ts +21 -0
  109. package/app/composables/usePageTitle.ts +20 -0
  110. package/app/composables/useProduct/index.ts +2 -0
  111. package/app/composables/useProduct/types.ts +17 -0
  112. package/app/composables/useProduct/useProduct.ts +42 -0
  113. package/app/composables/useProductAttribute/__tests__/useProduct.mock.ts +31 -0
  114. package/app/composables/useProductAttribute/__tests__/useProductAttribute.spec.ts +14 -0
  115. package/app/composables/useProductAttribute/index.ts +1 -0
  116. package/app/composables/useProductAttribute/useProductAttribute.ts +37 -0
  117. package/app/composables/useProductRecommended/__tests__/useProductRecommended.spec.ts +12 -0
  118. package/app/composables/useProductRecommended/index.ts +1 -0
  119. package/app/composables/useProductRecommended/types.ts +17 -0
  120. package/app/composables/useProductRecommended/useProductRecommended.ts +43 -0
  121. package/app/composables/useProductReviews/__tests__/productReviews.mock.ts +20 -0
  122. package/app/composables/useProductReviews/__tests__/useProductReviews.spec.ts +22 -0
  123. package/app/composables/useProductReviews/index.ts +2 -0
  124. package/app/composables/useProductReviews/types.ts +17 -0
  125. package/app/composables/useProductReviews/useProductReviews.ts +46 -0
  126. package/app/composables/useProducts/__tests__/useProducts.spec.ts +11 -0
  127. package/app/composables/useProducts/types.ts +22 -0
  128. package/app/composables/useProducts/useProducts.ts +41 -0
  129. package/app/composables/useTax.ts +27 -0
  130. package/app/composables/validationRules/index.ts +1 -0
  131. package/app/composables/validationRules/password.feature +67 -0
  132. package/app/composables/validationRules/password.test.ts +89 -0
  133. package/app/composables/validationRules/password.ts +25 -0
  134. package/app/normalizers/Cart.query.ts +729 -0
  135. package/app/normalizers/Cart.type.ts +285 -0
  136. package/app/normalizers/Category.query.ts +146 -0
  137. package/app/normalizers/Category.type.ts +55 -0
  138. package/app/normalizers/CheckEmail.query.ts +28 -0
  139. package/app/normalizers/Checkout.query.ts +253 -0
  140. package/app/normalizers/Checkout.type.ts +77 -0
  141. package/app/normalizers/CmsBlock.query.ts +57 -0
  142. package/app/normalizers/CmsBlock.type.ts +25 -0
  143. package/app/normalizers/CmsPage.query.ts +59 -0
  144. package/app/normalizers/CmsPage.type.ts +26 -0
  145. package/app/normalizers/Config.query.ts +224 -0
  146. package/app/normalizers/Config.type.ts +196 -0
  147. package/app/normalizers/ContactForm.query.ts +49 -0
  148. package/app/normalizers/CreditMemo.type.ts +49 -0
  149. package/app/normalizers/GiftCard.type.ts +24 -0
  150. package/app/normalizers/Invoice.type.ts +58 -0
  151. package/app/normalizers/Menu.query.ts +54 -0
  152. package/app/normalizers/Menu.type.ts +22 -0
  153. package/app/normalizers/MyAccount.query.ts +268 -0
  154. package/app/normalizers/MyAccount.type.ts +129 -0
  155. package/app/normalizers/NewsletterSubscription.query.ts +38 -0
  156. package/app/normalizers/Order.query.ts +741 -0
  157. package/app/normalizers/Order.type.ts +268 -0
  158. package/app/normalizers/Payment.type.ts +28 -0
  159. package/app/normalizers/ProductAlerts.query.ts +23 -0
  160. package/app/normalizers/ProductCompare.query.ts +226 -0
  161. package/app/normalizers/ProductCompare.type.ts +90 -0
  162. package/app/normalizers/ProductList.query.ts +1620 -0
  163. package/app/normalizers/ProductList.type.ts +726 -0
  164. package/app/normalizers/Region.query.ts +58 -0
  165. package/app/normalizers/Region.type.ts +23 -0
  166. package/app/normalizers/Return.type.ts +50 -0
  167. package/app/normalizers/Review.query.ts +81 -0
  168. package/app/normalizers/Review.type.ts +42 -0
  169. package/app/normalizers/Slider.query.ts +72 -0
  170. package/app/normalizers/Slider.type.ts +26 -0
  171. package/app/normalizers/StoreInPickUp.query.ts +54 -0
  172. package/app/normalizers/StoreInPickUp.type.ts +59 -0
  173. package/app/normalizers/Subscription.type.ts +25 -0
  174. package/app/normalizers/Transaction.type.ts +20 -0
  175. package/app/normalizers/UrlRewrites.query.ts +55 -0
  176. package/app/normalizers/UrlRewrites.type.ts +25 -0
  177. package/app/normalizers/Wishlist.query.ts +202 -0
  178. package/app/normalizers/Wishlist.type.ts +42 -0
  179. package/app/pages/brand/[...slug].vue +76 -0
  180. package/app/pages/brands.vue +67 -0
  181. package/app/pages/cart.vue +142 -0
  182. package/app/pages/compare.vue +166 -0
  183. package/app/pages/departments/[...slug].vue +353 -0
  184. package/app/pages/departments/category/[...slug].vue +114 -0
  185. package/app/pages/incentive/[...id].vue +66 -0
  186. package/app/pages/invoice/[id].vue +309 -0
  187. package/app/pages/order/[id].vue +327 -0
  188. package/app/pages/product/[...id].vue +309 -0
  189. package/app/pages/product/showcases/index.vue +86 -0
  190. package/app/pages/shipment/[...id].vue +176 -0
  191. package/app/pages/shop/[...slug].vue +158 -0
  192. package/app/pages/shops.vue +76 -0
  193. package/app/pages/subscription/[...id].vue +147 -0
  194. package/app/pages/transaction/[...id].vue +74 -0
  195. package/app/routes/CategoryPage/CategoryPage.config.ts +28 -0
  196. package/app/routes/CategoryPage/CategoryPage.type.ts +8 -0
  197. package/app/routes/Checkout/Checkout.config.ts +3 -0
  198. package/app/routes/Checkout/Checkout.type.ts +14 -0
  199. package/app/routes/MyAccount/MyAccount.config.ts +1 -0
  200. package/app/routes/SearchPage/SearchPage.config.ts +1 -0
  201. package/app/routes/UrlRewrites/UrlRewrites.config.ts +5 -0
  202. package/app/stores/Cart/Cart.type.ts +26 -0
  203. package/app/stores/MyAccount/MyAccount.action.ts +7 -0
  204. package/app/stores/Notification/Notification.action.ts +40 -0
  205. package/app/stores/Notification/Notification.type.ts +16 -0
  206. package/app/stores/Popup/Popup.action.ts +30 -0
  207. package/app/stores/Product/Product.dispatcher.ts +53 -0
  208. package/app/stores/Product/Product.reducer.ts +12 -0
  209. package/app/stores/ProductList/ProductList.dispatcher.ts +35 -0
  210. package/app/stores/ProductList/ProductList.reducer.ts +13 -0
  211. package/app/stores/Store.type.ts +31 -0
  212. package/app/stores/Wishlist/Wishlist.type.ts +12 -0
  213. package/app/stores/cart.ts +218 -0
  214. package/app/stores/cartStore.ts +224 -0
  215. package/app/stores/checkout.ts +18 -0
  216. package/app/stores/compare.ts +65 -0
  217. package/app/stores/currency.js +29 -0
  218. package/app/stores/digital-products.js +11 -0
  219. package/app/stores/orders.ts +172 -0
  220. package/app/stores/product.ts +34 -0
  221. package/app/stores/productList.ts +35 -0
  222. package/app/stores/productListInfo.ts +0 -0
  223. package/app/stores/products.ts +118 -0
  224. package/app/stores/recentlyViewedProducts.ts +56 -0
  225. package/app/stores/review.ts +33 -0
  226. package/app/stores/storeInPickUp.ts +21 -0
  227. package/app/stores/user.ts +20 -0
  228. package/app/stores/wishlist.ts +46 -0
  229. package/app/types/Account.type.ts +141 -0
  230. package/app/types/Breadcrumbs.type.ts +23 -0
  231. package/app/types/CMS.type.ts +33 -0
  232. package/app/types/Category.type.ts +67 -0
  233. package/app/types/Checkout.type.ts +58 -0
  234. package/app/types/Common.type.ts +77 -0
  235. package/app/types/Config.type.ts +47 -0
  236. package/app/types/Device.type.ts +37 -0
  237. package/app/types/Direction.type.ts +23 -0
  238. package/app/types/Downloadable.type.ts +24 -0
  239. package/app/types/Error.type.ts +22 -0
  240. package/app/types/Field.type.ts +151 -0
  241. package/app/types/Global.type.ts +156 -0
  242. package/app/types/Graphql.type.ts +4497 -0
  243. package/app/types/Layout.type.ts +18 -0
  244. package/app/types/Menu.type.ts +39 -0
  245. package/app/types/MiniCart.type.ts +61 -0
  246. package/app/types/NotificationList.type.ts +34 -0
  247. package/app/types/Order.type.ts +174 -0
  248. package/app/types/Price.type.ts +72 -0
  249. package/app/types/ProductCompare.type.ts +24 -0
  250. package/app/types/ProductList.type.ts +351 -0
  251. package/app/types/Rating.type.ts +42 -0
  252. package/app/types/Router.type.ts +67 -0
  253. package/app/types/Slider.type.ts +25 -0
  254. package/app/types/StockStatus.type.ts +21 -0
  255. package/app/types/domain/index.ts +94 -0
  256. package/app/types/index.ts +33 -0
  257. package/app/types/shims.d.ts +52 -0
  258. package/app/types/tilework-opus.d.ts +48 -0
  259. package/app/utils/Address/Address.type.ts +28 -0
  260. package/app/utils/Address/index.ts +325 -0
  261. package/app/utils/Auth/IsSignedIn.ts +4 -0
  262. package/app/utils/Auth/Token.ts +9 -0
  263. package/app/utils/Base64/Base64.ts +16 -0
  264. package/app/utils/Base64/index.ts +12 -0
  265. package/app/utils/Browser/Browser.ts +29 -0
  266. package/app/utils/Browser/index.ts +12 -0
  267. package/app/utils/BrowserDatabase/BrowserDatabase.ts +70 -0
  268. package/app/utils/BrowserDatabase/index.ts +12 -0
  269. package/app/utils/CSS/CSS.ts +65 -0
  270. package/app/utils/CSS/index.ts +12 -0
  271. package/app/utils/Cache/Cache.ts +99 -0
  272. package/app/utils/Cart/Cart.ts +300 -0
  273. package/app/utils/Cart/Cart.type.ts +76 -0
  274. package/app/utils/Cart/Token.ts +59 -0
  275. package/app/utils/Cart/index.ts +13 -0
  276. package/app/utils/Category/Filters.ts +39 -0
  277. package/app/utils/Category/index.ts +12 -0
  278. package/app/utils/Common/index.ts +32 -0
  279. package/app/utils/Compare/Compare.ts +89 -0
  280. package/app/utils/Compare/index.ts +12 -0
  281. package/app/utils/Currency/Currency.ts +84 -0
  282. package/app/utils/Currency/index.ts +12 -0
  283. package/app/utils/DynamicReducer/DynamicReducer.type.ts +14 -0
  284. package/app/utils/DynamicReducer/Helper.ts +30 -0
  285. package/app/utils/DynamicReducer/index.tsx +35 -0
  286. package/app/utils/ElementTransition/ElementTransition.ts +100 -0
  287. package/app/utils/Form/Extract.ts +316 -0
  288. package/app/utils/Form/Form.ts +46 -0
  289. package/app/utils/Form/Form.type.ts +60 -0
  290. package/app/utils/Form/Transform.ts +33 -0
  291. package/app/utils/FormPortalCollector/index.ts +45 -0
  292. package/app/utils/History/History.type.ts +31 -0
  293. package/app/utils/History/index.ts +17 -0
  294. package/app/utils/Manipulations/Array.ts +18 -0
  295. package/app/utils/Manipulations/Date.ts +36 -0
  296. package/app/utils/Manipulations/index.ts +14 -0
  297. package/app/utils/Media/Media.ts +27 -0
  298. package/app/utils/Media/index.ts +13 -0
  299. package/app/utils/Menu/Menu.ts +116 -0
  300. package/app/utils/Menu/Menu.type.ts +37 -0
  301. package/app/utils/Menu/index.ts +12 -0
  302. package/app/utils/Mobile/index.ts +13 -0
  303. package/app/utils/Mobile/isMobile.ts +34 -0
  304. package/app/utils/Orders/Orders.ts +71 -0
  305. package/app/utils/Orders/Orders.type.ts +19 -0
  306. package/app/utils/Orders/index.ts +13 -0
  307. package/app/utils/Polyfill/index.ts +336 -0
  308. package/app/utils/Preload/CategoryPreload.ts +74 -0
  309. package/app/utils/Preload/ProductPreload.ts +28 -0
  310. package/app/utils/Preload/index.ts +75 -0
  311. package/app/utils/Price/Price.config.ts +189 -0
  312. package/app/utils/Price/Price.ts +63 -0
  313. package/app/utils/Price/index.ts +12 -0
  314. package/app/utils/Product/Extract.ts +652 -0
  315. package/app/utils/Product/Product.ts +575 -0
  316. package/app/utils/Product/Product.type.ts +260 -0
  317. package/app/utils/Product/Transform.ts +382 -0
  318. package/app/utils/Product/index.ts +12 -0
  319. package/app/utils/Promise/MakeCancelable.ts +44 -0
  320. package/app/utils/Promise/Promise.type.ts +15 -0
  321. package/app/utils/Promise/index.ts +13 -0
  322. package/app/utils/Query/Field.ts +71 -0
  323. package/app/utils/Query/Fragment.ts +22 -0
  324. package/app/utils/Query/PrepareDocument.ts +119 -0
  325. package/app/utils/Query/Query.type.ts +26 -0
  326. package/app/utils/Query/index.ts +15 -0
  327. package/app/utils/Request/Config.ts +21 -0
  328. package/app/utils/Request/DataContainer.ts +102 -0
  329. package/app/utils/Request/Debounce.ts +48 -0
  330. package/app/utils/Request/Error.ts +31 -0
  331. package/app/utils/Request/Hash.ts +88 -0
  332. package/app/utils/Request/LowPriorityLoad.ts +32 -0
  333. package/app/utils/Request/LowPriorityRender.ts +55 -0
  334. package/app/utils/Request/Mutation.ts +25 -0
  335. package/app/utils/Request/Query.ts +25 -0
  336. package/app/utils/Request/QueryDispatcher.ts +135 -0
  337. package/app/utils/Request/Request.ts +310 -0
  338. package/app/utils/Store/Store.type.ts +26 -0
  339. package/app/utils/Store/index.ts +71 -0
  340. package/app/utils/Url/Url.ts +297 -0
  341. package/app/utils/Url/index.ts +12 -0
  342. package/app/utils/Validator/Config.ts +96 -0
  343. package/app/utils/Validator/Validator.ts +268 -0
  344. package/app/utils/Validator/Validator.type.ts +47 -0
  345. package/app/utils/Validator/index.ts +12 -0
  346. package/app/utils/Wishlist/Wishlist.ts +65 -0
  347. package/app/utils/Wishlist/index.ts +12 -0
  348. package/app/utils/client.ts +280 -0
  349. package/app/utils/index.ts +53 -0
  350. package/app/utils/normalizer.ts +23 -0
  351. package/app/utils/normalizers/magento.ts +29 -0
  352. package/app/utils/normalizers/shopify.ts +29 -0
  353. package/nuxt.config.ts +11 -0
  354. package/package.json +43 -0
  355. package/tsconfig.json +45 -0
@@ -0,0 +1,29 @@
1
+ import { defineStore } from 'pinia'
2
+
3
+ export const useCurrencyStore = defineStore('currency', {
4
+ state: () => ({
5
+ currentCurrency: null,
6
+ exchangeRates: {}
7
+ }),
8
+
9
+ actions: {
10
+ setCurrency(currency) {
11
+ this.currentCurrency = currency
12
+ },
13
+
14
+ setExchangeRates(rates) {
15
+ this.exchangeRates = rates
16
+ },
17
+
18
+ async updateCurrency(currency) {
19
+ this.setCurrency(currency)
20
+ // Here you would typically make an API call to update the user's preference
21
+ // if they are logged in
22
+ }
23
+ },
24
+
25
+ getters: {
26
+ getCurrentCurrency: (state) => state.currentCurrency,
27
+ getExchangeRates: (state) => state.exchangeRates
28
+ }
29
+ })
@@ -0,0 +1,11 @@
1
+ // stores/digital-products.js
2
+ export const useDigitalProducts = defineStore('digital-products', {
3
+ state: () => ({
4
+ downloads: {},
5
+ }),
6
+ actions: {
7
+ downloadProduct(productId) {
8
+ // Download logic
9
+ },
10
+ },
11
+ });
@@ -0,0 +1,172 @@
1
+ // stores/orders.ts - Pinia store for order management
2
+ import { defineStore } from 'pinia'
3
+ import { ref, computed, readonly } from 'vue'
4
+ import { useOrders, useReturns, useTransactions, useInvoices, useCreditMemos } from '../composables/orders'
5
+ import type { Order as DomainOrder, PaymentIntent as DomainPaymentIntent } from '../types/domain'
6
+
7
+ type Order = DomainOrder
8
+ type Return = DomainOrder
9
+ type Transaction = DomainPaymentIntent
10
+ type Invoice = DomainOrder
11
+ type CreditMemo = DomainOrder
12
+ type OrderFilters = any
13
+
14
+ export const useOrdersStore = defineStore('orders', () => {
15
+ const orders = ref<Order[]>([])
16
+ const currentOrder = ref<Order | null>(null)
17
+ const returns = ref<Return[]>([])
18
+ const transactions = ref<Transaction[]>([])
19
+ const invoices = ref<Invoice[]>([])
20
+ const creditMemos = ref<CreditMemo[]>([])
21
+ const loading = ref(false)
22
+ const error = ref<string | null>(null)
23
+
24
+ // Import composables
25
+ const { getOrders, getOrderById } = useOrders()
26
+ const { getReturns, createReturn } = useReturns()
27
+ const { getTransactions } = useTransactions()
28
+ const { getInvoices } = useInvoices()
29
+ const { getCreditMemos } = useCreditMemos()
30
+
31
+ const fetchOrders = async (filters: OrderFilters = {}) => {
32
+ loading.value = true
33
+ error.value = null
34
+ try {
35
+ orders.value = await getOrders(filters)
36
+ } catch (err: any) {
37
+ error.value = err.message
38
+ console.error('Error fetching orders:', err)
39
+ } finally {
40
+ loading.value = false
41
+ }
42
+ }
43
+
44
+ const fetchOrder = async (id: string) => {
45
+ loading.value = true
46
+ error.value = null
47
+ try {
48
+ currentOrder.value = await getOrderById(id)
49
+ } catch (err: any) {
50
+ error.value = err.message
51
+ console.error('Error fetching order:', err)
52
+ } finally {
53
+ loading.value = false
54
+ }
55
+ }
56
+
57
+ const fetchReturns = async (options: { search?: string } = {}) => {
58
+ loading.value = true
59
+ error.value = null
60
+ try {
61
+ returns.value = await getReturns(options)
62
+ } catch (err: any) {
63
+ error.value = err.message
64
+ console.error('Error fetching returns:', err)
65
+ } finally {
66
+ loading.value = false
67
+ }
68
+ }
69
+
70
+ const submitReturn = async (returnData: any) => {
71
+ loading.value = true
72
+ error.value = null
73
+ try {
74
+ const newReturn = await createReturn(returnData)
75
+ returns.value.unshift(newReturn)
76
+ return newReturn
77
+ } catch (err: any) {
78
+ error.value = err.message
79
+ console.error('Error submitting return:', err)
80
+ throw err
81
+ } finally {
82
+ loading.value = false
83
+ }
84
+ }
85
+
86
+ const fetchTransactions = async (options: { search?: string } = {}) => {
87
+ loading.value = true
88
+ error.value = null
89
+ try {
90
+ transactions.value = await getTransactions(options)
91
+ } catch (err: any) {
92
+ error.value = err.message
93
+ console.error('Error fetching transactions:', err)
94
+ } finally {
95
+ loading.value = false
96
+ }
97
+ }
98
+
99
+ const fetchInvoices = async (options: { search?: string } = {}) => {
100
+ loading.value = true
101
+ error.value = null
102
+ try {
103
+ invoices.value = await getInvoices(options)
104
+ } catch (err: any) {
105
+ error.value = err.message
106
+ console.error('Error fetching invoices:', err)
107
+ } finally {
108
+ loading.value = false
109
+ }
110
+ }
111
+
112
+ const fetchCreditMemos = async (options: { search?: string } = {}) => {
113
+ loading.value = true
114
+ error.value = null
115
+ try {
116
+ creditMemos.value = await getCreditMemos(options)
117
+ } catch (err: any) {
118
+ error.value = err.message
119
+ console.error('Error fetching credit memos:', err)
120
+ } finally {
121
+ loading.value = false
122
+ }
123
+ }
124
+
125
+ // Computed properties
126
+ const ordersByStatus = computed(() => {
127
+ return orders.value.reduce((acc: Record<string, number>, order: Order) => {
128
+ acc[order.status] = (acc[order.status] || 0) + 1
129
+ return acc
130
+ }, {} as Record<string, number>)
131
+ })
132
+
133
+ const totalRevenue = computed(() => {
134
+ const toNumber = (v: any) => (typeof v === 'number' ? v : (v?.value ?? 0))
135
+ return orders.value
136
+ .filter((order: Order) => !['cancelled', 'refunded'].includes(order?.status ?? ''))
137
+ .reduce((sum: number, order: Order) => sum + toNumber(order?.total), 0)
138
+ })
139
+
140
+ const averageOrderValue = computed(() => {
141
+ const validOrders = orders.value.filter((order: Order) =>
142
+ !['cancelled', 'refunded'].includes(order.status)
143
+ )
144
+ return validOrders.length > 0 ? totalRevenue.value / validOrders.length : 0
145
+ })
146
+
147
+ return {
148
+ // State
149
+ orders: readonly(orders),
150
+ currentOrder: readonly(currentOrder),
151
+ returns: readonly(returns),
152
+ transactions: readonly(transactions),
153
+ invoices: readonly(invoices),
154
+ creditMemos: readonly(creditMemos),
155
+ loading: readonly(loading),
156
+ error: readonly(error),
157
+
158
+ // Computed
159
+ ordersByStatus,
160
+ totalRevenue,
161
+ averageOrderValue,
162
+
163
+ // Actions
164
+ fetchOrders,
165
+ fetchOrder,
166
+ fetchReturns,
167
+ submitReturn,
168
+ fetchTransactions,
169
+ fetchInvoices,
170
+ fetchCreditMemos
171
+ }
172
+ })
@@ -0,0 +1,34 @@
1
+ import { defineStore } from 'pinia';
2
+ import type { Product as DomainProduct } from '../types/domain';
3
+ import { useProducts } from '../composables/products'
4
+
5
+ interface ProductState {
6
+ products: DomainProduct[]
7
+ selectedProduct: DomainProduct | null
8
+ isLoading: boolean
9
+ }
10
+
11
+ export const useProductStore = defineStore('product', {
12
+ state: (): ProductState => ({
13
+ products: [],
14
+ selectedProduct: null,
15
+ isLoading: false
16
+ }),
17
+ actions: {
18
+ async fetchProducts(options: any = {}) {
19
+ this.isLoading = true;
20
+ try {
21
+ const { getProducts } = useProducts()
22
+ const response = await getProducts(options)
23
+ ;(this as any).products = response as DomainProduct[]
24
+ } catch (error) {
25
+ console.error('Error fetching products:', error);
26
+ } finally {
27
+ this.isLoading = false;
28
+ }
29
+ },
30
+ selectProduct(product: DomainProduct) {
31
+ ;(this as any).selectedProduct = product
32
+ }
33
+ }
34
+ });
@@ -0,0 +1,35 @@
1
+ import { defineStore } from 'pinia'
2
+ import { ref, computed, readonly } from 'vue'
3
+ import type { Product as DomainProduct } from '../types/domain'
4
+ import { useProducts } from '../composables/products'
5
+
6
+ export const useProductListStore = defineStore('productList', () => {
7
+ const items = ref<DomainProduct[]>([])
8
+ const loading = ref(false)
9
+ const error = ref<string | null>(null)
10
+
11
+ const { getProducts } = useProducts()
12
+
13
+ const fetch = async (options: any = {}) => {
14
+ loading.value = true
15
+ error.value = null
16
+ try {
17
+ items.value = await getProducts(options)
18
+ } catch (err: any) {
19
+ error.value = err?.message ?? String(err)
20
+ console.error('Error fetching product list:', err)
21
+ } finally {
22
+ loading.value = false
23
+ }
24
+ }
25
+
26
+ const count = computed(() => items.value.length)
27
+
28
+ return {
29
+ items: readonly(items),
30
+ loading: readonly(loading),
31
+ error: readonly(error),
32
+ count,
33
+ fetch,
34
+ }
35
+ })
File without changes
@@ -0,0 +1,118 @@
1
+ // stores/products.ts - Pinia store for product management
2
+ import type { Product as DomainProduct } from '../types/domain'
3
+ import { defineStore } from 'pinia'
4
+ import { ref, computed, readonly } from 'vue'
5
+ import { useProducts } from '../composables/products'
6
+ import { useFeaturedProducts } from '../composables/featured-products'
7
+
8
+ export const useProductsStore = defineStore('products', () => {
9
+ const products = ref<DomainProduct[]>([])
10
+ const featuredProducts = ref<DomainProduct[]>([])
11
+ const currentProduct = ref<DomainProduct | null>(null)
12
+ const categories = ref([])
13
+ const loading = ref(false)
14
+ const error = ref<string | null>(null)
15
+
16
+ // Import product composables
17
+ const { getProducts, getProductById, getProductsByCategory, searchProducts } = useProducts()
18
+ const { getFeaturedProducts } = useFeaturedProducts()
19
+
20
+ const fetchProducts = async (options: any = {}) => {
21
+ loading.value = true
22
+ error.value = null
23
+ try {
24
+ products.value = await getProducts(options)
25
+ } catch (err: any) {
26
+ error.value = err.message
27
+ console.error('Error fetching products:', err)
28
+ } finally {
29
+ loading.value = false
30
+ }
31
+ }
32
+
33
+ const fetchProduct = async (id: string) => {
34
+ loading.value = true
35
+ error.value = null
36
+ try {
37
+ currentProduct.value = await getProductById(id)
38
+ } catch (err: any) {
39
+ error.value = err.message
40
+ console.error('Error fetching product:', err)
41
+ } finally {
42
+ loading.value = false
43
+ }
44
+ }
45
+
46
+ const fetchFeaturedProducts = async (options: any = {}) => {
47
+ loading.value = true
48
+ error.value = null
49
+ try {
50
+ featuredProducts.value = await getFeaturedProducts(options)
51
+ } catch (err: any) {
52
+ error.value = err.message
53
+ console.error('Error fetching featured products:', err)
54
+ } finally {
55
+ loading.value = false
56
+ }
57
+ }
58
+
59
+ const fetchProductsByCategory = async (categoryId: string, options: any = {}) => {
60
+ loading.value = true
61
+ error.value = null
62
+ try {
63
+ products.value = await getProductsByCategory(categoryId, options)
64
+ } catch (err: any) {
65
+ error.value = err.message
66
+ console.error('Error fetching products by category:', err)
67
+ } finally {
68
+ loading.value = false
69
+ }
70
+ }
71
+
72
+ const searchForProducts = async (query: string, options: any = {}) => {
73
+ loading.value = true
74
+ error.value = null
75
+ try {
76
+ products.value = await searchProducts(query, options)
77
+ } catch (err: any) {
78
+ error.value = err.message
79
+ console.error('Error searching products:', err)
80
+ } finally {
81
+ loading.value = false
82
+ }
83
+ }
84
+
85
+ // Computed properties
86
+ const productsOnSale = computed(() => {
87
+ return products.value.filter((product: DomainProduct) => {
88
+ if (product.sale_price == null) return false
89
+ const priceValue = (product as any).price?.value ?? (typeof (product as any).price === 'number' ? (product as any).price : undefined)
90
+ return priceValue != null && product.sale_price < priceValue
91
+ })
92
+ })
93
+
94
+ const productCount = computed(() => {
95
+ return products.value.length
96
+ })
97
+
98
+ return {
99
+ // State
100
+ products: readonly(products),
101
+ featuredProducts: readonly(featuredProducts),
102
+ currentProduct: readonly(currentProduct),
103
+ categories: readonly(categories),
104
+ loading: readonly(loading),
105
+ error: readonly(error),
106
+
107
+ // Computed
108
+ productsOnSale,
109
+ productCount,
110
+
111
+ // Actions
112
+ fetchProducts,
113
+ fetchProduct,
114
+ fetchFeaturedProducts,
115
+ fetchProductsByCategory,
116
+ searchForProducts
117
+ }
118
+ })
@@ -0,0 +1,56 @@
1
+ import { defineStore } from 'pinia'
2
+ import { ref, readonly } from 'vue'
3
+ import { getCommerceClient } from '../utils/client'
4
+ import type { Product as DomainProduct } from '../types/domain'
5
+
6
+ export const useRecentlyViewedStore = defineStore('recentlyViewed', () => {
7
+ const ids = ref<string[]>([])
8
+ const items = ref<DomainProduct[]>([])
9
+ const isLoading = ref(false)
10
+
11
+ const addViewed = (productId: string) => {
12
+ if (!ids.value.includes(productId)) {
13
+ ids.value.unshift(productId)
14
+ if (ids.value.length > 20) ids.value.pop()
15
+ }
16
+ }
17
+
18
+ const fetch = async () => {
19
+ isLoading.value = true
20
+ try {
21
+ const client = getCommerceClient()
22
+ if (client && typeof client.getProductById === 'function') {
23
+ const loaded: DomainProduct[] = []
24
+ for (const id of ids.value) {
25
+ try {
26
+ const p = await client.getProductById(id)
27
+ if (p) loaded.push(p)
28
+ } catch (e) {
29
+ // ignore per-item errors
30
+ }
31
+ }
32
+ items.value = loaded
33
+ } else if (ids.value.length) {
34
+ // Best-effort: try a bulk fetch if the client exposes it
35
+ try {
36
+ const clientAny: any = client
37
+ if (clientAny && typeof clientAny.getProducts === 'function') {
38
+ items.value = await clientAny.getProducts({ ids: ids.value })
39
+ }
40
+ } catch (e) {
41
+ // ignore
42
+ }
43
+ }
44
+ } finally {
45
+ isLoading.value = false
46
+ }
47
+ }
48
+
49
+ return {
50
+ ids: readonly(ids),
51
+ items: readonly(items),
52
+ isLoading: readonly(isLoading),
53
+ addViewed,
54
+ fetch,
55
+ }
56
+ })
@@ -0,0 +1,33 @@
1
+ import { defineStore } from 'pinia';
2
+ import { getCommerceClient } from '../utils/client'
3
+ import type { Review as DomainReview } from '../types/domain'
4
+
5
+ type ReviewState = { reviews: DomainReview[]; isLoading: boolean }
6
+
7
+ export const useReviewStore = defineStore('review', {
8
+ state: (): ReviewState => ({
9
+ reviews: [],
10
+ isLoading: false
11
+ }),
12
+ actions: {
13
+ async fetchReviews(productId: string) {
14
+ this.isLoading = true;
15
+ try {
16
+ const client = getCommerceClient()
17
+ if (client && typeof client.listReviews === 'function') {
18
+ this.reviews = await client.listReviews({ productId }) as DomainReview[]
19
+ } else {
20
+ const response = await $fetch<DomainReview[]>(`/api/reviews?productId=${productId}`);
21
+ this.reviews = (response || []) as DomainReview[]
22
+ }
23
+ } catch (error) {
24
+ console.error('Error fetching reviews:', error);
25
+ } finally {
26
+ this.isLoading = false;
27
+ }
28
+ },
29
+ addReview(review: DomainReview) {
30
+ this.reviews.push(review);
31
+ }
32
+ }
33
+ });
@@ -0,0 +1,21 @@
1
+ import { defineStore } from 'pinia';
2
+
3
+ export const useStoreInPickupStore = defineStore('storeInPickUp', {
4
+ state: (): { selectedStoreId: string | null; stores: any[] } => ({
5
+ selectedStoreId: null,
6
+ stores: []
7
+ }),
8
+ actions: {
9
+ setSelectedStore(storeId: string) {
10
+ this.selectedStoreId = storeId;
11
+ },
12
+ async fetchStores() {
13
+ try {
14
+ const response = await $fetch<any[]>('/api/stores');
15
+ this.stores = response as any[];
16
+ } catch (error) {
17
+ console.error('Error fetching stores:', error);
18
+ }
19
+ }
20
+ }
21
+ });
@@ -0,0 +1,20 @@
1
+ import { defineStore } from 'pinia';
2
+ import { ref } from 'vue';
3
+
4
+ export const useUserStore = defineStore('user', () => {
5
+ const user = ref<any>({});
6
+
7
+ function setUser(newUser: any) {
8
+ user.value = newUser;
9
+ }
10
+
11
+ function clearUser() {
12
+ user.value = {};
13
+ }
14
+
15
+ return {
16
+ user,
17
+ setUser,
18
+ clearUser,
19
+ };
20
+ });
@@ -0,0 +1,46 @@
1
+ import { defineStore } from 'pinia';
2
+ import { getCommerceClient } from '../utils/client'
3
+ import type { Product as DomainProduct } from '../types/domain'
4
+
5
+ type WishlistState = { items: string[]; isLoading: boolean; products: DomainProduct[] }
6
+
7
+ export const useWishlistStore = defineStore('wishlist', {
8
+ state: (): WishlistState => ({
9
+ items: [],
10
+ isLoading: false,
11
+ products: []
12
+ }),
13
+ actions: {
14
+ addToWishlist(productId: string) {
15
+ if (!this.items.includes(productId)) {
16
+ this.items.push(productId);
17
+ }
18
+ },
19
+ removeFromWishlist(productId: string) {
20
+ this.items = this.items.filter((id: string) => id !== productId);
21
+ this.products = this.products.filter((p: any) => p.id !== productId && p.sku !== productId);
22
+ },
23
+ async fetchWishlistProducts() {
24
+ this.isLoading = true
25
+ try {
26
+ const client = getCommerceClient()
27
+ if (client && typeof client.getProducts === 'function') {
28
+ this.products = await client.getProducts({ ids: this.items })
29
+ } else if (client && typeof client.getProductById === 'function') {
30
+ const loaded: DomainProduct[] = []
31
+ for (const id of this.items) {
32
+ try {
33
+ const p = await client.getProductById(id)
34
+ if (p) loaded.push(p)
35
+ } catch (e) {}
36
+ }
37
+ this.products = loaded
38
+ }
39
+ } catch (e) {
40
+ // ignore
41
+ } finally {
42
+ this.isLoading = false
43
+ }
44
+ }
45
+ }
46
+ });