This commit is contained in:
Mamalizz
2025-04-16 22:59:08 +03:30
30 changed files with 494 additions and 355 deletions
+6 -9
View File
@@ -1,14 +1,14 @@
<script lang="ts" setup>
// import
import useHomeData from "~/composables/api/home/useHomeData";
import ProductsGrid from "~/components/global/ProductsGrid.vue";
import { useStorage } from "@vueuse/core";
// state
const { data: homeData, suspense } = useHomeData();
const disableLoadingOverlay = useState("disableLoadingOverlay", () => false);
// ssr
@@ -17,7 +17,7 @@ const response = await suspense();
if (response.isError) {
throw createError({
statusCode: 500,
statusMessage: `Landing error : ${response.error.message}`
statusMessage: `Landing error : ${response.error.message}`,
});
}
@@ -26,12 +26,11 @@ if (response.isError) {
onMounted(() => {
window.scrollTo(0, 0);
});
</script>
<template>
<div class="w-full">
<LoadingOverlay v-if="!disableLoadingOverlay" />
<LoadingOverlay />
<Hero class="mb-20 max-md:mt-[80px]" />
<Preview />
<ProductsShowcase class="mb-40" />
@@ -41,8 +40,6 @@ onMounted(() => {
/>
<Categories class="mt-40" />
<Brands />
<ClientOnly>
<LatestStories class="mb-20" />
</ClientOnly>
<LatestStories class="mb-20" />
</div>
</template>
</template>
+10 -10
View File
@@ -1,5 +1,4 @@
<script lang="ts" setup>
// import
import ChatButton from "~/components/product/ChatBox/ChatButton.vue";
@@ -18,18 +17,20 @@ const { suspense: suspenseComments } = useGetComments(id, page);
const selectedVariant = ref<ProductVariant>();
const showChatButton = ref(true);
// type
export type ProductVariantProvideType = {
selectedVariant: typeof selectedVariant,
changeSelectedVariant: (value: ProductVariant) => void
}
selectedVariant: typeof selectedVariant;
changeSelectedVariant: (value: ProductVariant) => void;
};
// provide / inject
provide("productVariant", {
selectedVariant,
changeSelectedVariant: (value: ProductVariant) => selectedVariant.value = value
changeSelectedVariant: (value: ProductVariant) => (selectedVariant.value = value),
});
// ssr
@@ -40,22 +41,21 @@ const commentsResponse = await suspenseComments();
if (productResponse.isError || commentsResponse.isError) {
throw createError({
statusCode: 404,
statusMessage: `error : product ${id} prefetch error`
statusMessage: `error : product ${id} prefetch error`,
});
}
</script>
<template>
<div class="w-full flex flex-col ">
<div class="w-full flex flex-col">
<ProductHero />
<ProductVideo />
<ProductVideo v-model:showChatButton="showChatButton" />
<ProductComments />
<ProductDetails />
<ProductsGrid
title="محصولات مشابه"
:products="product!.related_products"
/>
<ChatButton />
<ChatButton :showChatButton="showChatButton" />
</div>
</template>