/* Enfito — Listing, PDP, Cart Pages */ /* ============ LISTING ============ */ const Listing = ({ route, onNav, onAdd, onFav, favs }) => { const cat = window.ENFITO_CATEGORIES.find(c => c.id === route.cat); const isSale = route.cat === 'distsount'; const isAll = !route.cat; const title = isAll ? 'ყველა პროდუქტი' : (isSale ? 'ფასდაკლება' : cat?.label); const heroImg = { therabody: 'https://images.unsplash.com/photo-1605296867424-35fc25c9212a?w=1600&auto=format&fit=crop&q=80', fitnes: 'https://images.unsplash.com/photo-1583454110551-21f2fa2afe61?w=1600&auto=format&fit=crop&q=80', ioga: 'https://images.unsplash.com/photo-1544367567-0f2fcb009e0b?w=1600&auto=format&fit=crop&q=80', trx: 'https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=1600&auto=format&fit=crop&q=80', aksesuari: 'https://images.unsplash.com/photo-1521093470119-a3acdc43374a?w=1600&auto=format&fit=crop&q=80', distsount: 'https://images.unsplash.com/photo-1534438327276-14e5300c3a48?w=1600&auto=format&fit=crop&q=80', }[route.cat] || 'https://images.unsplash.com/photo-1517836357463-d25dfeac3438?w=1600&auto=format&fit=crop&q=80'; const all = window.ENFITO_PRODUCTS; const baseFiltered = isAll ? all : (isSale ? all.filter(p => p.old) : all.filter(p => p.cat === route.cat)); const [activeBrands, setActiveBrands] = React.useState(new Set()); const [priceMax, setPriceMax] = React.useState(13000); const [onlyDiscount, setOnlyDiscount] = React.useState(isSale); const [activeSubs, setActiveSubs] = React.useState(new Set()); const [sort, setSort] = React.useState('popular'); React.useEffect(() => { setOnlyDiscount(isSale); setActiveBrands(new Set()); setActiveSubs(new Set()); }, [route.cat]); const brands = Array.from(new Set(baseFiltered.map(p => p.brand))); let filtered = baseFiltered.filter(p => (activeBrands.size === 0 || activeBrands.has(p.brand)) && (p.price <= priceMax) && (!onlyDiscount || p.old) && (activeSubs.size === 0 || activeSubs.has(p.sub)) ); if (sort === 'price-asc') filtered = [...filtered].sort((a, b) => a.price - b.price); else if (sort === 'price-desc') filtered = [...filtered].sort((a, b) => b.price - a.price); else if (sort === 'new') filtered = [...filtered].sort((a, b) => (b.tag === 'ახალი') - (a.tag === 'ახალი')); const toggle = (set, setter, v) => { const ns = new Set(set); ns.has(v) ? ns.delete(v) : ns.add(v); setter(ns); }; return (
onNav({ page: 'home' })}>მთავარი / {title}

{title}

{baseFiltered.length} პროდუქტი · უფასო მიწოდება ₾200+ შეკვეთაზე · ოფიციალური გარანტია

ნაპოვნია {filtered.length} პროდუქტი
დალაგება:
{filtered.length === 0 ? (
ფილტრით ვერ მოიძებნა პროდუქტი. გაასუფთავე ფილტრები ან სცადე სხვა კატეგორია.
) : (
{filtered.map(p => ( ))}
)}
); }; /* ============ PDP ============ */ const PDP = ({ route, onNav, onAdd, onFav, favs }) => { const p = window.ENFITO_PRODUCT_BY_ID[route.id]; const [tab, setTab] = React.useState('desc'); const [qty, setQty] = React.useState(1); const [color, setColor] = React.useState(0); const [thumb, setThumb] = React.useState(0); const cat = window.ENFITO_CATEGORIES.find(c => c.id === p?.cat); if (!p) return
პროდუქტი ვერ მოიძებნა
; const related = window.ENFITO_PRODUCTS.filter(x => x.cat === p.cat && x.id !== p.id).slice(0, 4); const swatches = ['#0a0a0a', '#c0392b', '#3a4a5c', '#e8e1d4']; const thumbs = [p.name, 'ფრონტი', 'პროფილი', 'დეტალები']; return (
onNav({ page: 'home' })}>მთავარი / onNav({ page: 'listing', cat: p.cat })}>{cat?.label} / {p.name}
{thumbs.map((t, i) => (
setThumb(i)}> {p.img ? : (i + 1)}
))}
{p.img && {p.name}} {!p.img && (
{p.name}
[ {p.brand} • {thumbs[thumb]} ]
)} {p.tag && {p.tag}}
{p.brand}
მარაგშია

