Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Conventions
CRM Eski vs Yeni List Page Pattern
İki Nesil Pattern
Projede iki farklı liste sayfası pattern’i vardır — yeni sayfalar useListFilters, eski sayfalar useUrlFilters direkt kullanır.
Eski Pattern (useUrlFilters direkt)
Örnek: src/pages/users/page.tsx
const {
urlSearch,
urlPage,
urlPageCount,
urlSort,
urlFilters,
updateSearch,
updatePage,
// ...tüm metodlar manuel olarak alınır
} = useUrlFilters({ ... });
// Ayrı state ve sync effect
const [filters, setFilters] = useState(() => initializeFiltersFromUrl(initialFilters));
useEffect(() => {
setFilters(prev => prev.map(filter => ({
...filter,
value: urlFilters[filter.name] || ''
})));
}, [urlFilters]);
// API params manuel oluşturulur
const params = { page: urlPage, 'per-page': urlPageCount, ... };Yeni Pattern (useListFilters)
Örnek: src/pages/schools/page.tsx, src/pages/articles/page.tsx, src/pages/events/page.tsx
const { page, pageCount, sort, handlers, buildApiParams, ... } = useListFilters({
initialFilters,
defaultSort: DEFAULT_SORT,
filterKeyMappings: FILTER_KEY_MAPPINGS,
});
// Sync effect yok — useListFilters halleder
// buildApiParams() tüm param mantığını kapsarFarklar
| Eski (useUrlFilters direkt) | Yeni (useListFilters) | |
|---|---|---|
| Boilerplate | Yüksek | Düşük |
| Sync effect | Manuel gerekli | Otomatik |
| API params | Manuel build | buildApiParams() |
| FilterKeyMappings | Yok / manuel | Destekli |
| Hierarchical filters | Yok | Destekli |
| DisplayFilters | Yok | Otomatik |
Hangi Sayfalar Eski Pattern Kullanıyor
users/page.tsx—useUrlFiltersdirekt- (diğerleri araştırılmalı)
Yeni Sayfa Yaparken
Her zaman useListFilters kullan — eski pattern sadece mevcut sayfalar için vardır.
Related
- liste-sayfasi-pattern — useListFilters tam kullanım
- url-tabanli-filtreleme — useUrlFilters alt katman