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

TypeUI BileşeniÖzellik
text<Input>Serbest metin
number<Input type="number"> + <Slider>Sayısal alan, min/max/step destekler
selectCombobox (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-searchSchoolSearch comboboxOkul arama + ID seç, displayValue = okul adı
user-searchUserSearchComboboxKullanıcı arama + ID seç
admin-searchUserSearchComboboxAdmin 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österilen

AppliedFilter 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” → onApplyhandleApplyFilters → URL güncellenir
  • “Sıfırla” → tüm filtreler temizlenir