refactor: /sonuc tablosundaki "Filtreler:" çip alanını kaldır
Filtreleme davranışı (URL'deki il+tip paramlarının tabloya ve sayfalamaya uygulanması) aynen korunur; yalnızca tablo üstündeki kaldırılabilir çip satırı gösterilmez. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,13 +7,11 @@
|
||||
|
||||
import { useMemo, useState } from "react";
|
||||
import Link from "next/link";
|
||||
import { useRouter, useSearchParams } from "next/navigation";
|
||||
import {
|
||||
ChevronDown,
|
||||
Rocket,
|
||||
Scale,
|
||||
ShieldCheck,
|
||||
X,
|
||||
} from "lucide-react";
|
||||
import type {
|
||||
DilimKey,
|
||||
@@ -22,7 +20,7 @@ import type {
|
||||
RankResultsListe,
|
||||
} from "@/types/yokatlas";
|
||||
import { riskHesapla, type RiskSeviyesi } from "@/lib/risk";
|
||||
import { bolumSayfaSlug, trBaslikDuzeni, uniSayfaSlug } from "@/lib/slug";
|
||||
import { bolumSayfaSlug, uniSayfaSlug } from "@/lib/slug";
|
||||
import {
|
||||
ProgramSiraGecmisi,
|
||||
ProgramTabanTrendi,
|
||||
@@ -105,29 +103,13 @@ export function ProgramTablosu({
|
||||
filtreIller?: string[];
|
||||
filtreTip?: "devlet" | "vakif";
|
||||
}) {
|
||||
const router = useRouter();
|
||||
const arama = useSearchParams();
|
||||
const [aktifDilim, setAktifDilim] = useState<DilimKey>(() =>
|
||||
varsayilanDilim(sonuclar),
|
||||
);
|
||||
// Sihirbaz seçimlerinden URL'e yazılan filtreler (bkz. sonucHref) —
|
||||
// sayfalama isteklerinde ve veri anahtarında kullanılır.
|
||||
const iller = useMemo(() => filtreIller ?? [], [filtreIller]);
|
||||
|
||||
// Filtre çipini kaldırmak yalnızca URL'i günceller (tek doğruluk kaynağı
|
||||
// URL); localStorage'taki sihirbaz profiline DOKUNULMAZ — kullanıcı
|
||||
// tabloda filtreyi kaldırıp tüm sonuçları görebilir, AI listesi seçimleri
|
||||
// etkilenmez.
|
||||
function filtreKaldir(tip: "il" | "tip", deger?: string) {
|
||||
const q = new URLSearchParams(arama.toString());
|
||||
if (tip === "tip") {
|
||||
q.delete("tip");
|
||||
} else {
|
||||
const kalanlar = q.getAll("il").filter((i) => i !== deger);
|
||||
q.delete("il");
|
||||
for (const i of kalanlar) q.append("il", i);
|
||||
}
|
||||
router.replace(`?${q}`, { scroll: false });
|
||||
}
|
||||
|
||||
// "Daha fazla göster" ile sayfalanan devam satırları. Sıra/tür/filtre
|
||||
// değişince (puan türü seçici aynı bileşeni yeniden render eder, remount
|
||||
// etmez) render sırasında sıfırlanır ki eski kümenin satırları karışmasın.
|
||||
@@ -193,39 +175,6 @@ export function ProgramTablosu({
|
||||
onPointerEnter={preloadTercihHaritasi}
|
||||
onFocusCapture={preloadTercihHaritasi}
|
||||
>
|
||||
{/* Sihirbaz seçimlerinden gelen aktif filtreler — görünür ve tek tek
|
||||
kaldırılabilir; sayılar neden azaldı sorusunu burada yanıtlar. */}
|
||||
{iller.length > 0 || filtreTip ? (
|
||||
<div className="mb-3 flex flex-wrap items-center gap-2">
|
||||
<span className="text-xs font-semibold text-slate-400">
|
||||
Filtreler:
|
||||
</span>
|
||||
{filtreTip ? (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => filtreKaldir("tip")}
|
||||
title="Üniversite tipi filtresini kaldır"
|
||||
className="inline-flex cursor-pointer items-center gap-1 rounded-full border border-slate-200 bg-white px-3 py-1.5 text-xs font-medium text-slate-700 transition-colors duration-150 hover:border-slate-300 hover:bg-slate-50"
|
||||
>
|
||||
{filtreTip === "devlet" ? "Devlet" : "Vakıf"}
|
||||
<X className="size-3" aria-hidden />
|
||||
</button>
|
||||
) : null}
|
||||
{iller.map((il) => (
|
||||
<button
|
||||
key={il}
|
||||
type="button"
|
||||
onClick={() => filtreKaldir("il", il)}
|
||||
title={`${trBaslikDuzeni(il)} filtresini kaldır`}
|
||||
className="inline-flex cursor-pointer items-center gap-1 rounded-full border border-slate-200 bg-white px-3 py-1.5 text-xs font-medium text-slate-700 transition-colors duration-150 hover:border-slate-300 hover:bg-slate-50"
|
||||
>
|
||||
{trBaslikDuzeni(il)}
|
||||
<X className="size-3" aria-hidden />
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
<Tabs
|
||||
value={aktifDilim}
|
||||
onValueChange={(v) => setAktifDilim(v as DilimKey)}
|
||||
|
||||
Reference in New Issue
Block a user