Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Conventions
CRM Filtre Tipleri (GenericFilter)
GenericFilter Interface
interface GenericFilter {
id?: string;
name: string; // URL'de filter[name] olarak geçer
label: string; // UI'da gösterilen başlık
type: FilterType;
value: string;
displayValue?: string; // user-search/admin-search için gösterim değeri
options?: FilterOption[];
min?: number; // number/range tipi için
max?: number;
step?: number;
}Filter Tipleri
| Type | UI Bileşeni | Özellik |
|---|---|---|
text | <Input> | Serbest metin |
number | <Input type="number"> + <Slider> | Sayısal alan, min/max/step destekler |
select | Combobox (Command + Popover) | options array ile |
boolean | <Switch> | Açık/Kapalı toggle |
date | <Calendar> | Tekil tarih seçici |
dateRange | İki <Calendar> | Min-max tarih → “min,max” string olarak URL’e yazılır |
school-search | SchoolSearch combobox | Okul arama + ID seç, displayValue = okul adı |
user-search | UserSearchCombobox | Kullanıcı arama + ID seç |
admin-search | UserSearchCombobox | Admin kullanıcı arama + ID seç |
dateRange URL Formatı
URL: filter[field]=2024-01-01,2024-12-31
API'ye: filter[field][min]=2024-01-01, filter[field][max]=2024-12-31
Virgülle ayrılmış min,max string olarak URL’e yazılır, buildApiParams split eder.
school-search / user-search displayValue
Bu filtreler ID değer gönderir ama UI’da isim göstermesi gerekir. displayValue field’ı bunun için:
// FilterSheet'ten seçim yapılınca
filter.value = "123" // API'ye gönderilen ID
filter.displayValue = "Okul Adı" // UI'da gösterilenAppliedFilter badge’leri ve displayFilters bu displayValue’yu kullanır.
FilterSheet Bileşeni
Sağdan açılan Sheet bileşeni. İçeriğe göre dinamik render:
- her filter tipi için farklı input render edilir
- “Uygula” →
onApply→handleApplyFilters→ URL güncellenir - “Sıfırla” → tüm filtreler temizlenir
Related
- url-tabanli-filtreleme — URL senkronizasyonu
- liste-sayfasi-pattern — useListFilters entegrasyonu