@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.
- package/README.md +101 -0
- package/app/cart/useCart.ts +1 -0
- package/app/components/ChevronIcon/ChevronIcon.config.ts +17 -0
- package/app/components/DateSelect/DateSelect.config.ts +15 -0
- package/app/components/Field/Field.config.ts +14 -0
- package/app/components/FieldDate/FieldDate.config.ts +16 -0
- package/app/components/Form/Form.type.ts +8 -0
- package/app/components/Product/Product.config.ts +19 -0
- package/app/components/Product/Stock.config.ts +15 -0
- package/app/components/ProductCustomizableOption/ProductCustomizableOption.config.ts +5 -0
- package/app/components/ProductGallery/ProductGallery.config.ts +15 -0
- package/app/components/ProductReviews/ProductReviews.config.ts +8 -0
- package/app/composables/_types.ts +18 -0
- package/app/composables/adapters/abstract/cartAdapter.ts +0 -0
- package/app/composables/adapters/abstract/categoryAdapter.ts +0 -0
- package/app/composables/adapters/abstract/customerAdapter.ts +0 -0
- package/app/composables/adapters/abstract/inventoryAdapter.ts +0 -0
- package/app/composables/adapters/abstract/orderAdapter.ts +0 -0
- package/app/composables/adapters/abstract/productAdapter.ts +7 -0
- package/app/composables/cart/registry.ts +20 -0
- package/app/composables/cart/types.ts +18 -0
- package/app/composables/cart/useCart.ts +15 -0
- package/app/composables/config.ts +19 -0
- package/app/composables/defs/apiDefinitions.ts +55 -0
- package/app/composables/defs/extension.feature +40 -0
- package/app/composables/defs/extension.mocks.ts +39 -0
- package/app/composables/defs/extension.test.ts +280 -0
- package/app/composables/defs/extension.ts +236 -0
- package/app/composables/defs/index.ts +3 -0
- package/app/composables/defs/typeHelpers.ts +8 -0
- package/app/composables/defs/types.ts +136 -0
- package/app/composables/domain/product.ts +12 -0
- package/app/composables/featured-products.ts +20 -0
- package/app/composables/helpers/contextualizedNormalizers.feature +14 -0
- package/app/composables/helpers/contextualizedNormalizers.test.ts +85 -0
- package/app/composables/helpers/contextualizedNormalizers.ts +20 -0
- package/app/composables/helpers/index.ts +1 -0
- package/app/composables/index.ts +9 -0
- package/app/composables/methods/auth.ts +83 -0
- package/app/composables/methods/cart.ts +119 -0
- package/app/composables/methods/category.ts +27 -0
- package/app/composables/methods/checkout.ts +54 -0
- package/app/composables/methods/customer.ts +52 -0
- package/app/composables/methods/helpers.ts +5 -0
- package/app/composables/methods/index.ts +75 -0
- package/app/composables/methods/order.ts +39 -0
- package/app/composables/methods/product.ts +95 -0
- package/app/composables/methods/settings.ts +16 -0
- package/app/composables/models/cart.ts +95 -0
- package/app/composables/models/category.ts +13 -0
- package/app/composables/models/checkout.ts +17 -0
- package/app/composables/models/customer.ts +16 -0
- package/app/composables/models/facets.ts +25 -0
- package/app/composables/models/index.ts +94 -0
- package/app/composables/models/order.ts +43 -0
- package/app/composables/models/product.ts +73 -0
- package/app/composables/models/shared.ts +75 -0
- package/app/composables/orders.ts +69 -0
- package/app/composables/products/registry.ts +86 -0
- package/app/composables/products/types.ts +8 -0
- package/app/composables/products/useEvents.ts +26 -0
- package/app/composables/products/useGiftCards.ts +29 -0
- package/app/composables/products/useProducts.ts +12 -0
- package/app/composables/products/useSubscriptions.ts +29 -0
- package/app/composables/products.ts +30 -0
- package/app/composables/registry.ts +24 -0
- package/app/composables/useAuth.ts +43 -0
- package/app/composables/useBreakpoints/index.ts +1 -0
- package/app/composables/useBreakpoints/useBreakpoints.ts +28 -0
- package/app/composables/useCache.ts +38 -0
- package/app/composables/useCart/__tests__/useCart.spec.ts +11 -0
- package/app/composables/useCart/index.ts +1 -0
- package/app/composables/useCart/types.ts +17 -0
- package/app/composables/useCart/useCart.ts +46 -0
- package/app/composables/useCartShippingMethods/__tests__/useCartShippingMethods.spec.ts +11 -0
- package/app/composables/useCartShippingMethods/index.ts +1 -0
- package/app/composables/useCartShippingMethods/types.ts +17 -0
- package/app/composables/useCartShippingMethods/useCartShippingMethods.ts +47 -0
- package/app/composables/useCatalog.ts +26 -0
- package/app/composables/useContent.ts +26 -0
- package/app/composables/useCustomer/__tests__/useCustomer.spec.ts +25 -0
- package/app/composables/useCustomer/index.ts +2 -0
- package/app/composables/useCustomer/types.ts +17 -0
- package/app/composables/useCustomer/useCustomer.ts +40 -0
- package/app/composables/useCustomerAddress/__tests__/useCustomerAddress.spec.ts +11 -0
- package/app/composables/useCustomerAddress/index.ts +2 -0
- package/app/composables/useCustomerAddress/types.ts +17 -0
- package/app/composables/useCustomerAddress/useCustomerAddress.ts +55 -0
- package/app/composables/useCustomerOrder/__tests__/useCustomerOrder.spec.ts +11 -0
- package/app/composables/useCustomerOrder/adress.ts +10 -0
- package/app/composables/useCustomerOrder/index.ts +2 -0
- package/app/composables/useCustomerOrder/product.ts +37 -0
- package/app/composables/useCustomerOrder/types.ts +40 -0
- package/app/composables/useCustomerOrder/useCustomerOrder.ts +63 -0
- package/app/composables/useCustomerOrders/__tests__/useCustomerOrders.spec.ts +11 -0
- package/app/composables/useCustomerOrders/index.ts +2 -0
- package/app/composables/useCustomerOrders/types.ts +20 -0
- package/app/composables/useCustomerOrders/useCustomerOrders.ts +56 -0
- package/app/composables/useCustomerReturns/__tests__/useCustomerReturns.spec.ts +11 -0
- package/app/composables/useCustomerReturns/index.ts +2 -0
- package/app/composables/useCustomerReturns/types.ts +17 -0
- package/app/composables/useCustomerReturns/useCustomerReturns.ts +41 -0
- package/app/composables/useHandleError/index.ts +1 -0
- package/app/composables/useHandleError/types.ts +11 -0
- package/app/composables/useHandleError/useHandleError.ts +27 -0
- package/app/composables/useInventory.ts +29 -0
- package/app/composables/useLoading.ts +21 -0
- package/app/composables/useNotification.ts +21 -0
- package/app/composables/usePageTitle.ts +20 -0
- package/app/composables/useProduct/index.ts +2 -0
- package/app/composables/useProduct/types.ts +17 -0
- package/app/composables/useProduct/useProduct.ts +42 -0
- package/app/composables/useProductAttribute/__tests__/useProduct.mock.ts +31 -0
- package/app/composables/useProductAttribute/__tests__/useProductAttribute.spec.ts +14 -0
- package/app/composables/useProductAttribute/index.ts +1 -0
- package/app/composables/useProductAttribute/useProductAttribute.ts +37 -0
- package/app/composables/useProductRecommended/__tests__/useProductRecommended.spec.ts +12 -0
- package/app/composables/useProductRecommended/index.ts +1 -0
- package/app/composables/useProductRecommended/types.ts +17 -0
- package/app/composables/useProductRecommended/useProductRecommended.ts +43 -0
- package/app/composables/useProductReviews/__tests__/productReviews.mock.ts +20 -0
- package/app/composables/useProductReviews/__tests__/useProductReviews.spec.ts +22 -0
- package/app/composables/useProductReviews/index.ts +2 -0
- package/app/composables/useProductReviews/types.ts +17 -0
- package/app/composables/useProductReviews/useProductReviews.ts +46 -0
- package/app/composables/useProducts/__tests__/useProducts.spec.ts +11 -0
- package/app/composables/useProducts/types.ts +22 -0
- package/app/composables/useProducts/useProducts.ts +41 -0
- package/app/composables/useTax.ts +27 -0
- package/app/composables/validationRules/index.ts +1 -0
- package/app/composables/validationRules/password.feature +67 -0
- package/app/composables/validationRules/password.test.ts +89 -0
- package/app/composables/validationRules/password.ts +25 -0
- package/app/normalizers/Cart.query.ts +729 -0
- package/app/normalizers/Cart.type.ts +285 -0
- package/app/normalizers/Category.query.ts +146 -0
- package/app/normalizers/Category.type.ts +55 -0
- package/app/normalizers/CheckEmail.query.ts +28 -0
- package/app/normalizers/Checkout.query.ts +253 -0
- package/app/normalizers/Checkout.type.ts +77 -0
- package/app/normalizers/CmsBlock.query.ts +57 -0
- package/app/normalizers/CmsBlock.type.ts +25 -0
- package/app/normalizers/CmsPage.query.ts +59 -0
- package/app/normalizers/CmsPage.type.ts +26 -0
- package/app/normalizers/Config.query.ts +224 -0
- package/app/normalizers/Config.type.ts +196 -0
- package/app/normalizers/ContactForm.query.ts +49 -0
- package/app/normalizers/CreditMemo.type.ts +49 -0
- package/app/normalizers/GiftCard.type.ts +24 -0
- package/app/normalizers/Invoice.type.ts +58 -0
- package/app/normalizers/Menu.query.ts +54 -0
- package/app/normalizers/Menu.type.ts +22 -0
- package/app/normalizers/MyAccount.query.ts +268 -0
- package/app/normalizers/MyAccount.type.ts +129 -0
- package/app/normalizers/NewsletterSubscription.query.ts +38 -0
- package/app/normalizers/Order.query.ts +741 -0
- package/app/normalizers/Order.type.ts +268 -0
- package/app/normalizers/Payment.type.ts +28 -0
- package/app/normalizers/ProductAlerts.query.ts +23 -0
- package/app/normalizers/ProductCompare.query.ts +226 -0
- package/app/normalizers/ProductCompare.type.ts +90 -0
- package/app/normalizers/ProductList.query.ts +1620 -0
- package/app/normalizers/ProductList.type.ts +726 -0
- package/app/normalizers/Region.query.ts +58 -0
- package/app/normalizers/Region.type.ts +23 -0
- package/app/normalizers/Return.type.ts +50 -0
- package/app/normalizers/Review.query.ts +81 -0
- package/app/normalizers/Review.type.ts +42 -0
- package/app/normalizers/Slider.query.ts +72 -0
- package/app/normalizers/Slider.type.ts +26 -0
- package/app/normalizers/StoreInPickUp.query.ts +54 -0
- package/app/normalizers/StoreInPickUp.type.ts +59 -0
- package/app/normalizers/Subscription.type.ts +25 -0
- package/app/normalizers/Transaction.type.ts +20 -0
- package/app/normalizers/UrlRewrites.query.ts +55 -0
- package/app/normalizers/UrlRewrites.type.ts +25 -0
- package/app/normalizers/Wishlist.query.ts +202 -0
- package/app/normalizers/Wishlist.type.ts +42 -0
- package/app/pages/brand/[...slug].vue +76 -0
- package/app/pages/brands.vue +67 -0
- package/app/pages/cart.vue +142 -0
- package/app/pages/compare.vue +166 -0
- package/app/pages/departments/[...slug].vue +353 -0
- package/app/pages/departments/category/[...slug].vue +114 -0
- package/app/pages/incentive/[...id].vue +66 -0
- package/app/pages/invoice/[id].vue +309 -0
- package/app/pages/order/[id].vue +327 -0
- package/app/pages/product/[...id].vue +309 -0
- package/app/pages/product/showcases/index.vue +86 -0
- package/app/pages/shipment/[...id].vue +176 -0
- package/app/pages/shop/[...slug].vue +158 -0
- package/app/pages/shops.vue +76 -0
- package/app/pages/subscription/[...id].vue +147 -0
- package/app/pages/transaction/[...id].vue +74 -0
- package/app/routes/CategoryPage/CategoryPage.config.ts +28 -0
- package/app/routes/CategoryPage/CategoryPage.type.ts +8 -0
- package/app/routes/Checkout/Checkout.config.ts +3 -0
- package/app/routes/Checkout/Checkout.type.ts +14 -0
- package/app/routes/MyAccount/MyAccount.config.ts +1 -0
- package/app/routes/SearchPage/SearchPage.config.ts +1 -0
- package/app/routes/UrlRewrites/UrlRewrites.config.ts +5 -0
- package/app/stores/Cart/Cart.type.ts +26 -0
- package/app/stores/MyAccount/MyAccount.action.ts +7 -0
- package/app/stores/Notification/Notification.action.ts +40 -0
- package/app/stores/Notification/Notification.type.ts +16 -0
- package/app/stores/Popup/Popup.action.ts +30 -0
- package/app/stores/Product/Product.dispatcher.ts +53 -0
- package/app/stores/Product/Product.reducer.ts +12 -0
- package/app/stores/ProductList/ProductList.dispatcher.ts +35 -0
- package/app/stores/ProductList/ProductList.reducer.ts +13 -0
- package/app/stores/Store.type.ts +31 -0
- package/app/stores/Wishlist/Wishlist.type.ts +12 -0
- package/app/stores/cart.ts +218 -0
- package/app/stores/cartStore.ts +224 -0
- package/app/stores/checkout.ts +18 -0
- package/app/stores/compare.ts +65 -0
- package/app/stores/currency.js +29 -0
- package/app/stores/digital-products.js +11 -0
- package/app/stores/orders.ts +172 -0
- package/app/stores/product.ts +34 -0
- package/app/stores/productList.ts +35 -0
- package/app/stores/productListInfo.ts +0 -0
- package/app/stores/products.ts +118 -0
- package/app/stores/recentlyViewedProducts.ts +56 -0
- package/app/stores/review.ts +33 -0
- package/app/stores/storeInPickUp.ts +21 -0
- package/app/stores/user.ts +20 -0
- package/app/stores/wishlist.ts +46 -0
- package/app/types/Account.type.ts +141 -0
- package/app/types/Breadcrumbs.type.ts +23 -0
- package/app/types/CMS.type.ts +33 -0
- package/app/types/Category.type.ts +67 -0
- package/app/types/Checkout.type.ts +58 -0
- package/app/types/Common.type.ts +77 -0
- package/app/types/Config.type.ts +47 -0
- package/app/types/Device.type.ts +37 -0
- package/app/types/Direction.type.ts +23 -0
- package/app/types/Downloadable.type.ts +24 -0
- package/app/types/Error.type.ts +22 -0
- package/app/types/Field.type.ts +151 -0
- package/app/types/Global.type.ts +156 -0
- package/app/types/Graphql.type.ts +4497 -0
- package/app/types/Layout.type.ts +18 -0
- package/app/types/Menu.type.ts +39 -0
- package/app/types/MiniCart.type.ts +61 -0
- package/app/types/NotificationList.type.ts +34 -0
- package/app/types/Order.type.ts +174 -0
- package/app/types/Price.type.ts +72 -0
- package/app/types/ProductCompare.type.ts +24 -0
- package/app/types/ProductList.type.ts +351 -0
- package/app/types/Rating.type.ts +42 -0
- package/app/types/Router.type.ts +67 -0
- package/app/types/Slider.type.ts +25 -0
- package/app/types/StockStatus.type.ts +21 -0
- package/app/types/domain/index.ts +94 -0
- package/app/types/index.ts +33 -0
- package/app/types/shims.d.ts +52 -0
- package/app/types/tilework-opus.d.ts +48 -0
- package/app/utils/Address/Address.type.ts +28 -0
- package/app/utils/Address/index.ts +325 -0
- package/app/utils/Auth/IsSignedIn.ts +4 -0
- package/app/utils/Auth/Token.ts +9 -0
- package/app/utils/Base64/Base64.ts +16 -0
- package/app/utils/Base64/index.ts +12 -0
- package/app/utils/Browser/Browser.ts +29 -0
- package/app/utils/Browser/index.ts +12 -0
- package/app/utils/BrowserDatabase/BrowserDatabase.ts +70 -0
- package/app/utils/BrowserDatabase/index.ts +12 -0
- package/app/utils/CSS/CSS.ts +65 -0
- package/app/utils/CSS/index.ts +12 -0
- package/app/utils/Cache/Cache.ts +99 -0
- package/app/utils/Cart/Cart.ts +300 -0
- package/app/utils/Cart/Cart.type.ts +76 -0
- package/app/utils/Cart/Token.ts +59 -0
- package/app/utils/Cart/index.ts +13 -0
- package/app/utils/Category/Filters.ts +39 -0
- package/app/utils/Category/index.ts +12 -0
- package/app/utils/Common/index.ts +32 -0
- package/app/utils/Compare/Compare.ts +89 -0
- package/app/utils/Compare/index.ts +12 -0
- package/app/utils/Currency/Currency.ts +84 -0
- package/app/utils/Currency/index.ts +12 -0
- package/app/utils/DynamicReducer/DynamicReducer.type.ts +14 -0
- package/app/utils/DynamicReducer/Helper.ts +30 -0
- package/app/utils/DynamicReducer/index.tsx +35 -0
- package/app/utils/ElementTransition/ElementTransition.ts +100 -0
- package/app/utils/Form/Extract.ts +316 -0
- package/app/utils/Form/Form.ts +46 -0
- package/app/utils/Form/Form.type.ts +60 -0
- package/app/utils/Form/Transform.ts +33 -0
- package/app/utils/FormPortalCollector/index.ts +45 -0
- package/app/utils/History/History.type.ts +31 -0
- package/app/utils/History/index.ts +17 -0
- package/app/utils/Manipulations/Array.ts +18 -0
- package/app/utils/Manipulations/Date.ts +36 -0
- package/app/utils/Manipulations/index.ts +14 -0
- package/app/utils/Media/Media.ts +27 -0
- package/app/utils/Media/index.ts +13 -0
- package/app/utils/Menu/Menu.ts +116 -0
- package/app/utils/Menu/Menu.type.ts +37 -0
- package/app/utils/Menu/index.ts +12 -0
- package/app/utils/Mobile/index.ts +13 -0
- package/app/utils/Mobile/isMobile.ts +34 -0
- package/app/utils/Orders/Orders.ts +71 -0
- package/app/utils/Orders/Orders.type.ts +19 -0
- package/app/utils/Orders/index.ts +13 -0
- package/app/utils/Polyfill/index.ts +336 -0
- package/app/utils/Preload/CategoryPreload.ts +74 -0
- package/app/utils/Preload/ProductPreload.ts +28 -0
- package/app/utils/Preload/index.ts +75 -0
- package/app/utils/Price/Price.config.ts +189 -0
- package/app/utils/Price/Price.ts +63 -0
- package/app/utils/Price/index.ts +12 -0
- package/app/utils/Product/Extract.ts +652 -0
- package/app/utils/Product/Product.ts +575 -0
- package/app/utils/Product/Product.type.ts +260 -0
- package/app/utils/Product/Transform.ts +382 -0
- package/app/utils/Product/index.ts +12 -0
- package/app/utils/Promise/MakeCancelable.ts +44 -0
- package/app/utils/Promise/Promise.type.ts +15 -0
- package/app/utils/Promise/index.ts +13 -0
- package/app/utils/Query/Field.ts +71 -0
- package/app/utils/Query/Fragment.ts +22 -0
- package/app/utils/Query/PrepareDocument.ts +119 -0
- package/app/utils/Query/Query.type.ts +26 -0
- package/app/utils/Query/index.ts +15 -0
- package/app/utils/Request/Config.ts +21 -0
- package/app/utils/Request/DataContainer.ts +102 -0
- package/app/utils/Request/Debounce.ts +48 -0
- package/app/utils/Request/Error.ts +31 -0
- package/app/utils/Request/Hash.ts +88 -0
- package/app/utils/Request/LowPriorityLoad.ts +32 -0
- package/app/utils/Request/LowPriorityRender.ts +55 -0
- package/app/utils/Request/Mutation.ts +25 -0
- package/app/utils/Request/Query.ts +25 -0
- package/app/utils/Request/QueryDispatcher.ts +135 -0
- package/app/utils/Request/Request.ts +310 -0
- package/app/utils/Store/Store.type.ts +26 -0
- package/app/utils/Store/index.ts +71 -0
- package/app/utils/Url/Url.ts +297 -0
- package/app/utils/Url/index.ts +12 -0
- package/app/utils/Validator/Config.ts +96 -0
- package/app/utils/Validator/Validator.ts +268 -0
- package/app/utils/Validator/Validator.type.ts +47 -0
- package/app/utils/Validator/index.ts +12 -0
- package/app/utils/Wishlist/Wishlist.ts +65 -0
- package/app/utils/Wishlist/index.ts +12 -0
- package/app/utils/client.ts +280 -0
- package/app/utils/index.ts +53 -0
- package/app/utils/normalizer.ts +23 -0
- package/app/utils/normalizers/magento.ts +29 -0
- package/app/utils/normalizers/shopify.ts +29 -0
- package/nuxt.config.ts +11 -0
- package/package.json +43 -0
- 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
|
+
};
|