v2 #10

Merged
bilal merged 34 commits from v2 into main 2026-10-11 01:38:50 +03:00
8 changed files with 34 additions and 5 deletions
Showing only changes of commit 7c48f64ff3 - Show all commits

View File

@@ -22,6 +22,7 @@ import {
SATIR_BUTON_BASLIK, SATIR_BUTON_BASLIK,
SATIR_BUTON_HUCRE, SATIR_BUTON_HUCRE,
SATIR_BUTON_KABI, SATIR_BUTON_KABI,
SATIR_CIP,
SATIR_GRUP, SATIR_GRUP,
SATIR_IKINCIL_LINK, SATIR_IKINCIL_LINK,
SATIR_META, SATIR_META,
@@ -242,6 +243,10 @@ export function BolumProgramListesi({
)} )}
<span className={SATIR_META}> <span className={SATIR_META}>
<TurCipi unitur={p.unitur} /> <TurCipi unitur={p.unitur} />
{/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder (§4.15 çip) */}
{p.varyant ? (
<span className={SATIR_CIP}>{p.varyant}</span>
) : null}
{p.il ? ( {p.il ? (
<Link <Link
href={ilSayfaHref(p.il)} href={ilSayfaHref(p.il)}

View File

@@ -107,6 +107,10 @@ export function UniversiteProgramTablosu({
<span className={SATIR_CIP}> <span className={SATIR_CIP}>
{TUR_ETIKET[p.tur] ?? p.tur} {TUR_ETIKET[p.tur] ?? p.tur}
</span> </span>
{/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder (§4.15 çip) */}
{p.varyant ? (
<span className={SATIR_CIP}>{p.varyant}</span>
) : null}
{p.sure ? ( {p.sure ? (
<span className="shrink-0">{p.sure} yıl</span> <span className="shrink-0">{p.sure} yıl</span>
) : null} ) : null}

View File

@@ -452,6 +452,10 @@ function CekmeceSatiri({
> >
{trBaslikDuzeni(tercih.universite)} {trBaslikDuzeni(tercih.universite)}
</Link> </Link>
{/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder */}
{tercih.varyant ? (
<span className="shrink-0 text-slate-500">· {tercih.varyant}</span>
) : null}
</span> </span>
{tercih.risk || tercih.efektifSira != null ? ( {tercih.risk || tercih.efektifSira != null ? (
<span className="mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-slate-500"> <span className="mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-slate-500">

View File

@@ -28,6 +28,7 @@ type ProgramOzet = Pick<
| "unitur" | "unitur"
| "tur" | "tur"
| "efektifSira" | "efektifSira"
| "varyant"
>; >;
const PROFILSIZ_EKLEME_TOAST_ID = "profilsiz-ekleme"; const PROFILSIZ_EKLEME_TOAST_ID = "profilsiz-ekleme";

View File

@@ -55,6 +55,7 @@ import {
SATIR_BUTON_HUCRE, SATIR_BUTON_HUCRE,
SATIR_BUTON_KABI, SATIR_BUTON_KABI,
SATIR_ALT_GRUP, SATIR_ALT_GRUP,
SATIR_CIP,
SATIR_IKINCIL_LINK, SATIR_IKINCIL_LINK,
SATIR_META, SATIR_META,
SATIR_MOBIL_SAYI, SATIR_MOBIL_SAYI,
@@ -373,6 +374,10 @@ function ProgramSatiri({
unitur={p.unitur} unitur={p.unitur}
onClick={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()}
/> />
{/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder (§4.15 çip) */}
{p.varyant ? (
<span className={SATIR_CIP}>{p.varyant}</span>
) : null}
{p.il ? ( {p.il ? (
<Link <Link
href={ilSayfaHref(p.il)} href={ilSayfaHref(p.il)}

View File

@@ -29,6 +29,7 @@ export type BekleyenProgram = {
| "unitur" | "unitur"
| "tur" | "tur"
| "efektifSira" | "efektifSira"
| "varyant"
>; >;
kaynak: ManuelKaynak; kaynak: ManuelKaynak;
adaySira?: number; adaySira?: number;
@@ -271,11 +272,16 @@ export function programEkleIste(opts: {
} }
const profil = profilsiz ? null : (durum.profil ?? tercihProfiliOku()); const profil = profilsiz ? null : (durum.profil ?? tercihProfiliOku());
const tercih = programdanManuelTercih( // programdanManuelTercih (liste-store) varyantı bilmez; etiket burada
program, // kopyalanır ki çekmece aynı adlı satırları ayırt edebilsin.
adaySira ?? profil?.sira ?? null, const tercih = {
kaynak, ...programdanManuelTercih(
); program,
adaySira ?? profil?.sira ?? null,
kaynak,
),
varyant: program.varyant ?? null,
};
const ok = ekle(tercih); const ok = ekle(tercih);
if (!ok) { if (!ok) {
return { return {

View File

@@ -30,6 +30,8 @@ export type ManuelTercih = {
/** Ekleme / profil anındaki aday sıralamasına göre risk */ /** Ekleme / profil anındaki aday sıralamasına göre risk */
risk: RiskSeviyesi | null; risk: RiskSeviyesi | null;
kaynak?: ManuelKaynak; kaynak?: ManuelKaynak;
/** Burs/dil/öğretim türü etiketi (Program.varyant); eski kayıtlarda yok */
varyant?: string | null;
}; };
/** Güvenilmeyen JSON'u (localStorage veya sunucu kaydı) listeye süzer. */ /** Güvenilmeyen JSON'u (localStorage veya sunucu kaydı) listeye süzer. */
@@ -66,6 +68,7 @@ export function dogrula(ham: unknown): ManuelTercih[] {
: null, : null,
risk, risk,
kaynak, kaynak,
varyant: typeof kayit.varyant === "string" ? kayit.varyant : null,
}); });
if (sonuc.length >= MANUEL_LISTE_MAX) break; if (sonuc.length >= MANUEL_LISTE_MAX) break;
} }

View File

@@ -25,6 +25,7 @@ export function programOzetle(p: Program): ProgramListeSatiri {
efektifSira: p.efektifSira, efektifSira: p.efektifSira,
kontenjanSon: p.kontenjanSon, kontenjanSon: p.kontenjanSon,
yerlesenSon: p.yerlesenSon, yerlesenSon: p.yerlesenSon,
varyant: p.varyant,
}; };
} }