--- import Layout from '../layouts/Layout.astro'; import ProductCard from '../components/ProductCard.astro'; import CatalogFilters from '../components/CatalogFilters.tsx'; import { getProductsFromDB, getBrandsFromDB, getDealsCount } from '../lib/products'; function getDiscountPercent(sneaker: { originalPrice: number; lowestPrice: number }): number { return Math.round(((sneaker.originalPrice - sneaker.lowestPrice) / sneaker.originalPrice) * 100); } const url = Astro.url; const brand = url.searchParams.get('merk') || undefined; const gender = url.searchParams.get('geslacht') || undefined; const size = url.searchParams.get('maat') || Astro.cookies.get('sp_size')?.value || undefined; const sort = (url.searchParams.get('sort') || 'discount') as 'popular' | 'newest' | 'price_asc' | 'price_desc' | 'discount'; const page = Math.max(1, parseInt(url.searchParams.get('pagina') || '1')); const perPage = 36; const deals = await getProductsFromDB({ limit: perPage, offset: (page - 1) * perPage, orderBy: sort, brand, gender, size, dealsOnly: true, }); const totalCount = await getDealsCount({ brand, gender, size }); const brands = await getBrandsFromDB(); const totalPages = Math.ceil(totalCount / perPage); const analyticsItems = deals.map((s, i) => ({ item_id: s.id, item_name: `${s.brand} ${s.name}`, item_brand: s.brand, price: s.lowestPrice, index: i })); // Stats const maxDiscount = deals.length > 0 ? Math.max(...deals.map(d => getDiscountPercent(d))) : 0; const lowestPrice = deals.length > 0 ? Math.min(...deals.map(d => d.lowestPrice)) : 0; --- 1}>

Deals & Prijsdalingen

Sneakers die recent in prijs zijn gedaald

{totalCount}
Actieve deals
-{maxDiscount}%
Hoogste korting
€{lowestPrice.toFixed(0)}
Vanaf prijs
({ name: b.name, slug: b.slug, count: b.count }))} currentBrand={brand || ''} currentGender={gender || ''} currentSize={size || ''} currentSort={sort} basePath="/deals" />
{deals.length} van {totalCount} deals
{deals.length > 0 ? (
{deals.map((sneaker, i) => ( ))}
) : (

Geen deals gevonden met deze filters.

)} {totalPages > 1 && (
{Array.from({ length: Math.min(totalPages, 10) }, (_, i) => i + 1).map(p => { const params = new URLSearchParams(url.searchParams); params.set('pagina', String(p)); return ( {p} ); })}
)}