Proje: OkulUp CRM · Hub: OkulUp CRM — Conventions

Store ve Hook Pattern

Zustand Store’ları

Projede 4 global store var:

  • useAuthStore — token, user, login/logout/hydrateSession
  • useDataStore — tüm modül verileri + loadAllData
  • useFeedbackStore — toast/snackbar bildirimleri
  • useDeleteStore — silme confirm dialog state’i

Feature Hook Pattern

Her modülün kendi use<Modül>Feature.js hook’u var:

hooks/useAnnouncementsFeature.js
hooks/useAppointmentsFeature.js
...

Bu hook’lar API çağrısı + local form state’ini barındırır, UI mantığını feature bileşeninden ayırır.

Page → Feature → Hook Hiyerarşisi

pages/AnnouncementsPage.jsx
  └─ features/AnnouncementsTab.jsx
       └─ hooks/useAnnouncementsFeature.js

Form Boş Değerleri

Her modülün EMPTY_<FORM_NAME>_FORM sabiti lib/constants.js’de tanımlı. Yeni form açarken bu sabitlerden spread ile başla, asla hardcode etme.

API Çağrısı

lib/helpers.js içindeki requestJson(baseUrl, token, path, options) kullanılır. Token useAuthStore’dan alınır; store dışında direkt localStorage’a erişme.

localStorage Key’leri

STORAGE_KEYS objesinden kullan (constants.js):

  • okulup.token
  • okulup.favoriteActions
  • okulup.sidebarOpen