/* 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 (
{title}
{baseFiltered.length} პროდუქტი · უფასო მიწოდება ₾200+ შეკვეთაზე · ოფიციალური გარანტია
{cat?.sub?.length > 0 && (
ქვეკატეგორია
{cat.sub.map(s => (
toggle(activeSubs, setActiveSubs, s.id)}>
{s.label}
))}
)}
{ setActiveBrands(new Set()); setActiveSubs(new Set()); setPriceMax(13000); setOnlyDiscount(false); }}>
გაასუფთავე ფილტრები
ნაპოვნია {filtered.length} პროდუქტი
დალაგება:
setSort(e.target.value)}>
პოპულარული
ახალი ჯერ
ფასი: დაბალი → მაღალი
ფასი: მაღალი → დაბალი
{filtered.length === 0 ? (
ფილტრით ვერ მოიძებნა პროდუქტი. გაასუფთავე ფილტრები ან სცადე სხვა კატეგორია.
) : (
)}
);
};
/* ============ 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 (
{thumbs.map((t, i) => (
setThumb(i)}>
{p.img ?
: (i + 1)}
))}
{p.img &&
}
{!p.img && (
{p.name}
[ {p.brand} • {thumbs[thumb]} ]
)}
{p.tag &&
{p.tag} }
{p.name}
{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)} />
))}
setQty(Math.max(1, qty - 1))}>
{qty}
setQty(qty + 1)}>
{ for (let i = 0; i < qty; i++) onAdd(p.id); }}>
კალათაში დამატება — {window.ENFITO_FMT_PRICE(p.price * qty)}
onFav(p.id)}>
მიწოდება 1-3 დღეში · უფასო ₾200+ შეკვეთაზე
2 წლის გარანტია
ოფიციალური წარმომადგენელი
30 დღე დაბრუნება
უპირობოდ
განვადება 0%
24 თვემდე
setTab('desc')}>აღწერა
setTab('spec')}>მახასიათებლები
setTab('rev')}>შეფასებები (247)
setTab('ship')}>მიწოდება
{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 && (
აღმოაჩინე მეტი
მსგავსი პროდუქტები
)}
);
};
/* ============ 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 (
კალათა ცარიელია
დაამატე პროდუქცია და ისიამოვნე უფასო მიწოდებით ₾200+ შეკვეთებზე
onNav({ page: 'home' })}>
გააგრძელე შოპინგი
);
}
return (
შენი კალათა ({lines.length})
{lines.map(({ p, qty }) => (
onNav({ page: 'pdp', id: p.id })}>
{p.img ?
: p.name}
{p.brand}
onNav({ page: 'pdp', id: p.id })} style={{ cursor: 'pointer' }}>{p.name}
ფერი: შავი · მარაგშია
onSetQty(p.id, Math.max(1, qty - 1))}>
{qty}
onSetQty(p.id, qty + 1)}>
onRemove(p.id)}>წაშლა
onFav(p.id)}>{favs.has(p.id) ? 'ფავორიტებში' : 'ფავორიტებში გადატანა'}
{window.ENFITO_FMT_PRICE(p.price * qty)}
{p.old &&
{window.ENFITO_FMT_PRICE(p.old * qty)}
}
))}
{recommended.slice(0, 3).map(p => (
))}
შეკვეთის შეჯამება
ჯამი ({lines.length} პროდუქტი)
{window.ENFITO_FMT_PRICE(subtotal)}
{savings > 0 && (
ფასდაკლება
−{window.ENFITO_FMT_PRICE(savings)}
)}
მიწოდება
{shipping === 0 ? 'უფასო' : window.ENFITO_FMT_PRICE(shipping)}
გამოყენება
ჯამი
{window.ENFITO_FMT_PRICE(total)}
გადახდაზე გადასვლა
ან გადაიხადე განვადებით — 24 თვემდე 0%
სწრაფი მიწოდება
2წ. გარანტია
30დღ. დაბრუნება
);
};
Object.assign(window, { Listing, PDP, Cart });