@meeovi/layer-commerce 1.0.10 → 1.0.13

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 (324) hide show
  1. package/app/components/catalog/product/ProductAccordion/ProductAccordion.vue +39 -0
  2. package/app/components/catalog/product/ProductAccordion/__tests__/ProductAccordion.spec.ts +15 -0
  3. package/app/components/catalog/product/ProductAccordion/types.ts +5 -0
  4. package/app/components/catalog/product/ProductProperties/ProductProperties.vue +50 -0
  5. package/app/components/catalog/product/ProductProperties/__tests__/ProductProperties.spec.ts +15 -0
  6. package/app/components/catalog/product/ProductProperties/types.ts +5 -0
  7. package/app/components/catalog/product/ProductSlider/ProductSlider.vue +28 -0
  8. package/app/components/catalog/product/ProductSlider/__tests__/ProductSlider.spec.ts +14 -0
  9. package/app/components/catalog/product/ProductSlider/types.ts +7 -0
  10. package/app/components/catalog/product/RecommendedProducts/RecommendedProducts.vue +12 -0
  11. package/app/components/catalog/product/RecommendedProducts/types.ts +5 -0
  12. package/app/components/catalog/product/RenderContentProductSlider/RenderContentProductSlider.vue +11 -0
  13. package/app/components/catalog/product/add-attribute.vue +54 -0
  14. package/app/components/catalog/product/add-product-type.vue +54 -0
  15. package/app/components/catalog/product/add-product.vue +53 -0
  16. package/app/components/catalog/product/add-showcase.vue +52 -0
  17. package/app/components/catalog/product/add-station.vue +54 -0
  18. package/app/components/catalog/product/bestsellers.vue +57 -0
  19. package/app/components/catalog/product/bidding.vue +93 -0
  20. package/app/components/catalog/product/colorOptions.vue +58 -0
  21. package/app/components/catalog/product/deals.vue +46 -0
  22. package/app/components/catalog/product/exclusives.vue +56 -0
  23. package/app/components/catalog/product/featuredproducts.vue +57 -0
  24. package/app/components/catalog/product/giftCard.vue +63 -0
  25. package/app/components/catalog/product/latestproducts.vue +46 -0
  26. package/app/components/catalog/product/productCard.vue +105 -0
  27. package/app/components/catalog/product/productCompare.vue +60 -0
  28. package/app/components/catalog/product/productCompareTable.vue +441 -0
  29. package/app/components/catalog/product/productDetails.vue +126 -0
  30. package/app/components/catalog/product/productFaqs.vue +17 -0
  31. package/app/components/catalog/product/productGallery.vue +16 -0
  32. package/app/components/catalog/product/productQty.vue +54 -0
  33. package/app/components/catalog/product/productReviews.vue +56 -0
  34. package/app/components/catalog/product/productSpecs.vue +116 -0
  35. package/app/components/catalog/product/radiostation.vue +36 -0
  36. package/app/components/catalog/product/recentlyviewed.vue +43 -0
  37. package/app/components/catalog/product/relatedbrands.vue +54 -0
  38. package/app/components/catalog/product/relatedproducts.vue +43 -0
  39. package/app/components/catalog/product/relatedstations.vue +40 -0
  40. package/app/components/catalog/product/shippingOptions.vue +41 -0
  41. package/app/components/catalog/product/sizeOptions.vue +42 -0
  42. package/app/components/catalog/product/update-attribute-set.vue +209 -0
  43. package/app/components/catalog/product/update-attribute.vue +118 -0
  44. package/app/components/catalog/product/update-product.vue +372 -0
  45. package/app/components/catalog/product/update-showcase.vue +153 -0
  46. package/app/components/catalog/shops/relatedstores.vue +37 -0
  47. package/app/components/catalog/shops/restaurant.vue +66 -0
  48. package/app/components/catalog/shops/stores.vue +44 -0
  49. package/app/components/catalog/vendor/README.md +3 -0
  50. package/app/components/catalog/vendor/blocks/biggestcustomers.vue +33 -0
  51. package/app/components/catalog/vendor/blocks/lowestselling.vue +33 -0
  52. package/app/components/catalog/vendor/blocks/topcategories.vue +33 -0
  53. package/app/components/catalog/vendor/blocks/topproducts.vue +27 -0
  54. package/app/components/catalog/vendor/pages/attributes.vue +43 -0
  55. package/app/components/catalog/vendor/pages/commissions.vue +43 -0
  56. package/app/components/catalog/vendor/pages/crm.vue +67 -0
  57. package/app/components/catalog/vendor/pages/dashboard.vue +46 -0
  58. package/app/components/catalog/vendor/pages/emails.vue +43 -0
  59. package/app/components/catalog/vendor/pages/enquiries.vue +43 -0
  60. package/app/components/catalog/vendor/pages/invoices.vue +43 -0
  61. package/app/components/catalog/vendor/pages/orders.vue +68 -0
  62. package/app/components/catalog/vendor/pages/products.vue +55 -0
  63. package/app/components/catalog/vendor/pages/reviews.vue +48 -0
  64. package/app/components/catalog/vendor/pages/shipments.vue +43 -0
  65. package/app/components/catalog/vendor/pages/stores.vue +43 -0
  66. package/app/components/categories/chart/[id].vue +200 -0
  67. package/app/components/categories/chart/add-chart.vue +142 -0
  68. package/app/components/categories/chart/chart.vue +82 -0
  69. package/app/components/categories/chart/monthlyChart.vue +46 -0
  70. package/app/components/categories/chart/weeklyChart.vue +46 -0
  71. package/app/components/categories/chart/yearlyChart.vue +46 -0
  72. package/app/components/categories/charts.vue +118 -0
  73. package/app/components/categories/deals.vue +101 -0
  74. package/app/components/categories/eats.vue +49 -0
  75. package/app/components/categories/restaurants.vue +26 -0
  76. package/app/components/categories/station/[id].vue +72 -0
  77. package/app/components/categories/stations.vue +124 -0
  78. package/app/components/categories/time/time.vue +63 -0
  79. package/app/components/categories/travel.vue +75 -0
  80. package/app/components/categories/weather/weather.vue +44 -0
  81. package/app/components/content/blocks/breadcrumbs.vue +0 -0
  82. package/app/components/content/blocks/currencySwitcher.vue +0 -0
  83. package/app/components/content/blocks/languageSwitcher.vue +0 -0
  84. package/app/components/content/blocks/videoproduct.vue +9 -0
  85. package/app/components/content/pages/checkout.vue +118 -0
  86. package/app/components/content/pages/meeoviGlobal.vue +68 -0
  87. package/app/components/content/pages/pickup-locations.vue +238 -0
  88. package/app/components/content/pages/showcases.vue +90 -0
  89. package/app/components/content/pages/success.vue +60 -0
  90. package/app/components/marketing/add-brand.vue +54 -0
  91. package/app/components/marketing/add-incentive.vue +54 -0
  92. package/app/components/marketing/promotions/giftcards.vue +102 -0
  93. package/app/components/marketing/promotions/subscriptions.vue +121 -0
  94. package/app/components/marketing/update-incentive.vue +326 -0
  95. package/app/components/menus/lowernav.vue +78 -0
  96. package/app/components/partials/LocaleSelector.vue +24 -0
  97. package/app/components/partials/ShoppingCart.vue +128 -0
  98. package/app/components/partials/StripePayment.vue +149 -0
  99. package/app/components/partials/addToCartBtn.vue +40 -0
  100. package/app/components/partials/cartItem.vue +124 -0
  101. package/app/components/partials/checkoutButton.vue +44 -0
  102. package/app/components/partials/compareBtn.vue +68 -0
  103. package/app/components/partials/ratings.vue +13 -0
  104. package/app/components/partials/store/CurrencySelector.vue +133 -0
  105. package/app/components/partials/store/StoreSwitcher.vue +13 -0
  106. package/app/components/placeholders/Comments.vue +15 -0
  107. package/app/components/placeholders/CreateListBtn.vue +7 -0
  108. package/app/components/placeholders/Event.vue +9 -0
  109. package/app/components/placeholders/ListShowcases.vue +9 -0
  110. package/app/components/placeholders/Short.vue +9 -0
  111. package/app/components/placeholders/Space.vue +9 -0
  112. package/app/components/placeholders/Tag.vue +7 -0
  113. package/app/components/related/brandCard.vue +41 -0
  114. package/app/components/related/incentiveCard.vue +44 -0
  115. package/app/components/related/invoiceCard.vue +43 -0
  116. package/app/components/related/orderCard.vue +43 -0
  117. package/app/components/related/relatedproducts.vue +17 -0
  118. package/app/components/sales/CartPageContent/CartPageContent.vue +37 -0
  119. package/app/components/sales/CheckoutAddress/CheckoutAddress.vue +50 -0
  120. package/app/components/sales/CheckoutAddress/__tests__/CheckoutAddress.spec.ts +16 -0
  121. package/app/components/sales/CheckoutAddress/types.ts +16 -0
  122. package/app/components/sales/CheckoutPayment/CheckoutPayment.vue +68 -0
  123. package/app/components/sales/CheckoutPayment/__tests__/CheckoutPayment.spec.ts +14 -0
  124. package/app/components/sales/CheckoutPayment/types.ts +12 -0
  125. package/app/components/sales/OrderSummary/OrderSummary.vue +57 -0
  126. package/app/components/sales/OrderSummary/__tests__/ContactInformation.spec.ts +52 -0
  127. package/app/components/sales/OrderSummary/types.ts +5 -0
  128. package/app/components/sales/incentives.vue +223 -0
  129. package/app/components/sales/invoices.vue +107 -0
  130. package/app/components/sales/orders.vue +378 -0
  131. package/app/components/sales/shipments.vue +65 -0
  132. package/app/components/sales/transactions.vue +109 -0
  133. package/app/components/shop/add-shop.vue +54 -0
  134. package/app/components/shop/cart/cartItem.vue +182 -0
  135. package/app/components/shop/cart/checkout.vue +415 -0
  136. package/app/components/shop/checkout/StripeCardElement.vue +206 -0
  137. package/app/components/shop/checkout/StripeCheckout.vue +49 -0
  138. package/app/components/shop/checkout/addressBilling.vue +263 -0
  139. package/app/components/shop/checkout/addressShipping.vue +175 -0
  140. package/app/components/shop/checkout/cart/ProductItem.vue +56 -0
  141. package/app/components/shop/checkout/cart/PromotionItem.vue +53 -0
  142. package/app/composables/_types.ts +18 -0
  143. package/app/composables/adapters/abstract/cartAdapter.ts +0 -0
  144. package/app/composables/adapters/abstract/categoryAdapter.ts +0 -0
  145. package/app/composables/adapters/abstract/customerAdapter.ts +0 -0
  146. package/app/composables/adapters/abstract/inventoryAdapter.ts +0 -0
  147. package/app/composables/adapters/abstract/orderAdapter.ts +0 -0
  148. package/app/composables/adapters/abstract/productAdapter.ts +7 -0
  149. package/app/composables/cart/registry.ts +20 -0
  150. package/app/composables/cart/types.ts +18 -0
  151. package/app/composables/cart/useCart.ts +15 -0
  152. package/app/composables/config.ts +19 -0
  153. package/app/composables/defs/apiDefinitions.ts +55 -0
  154. package/app/composables/defs/extension.feature +40 -0
  155. package/app/composables/defs/extension.mocks.ts +39 -0
  156. package/app/composables/defs/extension.test.ts +280 -0
  157. package/app/composables/defs/extension.ts +236 -0
  158. package/app/composables/defs/index.ts +3 -0
  159. package/app/composables/defs/types.ts +136 -0
  160. package/app/composables/domain/cart.ts +0 -0
  161. package/app/composables/domain/category.ts +0 -0
  162. package/app/composables/domain/order.ts +0 -0
  163. package/app/composables/domain/price.ts +0 -0
  164. package/app/composables/domain/product.ts +8 -0
  165. package/app/composables/domain/reward.ts +0 -0
  166. package/app/composables/domain/transactions.ts +0 -0
  167. package/app/composables/helpers/contextualizedNormalizers.feature +14 -0
  168. package/app/composables/helpers/contextualizedNormalizers.test.ts +85 -0
  169. package/app/composables/helpers/contextualizedNormalizers.ts +20 -0
  170. package/app/composables/helpers/index.ts +1 -0
  171. package/app/composables/index.ts +6 -0
  172. package/app/composables/methods/auth.ts +83 -0
  173. package/app/composables/methods/cart.ts +119 -0
  174. package/app/composables/methods/category.ts +27 -0
  175. package/app/composables/methods/checkout.ts +54 -0
  176. package/app/composables/methods/customer.ts +52 -0
  177. package/app/composables/methods/helpers.ts +5 -0
  178. package/app/composables/methods/index.ts +75 -0
  179. package/app/composables/methods/order.ts +39 -0
  180. package/app/composables/methods/product.ts +95 -0
  181. package/app/composables/methods/settings.ts +16 -0
  182. package/app/composables/models/cart.ts +95 -0
  183. package/app/composables/models/category.ts +13 -0
  184. package/app/composables/models/checkout.ts +17 -0
  185. package/app/composables/models/customer.ts +16 -0
  186. package/app/composables/models/facets.ts +25 -0
  187. package/app/composables/models/index.ts +94 -0
  188. package/app/composables/models/order.ts +43 -0
  189. package/app/composables/models/product.ts +73 -0
  190. package/app/composables/models/shared.ts +75 -0
  191. package/app/composables/products/registry.ts +20 -0
  192. package/app/composables/products/types.ts +13 -0
  193. package/app/composables/products/useEvents.ts +0 -0
  194. package/app/composables/products/useGiftCards.ts +0 -0
  195. package/app/composables/products/useProducts.ts +12 -0
  196. package/app/composables/products/useSubscriptions.ts +0 -0
  197. package/app/composables/registry.ts +21 -0
  198. package/app/composables/stores/cart.ts +218 -0
  199. package/app/composables/stores/cartStore.ts +300 -0
  200. package/app/composables/stores/checkout.ts +19 -0
  201. package/app/composables/stores/compare.ts +65 -0
  202. package/app/composables/stores/currency.js +29 -0
  203. package/app/composables/stores/digital-products.js +11 -0
  204. package/app/composables/stores/index.js +0 -0
  205. package/app/composables/stores/orders.ts +161 -0
  206. package/app/composables/stores/product.ts +26 -0
  207. package/app/composables/stores/productList.ts +0 -0
  208. package/app/composables/stores/productListInfo.ts +0 -0
  209. package/app/composables/stores/products.ts +112 -0
  210. package/app/composables/stores/recentlyViewedProducts.ts +0 -0
  211. package/app/composables/stores/review.ts +25 -0
  212. package/app/composables/stores/storeInPickUp.ts +22 -0
  213. package/app/composables/stores/user.ts +20 -0
  214. package/app/composables/stores/wishlist.ts +19 -0
  215. package/app/composables/types/Order.type.ts +181 -0
  216. package/app/composables/types/index.ts +285 -0
  217. package/app/composables/types/product.ts +14 -0
  218. package/app/composables/useBreakpoints/index.ts +1 -0
  219. package/app/composables/useBreakpoints/useBreakpoints.ts +28 -0
  220. package/app/composables/useCart/__tests__/useCart.spec.ts +11 -0
  221. package/app/composables/useCart/index.ts +1 -0
  222. package/app/composables/useCart/types.ts +17 -0
  223. package/app/composables/useCart/useCart.ts +46 -0
  224. package/app/composables/useCartShippingMethods/__tests__/useCartShippingMethods.spec.ts +11 -0
  225. package/app/composables/useCartShippingMethods/index.ts +1 -0
  226. package/app/composables/useCartShippingMethods/types.ts +17 -0
  227. package/app/composables/useCartShippingMethods/useCartShippingMethods.ts +47 -0
  228. package/app/composables/useCatalog.ts +64 -0
  229. package/app/composables/useContent/index.ts +1 -0
  230. package/app/composables/useContent/types.ts +44 -0
  231. package/app/composables/useContent/useContent.ts +45 -0
  232. package/app/composables/useContent.ts +57 -0
  233. package/app/composables/useCustomer/__tests__/useCustomer.spec.ts +25 -0
  234. package/app/composables/useCustomer/index.ts +2 -0
  235. package/app/composables/useCustomer/types.ts +17 -0
  236. package/app/composables/useCustomer/useCustomer.ts +40 -0
  237. package/app/composables/useCustomerAddress/__tests__/useCustomerAddress.spec.ts +11 -0
  238. package/app/composables/useCustomerAddress/index.ts +2 -0
  239. package/app/composables/useCustomerAddress/types.ts +17 -0
  240. package/app/composables/useCustomerAddress/useCustomerAddress.ts +55 -0
  241. package/app/composables/useCustomerOrder/__tests__/useCustomerOrder.spec.ts +11 -0
  242. package/app/composables/useCustomerOrder/adress.ts +10 -0
  243. package/app/composables/useCustomerOrder/index.ts +2 -0
  244. package/app/composables/useCustomerOrder/product.ts +37 -0
  245. package/app/composables/useCustomerOrder/types.ts +40 -0
  246. package/app/composables/useCustomerOrder/useCustomerOrder.ts +63 -0
  247. package/app/composables/useCustomerOrders/__tests__/useCustomerOrders.spec.ts +11 -0
  248. package/app/composables/useCustomerOrders/index.ts +2 -0
  249. package/app/composables/useCustomerOrders/types.ts +20 -0
  250. package/app/composables/useCustomerOrders/useCustomerOrders.ts +56 -0
  251. package/app/composables/useCustomerReturns/__tests__/useCustomerReturns.spec.ts +11 -0
  252. package/app/composables/useCustomerReturns/index.ts +2 -0
  253. package/app/composables/useCustomerReturns/types.ts +17 -0
  254. package/app/composables/useCustomerReturns/useCustomerReturns.ts +41 -0
  255. package/app/composables/useHandleError/index.ts +1 -0
  256. package/app/composables/useHandleError/types.ts +11 -0
  257. package/app/composables/useHandleError/useHandleError.ts +27 -0
  258. package/app/composables/usePageTitle.ts +16 -0
  259. package/app/composables/useProduct/index.ts +2 -0
  260. package/app/composables/useProduct/types.ts +17 -0
  261. package/app/composables/useProduct/useProduct.ts +42 -0
  262. package/app/composables/useProductAttribute/__tests__/useProduct.mock.ts +31 -0
  263. package/app/composables/useProductAttribute/__tests__/useProductAttribute.spec.ts +14 -0
  264. package/app/composables/useProductAttribute/index.ts +1 -0
  265. package/app/composables/useProductAttribute/useProductAttribute.ts +37 -0
  266. package/app/composables/useProductRecommended/__tests__/useProductRecommended.spec.ts +12 -0
  267. package/app/composables/useProductRecommended/index.ts +1 -0
  268. package/app/composables/useProductRecommended/types.ts +17 -0
  269. package/app/composables/useProductRecommended/useProductRecommended.ts +43 -0
  270. package/app/composables/useProductReviews/__tests__/productReviews.mock.ts +20 -0
  271. package/app/composables/useProductReviews/__tests__/useProductReviews.spec.ts +22 -0
  272. package/app/composables/useProductReviews/index.ts +2 -0
  273. package/app/composables/useProductReviews/types.ts +17 -0
  274. package/app/composables/useProductReviews/useProductReviews.ts +46 -0
  275. package/app/composables/useProducts/__tests__/useProducts.spec.ts +11 -0
  276. package/app/composables/useProducts/types.ts +22 -0
  277. package/app/composables/useProducts/useProducts.ts +41 -0
  278. package/app/composables/utils/countryList.ts +14 -0
  279. package/app/composables/utils/currency.js +56 -0
  280. package/app/composables/utils/glossary.ts +0 -0
  281. package/app/composables/utils/importExport.ts +0 -0
  282. package/app/composables/utils/index.js +0 -0
  283. package/app/composables/utils/print.ts +0 -0
  284. package/app/composables/utils/shopThemes.ts +0 -0
  285. package/app/composables/utils/statistics.ts +0 -0
  286. package/app/composables/utils/stock.ts +0 -0
  287. package/app/composables/utils/stripe.ts +16 -0
  288. package/app/composables/utils/taxation.ts +0 -0
  289. package/app/composables/utils/tellFriends.ts +0 -0
  290. package/app/composables/validationRules/index.ts +1 -0
  291. package/app/composables/validationRules/password.feature +67 -0
  292. package/app/composables/validationRules/password.test.ts +89 -0
  293. package/app/composables/validationRules/password.ts +25 -0
  294. package/app/composables/vendors/index.ts +0 -0
  295. package/app/composables/vendors/registry.ts +0 -0
  296. package/app/composables/vendors/useAffiliates.ts +0 -0
  297. package/app/composables/vendors/useCommission.ts +0 -0
  298. package/app/modules/vue-head/composables/useHead.ts +3 -0
  299. package/app/pages/brand/[...slug].vue +92 -0
  300. package/app/pages/brands.vue +90 -0
  301. package/app/pages/cart.vue +142 -0
  302. package/app/pages/compare.vue +166 -0
  303. package/app/pages/departments/[...slug].vue +385 -0
  304. package/app/pages/departments/category/[...slug].vue +135 -0
  305. package/app/pages/incentive/[...id].vue +66 -0
  306. package/app/pages/invoice/[id].vue +309 -0
  307. package/app/pages/order/[id].vue +327 -0
  308. package/app/pages/product/[...id].vue +309 -0
  309. package/app/pages/product/showcases/index.vue +86 -0
  310. package/app/pages/shipment/[...id].vue +176 -0
  311. package/app/pages/shop/[...slug].vue +158 -0
  312. package/app/pages/shops.vue +76 -0
  313. package/app/pages/subscription/[...id].vue +147 -0
  314. package/app/pages/transaction/[...id].vue +74 -0
  315. package/app/types/shims-imports.d.ts +13 -0
  316. package/app/utils/client.ts +26 -0
  317. package/app/utils/index.ts +53 -0
  318. package/app/utils/normalizer.ts +23 -0
  319. package/app/utils/normalizers/magento.ts +29 -0
  320. package/app/utils/normalizers/shopify.ts +29 -0
  321. package/global.d.ts +149 -0
  322. package/index.js +3 -0
  323. package/package.json +3 -9
  324. package/tsconfig.json +31 -0
