Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Domain
CRM Konum Sistemi
Location Entity
interface Location {
id: number;
name: string;
slug: string;
status: boolean;
parent_id: number | null; // üst konum
view_order?: number;
parent?: Location | null;
children?: Location[];
}Hiyerarşi
Konum 3 seviyeli ağaç yapısındadır:
- Seviye 1 (
location-1): Şehir (il) - Seviye 2 (
location-2): İlçe - Seviye 3 (
location-3): Mahalle
parent_id null → üst seviye konum (şehir).
NULL Filtresi — Önemli API Değişikliği (2026-04-17)
filter[parent_id]='' artık çalışmıyor. Şehirleri (parent_id IS NULL) çekmek için:
// YANLIŞ — API ignore ediyor
'filter[parent_id]': ''
// DOĞRU
'nulls[]': 'parent_id'Bu API genelinde geçerli: HasNulls trait + includeNulls() olan tüm endpoint’lerde aynı pattern. → 2026-04-17-null-filter-api-degisimi
API Filter Eşlemesi
Okul filtrelemede:
filter[location-1] → şehir ID
filter[location-2] → ilçe ID
filter[location-3] → mahalle ID
HierarchicalLocationForm
src/components/common/HierarchicalLocationForm.tsx — üç seviyeli cascading select. Parent seçilince child seçenekleri yüklenir.
LocationSelector
src/components/common/LocationSelector.tsx — tek konum seçme bileşeni. Province/county/neighbourhood üçlüsü.
Okul Konumu Include’ları
location
location.province → il (şehir)
location.county → ilçe
location.neighbourhood → mahalle
useLocationFilter / useLocationSelector Hooks
src/hooks/useLocationFilter.ts — liste sayfalarında şehir/ilçe/mahalle hiyerarşik filtresi için.
src/hooks/useLocationSelector.ts — form’larda konum seçimi için.
Related
- okul-entity — Okul konumu ilişkisi
- liste-sayfasi-pattern — hierarchicalFilters kullanımı