Proje: Okul B2B App · Hub: Okul B2B App — Conventions
İçerik Form Modal Pattern
components/school-content/ContentFormModal.tsx — Duyuru/etkinlik/başarı oluşturma ve düzenleme modal’ı.
Ortak Form Alanları
| Alan | Bileşen | Kural |
|---|---|---|
title | TextInput | Max 255 char |
text | TextInput | Min 150, Max 1000/1500 char |
sort | TextInput | Sıralama sayısı |
selectedSchoolIds | SchoolMultiSelect | Çoklu okul seçimi |
dateValue | DatePickerField | Duyuru: ends_on, Etkinlik: starts_on |
newMediaItems | ContentMediaPicker | Yeni yüklenen görseller |
existingMedia | ContentMediaPicker | Mevcut görseller |
Medya İki Tür State
newMediaItems: NewMediaItem[] // Yeni seçilmiş, upload bekleyen
existingMedia: ExistingMediaItem[] // API'den gelen mevcut görsellerDüzenleme modunda detay otomatik çekilir (SchoolContentService.getById).
Validasyon
Kaydet öncesi client-side:
titleboş değiltextminLength karşılanıyor (150 char)selectedSchoolIdsen az 1 okul
errors: Record<string, string> state ile field-level hata gösterimi.
DatePickerField
components/school-content/DatePickerField.tsx — Native datetime picker kaldırıldı (76b3340 commit), JavaScript-only modal picker kullanılıyor.
SchoolMultiSelect
components/school-content/SchoolMultiSelect.tsx — Birden fazla okul seçimi. SchoolContext.schools listesinden seçim.
Related
- okul-icerikleri — içerik domain
- iceriklerin-medya-yapisi — medya yapısı