import { useEffect, useMemo, useState } from "preact/hooks"; import "../../styles/offers/offers-table.css"; // const BUILDING_MAP = { jednorodzinny: 1, wielorodzinny: 2, }; const CONTRACT_MAP = { "24m": 1, bezterminowa: 2, }; export default function JamboxBasePackages({ source = "PLUS", title, selected = {}, }) { const [packages, setPackages] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); // wyliczamy kody na podstawie tego samego selected, którego używasz w OffersCards const buildingCode = useMemo(() => { const val = selected?.budynek; return BUILDING_MAP[val] ?? 1; // domyślnie jednorodzinny }, [selected?.budynek]); const contractCode = useMemo(() => { const val = selected?.umowa; return CONTRACT_MAP[val] ?? 1; // domyślnie 24m }, [selected?.umowa]); useEffect(() => { let cancelled = false; async function load() { setLoading(true); setError(""); try { const params = new URLSearchParams(); if (source && source !== "ALL") { params.set("source", source); } if (buildingCode) { params.set("building", String(buildingCode)); } if (contractCode) { params.set("contract", String(contractCode)); } const query = params.toString(); const url = `/api/jambox/base-packages${query ? `?${query}` : ""}`; const res = await fetch(url); if (!res.ok) { throw new Error(`HTTP ${res.status}`); } const json = await res.json(); if (!cancelled) { setPackages(Array.isArray(json.data) ? json.data : []); } } catch (err) { console.error("Błąd pobierania pakietów JAMBOX:", err); if (!cancelled) { setError("Nie udało się załadować pakietów JAMBOX."); } } finally { if (!cancelled) { setLoading(false); } } } load(); return () => { cancelled = true; }; }, [source, buildingCode, contractCode]); const effectiveTitle = title || (source === "PLUS" ? "Pakiety podstawowe JAMBOX PLUS" : source === "EVIO" ? "Pakiety podstawowe JAMBOX EVIO" : "Pakiety podstawowe JAMBOX"); if (loading) { return (

{effectiveTitle}

Ładowanie pakietów...

); } if (error) { return (

{effectiveTitle}

{error}

); } if (!packages.length) { return (

{effectiveTitle}

Brak pakietów do wyświetlenia.

); } return (
{effectiveTitle &&

{effectiveTitle}

}
{packages.map((pkg) => ( ))}
); } function JamboxPackageCard({ pkg }) { const updatedDate = pkg.updated_at ? new Date(pkg.updated_at).toLocaleDateString("pl-PL") : "-"; const hasPrice = pkg.price_monthly != null; const hasInstall = pkg.price_installation != null; return (
{pkg.name}
{/* TU zamiast JAMBOX PLUS/EVIO pokazujemy cenę */}
{hasPrice ? `${pkg.price_monthly} zł/mies.` : pkg.source === "PLUS" ? "JAMBOX PLUS" : "JAMBOX EVIO"}
); }