@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,99 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
3
+ /**
4
+ * M Framework - Flexible backend agnostic framework.
5
+ *
6
+ * Copyright © Meeovi, LTD. All rights reserved.
7
+ * See LICENSE for license details.
8
+ *
9
+ * @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
10
+ * @package mframework/mframework
11
+ * @link https://github.com/meeovi/mframework
12
+ */
13
+
14
+ export type CacheMap = {
15
+ cache: Record<string, any>;
16
+ };
17
+
18
+ /**
19
+ * Prefetches images
20
+ * @param urls
21
+ * @returns {Promise<void>}
22
+ * @namespace ../../utils/Cache/cacheImages
23
+ */
24
+ export const cacheImages = (urls: string[]): void => {
25
+ if (!Array.isArray(urls) || urls.length === 0) {
26
+ return;
27
+ }
28
+
29
+ // Prefetched images require persistent variable
30
+ // to prevent browser from creating repeated requests
31
+ if (!window.prefetchedImages) {
32
+ window.prefetchedImages = {};
33
+ }
34
+
35
+ const filteredUrls = urls.filter((url) => !window.prefetchedImages[url]);
36
+
37
+ filteredUrls.forEach((url) => {
38
+ const img = new Image();
39
+
40
+ img.src = url;
41
+ window.prefetchedImages[url] = img;
42
+ });
43
+ };
44
+
45
+ /**
46
+ * Returns result from global cache for fn
47
+ * @param {function} fn
48
+ * @param {array} args
49
+ * @returns function response
50
+ * @namespace ../../utils/Cache/fromCache
51
+ */
52
+ export const fromCache = (fn: any, args: any): any => {
53
+ // Checks if cache is defined
54
+ if ((fromCache as unknown as CacheMap).cache === undefined) {
55
+ (fromCache as unknown as CacheMap).cache = {};
56
+ }
57
+
58
+ // Checks if function is registered into cache
59
+ const { name } = fn;
60
+
61
+ if ((fromCache as unknown as CacheMap).cache[name] === undefined) {
62
+ (fromCache as unknown as CacheMap).cache[name] = {};
63
+ }
64
+
65
+ // Generates key from args
66
+ const key = JSON.stringify(args);
67
+
68
+ // Finds response
69
+ const { cache, cache: { [name]: { [key]: cachedResponse } = {} } = {} } = (fromCache as unknown as CacheMap);
70
+
71
+ // If already cached then returns cache value
72
+ if (cachedResponse) {
73
+ return cachedResponse;
74
+ }
75
+
76
+ // If not get response, caches it and return value
77
+ const response = fn(...args);
78
+
79
+ cache[name][key] = response;
80
+
81
+ return response;
82
+ };
83
+
84
+ /**
85
+ * Clears functions cache from global cache register
86
+ * @param {function} fn
87
+ * @namespace ../../utils/Cache/clearCacheFor
88
+ */
89
+ export const clearCacheFor = (fn: any): void => {
90
+ if ((fromCache as unknown as CacheMap).cache === undefined) {
91
+ return;
92
+ }
93
+
94
+ const { name } = fn;
95
+
96
+ (fromCache as unknown as CacheMap).cache[name] = {};
97
+ };
98
+
99
+ export default fromCache;
@@ -0,0 +1,300 @@
1
+ /**
2
+ * M Framework - Flexible backend agnostic framework.
3
+ *
4
+ * Copyright © Meeovi, LTD. All rights reserved.
5
+ * See LICENSE for license details.
6
+ *
7
+ * @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
8
+ * @package mframework/mframework
9
+ * @link https://github.com/meeovi/mframework
10
+ */
11
+
12
+ import { ShippingMethod } from '../../normalizers/Checkout.type';
13
+ import { IndexedCartItem } from '../../stores/Cart/Cart.type';
14
+ import { RootState } from '../../utils/Store/Store.type';
15
+
16
+ import {
17
+ CartItemPriceProps,
18
+ DisplayCartTaxInPrice,
19
+ DisplayCartTaxInShipping,
20
+ DisplayCartTaxInSubTotal,
21
+ DisplayShippingPrices,
22
+ } from './Cart.type';
23
+
24
+ /** @namespace ../../utils/Cart/getCartSubtotal */
25
+ export const getCartSubtotal = (state: RootState): number => {
26
+ const {
27
+ ConfigReducer: {
28
+ cartDisplayConfig: {
29
+ display_tax_in_subtotal = '',
30
+ } = {},
31
+ } = {},
32
+ CartReducer: {
33
+ cartTotals: {
34
+ prices: {
35
+ subtotal_excluding_tax: {
36
+ value: subtotal = 0,
37
+ } = {},
38
+ subtotal_including_tax: {
39
+ value: subtotal_incl_tax = 0,
40
+ } = {},
41
+ } = {},
42
+ } = {},
43
+ } = {},
44
+ } = state;
45
+
46
+ if (display_tax_in_subtotal === DisplayCartTaxInSubTotal.EXCL_TAX) {
47
+ return subtotal;
48
+ }
49
+
50
+ return subtotal_incl_tax;
51
+ };
52
+
53
+ /** @namespace ../../utils/Cart/getCartSubtotalSubPrice */
54
+ export const getCartSubtotalSubPrice = (state: RootState): number | null => {
55
+ const {
56
+ ConfigReducer: {
57
+ cartDisplayConfig: {
58
+ display_tax_in_subtotal = '',
59
+ } = {},
60
+ } = {},
61
+ CartReducer: {
62
+ cartTotals: {
63
+ prices: {
64
+ subtotal_excluding_tax: {
65
+ value: subtotal = 0,
66
+ } = {},
67
+ } = {},
68
+ } = {},
69
+ } = {},
70
+ } = state;
71
+
72
+ if (display_tax_in_subtotal === DisplayCartTaxInSubTotal.BOTH) {
73
+ return subtotal;
74
+ }
75
+
76
+ return null;
77
+ };
78
+
79
+ /** @namespace ../../utils/Cart/getCartItemPrice */
80
+ export const getCartItemPrice = (state: RootState) => (props: CartItemPriceProps): number => {
81
+ const {
82
+ ConfigReducer: {
83
+ cartDisplayConfig: {
84
+ display_tax_in_price = '',
85
+ } = {},
86
+ } = {},
87
+ } = state;
88
+
89
+ const {
90
+ row_total = 0,
91
+ row_total_incl_tax = 0,
92
+ } = props;
93
+
94
+ if (display_tax_in_price === DisplayCartTaxInPrice.EXCL_TAX) {
95
+ return row_total;
96
+ }
97
+
98
+ return row_total_incl_tax;
99
+ };
100
+
101
+ /** @namespace ../../utils/Cart/getCartItemSubPrice */
102
+ export const getCartItemSubPrice = (state: RootState) => (props: CartItemPriceProps): number | null => {
103
+ const {
104
+ ConfigReducer: {
105
+ cartDisplayConfig: {
106
+ display_tax_in_price = '',
107
+ } = {},
108
+ } = {},
109
+ } = state;
110
+
111
+ const {
112
+ row_total = 0,
113
+ } = props;
114
+
115
+ if (display_tax_in_price === DisplayCartTaxInPrice.BOTH) {
116
+ return row_total;
117
+ }
118
+
119
+ return null;
120
+ };
121
+
122
+ /** @namespace ../../utils/Cart/getCartShippingPrice */
123
+ export const getCartShippingPrice = (state: RootState): number => {
124
+ const {
125
+ ConfigReducer: {
126
+ cartDisplayConfig: {
127
+ display_tax_in_shipping_amount = '',
128
+ } = {},
129
+ } = {},
130
+ CartReducer: {
131
+ cartTotals: {
132
+ shipping_addresses: {
133
+ selected_shipping_method,
134
+ } = {},
135
+ } = {},
136
+ } = {},
137
+ } = state;
138
+
139
+ if (!selected_shipping_method) {
140
+ return 0;
141
+ }
142
+
143
+ const {
144
+ amount: {
145
+ value: shipping_amount = 0,
146
+ } = {},
147
+ amount_incl_tax: shipping_incl_tax = 0,
148
+ } = selected_shipping_method;
149
+
150
+ if (display_tax_in_shipping_amount === DisplayCartTaxInShipping.EXCL_TAX) {
151
+ return shipping_amount;
152
+ }
153
+
154
+ return shipping_incl_tax;
155
+ };
156
+
157
+ /** @namespace ../../utils/Cart/getCartShippingSubPrice */
158
+ export const getCartShippingSubPrice = (state: RootState): number | null => {
159
+ const {
160
+ ConfigReducer: {
161
+ cartDisplayConfig: {
162
+ display_tax_in_shipping_amount = '',
163
+ } = {},
164
+ } = {},
165
+ CartReducer: {
166
+ cartTotals: {
167
+ shipping_addresses: {
168
+ selected_shipping_method,
169
+ } = {},
170
+ } = {},
171
+ } = {},
172
+ } = state;
173
+
174
+ if (!selected_shipping_method) {
175
+ return null;
176
+ }
177
+
178
+ const {
179
+ amount: {
180
+ value: shipping_amount = 0,
181
+ } = {},
182
+ } = selected_shipping_method;
183
+
184
+ if (display_tax_in_shipping_amount === DisplayCartTaxInShipping.BOTH) {
185
+ return shipping_amount;
186
+ }
187
+
188
+ return null;
189
+ };
190
+
191
+ /** @namespace ../../utils/Cart/getCartShippingItemPrice */
192
+ export const getCartShippingItemPrice = (state: RootState) => (props: ShippingMethod): number => {
193
+ const {
194
+ ConfigReducer: {
195
+ priceTaxDisplay: {
196
+ shipping_price_display_type = '',
197
+ } = {},
198
+ } = {},
199
+ } = state;
200
+
201
+ const {
202
+ price_incl_tax = 0,
203
+ price_excl_tax = 0,
204
+ } = props;
205
+
206
+ if (shipping_price_display_type === DisplayShippingPrices.EXCL_TAX) {
207
+ return price_excl_tax;
208
+ }
209
+
210
+ return price_incl_tax;
211
+ };
212
+
213
+ /** @namespace ../../utils/Cart/getCartShippingItemSubPrice */
214
+ export const getCartShippingItemSubPrice = (state: RootState) => (props: ShippingMethod): number | null => {
215
+ const {
216
+ ConfigReducer: {
217
+ priceTaxDisplay: {
218
+ shipping_price_display_type = '',
219
+ } = {},
220
+ } = {},
221
+ } = state;
222
+
223
+ const {
224
+ price_excl_tax = 0,
225
+ } = props;
226
+
227
+ if (shipping_price_display_type === DisplayShippingPrices.BOTH) {
228
+ return price_excl_tax;
229
+ }
230
+
231
+ return null;
232
+ };
233
+
234
+ /** @namespace ../../utils/Cart/getCartTotalSubPrice */
235
+ export const getCartTotalSubPrice = (state: RootState): number | null => {
236
+ const {
237
+ ConfigReducer: {
238
+ cartDisplayConfig: {
239
+ include_tax_in_order_total = '',
240
+ } = {},
241
+ } = {},
242
+ CartReducer: {
243
+ cartTotals: {
244
+ prices: {
245
+ grand_total: {
246
+ value: grand_total = 0,
247
+ } = {},
248
+ applied_taxes = [],
249
+ } = {},
250
+ } = {},
251
+ } = {},
252
+ } = state;
253
+
254
+ if (include_tax_in_order_total) {
255
+ return applied_taxes.reduce((acc: number, { amount: { value: tax_amount = 0 } = {} }) => acc - tax_amount, grand_total);
256
+ }
257
+
258
+ return null;
259
+ };
260
+
261
+ /** @namespace ../../utils/Cart/getItemsCountLabel */
262
+ export const getItemsCountLabel = (items_qty: number): string => (
263
+ items_qty === 1
264
+ ? __('1 item')
265
+ : __('%s items', items_qty || 0)
266
+ );
267
+
268
+ /** @namespace ../../utils/Cart/getAllCartItemsSku */
269
+ export const getAllCartItemsSku = (
270
+ cartItems: IndexedCartItem[],
271
+ ): Array<{ sku: string }> => (cartItems ? cartItems.reduce<Array<{ sku: string }>>((acc, item) => {
272
+ acc.push({ sku: item.sku || '' });
273
+
274
+ return acc;
275
+ }, []) : []);
276
+
277
+ /** @namespace ../../utils/Cart/trimCrossSellDuplicateItems */
278
+ export const trimCrossSellDuplicateItems = (items: IndexedCartItem[]): IndexedCartItem[] => items.filter(
279
+ ({
280
+ sku: itemSku,
281
+ product: { variants: itemVariants, id: itemId },
282
+ }, index, array) => {
283
+ if (!index || !itemVariants?.length) {
284
+ return true;
285
+ }
286
+
287
+ const foundItem = array.find(({ product: { id: elementId } }) => elementId === itemId);
288
+
289
+ if (!foundItem) {
290
+ return false;
291
+ }
292
+
293
+ const {
294
+ sku: duplicateSku,
295
+ product: { id: duplicateId },
296
+ } = foundItem;
297
+
298
+ return (duplicateId === itemId && duplicateSku === itemSku);
299
+ },
300
+ );
@@ -0,0 +1,76 @@
1
+ /**
2
+ * M Framework - Flexible backend agnostic framework.
3
+ *
4
+ * Copyright © Meeovi, LTD. All rights reserved.
5
+ * See LICENSE for license details.
6
+ *
7
+ * @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
8
+ * @package mframework/mframework
9
+ * @link https://github.com/meeovi/mframework
10
+ */
11
+
12
+ import {
13
+ GQLCartDisplayConfig,
14
+ GQLConfigurableProduct,
15
+ GQLPriceTaxDisplay,
16
+ GQLQuoteData,
17
+ } from '../../types/Graphql.type';
18
+
19
+ // ! TODO move reducer types when we start work with redux!
20
+
21
+ export interface ConfigReducerState {
22
+ cartDisplayConfig: GQLCartDisplayConfig;
23
+ priceTaxDisplay: GQLPriceTaxDisplay;
24
+ }
25
+
26
+ export interface CartReducerState {
27
+ cartTotals: GQLQuoteData;
28
+ }
29
+
30
+ export interface CartState {
31
+ ConfigReducer: ConfigReducerState;
32
+ CartReducer: CartReducerState;
33
+ }
34
+
35
+ export interface CartItem {
36
+ sku: string;
37
+ product: GQLConfigurableProduct;
38
+ }
39
+
40
+ export interface CartItemPriceProps {
41
+ row_total: number;
42
+ row_total_incl_tax: number;
43
+ price_incl_tax: number;
44
+ price_excl_tax: number;
45
+ }
46
+
47
+ export enum DisplayCartTaxInSubTotal {
48
+ INCL_TAX = 'DISPLAY_CART_TAX_IN_SUBTOTAL_INCL_TAX',
49
+ EXCL_TAX = 'DISPLAY_CART_TAX_IN_SUBTOTAL_EXL_TAX',
50
+ BOTH = 'DISPLAY_CART_TAX_IN_SUBTOTAL_BOTH',
51
+ }
52
+
53
+ export enum DisplayCartTaxInShipping {
54
+ INCL_TAX = 'DISPLAY_CART_TAX_IN_SHIPPING_INCL_TAX',
55
+ EXCL_TAX = 'DISPLAY_CART_TAX_IN_SHIPPING_EXL_TAX',
56
+ BOTH = 'DISPLAY_CART_TAX_IN_SHIPPING_BOTH',
57
+ }
58
+
59
+ export enum DisplayCartTaxInPrice {
60
+ INCL_TAX = 'DISPLAY_CART_TAX_IN_PRICE_INCL_TAX',
61
+ EXCL_TAX = 'DISPLAY_CART_TAX_IN_PRICE_EXL_TAX',
62
+ BOTH = 'DISPLAY_CART_TAX_IN_PRICE_BOTH',
63
+ }
64
+
65
+ export enum DisplayShippingPrices {
66
+ INCL_TAX = 'DISPLAY_SHIPPING_PRICES_INCL_TAX',
67
+ EXCL_TAX = 'DISPLAY_SHIPPING_PRICES_EXCL_TAX',
68
+ BOTH = 'DISPLAY_SHIPPING_PRICES_BOTH',
69
+ }
70
+
71
+ export interface CartToken {
72
+ token: string;
73
+ isCustomerToken: boolean;
74
+ }
75
+
76
+ export type CartTokensByWebsite = Record<string, CartToken | undefined>;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * M Framework - Flexible backend agnostic framework.
3
+ *
4
+ * Copyright © Meeovi, LTD. All rights reserved.
5
+ * See LICENSE for license details.
6
+ *
7
+ * @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
8
+ * @package mframework/mframework
9
+ * @link https://github.com/meeovi/mframework
10
+ */
11
+
12
+ import { isSignedIn } from '../../utils/Auth/IsSignedIn';
13
+ import BrowserDatabase from '../../utils/BrowserDatabase';
14
+
15
+ import { CartTokensByWebsite } from './Cart.type';
16
+
17
+ export const CART_ID = 'cart_id';
18
+
19
+ /** @namespace ../../utils/Cart/Token/setCartId */
20
+ export const setCartId = (token: string): void => {
21
+ const { website_code } = window;
22
+
23
+ const tokens: CartTokensByWebsite = BrowserDatabase.getItem(CART_ID) || {};
24
+
25
+ tokens[website_code] = {
26
+ token,
27
+ isCustomerToken: isSignedIn(),
28
+ };
29
+ BrowserDatabase.setItem(tokens, CART_ID);
30
+ };
31
+
32
+ /** @namespace ../../utils/Cart/Token/getCartId */
33
+ export const getCartId = (): string | null => {
34
+ const { website_code } = window;
35
+
36
+ const tokens: CartTokensByWebsite = BrowserDatabase.getItem(CART_ID) || {};
37
+
38
+ const token = tokens[website_code];
39
+
40
+ if (token) {
41
+ if (token.isCustomerToken && !isSignedIn()) {
42
+ return null;
43
+ }
44
+
45
+ return token.token;
46
+ }
47
+
48
+ return null;
49
+ };
50
+
51
+ /** @namespace ../../utils/Cart/Token/deleteCartId */
52
+ export const deleteCartId = (): void => {
53
+ const { website_code } = window;
54
+
55
+ const tokens: CartTokensByWebsite = BrowserDatabase.getItem(CART_ID) || {};
56
+
57
+ tokens[website_code] = undefined;
58
+ BrowserDatabase.setItem(tokens, CART_ID);
59
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * M Framework - Flexible backend agnostic framework.
3
+ *
4
+ * Copyright © Meeovi, LTD. All rights reserved.
5
+ * See LICENSE for license details.
6
+ *
7
+ * @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
8
+ * @package mframework/mframework
9
+ * @link https://github.com/meeovi/mframework
10
+ */
11
+
12
+ export * from './Cart';
13
+ export * from './Token';
@@ -0,0 +1,39 @@
1
+ /**
2
+ * M Framework - Flexible backend agnostic framework.
3
+ *
4
+ * Copyright © Meeovi, LTD. All rights reserved.
5
+ * See LICENSE for license details.
6
+ *
7
+ * @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
8
+ * @package mframework/mframework
9
+ * @link https://github.com/meeovi/mframework
10
+ */
11
+
12
+ import { GQLCurrencyEnum } from '../../types/Graphql.type';
13
+ import { formatPrice } from '../../utils/Price';
14
+
15
+ /** @namespace ../../utils/Category/Filters/getPriceFilterLabel */
16
+ export const getPriceFilterLabel = (
17
+ from: number | string,
18
+ to: number | string,
19
+ currencyCode: GQLCurrencyEnum,
20
+ ): string => {
21
+ const priceFrom = formatPrice(Number(from), currencyCode);
22
+ const priceTo = formatPrice(Number(to), currencyCode);
23
+
24
+ if (from === '*') {
25
+ return __('Up to %s', priceTo);
26
+ }
27
+
28
+ if (to === '*') {
29
+ return __('From %s', priceFrom);
30
+ }
31
+
32
+ return __('From %s to %s', priceFrom, priceTo);
33
+ };
34
+
35
+ /** @namespace ../../utils/Category/Filters/getFiltersCount */
36
+ export const getFiltersCount = (
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ filters: Record<string, any[]>,
39
+ ): number => Object.values(filters).reduce((prev: number, next) => prev + next.length, 0);
@@ -0,0 +1,12 @@
1
+ /**
2
+ * M Framework - Flexible backend agnostic framework.
3
+ *
4
+ * Copyright © Meeovi, LTD. All rights reserved.
5
+ * See LICENSE for license details.
6
+ *
7
+ * @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
8
+ * @package mframework/mframework
9
+ * @link https://github.com/meeovi/mframework
10
+ */
11
+
12
+ export * from './Filters';
@@ -0,0 +1,32 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+ /**
3
+ * M Framework - Flexible backend agnostic framework.
4
+ *
5
+ * Copyright © Meeovi, LTD. All rights reserved.
6
+ * See LICENSE for license details.
7
+ *
8
+ * @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
9
+ * @package mframework/mframework
10
+ * @link https://github.com/meeovi/mframework
11
+ */
12
+
13
+ /**
14
+ * No-operate function.
15
+ * Can be used as a fallback if real function wasn't passed.
16
+ * In this case instead of creating empty function every time we can reuse existing.
17
+ * Examples: default props, argument default values.
18
+ * @namespace ../../utils/Common/Index/noopFn
19
+ */
20
+ export const noopFn = (): void => {};
21
+
22
+ /** @namespace ../../utils/Common/Index/noopFnAsync */
23
+ export const noopFnAsync = async (): Promise<void> => {};
24
+
25
+ /** @namespace ../../utils/Common/Index/decodeString */
26
+ export const decodeString = (string: string): string => {
27
+ try {
28
+ return decodeURIComponent(string);
29
+ } catch (e) {
30
+ return string;
31
+ }
32
+ };