diff --git a/src/pages/premium/[tid].astro b/src/pages/premium/[tid].astro index 17c3838..5c0dd57 100644 --- a/src/pages/premium/[tid].astro +++ b/src/pages/premium/[tid].astro @@ -6,7 +6,6 @@ import Markdown from "../../islands/Markdown.jsx"; import AddonChannelsGrid from "../../islands/jambox/AddonChannelsModal.jsx"; import "../../styles/jambox-tematyczne.css"; -/** Typy minimalne */ type AddonPriceRow = { pakiety?: string[] | any; "12m"?: number | string; @@ -25,7 +24,6 @@ type TvAddon = { group_mode?: string; }; -// ✅ OPCJA A: metadane grupy + CTA type GroupCta = { label?: string; href?: string; @@ -41,7 +39,6 @@ type GroupMeta = { type TvAddonsDoc = { tytul?: string; opis?: string; - cena_opis?: string; dodatki?: TvAddon[]; grupy?: Record; }; @@ -50,113 +47,86 @@ const doc = yaml.load( fs.readFileSync("./src/content/internet-telewizja/tv-addons.yaml", "utf8"), ) as TvAddonsDoc; -const pageTitle = doc?.tytul ?? "Dodatkowe pakiety TV"; -const pageDesc = doc?.opis ?? ""; -const addons: TvAddon[] = Array.isArray(doc?.dodatki) ? doc.dodatki : []; +const addons = Array.isArray(doc?.dodatki) ? doc.dodatki : []; +const groupMeta = doc?.grupy ?? {}; -// ✅ mapa meta grup -const groupMeta: Record = doc?.grupy ?? {}; - -// --- dynamic param --- -const tidParam = Astro.params.tid; // np. "49" -const tid = Number(tidParam); - -const picked = - Number.isFinite(tid) - ? addons.find((a) => Number(a?.tid) === tid) - : null; +const tid = Number(Astro.params.tid); +const picked = addons.find((a) => Number(a?.tid) === tid); if (!picked) { - return new Response("Nie znaleziono pakietu dla podanego tid.", { status: 404 }); + return new Response("Nie znaleziono pakietu.", { status: 404 }); } -// --- jeśli jest group => bierzemy całą grupę --- const pickedGroup = String(picked?.group ?? "").trim(); -let viewAddons: TvAddon[] = []; -if (pickedGroup) { - viewAddons = addons.filter((a) => String(a?.group ?? "").trim() === pickedGroup); -} else { - viewAddons = [picked]; -} +const viewAddons = pickedGroup + ? addons.filter((a) => String(a?.group ?? "").trim() === pickedGroup) + : [picked]; -// (jak miałeś) sortowanie w grupie — możesz zostawić albo wywalić -viewAddons = viewAddons - .slice() - .sort((a, b) => Number(a?.tid ?? 0) - Number(b?.tid ?? 0)); - -// tytuł/description strony -const singleTitle = pickedGroup - ? (groupMeta[pickedGroup]?.tytul ?? pickedGroup.toUpperCase() ?? pageTitle) - : (String(picked?.nazwa ?? "").trim() || pageTitle); - -const singleDesc = pageDesc; - -// ✅ CTA dla tej grupy (jeśli istnieje) -const footerCta: GroupCta | undefined = +const footerCta = pickedGroup ? groupMeta[pickedGroup]?.rejestracja : undefined; --- - - {/* Opcjonalnie: box jak na stronie ogólnej, tylko jeśli jesteśmy w grupie */} -
- { - viewAddons.map((addon: TvAddon, index: number) => { - const isAboveFold = index === 0; + + { + viewAddons.map((addon, index) => { + const pkgName = String(addon?.nazwa ?? "").trim(); + const hasYamlImage = !!String(addon?.image ?? "").trim(); + const assumeHasMedia = pkgName || hasYamlImage; + const isAboveFold = index === 0; - const pkgName = String(addon?.nazwa ?? "").trim(); - const hasYamlImage = !!String(addon?.image ?? "").trim(); - const assumeHasMedia = pkgName ? true : hasYamlImage; - - const anchorId = addon?.tid != null ? `tid-${addon.tid}` : undefined; - - return ( -
-
-
- {pkgName &&

{pkgName}

} - {addon?.opis && } -
- -
- {pkgName ? ( - - ) : null} -
+ return ( +
+
+ {/* MEDIA — odpowiednik */} +
+ {pkgName ? ( + + ) : null}
-
- ); - }) - } - {/* ✅ STOPKA GRUPY: tylko na stronach grupowych */} - {pickedGroup && footerCta?.href && footerCta?.label ? ( - +
+ ); + }) + } - - {footerCta.label} - + {footerCta?.href && footerCta?.label ? ( +
+
+
+ {footerCta.opis &&

{footerCta.opis}

} + +
- ) : null} -
- + + ) : null}