Skip to content

Commit 7fd957d

Browse files
committed
feat: added color variable and description to product page
1 parent 2e57e54 commit 7fd957d

File tree

4 files changed

+29
-4
lines changed

4 files changed

+29
-4
lines changed

components/ProductCard.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<article v-for="product in products">
3-
<NuxtLink :to="`/product/${product.slug}`" class="group">
3+
<NuxtLink :to="`/product/${product.slug}-${product.sku.split('-')[0]}`" class="group">
44
<div
55
class="cursor-pointer rounded-2xl dark:bg-secondary-bg-d hover:dark:bg-[#222222] px-4 pt-4 pb-3 transition ease-[ease] duration-300 dark:border-[#222222] hover:dark:border-[#303030] border">
66
<div class="relative mb-4 pb-[133%] dark:shadow-[0_8px_24px_rgba(0,0,0,.5)] rounded-lg overflow-hidden">

gql/queries/getProduct.gql

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
1-
query getProduct($slug: ID!) {
1+
query getProduct($slug: ID!, $sku: String!) {
22
product(id: $slug, idType: SLUG) {
33
... on VariableProduct {
4+
sku
45
slug
56
name
67
regularPrice
78
salePrice
9+
description
810
image {
911
sourceUrl(size: WOOCOMMERCE_SINGLE)
1012
}
13+
productTypes {
14+
nodes {
15+
products(where: { sku: $sku }) {
16+
nodes {
17+
slug
18+
image {
19+
sourceUrl(size: THUMBNAIL)
20+
}
21+
}
22+
}
23+
}
24+
}
1125
variations(where: { orderby: { field: NAME, order: DESC } }) {
1226
nodes {
1327
id

gql/queries/getProducts.gql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ query getProducts($after: String, $search: String, $category: String, $order: Or
33
nodes {
44
... on VariableProduct {
55
id
6+
sku
67
slug
78
name
89
regularPrice

pages/product/[slug].vue

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
<p class="text-sm ml-1 line-through" v-html="product.regularPrice"></p>
2323
<p class="text-sm ml-1">{{ calculateDiscountPercentage }}%</p>
2424
</div>
25+
<div v-for="(variation, i) in product.productTypes.nodes" :key="variation.id">
26+
<div v-for="(vars, i) in variation.products.nodes" :key="vars.id">
27+
<NuxtLink :to="`/product/${vars.slug}-${product.sku.split('-')[0]}`"><NuxtImg :src="vars.image.sourceUrl" /></NuxtLink>
28+
</div>
29+
</div>
2530
<div>Size: {{ selectedVariation }}</div>
2631
<div class="flex gap-2 mt-3 flex-wrap">
2732
<label v-for="(variation, i) in product.variations.nodes" :key="variation.id" :class="[variation.stockStatus === 'OUT_OF_STOCK' ? 'disabled' : '']">
@@ -36,17 +41,22 @@
3641
<span class="py-1.5 px-2 border rounded leading-[10px] h-6">{{ variation.attributes.nodes.map((attr) => attr.value).toString() }}</span>
3742
</label>
3843
</div>
44+
<div v-html="product.description"></div>
3945
</div>
4046
</div>
4147
</div>
4248
</div>
4349
</template>
4450

4551
<script setup>
46-
const route = useRoute();
52+
const route = useRoute().params.slug;
53+
const parts = route.split('-');
54+
const sku = parts.pop();
55+
const slug = parts.join('-');
56+
4757
import { getProduct } from '~/gql/queries/getProduct.gql';
4858
49-
const { result: productResult, loading } = useQuery(getProduct, () => ({ slug: route.params.slug }));
59+
const { result: productResult, loading } = useQuery(getProduct, () => ({ slug: slug, sku: sku }));
5060
const product = computed(() => productResult.value?.product);
5161
5262
let selectedVariation = ref(null);

0 commit comments

Comments
 (0)