- SKU: {variant.sku} + SKU: {selectedVariant.sku}
)} diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 3ff1862..89356d8 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -312,6 +312,13 @@ "urgency2": "In den Warenkörben von 2,5K Menschen - kaufen Sie, bevor es weg ist!", "urgency3": "7.562 Personen haben sich dieses Produkt in den letzten 24 Stunden angesehen!" }, + "Bundle": { + "selectBundle": "Paket wählen", + "singleUnit": "1 Stück", + "xSet": "{count}x Set", + "save": "Spare {amount}", + "perUnit": "pro Stück" + }, "Newsletter": { "stayConnected": "Bleiben Sie verbunden", "joinCommunity": "Werden Sie Teil unserer Gemeinschaft", diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index bd7b819..2ecdd23 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -341,6 +341,13 @@ "urgency2": "In the carts of 2.5K people - buy before its gone!", "urgency3": "7,562 people viewed this product in the last 24 hours!" }, + "Bundle": { + "selectBundle": "Select Package", + "singleUnit": "1 Unit", + "xSet": "{count}x Set", + "save": "Save {amount}", + "perUnit": "per unit" + }, "Newsletter": { "stayConnected": "Stay Connected", "joinCommunity": "Join Our Community", diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 9caa718..163b427 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -312,6 +312,13 @@ "urgency2": "Dans les paniers de 2,5K personnes - achetez avant qu'il ne disparaisse!", "urgency3": "7 562 personnes ont vu ce produit ces dernières 24 heures!" }, + "Bundle": { + "selectBundle": "Choisir le Pack", + "singleUnit": "1 Unité", + "xSet": "{count}x Set", + "save": "Économisez {amount}", + "perUnit": "par unité" + }, "Newsletter": { "stayConnected": "Restez Connectés", "joinCommunity": "Rejoignez Notre Communauté", diff --git a/src/i18n/messages/sr.json b/src/i18n/messages/sr.json index c2e3c5d..d21670b 100644 --- a/src/i18n/messages/sr.json +++ b/src/i18n/messages/sr.json @@ -341,6 +341,13 @@ "urgency2": "U korpama 2.5K ljudi - kupi pre nego što nestane!", "urgency3": "7.562 osobe su pogledale ovaj proizvod u poslednja 24 sata!" }, + "Bundle": { + "selectBundle": "Izaberi pakovanje", + "singleUnit": "1 komad", + "xSet": "{count}x Set", + "save": "Štedi {amount}", + "perUnit": "po komadu" + }, "Newsletter": { "stayConnected": "Ostanite povezani", "joinCommunity": "Pridružite se našoj zajednici", diff --git a/src/lib/saleor/fragments/Product.ts b/src/lib/saleor/fragments/Product.ts index 89876b1..2ec186c 100644 --- a/src/lib/saleor/fragments/Product.ts +++ b/src/lib/saleor/fragments/Product.ts @@ -35,6 +35,18 @@ export const PRODUCT_FRAGMENT = gql` key value } + attributes { + attribute { + id + name + slug + } + values { + id + name + slug + } + } } ${PRODUCT_VARIANT_FRAGMENT} `; diff --git a/src/lib/saleor/index.ts b/src/lib/saleor/index.ts index a3cfca2..4c2f602 100644 --- a/src/lib/saleor/index.ts +++ b/src/lib/saleor/index.ts @@ -7,7 +7,7 @@ export { PRODUCT_VARIANT_FRAGMENT, CHECKOUT_LINE_FRAGMENT } from "./fragments/Va export { CHECKOUT_FRAGMENT, ADDRESS_FRAGMENT } from "./fragments/Checkout"; // Queries -export { GET_PRODUCTS, GET_PRODUCT_BY_SLUG, GET_PRODUCTS_BY_CATEGORY } from "./queries/Products"; +export { GET_PRODUCTS, GET_PRODUCT_BY_SLUG, GET_PRODUCTS_BY_CATEGORY, GET_BUNDLE_PRODUCTS } from "./queries/Products"; export { GET_CHECKOUT, GET_CHECKOUT_BY_ID } from "./queries/Checkout"; // Mutations @@ -34,4 +34,5 @@ export { formatPrice, getLocalizedProduct, parseDescription, + getBundleProducts, } from "./products"; diff --git a/src/lib/saleor/products.ts b/src/lib/saleor/products.ts index ded4d41..e47f5bf 100644 --- a/src/lib/saleor/products.ts +++ b/src/lib/saleor/products.ts @@ -1,5 +1,5 @@ import { saleorClient } from "./client"; -import { GET_PRODUCTS, GET_PRODUCT_BY_SLUG } from "./queries/Products"; +import { GET_PRODUCTS, GET_PRODUCT_BY_SLUG, GET_BUNDLE_PRODUCTS } from "./queries/Products"; import type { Product } from "@/types/saleor"; const CHANNEL = process.env.NEXT_PUBLIC_SALEOR_CHANNEL || "default-channel"; @@ -155,3 +155,65 @@ export function getLocalizedProduct( seoDescription: translation?.seoDescription || product.seoDescription, }; } + +interface ProductsResponse { + products?: { + edges: Array<{ node: Product }>; + }; +} + +export async function getBundleProducts( + locale: string = "SR", + first: number = 50 +): Promise