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ı

AlanBileşenKural
titleTextInputMax 255 char
textTextInputMin 150, Max 1000/1500 char
sortTextInputSıralama sayısı
selectedSchoolIdsSchoolMultiSelectÇoklu okul seçimi
dateValueDatePickerFieldDuyuru: ends_on, Etkinlik: starts_on
newMediaItemsContentMediaPickerYeni yüklenen görseller
existingMediaContentMediaPickerMevcut görseller

Medya İki Tür State

newMediaItems: NewMediaItem[]      // Yeni seçilmiş, upload bekleyen
existingMedia: ExistingMediaItem[] // API'den gelen mevcut görseller

Düzenleme modunda detay otomatik çekilir (SchoolContentService.getById).

Validasyon

Kaydet öncesi client-side:

  • title boş değil
  • text minLength karşılanıyor (150 char)
  • selectedSchoolIds en 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.