@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,46 @@
|
|
|
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 { FormFields } from 'Component/Form/Form.type';
|
|
13
|
+
import { ValidationDOMOutput } from '../../utils/Validator/Validator.type';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Returns name: value pair object for form output.
|
|
17
|
+
* @param fields (Array)
|
|
18
|
+
* @param validation ({})
|
|
19
|
+
* @namespace ../../utils/Form/scrollToError
|
|
20
|
+
*/
|
|
21
|
+
export const scrollToError = (fields: FormFields | null, validation: ValidationDOMOutput | boolean = {}): void => {
|
|
22
|
+
if (typeof validation === 'boolean' || !Array.isArray(fields) || fields.length === 0) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const { errorFields = [] } = validation;
|
|
27
|
+
|
|
28
|
+
if (errorFields.length === 0) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const { name } = (errorFields as Array<Array<{ name: string }>>)[0][0];
|
|
33
|
+
const errorItem = fields.find(({ name: itemName }) => itemName === name);
|
|
34
|
+
|
|
35
|
+
if (!errorItem) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const { field } = errorItem as { field: HTMLElement };
|
|
40
|
+
|
|
41
|
+
if (field) {
|
|
42
|
+
field.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export default scrollToError;
|
|
@@ -0,0 +1,60 @@
|
|
|
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-theme
|
|
9
|
+
* @link https://github.com/meeovi/mframework
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { FieldDateType } from 'Component/FieldDate/FieldDate.config';
|
|
13
|
+
|
|
14
|
+
export interface YearRangeAttribute {
|
|
15
|
+
minYear: number;
|
|
16
|
+
maxYear: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface DateRangeAttribute {
|
|
20
|
+
minDate: Date;
|
|
21
|
+
maxDate: Date;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface DateMap {
|
|
25
|
+
d: string;
|
|
26
|
+
m: string;
|
|
27
|
+
y: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface DatesData {
|
|
31
|
+
type: FieldDateType;
|
|
32
|
+
year?: string;
|
|
33
|
+
month?: string;
|
|
34
|
+
day?: string;
|
|
35
|
+
hours?: string;
|
|
36
|
+
minutes?: string;
|
|
37
|
+
ampm?: string;
|
|
38
|
+
name: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface DateObject {
|
|
42
|
+
name: string;
|
|
43
|
+
type: FieldDateType;
|
|
44
|
+
value: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface FieldData<T = FieldValue> {
|
|
48
|
+
field?: HTMLInputElement;
|
|
49
|
+
name: string;
|
|
50
|
+
type: string;
|
|
51
|
+
value: T;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type GetFieldsData<AsObject extends boolean = false> = AsObject extends true
|
|
55
|
+
? Record<string, DateObject | FieldData>
|
|
56
|
+
: Array<DateObject | FieldData>;
|
|
57
|
+
|
|
58
|
+
export type FieldValue<
|
|
59
|
+
T = unknown, isUnknownValue = true,
|
|
60
|
+
> = isUnknownValue extends true ? string | number | boolean | undefined | Date : T;
|
|
@@ -0,0 +1,33 @@
|
|
|
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 { FieldData, FieldValue } from './Form.type';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Returns name: value pair object for form output.
|
|
16
|
+
* @param fields (Array|Object)
|
|
17
|
+
* @returns {{}}
|
|
18
|
+
* @namespace ../../utils/Form/Transform/transformToNameValuePair
|
|
19
|
+
*/
|
|
20
|
+
export const transformToNameValuePair = <T>(
|
|
21
|
+
fields: Record<string, FieldData> | FieldData[],
|
|
22
|
+
): T => {
|
|
23
|
+
const filteredFields: Record<string, FieldValue> = {};
|
|
24
|
+
const arrayFormat = !Array.isArray(fields) ? Object.values(fields) : fields;
|
|
25
|
+
|
|
26
|
+
arrayFormat.forEach(({ value, name }) => {
|
|
27
|
+
filteredFields[name] = value;
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
return filteredFields as unknown as T;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default transformToNameValuePair;
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
/** @namespace ../../utils/FormPortalCollector/Index */
|
|
13
|
+
export class FormPortalCollector <
|
|
14
|
+
T extends string,
|
|
15
|
+
U extends () => void,
|
|
16
|
+
S extends string,
|
|
17
|
+
> {
|
|
18
|
+
portalsObservers: Record<string, Record<string, U>> = {};
|
|
19
|
+
|
|
20
|
+
subscribe(id: T, f: U, name: S): void {
|
|
21
|
+
if (this.portalsObservers[id]) {
|
|
22
|
+
this.portalsObservers[id][name] = f;
|
|
23
|
+
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
this.portalsObservers[id] = { [name]: f };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
unsubscribe(id: T, name: S): void {
|
|
31
|
+
if (!this.portalsObservers[id]) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// eslint-disable-next-line fp/no-delete
|
|
35
|
+
delete this.portalsObservers[id][name];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
collect(id: S): void[] {
|
|
39
|
+
const portals = this.portalsObservers[id] || {};
|
|
40
|
+
|
|
41
|
+
return Object.values(portals).map((portal) => portal());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default FormPortalCollector;
|
|
@@ -0,0 +1,31 @@
|
|
|
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-theme
|
|
9
|
+
* @link https://github.com/meeovi/mframework
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { CategoryDisplayMode } from '../../routes/CategoryPage/CategoryPage.config';
|
|
13
|
+
import { IndexedProduct } from '../../utils/Product/Product.type';
|
|
14
|
+
|
|
15
|
+
export interface HistoryState {
|
|
16
|
+
popupOpen?: boolean;
|
|
17
|
+
page?: number | Partial<IndexedProduct> | undefined;
|
|
18
|
+
product?: Partial<IndexedProduct>;
|
|
19
|
+
isForgotPassword?: boolean;
|
|
20
|
+
isFromLocked?: boolean;
|
|
21
|
+
editPassword?: boolean;
|
|
22
|
+
category?: number | boolean;
|
|
23
|
+
isFromEmailChange?: boolean;
|
|
24
|
+
prevCategoryId?: number;
|
|
25
|
+
stack?: string[];
|
|
26
|
+
firstName?: string;
|
|
27
|
+
lastName?: string;
|
|
28
|
+
email?: string;
|
|
29
|
+
overlayOpen?: boolean;
|
|
30
|
+
displayMode?: CategoryDisplayMode;
|
|
31
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 { createBrowserHistory } from 'history';
|
|
13
|
+
|
|
14
|
+
import { HistoryState } from './History.type';
|
|
15
|
+
|
|
16
|
+
export const history = createBrowserHistory();
|
|
17
|
+
export default history;
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
/** @namespace ../../utils/Manipulations/Array/range */
|
|
14
|
+
export const range = (start: number, end: number): Array<number> => {
|
|
15
|
+
const length = end - start + 1;
|
|
16
|
+
|
|
17
|
+
return Array.from({ length }, (_, i) => start + i);
|
|
18
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
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 { getDateValue } from '../../utils/Form/Extract';
|
|
13
|
+
|
|
14
|
+
export const MILLISECONDS_PER_MINUTE = 60000;
|
|
15
|
+
|
|
16
|
+
/** @namespace ../../utils/Manipulations/Date/convertStringToDate */
|
|
17
|
+
export const convertStringToDate = (stringDate: string, options?: Intl.DateTimeFormatOptions): string => {
|
|
18
|
+
const defaultOptions: Intl.DateTimeFormatOptions = {
|
|
19
|
+
year: 'numeric',
|
|
20
|
+
month: 'long',
|
|
21
|
+
day: 'numeric',
|
|
22
|
+
};
|
|
23
|
+
const date = new Date(stringDate.replace(/\s/, 'T'));
|
|
24
|
+
const language = navigator.languages ? navigator.languages[0] : navigator.language;
|
|
25
|
+
|
|
26
|
+
return date.toLocaleDateString(language, options || defaultOptions);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** @namespace ../../utils/Manipulations/Date/getTimeInCurrentTimezone */
|
|
30
|
+
export const getTimeInCurrentTimezone = (timestamp: string): number | string | Date => {
|
|
31
|
+
const currentDate = new Date();
|
|
32
|
+
const timezone = currentDate.getTimezoneOffset() * MILLISECONDS_PER_MINUTE;
|
|
33
|
+
const timeInCurrentTimezone = new Date(timestamp.replace(/-/g, '/')).getTime() - new Date(timezone).getTime();
|
|
34
|
+
|
|
35
|
+
return getDateValue(timeInCurrentTimezone);
|
|
36
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
export { range } from './Array';
|
|
14
|
+
export * from './Date';
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
import { getStoreState } from '../../utils/Store';
|
|
12
|
+
|
|
13
|
+
export const WYSIWYG_MEDIA = 'wysiwyg/';
|
|
14
|
+
export const CATEGORY_MEDIA = 'catalog/category/';
|
|
15
|
+
export const PRODUCT_MEDIA = 'catalog/product';
|
|
16
|
+
export const LOGO_MEDIA = 'logo/';
|
|
17
|
+
|
|
18
|
+
export default (src: string, subPath = '', isMediaPath = true): string => {
|
|
19
|
+
// If isMediaPath is passed return local media path
|
|
20
|
+
|
|
21
|
+
const { ConfigReducer: { secure_base_media_url, base_url } = {} } = getStoreState();
|
|
22
|
+
const baseUrl = isMediaPath
|
|
23
|
+
? secure_base_media_url || '/media/'
|
|
24
|
+
: base_url;
|
|
25
|
+
|
|
26
|
+
return `${ baseUrl }${ subPath }${ src }`;
|
|
27
|
+
};
|
|
@@ -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
|
+
export {
|
|
12
|
+
default, WYSIWYG_MEDIA, PRODUCT_MEDIA, CATEGORY_MEDIA,
|
|
13
|
+
} from './Media';
|
|
@@ -0,0 +1,116 @@
|
|
|
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 { MenuItem } from '../../normalizers/Menu.type';
|
|
13
|
+
import { getUrlPathname } from '../../utils/Url';
|
|
14
|
+
|
|
15
|
+
import { FormattedMenuItem, MenuLocation } from './Menu.type';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Given an array of menu items, returns a copy of the array, sorted by their parent ID, then by their sort order (position)
|
|
19
|
+
*
|
|
20
|
+
* @param unsortedItems an array of items to be sorted
|
|
21
|
+
* @returns {array} the sorted array
|
|
22
|
+
* @namespace ../../utils/Menu/getSortedItems
|
|
23
|
+
*/
|
|
24
|
+
export const getSortedItems = <T extends MenuItem | FormattedMenuItem>(
|
|
25
|
+
unsortedItems: T[],
|
|
26
|
+
): T[] => Array.from(unsortedItems).sort((
|
|
27
|
+
{ parent_id: PID, position: P },
|
|
28
|
+
{ parent_id: prevPID, position: prevP },
|
|
29
|
+
) => (PID - prevPID) || (P - prevP));
|
|
30
|
+
|
|
31
|
+
/** @namespace ../../utils/Menu */
|
|
32
|
+
export class Menu {
|
|
33
|
+
menu: Record<string, FormattedMenuItem> = {};
|
|
34
|
+
|
|
35
|
+
menuPositionReference: Record<string, number[]> = {};
|
|
36
|
+
|
|
37
|
+
getMenuUrl(
|
|
38
|
+
{ url, category_id, display_mode }: Pick<
|
|
39
|
+
MenuItem,
|
|
40
|
+
'url'
|
|
41
|
+
| 'category_id'
|
|
42
|
+
| 'display_mode'>,
|
|
43
|
+
): MenuLocation | string {
|
|
44
|
+
return {
|
|
45
|
+
pathname: getUrlPathname(url),
|
|
46
|
+
search: '',
|
|
47
|
+
state: {
|
|
48
|
+
category: category_id,
|
|
49
|
+
displayMode: display_mode,
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
getMenuData({
|
|
55
|
+
url,
|
|
56
|
+
category_id,
|
|
57
|
+
display_mode,
|
|
58
|
+
...item
|
|
59
|
+
}: MenuItem): FormattedMenuItem {
|
|
60
|
+
return {
|
|
61
|
+
...item,
|
|
62
|
+
url: this.getMenuUrl({ url, category_id, display_mode }),
|
|
63
|
+
children: {},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
setToValue(obj: Record<string, FormattedMenuItem>, path: string, value: FormattedMenuItem): void {
|
|
68
|
+
// eslint-disable-next-line fp/no-let
|
|
69
|
+
let i;
|
|
70
|
+
|
|
71
|
+
const pathArray = path.split('.');
|
|
72
|
+
|
|
73
|
+
// eslint-disable-next-line fp/no-let, @typescript-eslint/no-explicit-any
|
|
74
|
+
let tmpObj: Record<string, any> = obj;
|
|
75
|
+
|
|
76
|
+
// eslint-disable-next-line fp/no-loops
|
|
77
|
+
for (i = 0; i < pathArray.length - 1; i++) {
|
|
78
|
+
tmpObj = tmpObj[pathArray[i]];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
tmpObj[pathArray[i]] = value;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
createItem(data: MenuItem): void {
|
|
85
|
+
const { parent_id, item_id } = data;
|
|
86
|
+
|
|
87
|
+
if (parent_id === 0) {
|
|
88
|
+
this.menuPositionReference[item_id] = [];
|
|
89
|
+
this.menu[item_id] = this.getMenuData(data);
|
|
90
|
+
} else if (this.menuPositionReference[parent_id] !== undefined) {
|
|
91
|
+
this.menuPositionReference[item_id] = [
|
|
92
|
+
...this.menuPositionReference[parent_id],
|
|
93
|
+
parent_id,
|
|
94
|
+
];
|
|
95
|
+
|
|
96
|
+
this.setToValue(
|
|
97
|
+
this.menu,
|
|
98
|
+
`${this.menuPositionReference[item_id].join('.children.')}.children.${item_id}`,
|
|
99
|
+
this.getMenuData(data),
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
reduce(unsortedItems: MenuItem[]): Record<string, FormattedMenuItem> {
|
|
105
|
+
this.menu = {};
|
|
106
|
+
this.menuPositionReference = {};
|
|
107
|
+
|
|
108
|
+
getSortedItems(unsortedItems).forEach((realMenuItem) => {
|
|
109
|
+
this.createItem(realMenuItem);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
return this.menu;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export default new Menu();
|
|
@@ -0,0 +1,37 @@
|
|
|
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-theme
|
|
9
|
+
* @link https://github.com/meeovi/mframework
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { MenuItem } from '../../normalizers/Menu.type';
|
|
13
|
+
import { CategoryDisplayMode } from '../../routes/CategoryPage/CategoryPage.config';
|
|
14
|
+
import { Merge } from '../../types/Common.type';
|
|
15
|
+
|
|
16
|
+
export interface MenuLocation {
|
|
17
|
+
pathname: string;
|
|
18
|
+
search: string;
|
|
19
|
+
state: {
|
|
20
|
+
category?: number;
|
|
21
|
+
page?: boolean;
|
|
22
|
+
displayMode?: CategoryDisplayMode;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type FormattedMenuItem = Merge<
|
|
27
|
+
Omit<MenuItem, 'cms_page_identifier' | 'url_type' | 'category_id' | 'display_mode'>,
|
|
28
|
+
{
|
|
29
|
+
url: MenuLocation | string;
|
|
30
|
+
children: Record<string, FormattedMenuItem>;
|
|
31
|
+
}>;
|
|
32
|
+
|
|
33
|
+
export enum MenuItemType {
|
|
34
|
+
TYPE_CUSTOM_URL,
|
|
35
|
+
TYPE_CMS_PAGE,
|
|
36
|
+
TYPE_CATEGORY,
|
|
37
|
+
}
|
|
@@ -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 { default, getSortedItems } from './Menu';
|
|
@@ -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 { default } from './isMobile';
|
|
13
|
+
export * from './isMobile';
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
export const isUsingClientHints = 'userAgentData' in navigator;
|
|
12
|
+
|
|
13
|
+
export const isMobile = {
|
|
14
|
+
android: (agent = navigator.userAgent): boolean => /android/i.test(agent),
|
|
15
|
+
blackBerry: (agent = navigator.userAgent): boolean => /blackberry/i.test(agent),
|
|
16
|
+
iOS: (agent = navigator.userAgent): boolean => /iphone|ipod|ipad/i.test(agent),
|
|
17
|
+
opera: (agent = navigator.userAgent): boolean => /opera mini/i.test(agent),
|
|
18
|
+
// see https://developer.chrome.com/docs/multidevice/user-agent/ for details
|
|
19
|
+
safari: (agent = navigator.userAgent): boolean => /safari/i.test(agent)
|
|
20
|
+
&& !/chrome/i.test(agent)
|
|
21
|
+
&& !/CriOS/i.test(agent)
|
|
22
|
+
&& !/FxiOS/i.test(agent),
|
|
23
|
+
windows: (agent = navigator.userAgent): boolean => /iemobile/i.test(agent),
|
|
24
|
+
// iPad uses 810 so we need to handle that.
|
|
25
|
+
any: (): boolean => window.matchMedia('(max-width: 810px)').matches && window.matchMedia('screen').matches,
|
|
26
|
+
standaloneMode: (): boolean => window.matchMedia('(display-mode: standalone)').matches,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// https://medium.com/@galmeiri/get-ready-for-chrome-user-agent-string-phase-out-c6840da1c31e
|
|
30
|
+
export const isMobileClientHints = {
|
|
31
|
+
getDeviceData: (): Promise<UADataValues> => navigator.userAgentData.getHighEntropyValues(['platform', 'model']),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default isMobile;
|
|
@@ -0,0 +1,71 @@
|
|
|
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-theme
|
|
10
|
+
* @link https://github.com/meeovi/mframework
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
InvoiceItem, OrderItem, OrderItemProduct, RefundItem, ShipmentItemInterface,
|
|
15
|
+
} from '../../normalizers/Order.type';
|
|
16
|
+
import { decodeBase64 } from '../../utils/Base64';
|
|
17
|
+
|
|
18
|
+
import { OrderItemQtyArray } from './Orders.type';
|
|
19
|
+
|
|
20
|
+
/** @namespace ../../utils/Orders/getFormattedDate */
|
|
21
|
+
export const getFormattedDate = (rawDate = ''): string => {
|
|
22
|
+
const date = new Date(rawDate.replace(/\s/, 'T'));
|
|
23
|
+
const RADIX = 10;
|
|
24
|
+
|
|
25
|
+
const addLeadingZero = (value: number) => (value < RADIX ? `0${value}` : value);
|
|
26
|
+
|
|
27
|
+
const day = addLeadingZero(date.getDate());
|
|
28
|
+
const month = addLeadingZero(date.getMonth() + 1);
|
|
29
|
+
|
|
30
|
+
return `${date.getFullYear()}-${month}-${day}`;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** @namespace ../../utils/Orders/formatOrders */
|
|
34
|
+
export const formatOrders = (orders: OrderItem[]): OrderItem[] => orders.reduceRight((acc: OrderItem[], order) => {
|
|
35
|
+
const { order_date, id: uid } = order;
|
|
36
|
+
const formattedDate = getFormattedDate(order_date);
|
|
37
|
+
|
|
38
|
+
return [
|
|
39
|
+
...acc,
|
|
40
|
+
{
|
|
41
|
+
...order,
|
|
42
|
+
id: decodeBase64(uid),
|
|
43
|
+
created_at: formattedDate,
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
}, []);
|
|
47
|
+
|
|
48
|
+
/** @namespace ../../utils/Orders/getOrderItemQtyToArray */
|
|
49
|
+
export const getOrderItemQtyToArray = (
|
|
50
|
+
product: OrderItemProduct
|
|
51
|
+
| ShipmentItemInterface
|
|
52
|
+
| InvoiceItem
|
|
53
|
+
| RefundItem,
|
|
54
|
+
): OrderItemQtyArray => ({
|
|
55
|
+
quantity_ordered: 'quantity_ordered' in product ? product.quantity_ordered : 0,
|
|
56
|
+
quantity_canceled: 'quantity_canceled' in product ? product.quantity_canceled : 0,
|
|
57
|
+
quantity_invoiced: 'quantity_invoiced' in product ? product.quantity_invoiced : 0,
|
|
58
|
+
quantity_refunded: 'quantity_refunded' in product ? product.quantity_refunded : 0,
|
|
59
|
+
quantity_returned: 'quantity_returned' in product ? product.quantity_returned : 0,
|
|
60
|
+
quantity_shipped: 'quantity_shipped' in product ? product.quantity_shipped : 0,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
/** @namespace ../../utils/Orders/getProductFromOrder */
|
|
64
|
+
export const getProductFromOrder = (
|
|
65
|
+
allProducts: OrderItemProduct[],
|
|
66
|
+
requiredProductSku: string,
|
|
67
|
+
): OrderItemProduct | undefined => allProducts.find(({ product_sku }) => product_sku === requiredProductSku);
|
|
68
|
+
|
|
69
|
+
/** @namespace ../../utils/Orders/getOrderItemRowDiscount */
|
|
70
|
+
export const getOrderItemRowDiscount = (discounts: Array<{ amount: { value?: string | number } }>): number => discounts
|
|
71
|
+
.reduce((currentValue, { amount: { value } }) => (Number(value) || 0) + currentValue, 0);
|
|
@@ -0,0 +1,19 @@
|
|
|
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-theme
|
|
9
|
+
* @link https://github.com/meeovi/mframework
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export interface OrderItemQtyArray {
|
|
13
|
+
quantity_ordered: number;
|
|
14
|
+
quantity_canceled: number;
|
|
15
|
+
quantity_invoiced: number;
|
|
16
|
+
quantity_refunded: number;
|
|
17
|
+
quantity_returned: number;
|
|
18
|
+
quantity_shipped: number;
|
|
19
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
export * from './Orders';
|