Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Conventions

CRM Yardımcı Fonksiyonlar

formatDate (src/utils/formatDate.ts)

formatDate(dateString: string): string → "DD/MM/YYYY"
  • ISO string’i DD/MM/YYYY formatına çevirir
  • Geçersiz tarih (-000001-...) → boş string döner
  • NaN tarih → boş string
  • GenericListPage bunu otomatik uygular (isDateString() ile tespit)

slugify (src/utils/slugify.ts)

slugify(text: string): string

Türkçe karakterleri ASCII’ye çevirir:

  • ç→c, ğ→g, ı→i, İ→i, ö→o, ş→s, ü→u
  • Lowercase, spaces→hyphens, özel karakterler temizlenir

apiHelpers (src/utils/apiHelpers.ts)

isApiSuccess(response)           → HTTP 200-299 kontrolü
isApiSuccessWithData(response)   → 200-299 + response.data.data varlığı
isApiSuccessWithToken(response)  → 200-299 + access_token varlığı
hasSuccessFlag(response)         → @deprecated, legacy compat

En sık kullanılan: isApiSuccessWithData — liste sayfalarında if (response.data?.data) yerine kullanılır.

errorLogger (src/utils/errorLogger.ts)

errorLogger.log(error, tag, severity, context)

getErrorMessage(error: unknown): string — Axios hata nesnesinden kullanıcıya gösterilecek mesajı çıkarır:

  1. response.data.errors → ilk validation hatası
  2. response.data.message → genel mesaj
  3. error.message → JS Error mesajı
  4. Fallback: “Bir hata oluştu.”

decodeHtmlEntities (inline helper)

Edit sayfalarında API’den gelen HTML entity’li metinleri decode etmek için:

const decodeHtmlEntities = (text: string | null | undefined): string => {
    if (!text) return "";
    const textarea = document.createElement('textarea');
    textarea.innerHTML = text;
    return textarea.value;
};

Her edit sayfasında yeniden tanımlanıyor — merkezi export yok.

API Response Pattern

Başarılı listeleme:

response.data.data  → T[] (array)
response.data.meta  → { total, per_page, current_page, last_page }

Başarılı tekli kayıt:

response.data.data  → T (obje)