@@ -0,0 +1,112 @@
1
+ // stores/products.ts - Pinia store for product management
2
+ import type { Product } from '~/app/types'
3
+
4
+ export const useProductsStore = defineStore('products', () => {
5
+ const products = ref<Product[]>([])
6
+ const featuredProducts = ref<Product[]>([])
7
+ const currentProduct = ref<Product | null>(null)
8
+ const categories = ref([])
9
+ const loading = ref(false)
10
+ const error = ref<string | null>(null)
11
+
12
+ // Import product composables
13
+ const { getProducts, getProductById, getProductsByCategory, searchProducts } = useProducts()
14
+ const { getFeaturedProducts } = useFeaturedProducts()
15
+
16
+ const fetchProducts = async (options: any = {}) => {
17
+ loading.value = true
18
+ error.value = null
19
+ try {
20
+ products.value = await getProducts(options)
21
+ } catch (err: any) {
22
+ error.value = err.message
23
+ console.error('Error fetching products:', err)
24
+ } finally {
25
+ loading.value = false
26
+ }
27
+ }
28
+
29
+ const fetchProduct = async (id: string) => {
30
+ loading.value = true
31
+ error.value = null
32
+ try {
33
+ currentProduct.value = await getProductById(id)
34
+ } catch (err: any) {
35
+ error.value = err.message
36
+ console.error('Error fetching product:', err)
37
+ } finally {
38
+ loading.value = false
39
+ }
40
+ }
41
+
42
+ const fetchFeaturedProducts = async (options: any = {}) => {
43
+ loading.value = true
44
+ error.value = null
45
+ try {
46
+ featuredProducts.value = await getFeaturedProducts(options)
47
+ } catch (err: any) {
48
+ error.value = err.message
49
+ console.error('Error fetching featured products:', err)
50
+ } finally {
51
+ loading.value = false
52
+ }
53
+ }
54
+
55
+ const fetchProductsByCategory = async (categoryId: string, options: any = {}) => {
56
+ loading.value = true
57
+ error.value = null
58
+ try {
59
+ products.value = await getProductsByCategory(categoryId, options)
60
+ } catch (err: any) {
61
+ error.value = err.message
62
+ console.error('Error fetching products by category:', err)
63
+ } finally {
64
+ loading.value = false
65
+ }
66
+ }
67
+
68
+ const searchForProducts = async (query: string, options: any = {}) => {
69
+ loading.value = true
70
+ error.value = null
71
+ try {
72
+ products.value = await searchProducts(query, options)
73
+ } catch (err: any) {
74
+ error.value = err.message
75
+ console.error('Error searching products:', err)
76
+ } finally {
77
+ loading.value = false
78
+ }
79
+ }
80
+
81
+ // Computed properties
82
+ const productsOnSale = computed(() => {
83
+ return products.value.filter(product =>
84
+ product.sale_price && product.sale_price < product.price
85
+ )
86
+ })
87
+
88
+ const productCount = computed(() => {
89
+ return products.value.length
90
+ })
91
+
92
+ return {
93
+ // State
94
+ products: readonly(products),
95
+ featuredProducts: readonly(featuredProducts),
96
+ currentProduct: readonly(currentProduct),
97
+ categories: readonly(categories),
98
+ loading: readonly(loading),
99
+ error: readonly(error),
100
+
101
+ // Computed
102
+ productsOnSale,
103
+ productCount,
104
+
105
+ // Actions
106
+ fetchProducts,
107
+ fetchProduct,
108
+ fetchFeaturedProducts,
109
+ fetchProductsByCategory,
110
+ searchForProducts
111
+ }
112
+ })
@@ -0,0 +1,25 @@
1
+ import { defineStore } from 'pinia';
2
+ import type { Review, ReviewState } from '@/types/review';
3
+
4
+ export const useReviewStore = defineStore('review', {
5
+ state: (): ReviewState => ({
6
+ reviews: [],
7
+ isLoading: false
8
+ }),
9
+ actions: {
10
+ async fetchReviews(productId: string) {
11
+ this.isLoading = true;
12
+ try {
13
+ const response = await $fetch<Review[]>(`/api/reviews?productId=${productId}`);
14
+ this.reviews = response;
15
+ } catch (error) {
16
+ console.error('Error fetching reviews:', error);
17
+ } finally {
18
+ this.isLoading = false;
19
+ }
20
+ },
21
+ addReview(review: Review) {
22
+ this.reviews.push(review);
23
+ }
24
+ }
25
+ });
@@ -0,0 +1,22 @@
1
+ import { defineStore } from 'pinia';
2
+ import type { StorePickupState } from '@/types/storeInPickUp';
3
+
4
+ export const useStoreInPickupStore = defineStore('storeInPickUp', {
5
+ state: (): StorePickupState => ({
6
+ selectedStoreId: null,
7
+ stores: []
8
+ }),
9
+ actions: {
10
+ setSelectedStore(storeId: string) {
11
+ this.selectedStoreId = storeId;
12
+ },
13
+ async fetchStores() {
14
+ try {
15
+ const response = await $fetch('/api/stores');
16
+ this.stores = response;
17
+ } catch (error) {
18
+ console.error('Error fetching stores:', error);
19
+ }
20
+ }
21
+ }
22
+ });
@@ -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,19 @@
1
+ import { defineStore } from 'pinia';
2
+ import type { WishlistState } from '@/types/wishlist';
3
+
4
+ export const useWishlistStore = defineStore('wishlist', {
5
+ state: (): WishlistState => ({
6
+ items: [],
7
+ isLoading: false
8
+ }),
9
+ actions: {
10
+ addToWishlist(productId: string) {
11
+ if (!this.items.includes(productId)) {
12
+ this.items.push(productId);
13
+ }
14
+ },
15
+ removeFromWishlist(productId: string) {
16
+ this.items = this.items.filter(id => id !== productId);
17
+ }
18
+ }
19
+ });
@@ -0,0 +1,181 @@
1
+ // Order-specific types for the commerce layer
2
+ export interface Order {
3
+ id: string
4
+ order_number: string
5
+ customer_id: string
6
+ company_id?: string
7
+ status: OrderStatusType
8
+ order_type?: 'standard' | 'purchase_order' | 'subscription'
9
+
10
+ // Financial details
11
+ subtotal: number
12
+ tax_amount: number
13
+ shipping_amount: number
14
+ discount_amount: number
15
+ total: number
16
+ currency: string
17
+
18
+ // Customer information
19
+ customer_name: string
20
+ customer_email: string
21
+ customer_phone?: string
22
+
23
+ // Order items
24
+ order_items: OrderItem[]
25
+
26
+ // Addresses
27
+ shipping_address?: Address
28
+ billing_address?: Address
29
+
30
+ // Coupon/discount information
31
+ coupon_code?: string
32
+ coupon_id?: string
33
+ reward_points_used?: number
34
+ reward_discount_amount?: number
35
+
36
+ // Purchase order details (B2B)
37
+ po_number?: string
38
+ po_reference?: string
39
+
40
+ // Timestamps
41
+ created_at: string
42
+ updated_at: string
43
+ shipped_at?: string
44
+ delivered_at?: string
45
+ cancelled_at?: string
46
+ }
47
+
48
+ export interface OrderItem {
49
+ id: string
50
+ order_id: string
51
+ product_id: string
52
+ variant_id?: string
53
+ product_name: string
54
+ product_sku: string
55
+ quantity: number
56
+ price: number
57
+ total: number
58
+ product?: Product
59
+ variant?: ProductVariant
60
+ }
61
+
62
+ export interface Address {
63
+ id?: string
64
+ type?: 'shipping' | 'billing'
65
+ first_name: string
66
+ last_name: string
67
+ company?: string
68
+ street: string
69
+ street_2?: string
70
+ city: string
71
+ state: string
72
+ postal_code: string
73
+ country: string
74
+ phone?: string
75
+ }
76
+
77
+ export interface Product {
78
+ id: string
79
+ name: string
80
+ sku: string
81
+ price: number
82
+ sale_price?: number
83
+ description?: string
84
+ images?: ProductImage[]
85
+ inventory?: ProductInventory
86
+ }
87
+
88
+ export interface ProductVariant {
89
+ id: string
90
+ product_id: string
91
+ name: string
92
+ sku: string
93
+ price: number
94
+ attributes: Record<string, any>
95
+ }
96
+
97
+ export interface ProductImage {
98
+ id: string
99
+ url: string
100
+ alt_text?: string
101
+ sort_order?: number
102
+ }
103
+
104
+ export interface ProductInventory {
105
+ id: string
106
+ product_id: string
107
+ quantity: number
108
+ reserved_quantity?: number
109
+ available_quantity?: number
110
+ }
111
+
112
+ export type OrderStatusType =
113
+ | 'draft'
114
+ | 'pending'
115
+ | 'processing'
116
+ | 'shipped'
117
+ | 'delivered'
118
+ | 'cancelled'
119
+ | 'refunded'
120
+ | 'on_hold'
121
+
122
+ export interface OrderStatus {
123
+ status: 'success' | 'error' | 'partial'
124
+ message?: string
125
+ quantityAvailable?: number
126
+ }
127
+
128
+ export interface OrderMutationResult {
129
+ status: 'success' | 'error' | 'partial'
130
+ message?: string
131
+ order?: Order
132
+ quantityAvailable?: number
133
+ }
134
+
135
+ // Legacy types for backward compatibility
136
+ export interface ActiveOrder extends Order {}
137
+
138
+ // Order creation/update payloads
139
+ export interface CreateOrderPayload {
140
+ customer_id?: string
141
+ company_id?: string
142
+ order_type?: 'standard' | 'purchase_order' | 'subscription'
143
+ shipping_address?: Partial<Address>
144
+ billing_address?: Partial<Address>
145
+ po_number?: string
146
+ notes?: string
147
+ }
148
+
149
+ export interface UpdateOrderPayload {
150
+ status?: OrderStatusType
151
+ shipping_address?: Partial<Address>
152
+ billing_address?: Partial<Address>
153
+ notes?: string
154
+ tracking_number?: string
155
+ }
156
+
157
+ // Order filters for queries
158
+ export interface OrderFilters {
159
+ status?: OrderStatusType | OrderStatusType[]
160
+ customer_id?: string
161
+ company_id?: string
162
+ order_type?: string
163
+ date_from?: string
164
+ date_to?: string
165
+ search?: string
166
+ limit?: number
167
+ page?: number
168
+ }
169
+
170
+ // Order statistics
171
+ export interface OrderStats {
172
+ total_orders: number
173
+ total_revenue: number
174
+ average_order_value: number
175
+ orders_by_status: Record<OrderStatusType, number>
176
+ revenue_by_period: Array<{
177
+ period: string
178
+ revenue: number
179
+ orders: number
180
+ }>
181
+ }
@@ -0,0 +1,285 @@
1
+ // types/index.ts - Main type definitions for commerce layer
2
+
3
+ // Re-export Order types
4
+ export * from './Order.type'
5
+ export type Money = string | number;
6
+
7
+ export interface VariationNode {
8
+ databaseId: number;
9
+ salePrice: Money;
10
+ regularPrice: Money;
11
+ stockQuantity?: number;
12
+ image?: { sourceUrl: string };
13
+ }
14
+
15
+ export interface Variation {
16
+ node: VariationNode;
17
+ attributes: Array<{ value: string }>;
18
+ }
19
+
20
+ export interface ProductNode {
21
+ sku: string;
22
+ slug: string;
23
+ name: string;
24
+ }
25
+
26
+ export interface Product {
27
+ id: string;
28
+ sku?: string;
29
+ slug?: string;
30
+ name?: string;
31
+ description?: string;
32
+ images?: Array<{ sourceUrl?: string }>;
33
+ price?: number;
34
+ regularPrice?: number;
35
+ salePrice?: number;
36
+ attributes?: Array<{ name: string; value: string }>;
37
+ variations?: ProductVariant[];
38
+ }
39
+
40
+ export interface ProductVariant {
41
+ id: string;
42
+ sku?: string;
43
+ price?: number;
44
+ regularPrice?: number;
45
+ salePrice?: number;
46
+ stockQuantity?: number;
47
+ image?: { sourceUrl?: string };
48
+ attributes?: Array<{ name: string; value: string }>;
49
+ }
50
+
51
+ export interface CartItemNode {
52
+ key: string;
53
+ quantity: number;
54
+ product: { node: ProductNode };
55
+ variation: Variation;
56
+ }
57
+
58
+ export interface AddToCartResponse {
59
+ addToCart: { cartItem: CartItemNode };
60
+ }
61
+
62
+ export type AddBtnStatus = 'add' | 'loading' | 'added';
63
+
64
+ export type RemoveBtnStatus = 'remove' | 'loading';
65
+
66
+ // Customer types
67
+ export interface Customer {
68
+ id: string
69
+ first_name: string
70
+ last_name: string
71
+ email: string
72
+ phone?: string
73
+ date_of_birth?: string
74
+ preferred_currency?: string
75
+ company_id?: string
76
+ created_at: string
77
+ updated_at: string
78
+ }
79
+
80
+ // Company types (B2B)
81
+ export interface Company {
82
+ id: string
83
+ name: string
84
+ email: string
85
+ phone?: string
86
+ tax_id?: string
87
+ industry?: string
88
+ owner_id: string
89
+ status: 'active' | 'inactive' | 'pending'
90
+ created_at: string
91
+ updated_at: string
92
+ }
93
+
94
+ // Return types
95
+ export interface Refund {
96
+ id: string
97
+ refund_number?: string
98
+ order_id?: string
99
+ return_id?: string
100
+ transaction_id?: string
101
+ amount: number
102
+ currency: string
103
+ reason?: string
104
+ status: 'pending' | 'processed' | 'refunded' | 'failed' | 'cancelled'
105
+ metadata?: Record<string, any>
106
+ created_at: string
107
+ updated_at: string
108
+ }
109
+
110
+ export interface Return {
111
+ id: string
112
+ return_number: string
113
+ order_id: string
114
+ customer_id: string
115
+ status: 'requested' | 'approved' | 'rejected' | 'processed' | 'refunded'
116
+ reason: string
117
+ description?: string
118
+ return_items: ReturnItem[]
119
+ refunds?: Refund[]
120
+ created_at: string
121
+ updated_at: string
122
+ }
123
+
124
+ export interface ReturnItem {
125
+ id: string
126
+ return_id: string
127
+ order_item_id: string
128
+ product_id: string
129
+ quantity: number
130
+ reason: string
131
+ condition?: 'new' | 'used' | 'damaged'
132
+ }
133
+
134
+ // Transaction types
135
+ export interface Transaction {
136
+ id: string
137
+ transaction_id: string
138
+ order_id?: string
139
+ customer_id?: string
140
+ type: 'payment' | 'refund' | 'authorization' | 'capture'
141
+ amount: number
142
+ currency: string
143
+ status: 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled'
144
+ payment_method: string
145
+ gateway_response?: Record<string, any>
146
+ created_at: string
147
+ updated_at: string
148
+ }
149
+
150
+ // Invoice types
151
+ export interface Invoice {
152
+ id: string
153
+ invoice_number: string
154
+ order_id: string
155
+ customer_id: string
156
+ amount: number
157
+ tax_amount: number
158
+ currency: string
159
+ due_date: string
160
+ status: 'draft' | 'sent' | 'paid' | 'overdue' | 'cancelled'
161
+ invoice_items: InvoiceItem[]
162
+ payments?: Payment[]
163
+ created_at: string
164
+ updated_at: string
165
+ }
166
+
167
+ export interface InvoiceItem {
168
+ id: string
169
+ invoice_id: string
170
+ product_id: string
171
+ description: string
172
+ quantity: number
173
+ unit_price: number
174
+ total: number
175
+ }
176
+
177
+ export interface Payment {
178
+ id: string
179
+ payment_number?: string
180
+ invoice_id?: string
181
+ order_id?: string
182
+ customer_id?: string
183
+ amount: number
184
+ currency: string
185
+ method: string
186
+ transaction_id?: string
187
+ status: 'pending' | 'completed' | 'failed' | 'refunded' | 'cancelled'
188
+ gateway_response?: Record<string, any>
189
+ created_at: string
190
+ updated_at: string
191
+ }
192
+
193
+ // Credit Memo types
194
+ export interface CreditMemo {
195
+ id: string
196
+ memo_number: string
197
+ order_id: string
198
+ return_id?: string
199
+ customer_id: string
200
+ amount: number
201
+ currency: string
202
+ reason: string
203
+ status: 'pending' | 'approved' | 'processed' | 'refunded' | 'cancelled'
204
+ memo_items: CreditMemoItem[]
205
+ created_at: string
206
+ updated_at: string
207
+ }
208
+
209
+ export interface CreditMemoItem {
210
+ id: string
211
+ memo_id: string
212
+ product_id: string
213
+ description: string
214
+ quantity: number
215
+ unit_price: number
216
+ total: number
217
+ }
218
+
219
+ // Cart types
220
+ export interface Cart {
221
+ id: string
222
+ customer_id?: string
223
+ session_id?: string
224
+ items: CartItem[]
225
+ subtotal: number
226
+ tax_amount: number
227
+ shipping_amount: number
228
+ discount_amount: number
229
+ total: number
230
+ currency: string
231
+ coupon_code?: string
232
+ created_at: string
233
+ updated_at: string
234
+ }
235
+
236
+ export interface CartItem {
237
+ id: string
238
+ cart_id: string
239
+ product_id: string
240
+ variant_id?: string
241
+ quantity: number
242
+ price: number
243
+ total: number
244
+ product?: Product
245
+ variant?: ProductVariant
246
+ }
247
+
248
+ // Coupon types
249
+ export interface Coupon {
250
+ id: string
251
+ code: string
252
+ name: string
253
+ description?: string
254
+ discount_type: 'percentage' | 'fixed_amount'
255
+ discount_value: number
256
+ minimum_amount?: number
257
+ maximum_discount?: number
258
+ usage_limit?: number
259
+ usage_count: number
260
+ usage_limit_per_customer?: number
261
+ valid_from?: string
262
+ valid_until?: string
263
+ status: 'active' | 'inactive' | 'expired'
264
+ created_at: string
265
+ }
266
+
267
+ // Common utility types
268
+ export interface PaginationMeta {
269
+ current_page: number
270
+ per_page: number
271
+ total: number
272
+ total_pages: number
273
+ }
274
+
275
+ export interface ApiResponse<T> {
276
+ data: T
277
+ meta?: PaginationMeta
278
+ message?: string
279
+ }
280
+
281
+ export interface ApiError {
282
+ message: string
283
+ code?: string
284
+ details?: Record<string, any>
285
+ }
@@ -0,0 +1,14 @@
1
+ export interface Product {
2
+ id: string;
3
+ name: string;
4
+ price: number;
5
+ image?: string;
6
+ description?: string;
7
+ sku: string;
8
+ }
9
+
10
+ export interface ProductState {
11
+ products: Product[];
12
+ selectedProduct?: Product | null;
13
+ isLoading: boolean;
14
+ }
@@ -0,0 +1 @@
1
+ export * from './useBreakpoints';
@@ -0,0 +1,28 @@
1
+ import { ref, onMounted } from 'vue';
2
+ import { createSharedComposable, syncRefs, useBreakpoints as useBreakpointsVueUse } from '@vueuse/core';
3
+
4
+ /**
5
+ * @description Composable that prepares breakpoints-dependent refs
6
+ * @returns {@link ReturnType<typeof useBreakpoints>}
7
+ * @example
8
+ * const { isTablet, isDesktop } = useBreakpoints();
9
+ */
10
+ export const useBreakpoints = createSharedComposable(() => {
11
+ const breakpoints = useBreakpointsVueUse({
12
+ tablet: '768px',
13
+ desktop: '1024px',
14
+ });
15
+
16
+ const isTablet = ref(true);
17
+ const isDesktop = ref(false);
18
+
19
+ onMounted(() => {
20
+ syncRefs(breakpoints.greaterOrEqual('tablet'), isTablet);
21
+ syncRefs(breakpoints.greaterOrEqual('desktop'), isDesktop);
22
+ });
23
+
24
+ return {
25
+ isTablet,
26
+ isDesktop,
27
+ };
28
+ });