From 3d8a77dafafe31464c2abefb110be3854e14bcb2 Mon Sep 17 00:00:00 2001 From: Unchained Date: Tue, 24 Mar 2026 20:18:06 +0200 Subject: [PATCH] refactor: centralize bundle filtering with filterOutBundles helper --- src/app/[locale]/page.tsx | 8 +++----- src/app/[locale]/products/[slug]/page.tsx | 9 +++------ src/app/[locale]/products/page.tsx | 6 ++---- src/app/sitemap.ts | 6 ++---- src/lib/saleor/index.ts | 4 ++++ src/lib/saleor/products.ts | 4 ++++ 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx index b592002..043cc96 100644 --- a/src/app/[locale]/page.tsx +++ b/src/app/[locale]/page.tsx @@ -1,4 +1,4 @@ -import { getProducts } from "@/lib/saleor"; +import { getProducts, filterOutBundles } from "@/lib/saleor"; import { getTranslations, setRequestLocale } from "next-intl/server"; import Header from "@/components/layout/Header"; import Footer from "@/components/layout/Footer"; @@ -40,10 +40,8 @@ export default async function Homepage({ params }: { params: Promise<{ locale: s console.log("Failed to fetch products during build"); } - const filteredProducts = products?.filter( - (p: any) => !p.name.includes("2x Set") && !p.name.includes("3x Set") - ); - const featuredProducts = filteredProducts?.slice(0, 4) || []; + const filteredProducts = filterOutBundles(products); + const featuredProducts = filteredProducts.slice(0, 4); const hasProducts = featuredProducts.length > 0; const basePath = `/${validLocale}`; diff --git a/src/app/[locale]/products/[slug]/page.tsx b/src/app/[locale]/products/[slug]/page.tsx index 94afb09..96b7819 100644 --- a/src/app/[locale]/products/[slug]/page.tsx +++ b/src/app/[locale]/products/[slug]/page.tsx @@ -1,4 +1,4 @@ -import { getProductBySlug, getProducts, getLocalizedProduct, getBundleProducts } from "@/lib/saleor"; +import { getProductBySlug, getProducts, getLocalizedProduct, getBundleProducts, filterOutBundles } from "@/lib/saleor"; import { getTranslations, setRequestLocale } from "next-intl/server"; import Header from "@/components/layout/Header"; import Footer from "@/components/layout/Footer"; @@ -20,9 +20,7 @@ export async function generateStaticParams() { try { const saleorLocale = locale === "sr" ? "SR" : "EN"; const products = await getProducts(saleorLocale, 100); - const filteredProducts = products.filter( - (p: Product) => !p.name.includes("2x Set") && !p.name.includes("3x Set") - ); + const filteredProducts = filterOutBundles(products); filteredProducts.forEach((product: Product) => { params.push({ locale, slug: product.slug }); }); @@ -92,9 +90,8 @@ export default async function ProductPage({ params }: ProductPageProps) { let bundleProducts: Product[] = []; try { const allProducts = await getProducts(saleorLocale, 50); - relatedProducts = allProducts + relatedProducts = filterOutBundles(allProducts) .filter((p: Product) => p.id !== product.id) - .filter((p) => !p.name.includes("2x Set") && !p.name.includes("3x Set")) .slice(0, 4); } catch (e) {} diff --git a/src/app/[locale]/products/page.tsx b/src/app/[locale]/products/page.tsx index 1004018..660b5cb 100644 --- a/src/app/[locale]/products/page.tsx +++ b/src/app/[locale]/products/page.tsx @@ -1,4 +1,4 @@ -import { getProducts } from "@/lib/saleor"; +import { getProducts, filterOutBundles } from "@/lib/saleor"; import { getTranslations, setRequestLocale } from "next-intl/server"; import Header from "@/components/layout/Header"; import Footer from "@/components/layout/Footer"; @@ -29,9 +29,7 @@ export default async function ProductsPage({ params }: ProductsPageProps) { const saleorLocale = getSaleorLocale(validLocale as Locale); const allProducts = await getProducts(saleorLocale); - const products = allProducts.filter((product) => { - return !product.name.includes("2x Set") && !product.name.includes("3x Set"); - }); + const products = filterOutBundles(allProducts); return ( <> diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 96fd317..ea8e3c9 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -1,5 +1,5 @@ import { MetadataRoute } from "next"; -import { getProducts } from "@/lib/saleor"; +import { getProducts, filterOutBundles } from "@/lib/saleor"; import { SUPPORTED_LOCALES, type Locale } from "@/lib/i18n/locales"; const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://dev.manoonoils.com"; @@ -80,9 +80,7 @@ export default async function sitemap(): Promise { }, ]; - const filteredProducts = products.filter( - (p: any) => !p.name.includes("2x Set") && !p.name.includes("3x Set") - ); + const filteredProducts = filterOutBundles(products); const productUrls: SitemapEntry[] = []; diff --git a/src/lib/saleor/index.ts b/src/lib/saleor/index.ts index 4c2f602..6f3a27b 100644 --- a/src/lib/saleor/index.ts +++ b/src/lib/saleor/index.ts @@ -35,4 +35,8 @@ export { getLocalizedProduct, parseDescription, getBundleProducts, + getBundleProductsForProduct, + getProductBundleComponents, + isBundleProduct, + filterOutBundles, } from "./products"; diff --git a/src/lib/saleor/products.ts b/src/lib/saleor/products.ts index e47f5bf..6f45ece 100644 --- a/src/lib/saleor/products.ts +++ b/src/lib/saleor/products.ts @@ -217,3 +217,7 @@ export function getProductBundleComponents(product: Product): number | null { export function isBundleProduct(product: Product): boolean { return getProductBundleComponents(product) !== null; } + +export function filterOutBundles(products: Product[]): Product[] { + return products.filter((product) => !isBundleProduct(product)); +}