diff --git a/frontend/components/product/ProductHero.vue b/frontend/components/product/ProductHero.vue index e186b38..13d5549 100644 --- a/frontend/components/product/ProductHero.vue +++ b/frontend/components/product/ProductHero.vue @@ -4,6 +4,7 @@ import useGetProduct from "~/composables/api/product/useGetProduct"; import { sanitize } from "isomorphic-dompurify"; +import type { ProductVariantProvideType } from "~/pages/product/[id].vue"; // state @@ -12,47 +13,69 @@ const id = route.params.id as string | undefined; const { data: product } = useGetProduct(id); -const quantity = ref(1); +const selectedVariantId = ref(product.value!.variants[0].id); +const selectedQuantity = ref(1); +const selectedSlide = ref(product.value!.variants[0].images[0].id); -const selectedSlide = ref(0); +// provide / inject + +const { selectedVariant, changeSelectedVariant } = inject("productVariant") as ProductVariantProvideType; // computed -const slides = computed(() => { - return [ - { - id: 0, - picture: product.value!.image1 - }, - { - id: 1, - picture: product.value?.image2 ?? product.value!.image1 - }, - { - id: 2, - picture: product.value!.image3 ?? product.value!.image1 - } - ]; -}); - const sanitizedProductDescription = computed(() => { return sanitize(product.value!.description); }); +// watch + +watch(() => selectedVariantId.value, (newId) => { + const newVariant = product.value!.variants.find(variant => variant.id === newId)!; + changeSelectedVariant(newVariant); +}, { + immediate: true +}); + +watch(() => selectedVariant.value, (newValue) => { + selectedQuantity.value = 1; + selectedSlide.value = newValue.images[0].id; +}); +