Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Conventions

CRM Duyuru/Etkinlik Okul Seçim Pattern

Seçim Yöntemi

Duyuru/Etkinlik create/edit sayfalarında okul seçimi iki ayrı yol ile yapılır:

1. SchoolSearch Combobox

  • SchoolSearch bileşeni → arama ile tek okul seç
  • Seçilen okul selectedSchools array’ine eklenir

2. schoolIdsInput (Toplu Giriş)

  • <Input> ile virgülle ayrılmış ID listesi girişi ("123,456,789")
  • “Ekle” butonu ile parse edilip selectedSchools’a eklenir

selectedSchools State

interface SelectedSchool {
    id: number;
    name: string;
}
 
const [selectedSchools, setSelectedSchools] = useState<SelectedSchool[]>([]);

Her okul için ID + isim tutulur. Formda school_ids: selectedSchools.map(s => s.id) olarak gönderilir.

Görsel Seçim State

const [selectedImage, setSelectedImage] = useState<{
    tempPath?: string;  // API'ye gönderilecek temp path
    url: string;        // Önizleme URL'i
} | null>(null);

Görsel Yükleme ve Kırpma

  1. Kullanıcı dosya seçer → setCropperOpen(true) + setImageToCrop(fileUrl)
  2. ImageCropper dialog → kırpılmış blob → MediaService.uploadTemporary()tempPath
  3. selectedImage state’e { tempPath, url: previewUrl } kaydedilir
  4. Form submit’te MediaService.move() ile kalıcı hale getirilir

sort Default

Duyurularda sort default değeri 99 — en altta başlaması için.