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ı kapsar

Farklar

Eski (useUrlFilters direkt)Yeni (useListFilters)
BoilerplateYüksekDüşük
Sync effectManuel gerekliOtomatik
API paramsManuel buildbuildApiParams()
FilterKeyMappingsYok / manuelDestekli
Hierarchical filtersYokDestekli
DisplayFiltersYokOtomatik

Hangi Sayfalar Eski Pattern Kullanıyor

  • users/page.tsxuseUrlFilters direkt
  • (diğerleri araştırılmalı)

Yeni Sayfa Yaparken

Her zaman useListFilters kullan — eski pattern sadece mevcut sayfalar için vardır.