@meeovi/layer-commerce 1.0.10 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/catalog/product/ProductAccordion/ProductAccordion.vue +39 -0
- package/app/components/catalog/product/ProductAccordion/__tests__/ProductAccordion.spec.ts +15 -0
- package/app/components/catalog/product/ProductAccordion/types.ts +5 -0
- package/app/components/catalog/product/ProductProperties/ProductProperties.vue +50 -0
- package/app/components/catalog/product/ProductProperties/__tests__/ProductProperties.spec.ts +15 -0
- package/app/components/catalog/product/ProductProperties/types.ts +5 -0
- package/app/components/catalog/product/ProductSlider/ProductSlider.vue +28 -0
- package/app/components/catalog/product/ProductSlider/__tests__/ProductSlider.spec.ts +14 -0
- package/app/components/catalog/product/ProductSlider/types.ts +7 -0
- package/app/components/catalog/product/RecommendedProducts/RecommendedProducts.vue +12 -0
- package/app/components/catalog/product/RecommendedProducts/types.ts +5 -0
- package/app/components/catalog/product/RenderContentProductSlider/RenderContentProductSlider.vue +11 -0
- package/app/components/catalog/product/add-attribute.vue +54 -0
- package/app/components/catalog/product/add-product-type.vue +54 -0
- package/app/components/catalog/product/add-product.vue +53 -0
- package/app/components/catalog/product/add-showcase.vue +52 -0
- package/app/components/catalog/product/add-station.vue +54 -0
- package/app/components/catalog/product/bestsellers.vue +57 -0
- package/app/components/catalog/product/bidding.vue +93 -0
- package/app/components/catalog/product/colorOptions.vue +58 -0
- package/app/components/catalog/product/deals.vue +46 -0
- package/app/components/catalog/product/exclusives.vue +56 -0
- package/app/components/catalog/product/featuredproducts.vue +57 -0
- package/app/components/catalog/product/giftCard.vue +63 -0
- package/app/components/catalog/product/latestproducts.vue +46 -0
- package/app/components/catalog/product/productCard.vue +105 -0
- package/app/components/catalog/product/productCompare.vue +60 -0
- package/app/components/catalog/product/productCompareTable.vue +441 -0
- package/app/components/catalog/product/productDetails.vue +126 -0
- package/app/components/catalog/product/productFaqs.vue +17 -0
- package/app/components/catalog/product/productGallery.vue +16 -0
- package/app/components/catalog/product/productQty.vue +54 -0
- package/app/components/catalog/product/productReviews.vue +56 -0
- package/app/components/catalog/product/productSpecs.vue +116 -0
- package/app/components/catalog/product/radiostation.vue +36 -0
- package/app/components/catalog/product/recentlyviewed.vue +43 -0
- package/app/components/catalog/product/relatedbrands.vue +54 -0
- package/app/components/catalog/product/relatedproducts.vue +43 -0
- package/app/components/catalog/product/relatedstations.vue +40 -0
- package/app/components/catalog/product/shippingOptions.vue +41 -0
- package/app/components/catalog/product/sizeOptions.vue +42 -0
- package/app/components/catalog/product/update-attribute-set.vue +209 -0
- package/app/components/catalog/product/update-attribute.vue +118 -0
- package/app/components/catalog/product/update-product.vue +372 -0
- package/app/components/catalog/product/update-showcase.vue +153 -0
- package/app/components/catalog/shops/relatedstores.vue +37 -0
- package/app/components/catalog/shops/restaurant.vue +66 -0
- package/app/components/catalog/shops/stores.vue +44 -0
- package/app/components/catalog/vendor/README.md +3 -0
- package/app/components/catalog/vendor/blocks/biggestcustomers.vue +33 -0
- package/app/components/catalog/vendor/blocks/lowestselling.vue +33 -0
- package/app/components/catalog/vendor/blocks/topcategories.vue +33 -0
- package/app/components/catalog/vendor/blocks/topproducts.vue +27 -0
- package/app/components/catalog/vendor/pages/attributes.vue +43 -0
- package/app/components/catalog/vendor/pages/commissions.vue +43 -0
- package/app/components/catalog/vendor/pages/crm.vue +67 -0
- package/app/components/catalog/vendor/pages/dashboard.vue +46 -0
- package/app/components/catalog/vendor/pages/emails.vue +43 -0
- package/app/components/catalog/vendor/pages/enquiries.vue +43 -0
- package/app/components/catalog/vendor/pages/invoices.vue +43 -0
- package/app/components/catalog/vendor/pages/orders.vue +68 -0
- package/app/components/catalog/vendor/pages/products.vue +55 -0
- package/app/components/catalog/vendor/pages/reviews.vue +48 -0
- package/app/components/catalog/vendor/pages/shipments.vue +43 -0
- package/app/components/catalog/vendor/pages/stores.vue +43 -0
- package/app/components/categories/chart/[id].vue +200 -0
- package/app/components/categories/chart/add-chart.vue +142 -0
- package/app/components/categories/chart/chart.vue +82 -0
- package/app/components/categories/chart/monthlyChart.vue +46 -0
- package/app/components/categories/chart/weeklyChart.vue +46 -0
- package/app/components/categories/chart/yearlyChart.vue +46 -0
- package/app/components/categories/charts.vue +118 -0
- package/app/components/categories/deals.vue +101 -0
- package/app/components/categories/eats.vue +49 -0
- package/app/components/categories/restaurants.vue +26 -0
- package/app/components/categories/station/[id].vue +72 -0
- package/app/components/categories/stations.vue +124 -0
- package/app/components/categories/time/time.vue +63 -0
- package/app/components/categories/travel.vue +75 -0
- package/app/components/categories/weather/weather.vue +44 -0
- package/app/components/content/blocks/breadcrumbs.vue +0 -0
- package/app/components/content/blocks/currencySwitcher.vue +0 -0
- package/app/components/content/blocks/languageSwitcher.vue +0 -0
- package/app/components/content/blocks/videoproduct.vue +9 -0
- package/app/components/content/pages/checkout.vue +118 -0
- package/app/components/content/pages/meeoviGlobal.vue +68 -0
- package/app/components/content/pages/pickup-locations.vue +238 -0
- package/app/components/content/pages/showcases.vue +90 -0
- package/app/components/content/pages/success.vue +60 -0
- package/app/components/marketing/add-brand.vue +54 -0
- package/app/components/marketing/add-incentive.vue +54 -0
- package/app/components/marketing/promotions/giftcards.vue +102 -0
- package/app/components/marketing/promotions/subscriptions.vue +121 -0
- package/app/components/marketing/update-incentive.vue +326 -0
- package/app/components/menus/lowernav.vue +78 -0
- package/app/components/partials/LocaleSelector.vue +24 -0
- package/app/components/partials/ShoppingCart.vue +128 -0
- package/app/components/partials/StripePayment.vue +149 -0
- package/app/components/partials/addToCartBtn.vue +40 -0
- package/app/components/partials/cartItem.vue +124 -0
- package/app/components/partials/checkoutButton.vue +44 -0
- package/app/components/partials/compareBtn.vue +68 -0
- package/app/components/partials/ratings.vue +13 -0
- package/app/components/partials/store/CurrencySelector.vue +133 -0
- package/app/components/partials/store/StoreSwitcher.vue +13 -0
- package/app/components/placeholders/Comments.vue +15 -0
- package/app/components/placeholders/CreateListBtn.vue +7 -0
- package/app/components/placeholders/Event.vue +9 -0
- package/app/components/placeholders/ListShowcases.vue +9 -0
- package/app/components/placeholders/Short.vue +9 -0
- package/app/components/placeholders/Space.vue +9 -0
- package/app/components/placeholders/Tag.vue +7 -0
- package/app/components/related/brandCard.vue +41 -0
- package/app/components/related/incentiveCard.vue +44 -0
- package/app/components/related/invoiceCard.vue +43 -0
- package/app/components/related/orderCard.vue +43 -0
- package/app/components/related/relatedproducts.vue +17 -0
- package/app/components/sales/CartPageContent/CartPageContent.vue +37 -0
- package/app/components/sales/CheckoutAddress/CheckoutAddress.vue +50 -0
- package/app/components/sales/CheckoutAddress/__tests__/CheckoutAddress.spec.ts +16 -0
- package/app/components/sales/CheckoutAddress/types.ts +16 -0
- package/app/components/sales/CheckoutPayment/CheckoutPayment.vue +68 -0
- package/app/components/sales/CheckoutPayment/__tests__/CheckoutPayment.spec.ts +14 -0
- package/app/components/sales/CheckoutPayment/types.ts +12 -0
- package/app/components/sales/OrderSummary/OrderSummary.vue +57 -0
- package/app/components/sales/OrderSummary/__tests__/ContactInformation.spec.ts +52 -0
- package/app/components/sales/OrderSummary/types.ts +5 -0
- package/app/components/sales/incentives.vue +223 -0
- package/app/components/sales/invoices.vue +107 -0
- package/app/components/sales/orders.vue +378 -0
- package/app/components/sales/shipments.vue +65 -0
- package/app/components/sales/transactions.vue +109 -0
- package/app/components/shop/add-shop.vue +54 -0
- package/app/components/shop/cart/cartItem.vue +182 -0
- package/app/components/shop/cart/checkout.vue +415 -0
- package/app/components/shop/checkout/StripeCardElement.vue +206 -0
- package/app/components/shop/checkout/StripeCheckout.vue +49 -0
- package/app/components/shop/checkout/addressBilling.vue +263 -0
- package/app/components/shop/checkout/addressShipping.vue +175 -0
- package/app/components/shop/checkout/cart/ProductItem.vue +56 -0
- package/app/components/shop/checkout/cart/PromotionItem.vue +53 -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/types.ts +136 -0
- package/app/composables/domain/cart.ts +0 -0
- package/app/composables/domain/category.ts +0 -0
- package/app/composables/domain/order.ts +0 -0
- package/app/composables/domain/price.ts +0 -0
- package/app/composables/domain/product.ts +8 -0
- package/app/composables/domain/reward.ts +0 -0
- package/app/composables/domain/transactions.ts +0 -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 +6 -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/products/registry.ts +20 -0
- package/app/composables/products/types.ts +13 -0
- package/app/composables/products/useEvents.ts +0 -0
- package/app/composables/products/useGiftCards.ts +0 -0
- package/app/composables/products/useProducts.ts +12 -0
- package/app/composables/products/useSubscriptions.ts +0 -0
- package/app/composables/registry.ts +21 -0
- package/app/composables/stores/cart.ts +218 -0
- package/app/composables/stores/cartStore.ts +300 -0
- package/app/composables/stores/checkout.ts +19 -0
- package/app/composables/stores/compare.ts +65 -0
- package/app/composables/stores/currency.js +29 -0
- package/app/composables/stores/digital-products.js +11 -0
- package/app/composables/stores/index.js +0 -0
- package/app/composables/stores/orders.ts +161 -0
- package/app/composables/stores/product.ts +26 -0
- package/app/composables/stores/productList.ts +0 -0
- package/app/composables/stores/productListInfo.ts +0 -0
- package/app/composables/stores/products.ts +112 -0
- package/app/composables/stores/recentlyViewedProducts.ts +0 -0
- package/app/composables/stores/review.ts +25 -0
- package/app/composables/stores/storeInPickUp.ts +22 -0
- package/app/composables/stores/user.ts +20 -0
- package/app/composables/stores/wishlist.ts +19 -0
- package/app/composables/types/Order.type.ts +181 -0
- package/app/composables/types/index.ts +285 -0
- package/app/composables/types/product.ts +14 -0
- package/app/composables/useBreakpoints/index.ts +1 -0
- package/app/composables/useBreakpoints/useBreakpoints.ts +28 -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 +64 -0
- package/app/composables/useContent/index.ts +1 -0
- package/app/composables/useContent/types.ts +44 -0
- package/app/composables/useContent/useContent.ts +45 -0
- package/app/composables/useContent.ts +57 -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/usePageTitle.ts +16 -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/utils/countryList.ts +14 -0
- package/app/composables/utils/currency.js +56 -0
- package/app/composables/utils/glossary.ts +0 -0
- package/app/composables/utils/importExport.ts +0 -0
- package/app/composables/utils/index.js +0 -0
- package/app/composables/utils/print.ts +0 -0
- package/app/composables/utils/shopThemes.ts +0 -0
- package/app/composables/utils/statistics.ts +0 -0
- package/app/composables/utils/stock.ts +0 -0
- package/app/composables/utils/stripe.ts +16 -0
- package/app/composables/utils/taxation.ts +0 -0
- package/app/composables/utils/tellFriends.ts +0 -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/composables/vendors/index.ts +0 -0
- package/app/composables/vendors/registry.ts +0 -0
- package/app/composables/vendors/useAffiliates.ts +0 -0
- package/app/composables/vendors/useCommission.ts +0 -0
- package/app/modules/vue-head/composables/useHead.ts +3 -0
- package/app/pages/brand/[...slug].vue +92 -0
- package/app/pages/brands.vue +90 -0
- package/app/pages/cart.vue +142 -0
- package/app/pages/compare.vue +166 -0
- package/app/pages/departments/[...slug].vue +385 -0
- package/app/pages/departments/category/[...slug].vue +135 -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/types/shims-imports.d.ts +13 -0
- package/app/utils/client.ts +26 -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/global.d.ts +149 -0
- package/index.js +3 -0
- package/package.json +3 -9
- package/tsconfig.json +31 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useCart } from '~/composables/useCart/useCart';
|
|
2
|
+
|
|
3
|
+
describe('useCart', () => {
|
|
4
|
+
it('should return account data', async () => {
|
|
5
|
+
const { fetchCard, data } = useCart();
|
|
6
|
+
|
|
7
|
+
await fetchCard();
|
|
8
|
+
|
|
9
|
+
expect(data.value).not.toBeUndefined();
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useCart';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
import type { SfCart, Maybe } from '../_types';
|
|
3
|
+
|
|
4
|
+
export interface UseCartState {
|
|
5
|
+
data: Maybe<SfCart>;
|
|
6
|
+
loading: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type FetchCard = () => Promise<Ref<Maybe<SfCart>>>;
|
|
10
|
+
|
|
11
|
+
export interface UseCart {
|
|
12
|
+
data: Readonly<Ref<UseCartState['data']>>;
|
|
13
|
+
loading: Readonly<Ref<boolean>>;
|
|
14
|
+
fetchCard: FetchCard;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type UseCartReturn = () => UseCart;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { SfCart } from '../_types';
|
|
2
|
+
import { toRefs } from '@vueuse/shared';
|
|
3
|
+
import type { UseCartReturn, UseCartState, FetchCard } from './types';
|
|
4
|
+
import { getCommerceClient } from '../../utils/client';
|
|
5
|
+
import { useAsyncData, useState } from 'nuxt/app';
|
|
6
|
+
import { useHandleError } from '../useHandleError';
|
|
7
|
+
import { ref } from 'vue';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @description Composable for managing cart.
|
|
11
|
+
* @returns {@link UseCartReturn}
|
|
12
|
+
* @example
|
|
13
|
+
* const { data, loading } = useCart();
|
|
14
|
+
*/
|
|
15
|
+
export const useCart: UseCartReturn = () => {
|
|
16
|
+
const state = useState<UseCartState>('useCart', () => ({
|
|
17
|
+
data: null,
|
|
18
|
+
loading: false,
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @description Function for fetching the cart.
|
|
23
|
+
* @example
|
|
24
|
+
* getCart();
|
|
25
|
+
*/
|
|
26
|
+
const fetchCard: FetchCard = async () => {
|
|
27
|
+
state.value.loading = true;
|
|
28
|
+
try {
|
|
29
|
+
const client = getCommerceClient();
|
|
30
|
+
const { data, error } = await useAsyncData<SfCart>(() => client.getCart?.());
|
|
31
|
+
useHandleError(error.value);
|
|
32
|
+
state.value.data = data.value;
|
|
33
|
+
// wrap the returned ref into our Vue ref to avoid cross-package Ref mismatch
|
|
34
|
+
return ref(data.value);
|
|
35
|
+
} catch (error) {
|
|
36
|
+
throw new Error(error as string);
|
|
37
|
+
} finally {
|
|
38
|
+
state.value.loading = false;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
fetchCard,
|
|
44
|
+
...toRefs(state.value),
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useCartShippingMethods } from '../useCartShippingMethods';
|
|
2
|
+
|
|
3
|
+
describe('useCartShippingMethods', () => {
|
|
4
|
+
it('should return shipping methods', async () => {
|
|
5
|
+
const { getShippingMethods, data } = useCartShippingMethods();
|
|
6
|
+
|
|
7
|
+
await getShippingMethods();
|
|
8
|
+
|
|
9
|
+
expect(data.value).not.toBeUndefined();
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useCartShippingMethods';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SfShippingMethods, Maybe } from '../_types';
|
|
2
|
+
import type { Ref } from 'vue';
|
|
3
|
+
|
|
4
|
+
export interface UseCartShippingMethodsState {
|
|
5
|
+
data: Maybe<SfShippingMethods>;
|
|
6
|
+
loading: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type GetShippingMethods = () => Promise<Ref<Maybe<SfShippingMethods>>>;
|
|
10
|
+
|
|
11
|
+
export interface UseCartShippingMethods {
|
|
12
|
+
data: Readonly<Ref<UseCartShippingMethodsState['data']>>;
|
|
13
|
+
loading: Readonly<Ref<boolean>>;
|
|
14
|
+
getShippingMethods: GetShippingMethods;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type UseCartShippingMethodsReturn = () => UseCartShippingMethods;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { toRefs } from '@vueuse/shared';
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
import type { Ref } from 'vue';
|
|
4
|
+
import type { Maybe, SfShippingMethods } from '../_types';
|
|
5
|
+
import type {
|
|
6
|
+
UseCartShippingMethodsState,
|
|
7
|
+
UseCartShippingMethodsReturn,
|
|
8
|
+
GetShippingMethods,
|
|
9
|
+
} from './types';
|
|
10
|
+
import { getCommerceClient } from '../../utils/client';
|
|
11
|
+
import { useAsyncData, useState } from 'nuxt/app';
|
|
12
|
+
import { useHandleError } from '../useHandleError';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @description Composable for getting shipping methods.
|
|
16
|
+
* @example
|
|
17
|
+
* const { data, loading, getShippingMethods } = useCartShippingMethods();
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export const useCartShippingMethods: UseCartShippingMethodsReturn = () => {
|
|
21
|
+
const state = useState<UseCartShippingMethodsState>('useCartSippingMethods', () => ({
|
|
22
|
+
data: null,
|
|
23
|
+
loading: false,
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @description Function for fetching shipping methods.
|
|
28
|
+
* @example
|
|
29
|
+
* getShippingMethods();
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
const getShippingMethods: GetShippingMethods = async () => {
|
|
33
|
+
state.value.loading = true;
|
|
34
|
+
const client = getCommerceClient();
|
|
35
|
+
const { data, error } = await useAsyncData<any>(() => client.listShippingMethods?.());
|
|
36
|
+
useHandleError(error.value);
|
|
37
|
+
const result = (data.value && (data.value as any).methods) ? data.value : { methods: [] };
|
|
38
|
+
state.value.data = result as any;
|
|
39
|
+
state.value.loading = false;
|
|
40
|
+
return computed(() => state.value.data) as unknown as Ref<Maybe<SfShippingMethods>>;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
getShippingMethods,
|
|
45
|
+
...toRefs(state.value),
|
|
46
|
+
};
|
|
47
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ref, watchEffect } from 'vue'
|
|
2
|
+
import { useAlternateContext } from '@meeovi/core'
|
|
3
|
+
|
|
4
|
+
export function useCatalogFallback() {
|
|
5
|
+
// Attempt to use core runtime adapter if present
|
|
6
|
+
try {
|
|
7
|
+
const ctx = useAlternateContext() as any
|
|
8
|
+
const adapter = ctx.getAdapter('catalog')
|
|
9
|
+
if (adapter) {
|
|
10
|
+
return {
|
|
11
|
+
adapter,
|
|
12
|
+
async getProductById(id: string) {
|
|
13
|
+
return adapter.getProductById(id)
|
|
14
|
+
},
|
|
15
|
+
async getProductBySlug(slug: string) {
|
|
16
|
+
return adapter.getProductBySlug(slug)
|
|
17
|
+
},
|
|
18
|
+
async listProducts(params?: Record<string, unknown>) {
|
|
19
|
+
return adapter.listProducts(params)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
} catch (e) {
|
|
24
|
+
// runtime context not available
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Fallback to Directus via Nuxt app runtime (assumes component calling runs in Vue context)
|
|
28
|
+
return {
|
|
29
|
+
adapter: null,
|
|
30
|
+
async getProductById(_id: string) {
|
|
31
|
+
const nuxtApp = useNuxtApp() as any
|
|
32
|
+
if (nuxtApp?.$directus && nuxtApp.$readItem) {
|
|
33
|
+
const res = await nuxtApp.$directus.request(nuxtApp.$readItem('products', { filter: { id: { _eq: _id } }, limit: 1 }))
|
|
34
|
+
return res?.[0] || null
|
|
35
|
+
}
|
|
36
|
+
return null
|
|
37
|
+
},
|
|
38
|
+
async getProductBySlug(slug: string) {
|
|
39
|
+
const nuxtApp = useNuxtApp() as any
|
|
40
|
+
if (nuxtApp?.$directus && nuxtApp.$readItem) {
|
|
41
|
+
const res = await nuxtApp.$directus.request(nuxtApp.$readItem('products', { filter: { slug: { _eq: slug } }, limit: 1 }))
|
|
42
|
+
return res?.[0] || null
|
|
43
|
+
}
|
|
44
|
+
return null
|
|
45
|
+
},
|
|
46
|
+
async listProducts(params?: Record<string, unknown>) {
|
|
47
|
+
const nuxtApp = useNuxtApp() as any
|
|
48
|
+
if (nuxtApp?.$directus && nuxtApp.$readItems) {
|
|
49
|
+
const res = await nuxtApp.$directus.request(nuxtApp.$readItems('products', params || {}))
|
|
50
|
+
return res || []
|
|
51
|
+
}
|
|
52
|
+
return []
|
|
53
|
+
}
|
|
54
|
+
,
|
|
55
|
+
async listAttributes(filter?: Record<string, unknown>) {
|
|
56
|
+
const nuxtApp = useNuxtApp() as any
|
|
57
|
+
if (nuxtApp?.$directus && nuxtApp.$readItems) {
|
|
58
|
+
const res = await nuxtApp.$directus.request(nuxtApp.$readItems('attributes', filter || {}))
|
|
59
|
+
return res || []
|
|
60
|
+
}
|
|
61
|
+
return []
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useContent';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
import type { Maybe } from '../_types';
|
|
3
|
+
import type { HeadingProps } from '~/components/Heading/types';
|
|
4
|
+
import type { ProductSliderProps } from '~/components/ProductSlider/types';
|
|
5
|
+
import type { CategoryCardProps } from '~/components/ui/CategoryCard/types';
|
|
6
|
+
import type { DisplayProps } from '~/components/ui/Display/types';
|
|
7
|
+
import type { HeroProps } from '~/components/ui/Hero/types';
|
|
8
|
+
|
|
9
|
+
type EntryFields<TFields> = Array<{
|
|
10
|
+
fields: TFields;
|
|
11
|
+
}>;
|
|
12
|
+
|
|
13
|
+
type WithComponentField<TProps, TComponent> = TProps & {
|
|
14
|
+
component: TComponent;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type DynamicContentFields =
|
|
18
|
+
| WithComponentField<HeroProps, 'Hero'>
|
|
19
|
+
| WithComponentField<CategoryCardProps, 'Card'>
|
|
20
|
+
| WithComponentField<HeadingProps, 'Heading'>
|
|
21
|
+
| WithComponentField<DisplayProps, 'Display'>
|
|
22
|
+
| WithComponentField<ProductSliderProps, 'ProductSlider'>;
|
|
23
|
+
|
|
24
|
+
export interface ContentDynamicPage {
|
|
25
|
+
component: 'Page';
|
|
26
|
+
content: EntryFields<DynamicContentFields>;
|
|
27
|
+
name: string;
|
|
28
|
+
url: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface UseContentState {
|
|
32
|
+
data: Maybe<EntryFields<ContentDynamicPage>>;
|
|
33
|
+
loading: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type GetContent = () => Promise<Ref<Maybe<EntryFields<ContentDynamicPage>>>>;
|
|
37
|
+
|
|
38
|
+
export interface UseContent {
|
|
39
|
+
data: Readonly<Ref<UseContentState['data']>>;
|
|
40
|
+
loading: Readonly<Ref<boolean>>;
|
|
41
|
+
getContent: GetContent;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export type UseContentReturn = (url: string) => UseContent;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { toRefs } from '@vueuse/shared';
|
|
2
|
+
import type { UseContentReturn, UseContentState, GetContent } from './types';
|
|
3
|
+
import { getCommerceClient } from '../../utils/client';
|
|
4
|
+
import { useAsyncData, useState } from 'nuxt/app';
|
|
5
|
+
import { useHandleError } from '../useHandleError';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @description Composable for managing content from CMS.
|
|
9
|
+
* @param url Parameter of the content to fetch.
|
|
10
|
+
* @returns {@link UseContent}
|
|
11
|
+
* @example
|
|
12
|
+
* const { data, loading, getContent } = useContent<ContentFieldsType>('url');
|
|
13
|
+
*/
|
|
14
|
+
export const useContent: UseContentReturn = (url) => {
|
|
15
|
+
const state = useState<UseContentState>(`content-${url}`, () => ({
|
|
16
|
+
data: null,
|
|
17
|
+
loading: false,
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @description Function for fetching the content.
|
|
22
|
+
* @example
|
|
23
|
+
* getContent();
|
|
24
|
+
*/
|
|
25
|
+
const getContent: GetContent = async () => {
|
|
26
|
+
state.value.loading = true;
|
|
27
|
+
try {
|
|
28
|
+
const client = getCommerceClient();
|
|
29
|
+
const result = await useAsyncData(() => client.listProducts?.());
|
|
30
|
+
const { data, error } = result as unknown as { data: Awaited<ReturnType<GetContent>>; error: any };
|
|
31
|
+
useHandleError(error?.value ?? error);
|
|
32
|
+
state.value.data = data.value;
|
|
33
|
+
return data;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
throw new Error(error as string);
|
|
36
|
+
} finally {
|
|
37
|
+
state.value.loading = false;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
getContent,
|
|
43
|
+
...toRefs(state.value),
|
|
44
|
+
};
|
|
45
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { useAlternateContext } from '@meeovi/core'
|
|
2
|
+
|
|
3
|
+
export function useContentFallback() {
|
|
4
|
+
try {
|
|
5
|
+
const ctx = useAlternateContext() as any
|
|
6
|
+
const adapter = ctx.getAdapter('catalog')
|
|
7
|
+
// If a content-capable adapter is available and exposes methods, use it
|
|
8
|
+
if (adapter && typeof adapter.listShops === 'function') {
|
|
9
|
+
return {
|
|
10
|
+
adapter,
|
|
11
|
+
listShops: (opts?: any) => adapter.listShops(opts),
|
|
12
|
+
getBrandBySlug: (slug: string) => adapter.getBrandBySlug?.(slug),
|
|
13
|
+
getPage: (id: string) => adapter.getPage?.(id)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
} catch (e) {
|
|
17
|
+
// ignore
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Fallback to Directus via Nuxt runtime
|
|
21
|
+
return {
|
|
22
|
+
adapter: null,
|
|
23
|
+
async listShops(params?: Record<string, unknown>) {
|
|
24
|
+
const nuxtApp = useNuxtApp() as any
|
|
25
|
+
if (nuxtApp?.$directus && nuxtApp.$readItems) {
|
|
26
|
+
const res = await nuxtApp.$directus.request(nuxtApp.$readItems('shops', params || {}))
|
|
27
|
+
return res || []
|
|
28
|
+
}
|
|
29
|
+
return []
|
|
30
|
+
},
|
|
31
|
+
async listBrands(params?: Record<string, unknown>) {
|
|
32
|
+
const nuxtApp = useNuxtApp() as any
|
|
33
|
+
if (nuxtApp?.$directus && nuxtApp.$readItems) {
|
|
34
|
+
const res = await nuxtApp.$directus.request(nuxtApp.$readItems('brands', params || {}))
|
|
35
|
+
return res || []
|
|
36
|
+
}
|
|
37
|
+
return []
|
|
38
|
+
},
|
|
39
|
+
async getBrandBySlug(slug: string) {
|
|
40
|
+
const nuxtApp = useNuxtApp() as any
|
|
41
|
+
if (nuxtApp?.$directus && nuxtApp.$readItems) {
|
|
42
|
+
const res = await nuxtApp.$directus.request(nuxtApp.$readItems('brands', { filter: { slug: { _eq: slug } }, limit: 1 }))
|
|
43
|
+
return res?.[0] || null
|
|
44
|
+
}
|
|
45
|
+
return null
|
|
46
|
+
},
|
|
47
|
+
async getPage(id: string) {
|
|
48
|
+
const nuxtApp = useNuxtApp() as any
|
|
49
|
+
if (nuxtApp?.$directus && nuxtApp.$readItem) {
|
|
50
|
+
return await nuxtApp.$directus.request(nuxtApp.$readItem('pages', id))
|
|
51
|
+
}
|
|
52
|
+
return null
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default useContentFallback
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useCustomer } from '~/composables/useCustomer/useCustomer';
|
|
2
|
+
|
|
3
|
+
vi.mock('@meeovi/sdk', () => ({
|
|
4
|
+
sdk: {
|
|
5
|
+
commerce: {
|
|
6
|
+
getCustomer: vi.fn(() => ({
|
|
7
|
+
id: 'SfId',
|
|
8
|
+
email: 'hieronim.anonim@gmail.com',
|
|
9
|
+
firstName: 'hieronim',
|
|
10
|
+
lastName: 'anonim'
|
|
11
|
+
})),
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
}));
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
describe('useCustomer', () => {
|
|
18
|
+
it('should return account data', async () => {
|
|
19
|
+
const { fetchCustomer, data } = useCustomer();
|
|
20
|
+
|
|
21
|
+
await fetchCustomer();
|
|
22
|
+
|
|
23
|
+
expect(data.value).not.toBeUndefined();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
import type { Maybe, SfCustomer } from '../_types';
|
|
3
|
+
|
|
4
|
+
export interface UseCustomerState {
|
|
5
|
+
data: Maybe<SfCustomer>;
|
|
6
|
+
loading: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type FetchCustomer = () => Promise<Ref<Maybe<SfCustomer>>>;
|
|
10
|
+
|
|
11
|
+
export interface UseCustomer {
|
|
12
|
+
data: Readonly<Ref<UseCustomerState['data']>>;
|
|
13
|
+
loading: Readonly<Ref<boolean>>;
|
|
14
|
+
fetchCustomer: FetchCustomer;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type UseCustomerReturn = () => UseCustomer;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { toRefs } from '@vueuse/shared';
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
import type { Ref } from 'vue';
|
|
4
|
+
import type { Maybe, SfCustomer } from '../_types';
|
|
5
|
+
import type { UseCustomerReturn, UseCustomerState, FetchCustomer } from './types';
|
|
6
|
+
import { getCommerceClient } from '../../utils/client';
|
|
7
|
+
import { useAsyncData, useState } from 'nuxt/app';
|
|
8
|
+
import { useHandleError } from '../useHandleError';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @description Composable managing customer data
|
|
12
|
+
* @returns {@link UseCustomerReturn}
|
|
13
|
+
* @example
|
|
14
|
+
* const { data, loading, fetchCustomer } = useCustomer();
|
|
15
|
+
*/
|
|
16
|
+
export const useCustomer: UseCustomerReturn = () => {
|
|
17
|
+
const state = useState<UseCustomerState>('useCustomer', () => ({
|
|
18
|
+
data: null,
|
|
19
|
+
loading: false,
|
|
20
|
+
}));
|
|
21
|
+
|
|
22
|
+
/** Function for fetching customer data
|
|
23
|
+
* @example
|
|
24
|
+
* fetchCustomer();
|
|
25
|
+
*/
|
|
26
|
+
const fetchCustomer: FetchCustomer = async () => {
|
|
27
|
+
state.value.loading = true;
|
|
28
|
+
const client = getCommerceClient();
|
|
29
|
+
const { data, error } = await useAsyncData<UseCustomerState['data']>(() => client.getCustomer?.());
|
|
30
|
+
useHandleError(error.value);
|
|
31
|
+
state.value.data = data.value;
|
|
32
|
+
state.value.loading = false;
|
|
33
|
+
return computed(() => state.value.data) as unknown as Ref<Maybe<SfCustomer>>;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
fetchCustomer,
|
|
38
|
+
...toRefs(state.value),
|
|
39
|
+
};
|
|
40
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useCustomerAddress } from '~/composables/useCustomerAddress/useCustomerAddress';
|
|
2
|
+
|
|
3
|
+
describe('useCustomerAddress', () => {
|
|
4
|
+
it('should return account data', async () => {
|
|
5
|
+
const { fetchCustomerAddress, data } = useCustomerAddress();
|
|
6
|
+
|
|
7
|
+
await fetchCustomerAddress();
|
|
8
|
+
|
|
9
|
+
expect(data.value).not.toBeUndefined();
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
import type { Maybe, SfAddress } from '../_types';
|
|
3
|
+
|
|
4
|
+
export interface UseCustomerAddressState {
|
|
5
|
+
data: Maybe<SfAddress>;
|
|
6
|
+
loading: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type FetchCustomerAddress = () => Promise<Ref<Maybe<SfAddress>>>;
|
|
10
|
+
|
|
11
|
+
export interface UseCustomerAddress {
|
|
12
|
+
data: Readonly<Ref<UseCustomerAddressState['data']>>;
|
|
13
|
+
loading: Readonly<Ref<boolean>>;
|
|
14
|
+
fetchCustomerAddress: FetchCustomerAddress;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type UseCustomerAddressReturn = () => UseCustomerAddress;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { toRefs } from '@vueuse/shared';
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
import type { Ref } from 'vue';
|
|
4
|
+
import type { Maybe, SfAddress } from '../_types';
|
|
5
|
+
import type {
|
|
6
|
+
UseCustomerAddressReturn,
|
|
7
|
+
UseCustomerAddressState,
|
|
8
|
+
FetchCustomerAddress,
|
|
9
|
+
} from './types';
|
|
10
|
+
import { useAsyncData, useState } from 'nuxt/app';
|
|
11
|
+
import { useHandleError } from '../useHandleError';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @description Composable managing address data
|
|
15
|
+
* @returns {@link UseCustomerAddressReturn}
|
|
16
|
+
* @example
|
|
17
|
+
* const { data, loading, fetchCustomerAddress } = useCustomerAddress();
|
|
18
|
+
*/
|
|
19
|
+
export const useCustomerAddress: UseCustomerAddressReturn = () => {
|
|
20
|
+
const state = useState<UseCustomerAddressState>(`useCustomerAddress`, () => ({
|
|
21
|
+
data: null,
|
|
22
|
+
loading: false,
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
/** Function for fetching address data
|
|
26
|
+
* @example
|
|
27
|
+
* fetchCustomerAddress();
|
|
28
|
+
*/
|
|
29
|
+
const fetchCustomerAddress: FetchCustomerAddress = async () => {
|
|
30
|
+
state.value.loading = true;
|
|
31
|
+
const { data, error } = await useAsyncData(() =>
|
|
32
|
+
Promise.resolve({
|
|
33
|
+
firstName: 'Hieronim',
|
|
34
|
+
lastName: 'Anonim',
|
|
35
|
+
address1: 'Oak Drive',
|
|
36
|
+
address2: '3633',
|
|
37
|
+
city: 'Colonie',
|
|
38
|
+
country: 'US',
|
|
39
|
+
phoneNumber: '+1 321 765 0987',
|
|
40
|
+
postalCode: '12205',
|
|
41
|
+
state: 'NY',
|
|
42
|
+
titleCode: '',
|
|
43
|
+
}),
|
|
44
|
+
);
|
|
45
|
+
useHandleError(error.value);
|
|
46
|
+
state.value.data = data.value;
|
|
47
|
+
state.value.loading = false;
|
|
48
|
+
return computed(() => state.value.data) as unknown as Ref<Maybe<SfAddress>>;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
fetchCustomerAddress,
|
|
53
|
+
...toRefs(state.value),
|
|
54
|
+
};
|
|
55
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useCustomerOrder } from '~/composables/useCustomerOrder/useCustomerOrder';
|
|
2
|
+
|
|
3
|
+
describe('useCustomerOrder', () => {
|
|
4
|
+
it('should return customer order data', async () => {
|
|
5
|
+
const { fetchCustomerOrder, data } = useCustomerOrder('1');
|
|
6
|
+
|
|
7
|
+
await fetchCustomerOrder('1');
|
|
8
|
+
|
|
9
|
+
expect(data.value).not.toBeUndefined();
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
name: 'Smartwatch Fitness Tracker',
|
|
3
|
+
quantity: 1,
|
|
4
|
+
price: {
|
|
5
|
+
value: {
|
|
6
|
+
currency: 'Dollar',
|
|
7
|
+
amount: 295.87,
|
|
8
|
+
precisionAmount: '295.87',
|
|
9
|
+
},
|
|
10
|
+
isDiscounted: false,
|
|
11
|
+
regularPrice: {
|
|
12
|
+
currency: 'Dollar',
|
|
13
|
+
amount: 295.87,
|
|
14
|
+
precisionAmount: '295.87',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
gallery: [
|
|
18
|
+
{
|
|
19
|
+
alt: 'Smartwatch Fitness Tracker',
|
|
20
|
+
url: '/images/watch.png',
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
attributes: [
|
|
24
|
+
{
|
|
25
|
+
label: 'Size',
|
|
26
|
+
name: 'Size',
|
|
27
|
+
value: '1.9″',
|
|
28
|
+
valueLabel: 'value',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'Color',
|
|
32
|
+
label: 'color',
|
|
33
|
+
value: 'Black',
|
|
34
|
+
valueLabel: 'value',
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
import type { Maybe, SfAddress, SfProduct } from '../_types';
|
|
3
|
+
|
|
4
|
+
export type OrderData = {
|
|
5
|
+
id: string;
|
|
6
|
+
date: string; //probably should be number in ms
|
|
7
|
+
paymentAmount: number;
|
|
8
|
+
status: 'Completed' | 'Shipped' | 'Open' | 'Cancelled';
|
|
9
|
+
products: Array<
|
|
10
|
+
Omit<
|
|
11
|
+
SfProduct,
|
|
12
|
+
'id' | 'sku' | 'slug' | 'description' | 'primaryImage' | 'rating' | 'variants' | 'quantityLimit'
|
|
13
|
+
> & { quantity: number }
|
|
14
|
+
>;
|
|
15
|
+
summary: {
|
|
16
|
+
subtotal: number;
|
|
17
|
+
delivery: number;
|
|
18
|
+
estimatedTax: number;
|
|
19
|
+
total: number;
|
|
20
|
+
};
|
|
21
|
+
billingAddress: Partial<SfAddress>;
|
|
22
|
+
shippingAddress: Partial<SfAddress>;
|
|
23
|
+
paymentMethod: string;
|
|
24
|
+
shipping: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export interface UseCustomerOrderState {
|
|
28
|
+
data: Maybe<OrderData>;
|
|
29
|
+
loading: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type FetchCustomerOrder = (id: string) => Promise<Ref<Maybe<OrderData>>>;
|
|
33
|
+
|
|
34
|
+
export interface UseCustomerOrder {
|
|
35
|
+
data: Readonly<Ref<UseCustomerOrderState['data']>>;
|
|
36
|
+
loading: Readonly<Ref<boolean>>;
|
|
37
|
+
fetchCustomerOrder: FetchCustomerOrder;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export type UseCustomerOrderReturn = (id: string) => UseCustomerOrder;
|