Admin CRUD page for service types, plus wiring the student "request
service" form's category select to the real list instead of a
hardcoded pair of options.
SessionFormPage now passes { formData, onUploadProgress } to mutateAsync
for progress tracking. Update uploadMediaMutationFn to destructure the
object and forward onUploadProgress to apiUploadMedia; update apiUploadMedia
to accept and pass the callback to axios.
[batch-1-hotfix]
- roleMenuItems.js: merged menu builder that unions items from all user roles
(student + missionary, student + counselor, etc.) additively
- auth store: expose `roles` array in addition to singular `role`; wire in
WordPress auth-status cookie sync so the public site can show/hide the
account button
- router guards: use roles.includes() instead of role === for multi-role access
- layouts (Student/Counselor/Missionary): delegate menuItems to
buildMergedMenuItems so dual-role users see sections from both roles
- StudentSessionDetailsPage: contentKind now returns 'video' (not 'link')
when session.videoUrl is set; adds embed iframe branch for online sessions
- CertificateItem.vue: fix CSS order/alignment for desktop + mobile layout
- StudentCertificatesPage.vue: map backend payload fields to component props
with Jalaali date formatting
- SessionFormPage: upload progress bar (%) during video uploads; embed_code
textarea for online sessions (frontend-only; dormant until batch-2 backend
migration is deployed)
- wp-sync/auth-status-cookie.js: cookie helper for WordPress login-state sync
[batch-1-low-risk]