feat: alan eşlemesine fakülte sinyali + il adımında tüm iller
Sihirbazın alan çipleri artık YÖK Atlas'ın kendi verisiyle süzülüyor: kategoriBul program adı kurallarını fakülte kurallarıyla kesiştiriyor (Siber Güvenlik Müh. artık Hukuk değil, Siyaset Bilimi artık Fen değil). Aşırı geniş isim regexleri sıkılaştırıldı (bilim/güvenlik/programcı/çevre + gastronomi'nin içindeki "astronomi" tuzağı) — sayısalda Hukuk & Siyasal, sözelde Mühendislik çipi tamamen kalktı. İl adımındaki .slice(0,15) kırpması kaldırıldı: penceresinde programı olan TÜM iller listelenir; KKTC/yurtdışı kampüsler ayrı çip grubunda. Haritanın 15-limit yüzünden yanlış "program yok" grilemesi kendiliğinden düzeldi. Öncelik çiplerine şeffaflık notu eklendi (listeyi daraltmaz, AI'ya yön verir). /meraklisina şeması ve anlatımı aynı davranışla senkronlandı. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -93,6 +93,16 @@ export function SihirbazAdimlar({
|
||||
() => [...canliFacetler.iller].sort((a, b) => b.adet - a.adet),
|
||||
[canliFacetler.iller],
|
||||
);
|
||||
// Türkiye illeri ana çip grubu; KKTC/yurtdışı kampüsler haritada olmadığı
|
||||
// için ayrı alt grupta listelenir.
|
||||
const turkiyeIlleri = useMemo(
|
||||
() => siraliIller.filter((i) => HARITA_ILLERI.has(i.il)),
|
||||
[siraliIller],
|
||||
);
|
||||
const disIller = useMemo(
|
||||
() => siraliIller.filter((i) => !HARITA_ILLERI.has(i.il)),
|
||||
[siraliIller],
|
||||
);
|
||||
const haritaIlleri = useMemo(
|
||||
() => canliFacetler.iller.filter((i) => HARITA_ILLERI.has(i.il)),
|
||||
[canliFacetler.iller],
|
||||
@@ -258,13 +268,14 @@ export function SihirbazAdimlar({
|
||||
|
||||
{/* Çipler birincil seçim yolu (haritadaki küçük iller mobilde
|
||||
güvenilir dokunma hedefi değil); iller seçili kategorilere göre
|
||||
süzülmüş, program sayısına göre sıralı listelenir. */}
|
||||
süzülmüş, program sayısına göre sıralı listelenir. Penceresinde
|
||||
programı olan TÜM iller görünür (kırpma yok). */}
|
||||
<div
|
||||
className={`mt-4 flex flex-wrap gap-2 ${
|
||||
className={`mt-4 flex max-h-56 flex-wrap gap-2 overflow-y-auto sm:max-h-none sm:overflow-visible ${
|
||||
facetYukleniyor ? "animate-pulse opacity-60" : ""
|
||||
}`}
|
||||
>
|
||||
{siraliIller.map((i) => (
|
||||
{turkiyeIlleri.map((i) => (
|
||||
<Cip
|
||||
key={i.il}
|
||||
secili={iller.includes(i.il)}
|
||||
@@ -276,6 +287,30 @@ export function SihirbazAdimlar({
|
||||
))}
|
||||
</div>
|
||||
|
||||
{disIller.length > 0 ? (
|
||||
<div className="mt-4">
|
||||
<p className="mb-2 text-xs font-semibold tracking-wide text-slate-400 uppercase">
|
||||
KKTC & Yurt Dışı
|
||||
</p>
|
||||
<div
|
||||
className={`flex flex-wrap gap-2 ${
|
||||
facetYukleniyor ? "animate-pulse opacity-60" : ""
|
||||
}`}
|
||||
>
|
||||
{disIller.map((i) => (
|
||||
<Cip
|
||||
key={i.il}
|
||||
secili={iller.includes(i.il)}
|
||||
onClick={() => listeDegistir(iller, setIller, i.il, 5)}
|
||||
>
|
||||
{trBaslikDuzeni(i.il)}
|
||||
<span className="ml-1.5 text-xs opacity-70">{i.adet}</span>
|
||||
</Cip>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
{iller.length > 0 ? (
|
||||
<div className="mt-3 flex flex-wrap items-center gap-2">
|
||||
<span className="text-xs font-semibold text-slate-400">
|
||||
@@ -359,6 +394,10 @@ export function SihirbazAdimlar({
|
||||
</Cip>
|
||||
))}
|
||||
</div>
|
||||
<p className="mt-2 text-xs text-slate-500">
|
||||
Öncelikler yapay zekânın gerekçelerine ve program seçimine yön
|
||||
verir; listeyi daraltmaz.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</TransitionPanel>
|
||||
|
||||
Reference in New Issue
Block a user