{p.name}

{[1,2,3,4,5].map(s => )} 4.8 · 247 შეფასება

{p.shortDesc}. პროფესიონალური დონის მოწყობილობა, რომელიც ხელმისაწვდომია ნებისმიერი დონის სპორტსმენისთვის. სრული ოფიციალური გარანტია 2 წელი.

{window.ENFITO_FMT_PRICE(p.price)} {p.old && {window.ENFITO_FMT_PRICE(p.old)}} {p.old && -{Math.round((1 - p.price/p.old) * 100)}%}
ფერი — {['შავი', 'წითელი', 'ნაცრისფერი', 'ქვიშისფერი'][color]}
{swatches.map((s, i) => (
setColor(i)} /> ))}
{qty}
მიწოდება 1-3 დღეში · უფასო ₾200+ შეკვეთაზე
2 წლის გარანტია ოფიციალური წარმომადგენელი
30 დღე დაბრუნება უპირობოდ
განვადება 0% 24 თვემდე
{tab === 'desc' && (

{p.name}

{p.shortDesc}. ეს არის პროფესიონალური დონის მოწყობილობა, რომელიც ხელმისაწვდომია ნებისმიერი დონის სპორტსმენისთვის — დამწყებიდან ელიტურ მოთამაშემდე.

დიზაინირებულია ერგონომიულად, რათა უზრუნველყოს მაქსიმალური კომფორტი ხანგრძლივი ვარჯიშის დროს. დამზადებულია მაღალი ხარისხის მასალებისგან, რომლებიც გამოცდილია მსოფლიო კლასის ფიტნეს ცენტრებში.

  • პროფესიონალური ხარისხის შენახვა და სიგრძე
  • ერგონომიული დიზაინი
  • 2 წლის ოფიციალური გარანტია
  • დახმარების სერვისი ქართულ ენაზე
)} {tab === 'spec' && (
ბრენდი{p.brand}
კატეგორია{cat?.label}
გარანტია2 წელი
წონა2.5 კგ
მასალაპრემიუმ კლასი
წარმოშობის ქვეყანააშშ
)} {tab === 'rev' && (

4.8 / 5 — 247 შეფასება

მომხმარებლების შეფასებები ჩამოიტვირთება. ფუნქცია მზადდება.

)} {tab === 'ship' && (

მიწოდება

თბილისში — 1-2 დღე. რეგიონებში — 2-4 დღე. უფასო მიწოდება ₾200+ შეკვეთებზე. შეკვეთა შესაძლებელია მაღაზიიდან გატანაც.

)}
{related.length > 0 && (
აღმოაჩინე მეტი

მსგავსი პროდუქტები

{related.map(rp => ( ))}
)}
); }; /* ============ CART ============ */ const Cart = ({ cart, onNav, onAdd, onRemove, onSetQty, onFav, favs }) => { const lines = Object.entries(cart).map(([id, qty]) => ({ p: window.ENFITO_PRODUCT_BY_ID[id], qty })).filter(l => l.p); const subtotal = lines.reduce((s, l) => s + l.p.price * l.qty, 0); const shipping = subtotal >= 200 ? 0 : 15; const total = subtotal + shipping; const savings = lines.reduce((s, l) => s + (l.p.old ? (l.p.old - l.p.price) * l.qty : 0), 0); const recommended = window.ENFITO_PRODUCTS.slice(0, 4); if (lines.length === 0) { return (
onNav({ page: 'home' })}>მთავარი / კალათა

კალათა ცარიელია

დაამატე პროდუქცია და ისიამოვნე უფასო მიწოდებით ₾200+ შეკვეთებზე

); } return (
onNav({ page: 'home' })}>მთავარი / კალათა

შენი კალათა ({lines.length})

{lines.map(({ p, qty }) => (
onNav({ page: 'pdp', id: p.id })}> {p.img ? {p.name} : p.name}
{p.brand}
onNav({ page: 'pdp', id: p.id })} style={{ cursor: 'pointer' }}>{p.name}
ფერი: შავი · მარაგშია
{qty}
{window.ENFITO_FMT_PRICE(p.price * qty)}
{p.old &&
{window.ENFITO_FMT_PRICE(p.old * qty)}
}
))}
გირჩევთ

დააკომპლექტე.

{recommended.slice(0, 3).map(p => ( ))}
); }; Object.assign(window, { Listing, PDP, Cart });