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
SchoolSearchbileşeni → arama ile tek okul seç- Seçilen okul
selectedSchoolsarray’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
- Kullanıcı dosya seçer →
setCropperOpen(true)+setImageToCrop(fileUrl) ImageCropperdialog → kırpılmış blob →MediaService.uploadTemporary()→tempPathselectedImagestate’e{ tempPath, url: previewUrl }kaydedilir- Form submit’te
MediaService.move()ile kalıcı hale getirilir
sort Default
Duyurularda sort default değeri 99 — en altta başlaması için.
Related
- duyuru-etkinlik-modeli — AnnouncementFormValues, school_ids
- media-yukleme-akisi — uploadTemporary→move
- ozel-bilesanler — SchoolSearch ve ImageCropper bileşenleri