diff --git a/src/components/site-top-banner.tsx b/src/components/site-top-banner.tsx index 2a2357f..9392e82 100644 --- a/src/components/site-top-banner.tsx +++ b/src/components/site-top-banner.tsx @@ -3,7 +3,17 @@ import { startTransition, useEffect, useState } from "react"; import NumberFlow, { NumberFlowGroup } from "@number-flow/react"; import { CalendarDays, Clock3 } from "lucide-react"; -import { sezonAsamasi, sezonHedefi, type SezonAsamasi } from "@/lib/sezon"; +import { + BANT_ARIA, + BANT_METNI, + SEZON_TAKVIMI, + sezonAsamasi, + sezonHedefi, + type SezonAraligi, + type SezonAsamasi, +} from "@/lib/sezon"; +import { trTarih } from "@/lib/tarih"; +import { TERCIH_YILI, VERI_ARALIGI } from "@/lib/veri-yillari"; type GeriSayim = { asama: SezonAsamasi; @@ -27,6 +37,27 @@ function geriSayimiHesapla(simdi: number): GeriSayim { }; } +/** + * "29 Temmuz – 10 Ağustos 2026": aralık aynı yıl içindeyse yıl yalnızca sonda + * yazılır. `trTarih` bilinçli olarak `Date`/`toLocale*` kullanmaz; sunucu ile + * tarayıcı saat dilimi farklı olsa da aynı metni üretir. + */ +function araligiBicimlendir(takvim: SezonAraligi) { + const baslangicIso = takvim.baslangic.slice(0, 10); + const bitisIso = takvim.bitis.slice(0, 10); + const yil = bitisIso.slice(0, 4); + const baslangic = trTarih(baslangicIso); + + return { + baslangicIso, + bitisIso, + baslangicMetni: baslangicIso.startsWith(yil) + ? baslangic.replace(` ${yil}`, "") + : baslangic, + bitisMetni: trTarih(bitisIso), + }; +} + const BIRIMLER = [ { anahtar: "gun", etiket: "gün" }, { anahtar: "saat", etiket: "sa" }, @@ -48,36 +79,50 @@ export function SiteTopBanner() { return () => window.clearInterval(zamanlayici); }, []); - const asamaMetni = - geriSayim?.asama === "baslamadi" - ? "Başlamasına" - : geriSayim?.asama === "sona-erdi" - ? "Tercih dönemi sona erdi" - : "Sona ermesine"; + // Takvim açıklanmamışsa aşama zamandan bağımsızdır; mount öncesinde de + // bilinir, böylece boş sayaç bir an görünüp kaybolmaz. Takvim varsa sunucu + // çıktısı eskisi gibi "devam-ediyor" varsayar, ilk tikte gerçeğine döner. + const takvim = SEZON_TAKVIMI[TERCIH_YILI] ?? null; + const asama: SezonAsamasi = + geriSayim?.asama ?? (takvim ? "devam-ediyor" : "takvim-belirsiz"); + const hedef = sezonHedefi(asama); + const aralik = takvim ? araligiBicimlendir(takvim) : null; return (

- 2026 YKS tercih dönemi · - - – - + {BANT_ARIA} · + {aralik ? ( + <> + + – + + + ) : ( + // Takvim yok: uydurma tarih yerine elimizdeki veriyi söyle. + {VERI_ARALIGI} verisi + )}

-
+
- {asamaMetni} + {BANT_METNI[asama]}
- {geriSayim?.asama !== "sona-erdi" ? ( + {hedef !== null ? (