import { Suspense } from "react"; import type { Metadata } from "next"; import { cookies } from "next/headers"; import { PUAN_TURLERI, type PuanTuruKey } from "@/types/yokatlas"; import { cerezdenTercihProfili, PROFIL_CEREZ_ADI, } from "@/features/sihirbaz/sihirbaz-sabitler"; import { SonucProgramTablosu, SonucProgramTablosuSkeleton, } from "@/features/liste/components/sonuc-program-tablosu"; import { ManuelHarita } from "@/features/liste/components/manuel-harita"; import { TadimlikBolumu } from "@/features/rapor/components/tadimlik-bolumu"; import { SonucSihirbazi } from "@/features/sihirbaz/components/sihirbaz-bolumu"; import { SiraGerekli } from "@/features/sihirbaz/components/sira-gerekli"; import { SiteFooter } from "@/components/site-footer"; import { Skeleton } from "@/components/ui/skeleton"; export const metadata: Metadata = { title: "Tercih Listeni Kur", // İçerik profil çerezine göre kişisel (eski linklerde param uzayı sonsuz): // indexlenmez ama link değeri follow ile geri akar. robots.txt'te // ENGELLEME — noindex'in görülebilmesi için sayfa taranabilir kalmalı. robots: { index: false, follow: true }, }; export default function SonucPage({ searchParams, }: { searchParams: Promise<{ sira?: string; tur?: string; sihirbaz?: string; hazir?: string; il?: string | string[]; tip?: string; }>; }) { return ( // Tablo değişken boylu olduğundan altındaki tadımlık, sihirbaz, dipnot ve // footer aynı sınırda gruplu — bugünkü tek await'li akışla birebir aynı // anda beliriyorlar, ara durumda zıplama yok. } > {Promise.all([searchParams, cookies()]).then(([params, cerezler]) => { // Profil (sıra/tür/il/tip) normalde PROFIL_CEREZ_ADI çerezinden gelir; // URL param taşımaz (bkz. sonucHref). Query'de sira varsa eski // paylaşılan/yer imli link demektir — açık URL niyeti çerezi ezer, // eski linkler çalışmayı sürdürür. const eskiLinkSira = Number.parseInt(params.sira ?? "", 10); const eskiLink = Number.isFinite(eskiLinkSira); const profil = eskiLink ? null : cerezdenTercihProfili(cerezler.get(PROFIL_CEREZ_ADI)?.value); const sira = eskiLink ? eskiLinkSira : (profil?.sira ?? Number.NaN); const turHam = eskiLink ? params.tur : profil?.tur; const turKey: PuanTuruKey = turHam && turHam in PUAN_TURLERI ? (turHam as PuanTuruKey) : "say"; // Tablo filtreleri: il en fazla 5 tekrarsız, tip devlet|vakif // allowlist'li (çerez tarafı tercihProfiliDogrula'dan zaten geçmiş // olsa da iki kaynak aynı süzgeçten akar). const hamIller = eskiLink ? Array.isArray(params.il) ? params.il : params.il ? [params.il] : [] : (profil?.secimler.iller ?? []); const iller = [ ...new Set(hamIller.filter((i) => i.trim().length > 0)), ].slice(0, 5); const tipHam = eskiLink ? params.tip : profil?.secimler.universiteTipi; const uniturGrubu = tipHam === "devlet" || tipHam === "vakif" ? tipHam : undefined; if (!Number.isFinite(sira) || sira < 1 || sira > 4_000_000) { return ( <> ); } return (
{/* Sayfa hiyerarşisi: önce Türkiye haritası, sonra liste. Manuel liste store'una abone olduğundan tablodan "+" ile eklenenler buraya canlı yansır. */} {/* Yapay Zeka'dan bağımsız ham tablo — haritanın hemen altında, sayfanın ana gövdesi; puan türü navbar'daki sıralama rozetinden değiştirilir. Sihirbaz seçimleri (il, devlet/ vakıf) profil çerezinden tabloya uygulanır. */} {/* Girişsiz tadımlık: gerçek rapor satırı formatında tek örnek. Havuzda içerik yoksa bileşen hiç render edilmez. */} {/* Sihirbaz akışı (CTA + modal) — üretim ve liste /listem'de yaşar, burada yalnızca funnel kartları render edilir */}

Veriler resmî YÖK Atlas kaynağından derlenmiştir. KolayTercih bir karar destek aracıdır; yerleşme garantisi vermez, tercih sorumluluğu adaya aittir.

); })}
); }