v2 #10
@@ -22,6 +22,7 @@ import {
|
||||
SATIR_BUTON_BASLIK,
|
||||
SATIR_BUTON_HUCRE,
|
||||
SATIR_BUTON_KABI,
|
||||
SATIR_CIP,
|
||||
SATIR_GRUP,
|
||||
SATIR_IKINCIL_LINK,
|
||||
SATIR_META,
|
||||
@@ -242,6 +243,10 @@ export function BolumProgramListesi({
|
||||
)}
|
||||
<span className={SATIR_META}>
|
||||
<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 ? (
|
||||
<Link
|
||||
href={ilSayfaHref(p.il)}
|
||||
|
||||
@@ -107,6 +107,10 @@ export function UniversiteProgramTablosu({
|
||||
<span className={SATIR_CIP}>
|
||||
{TUR_ETIKET[p.tur] ?? p.tur}
|
||||
</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 ? (
|
||||
<span className="shrink-0">{p.sure} yıl</span>
|
||||
) : null}
|
||||
|
||||
@@ -452,6 +452,10 @@ function CekmeceSatiri({
|
||||
>
|
||||
{trBaslikDuzeni(tercih.universite)}
|
||||
</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>
|
||||
{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">
|
||||
|
||||
@@ -28,6 +28,7 @@ type ProgramOzet = Pick<
|
||||
| "unitur"
|
||||
| "tur"
|
||||
| "efektifSira"
|
||||
| "varyant"
|
||||
>;
|
||||
|
||||
const PROFILSIZ_EKLEME_TOAST_ID = "profilsiz-ekleme";
|
||||
|
||||
@@ -55,6 +55,7 @@ import {
|
||||
SATIR_BUTON_HUCRE,
|
||||
SATIR_BUTON_KABI,
|
||||
SATIR_ALT_GRUP,
|
||||
SATIR_CIP,
|
||||
SATIR_IKINCIL_LINK,
|
||||
SATIR_META,
|
||||
SATIR_MOBIL_SAYI,
|
||||
@@ -373,6 +374,10 @@ function ProgramSatiri({
|
||||
unitur={p.unitur}
|
||||
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 ? (
|
||||
<Link
|
||||
href={ilSayfaHref(p.il)}
|
||||
|
||||
@@ -29,6 +29,7 @@ export type BekleyenProgram = {
|
||||
| "unitur"
|
||||
| "tur"
|
||||
| "efektifSira"
|
||||
| "varyant"
|
||||
>;
|
||||
kaynak: ManuelKaynak;
|
||||
adaySira?: number;
|
||||
@@ -271,11 +272,16 @@ export function programEkleIste(opts: {
|
||||
}
|
||||
|
||||
const profil = profilsiz ? null : (durum.profil ?? tercihProfiliOku());
|
||||
const tercih = programdanManuelTercih(
|
||||
// programdanManuelTercih (liste-store) varyantı bilmez; etiket burada
|
||||
// kopyalanır ki çekmece aynı adlı satırları ayırt edebilsin.
|
||||
const tercih = {
|
||||
...programdanManuelTercih(
|
||||
program,
|
||||
adaySira ?? profil?.sira ?? null,
|
||||
kaynak,
|
||||
);
|
||||
),
|
||||
varyant: program.varyant ?? null,
|
||||
};
|
||||
const ok = ekle(tercih);
|
||||
if (!ok) {
|
||||
return {
|
||||
|
||||
@@ -30,6 +30,8 @@ export type ManuelTercih = {
|
||||
/** Ekleme / profil anındaki aday sıralamasına göre risk */
|
||||
risk: RiskSeviyesi | null;
|
||||
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. */
|
||||
@@ -66,6 +68,7 @@ export function dogrula(ham: unknown): ManuelTercih[] {
|
||||
: null,
|
||||
risk,
|
||||
kaynak,
|
||||
varyant: typeof kayit.varyant === "string" ? kayit.varyant : null,
|
||||
});
|
||||
if (sonuc.length >= MANUEL_LISTE_MAX) break;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ export function programOzetle(p: Program): ProgramListeSatiri {
|
||||
efektifSira: p.efektifSira,
|
||||
kontenjanSon: p.kontenjanSon,
|
||||
yerlesenSon: p.yerlesenSon,
|
||||
varyant: p.varyant,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user