diff --git a/frontend/components/product/ProductDetails.vue b/frontend/components/product/ProductDetails.vue index e0ca566..e0388e5 100644 --- a/frontend/components/product/ProductDetails.vue +++ b/frontend/components/product/ProductDetails.vue @@ -2,7 +2,7 @@ // provide / inject -import type { ProductVariantProvideType } from "~/pages/product/[id].vue"; +import type { ProductVariantProvideType } from "~/pages/product/types"; const { selectedVariant } = inject("productVariant") as ProductVariantProvideType; diff --git a/frontend/components/product/ProductHero.vue b/frontend/components/product/ProductHero.vue index ba5321e..b853fff 100644 --- a/frontend/components/product/ProductHero.vue +++ b/frontend/components/product/ProductHero.vue @@ -5,13 +5,17 @@ import useGetProduct from "~/composables/api/product/useGetProduct"; import { sanitize } from "isomorphic-dompurify"; import type { ProductVariantProvideType } from "~/pages/product/[id].vue"; +import useAddCartItem from "~/composables/api/orders/useAddCartItem"; +import { useAuth } from "~/composables/api/auth/useAuth"; // state const route = useRoute(); const id = route.params.id as string | undefined; -const { data: product } = useGetProduct(id); +const { token } = useAuth(); +const { data: product, refetch: refetchProduct } = useGetProduct(id); +const { mutateAsync: addCartItem, isPending: isAddCartItemPending } = useAddCartItem(); const selectedVariantId = ref(product.value!.variants[0].id); const selectedQuantity = ref(1); @@ -23,6 +27,16 @@ const selectedColor = ref(product.value!.colors[0]); const { selectedVariant, changeSelectedVariant } = inject("productVariant") as ProductVariantProvideType; +// method + +const addItemToCart = async () => { + await addCartItem({ + id: selectedVariant.value!.id, + quantity: selectedQuantity.value + }); + await refetchProduct(); +}; + // computed const sanitizedProductDescription = computed(() => { @@ -44,7 +58,7 @@ watch(() => selectedColor.value, (newValue) => { immediate: true }); -watch(() => selectedVariant.value, (newValue) => { +watch(() => selectedVariant.value!, (newValue) => { selectedQuantity.value = 1; selectedSlide.value = newValue.images[0].id; }); @@ -60,24 +74,24 @@ watch(() => selectedVariant.value, (newValue) => {