Some checks failed
Deploy / deploy (push) Has been cancelled
Profil çerezinin SSR'da kullanılmasını sağlayarak, sonuç sayfasındaki yönlendirmeleri güncelledik. Artık profil bilgileri URL parametreleri yerine çerezden alınarak işleniyor. Ayrıca, profil çerezi olmayan kullanıcılar için yönlendirme mantığı iyileştirildi. Çeşitli bileşenlerdeki URL oluşturma fonksiyonları güncellenerek, profil bilgileri çerezden okunacak şekilde düzenlendi. Bu değişiklikler, kullanıcı deneyimini artırmayı ve daha tutarlı bir veri akışı sağlamayı hedefliyor.
74 lines
2.6 KiB
TypeScript
74 lines
2.6 KiB
TypeScript
"use client";
|
||
|
||
// Profil çerezi yokken: localStorage'da kayıtlı profil varsa çereze taşıyıp
|
||
// sayfayı tazele (URL değişmez); yoksa kapıyı aç. Sıra bilgisi localStorage'daki
|
||
// TercihProfili ile tüm uygulamada ortak, sunucu tablosu çerezden okur.
|
||
|
||
import { useEffect } from "react";
|
||
import { useRouter } from "next/navigation";
|
||
import Link from "next/link";
|
||
import { ArrowLeft, Trophy } from "lucide-react";
|
||
import { Button } from "@/components/ui/button";
|
||
import { PagePixelDivider } from "@/components/pixel-decor";
|
||
import { profilCerezineYaz } from "@/features/sihirbaz/sihirbaz-profil";
|
||
import {
|
||
sonucaGitIste,
|
||
useProfilKapisi,
|
||
} from "@/features/liste/hooks/use-tercih-profili";
|
||
|
||
export function SiraGerekli() {
|
||
const router = useRouter();
|
||
const { profil, profilYuklendi } = useProfilKapisi();
|
||
|
||
// "Yönleniyor" durumu ayrı state gerektirmez: profil varken aşağıdaki koşul
|
||
// zaten bekleme ekranını gösteriyor. Çerezi olmayan eski kullanıcı (profil
|
||
// yalnızca localStorage'da) burada çereze taşınır; refresh sunucu tablosunu
|
||
// aynı URL'de yeni çerezle render eder.
|
||
useEffect(() => {
|
||
if (profilYuklendi && profil) {
|
||
profilCerezineYaz(profil);
|
||
router.refresh();
|
||
}
|
||
}, [profil, profilYuklendi, router]);
|
||
|
||
if (!profilYuklendi || profil) {
|
||
return (
|
||
<main className="mx-auto flex max-w-2xl flex-col items-center px-4 py-24 text-center">
|
||
<p className="text-sm text-slate-500">Sıralaman kontrol ediliyor…</p>
|
||
</main>
|
||
);
|
||
}
|
||
|
||
return (
|
||
<main className="mx-auto flex max-w-2xl flex-col items-center px-4 py-24 text-center">
|
||
<h1 className="font-heading text-2xl font-bold">
|
||
Geçerli bir sıralama gerekli
|
||
</h1>
|
||
<p className="mt-3 text-slate-600">
|
||
Listeni kurabilmek için YKS başarı sıralamanı gir. Kaydettiğin sıra tüm
|
||
uygulamada kullanılır.
|
||
</p>
|
||
<PagePixelDivider seed={59} className="mx-auto mt-6" />
|
||
<div className="mt-6 flex flex-wrap items-center justify-center gap-3">
|
||
<Button
|
||
type="button"
|
||
onClick={() => {
|
||
const { href } = sonucaGitIste();
|
||
if (href) router.push(href);
|
||
}}
|
||
className="cursor-pointer bg-orange-500 text-white hover:bg-orange-600"
|
||
>
|
||
<Trophy className="size-4" aria-hidden />
|
||
Sıralamamı gir
|
||
</Button>
|
||
<Button asChild variant="outline" className="cursor-pointer">
|
||
<Link href="/">
|
||
<ArrowLeft className="size-4" aria-hidden />
|
||
Ana sayfaya dön
|
||
</Link>
|
||
</Button>
|
||
</div>
|
||
</main>
|
||
);
|
||
}
|