Files
banu-front/src/enums/index.js
T
sajjadtalkhabi 38051db180 fix: bugs
2026-07-30 17:40:41 +03:30

223 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export const getEnumObject = (enumArray, key = 'value', value = 'label') =>
enumArray.reduce((acc, option) => {
acc[option[key]] = option[value]
return acc
}, {})
export const ROLES = Object.freeze([
{ value: 'admin', label: 'مدیر', changeable: false },
{ value: 'student', label: 'طلبه', changeable: true },
{ value: 'teacher', label: 'استاد', changeable: true },
{ value: 'counselor', label: 'مشاور', changeable: true },
{ value: 'missionary', label: 'مبلغ', changeable: true },
])
export const LOGIN_STEPS = Object.freeze({
LOGIN: 1,
LOGIN_WITH_VERIFY_CODE: 2,
VERIFY_CODE: 3,
})
export const SIGNUP_STEPS = Object.freeze({
SIGNUP: 1,
VERIFY_CODE: 2,
})
export const STUDENT_REGISTRATION = Object.freeze({
PERSONAL_INFORMATION: 1,
EDUCATIONAL_INFORMATION: 2,
PROFESSIONAL_INFORMATION: 3,
SKILL_ASSESSMENT_PART_1: 4,
SKILL_ASSESSMENT_PART_2: 5,
SKILL_ASSESSMENT_PART_3: 6,
SKILL_ASSESSMENT_PART_4: 7,
SKILL_ASSESSMENT_PART_5: 8,
SKILL_ASSESSMENT_PART_6: 9,
SKILL_ASSESSMENT_PART_7: 10,
})
export const STUDENT_REGISTRATION_ORDER = Object.freeze(Object.values(STUDENT_REGISTRATION))
// User lifecycle states (Set User Status endpoint):
// pending registered, phone not yet OTP-verified
// verified phone OTP-verified and registration steps completed (awaiting admin)
// approved approved by admin (full access)
// blocked blocked by admin (no access; existing tokens revoked)
export const USER_STATUS = Object.freeze({
pending: 'تأیید نشده',
verified: 'در انتظار تأیید',
approved: 'تأیید شده',
blocked: 'مسدود',
})
export const MARITAL_STATUS = Object.freeze({
single: 'مجرد',
married: 'متاهل',
})
export const GENDER = Object.freeze({
male: 'اقا',
female: 'خانم',
})
export const ROLE_LABELS = Object.freeze(Object.fromEntries(ROLES.map((r) => [r.value, r.label])))
export const CHANGEABLE_ROLES = Object.freeze(ROLES.filter((r) => r.changeable).map((r) => r.value))
export const EDUCATION_STATUS = Object.freeze({
seminary_student: 'طلبه',
graduate: 'فارغ التحصیلی',
})
export const SEMINARY_LEVEL = Object.freeze({
level_2: 'سطح دو',
level_3: 'سطح سه',
level_4: 'سطح چهار',
})
export const UNIVERSITY_LEVEL = Object.freeze({
bachelor: ' مقطع کارشناسی (لیسانس)',
master: ' مقطع کارشناسی ارشد (فوق لیسانس)',
phd: ' مقطع دکتری',
not_applicable: 'طلبه نیستم',
})
export const PROPAGATION_PLATFORM = Object.freeze({
home_gathering_occasional: 'روضه‌های خانگی مناسبتی',
home_gathering_regular: 'جلسات خانگی ثابت',
online: 'فضای مجازی',
university: 'دانشگاه',
school: 'مدرسه',
other: 'سایر فضاهای تبلیغی',
none: 'فعالیتی نداشته‌ام',
})
export const LOW_SATISFACTION_RESPONSE = Object.freeze({
change_the_method: 'روش را عوض می‌کنید در حالی که ایمان به صحت آن دارید',
insist_on_your_method:
'اصرار بر روش و مسیر خود دارید و معتقد هستید مخاطب باید خود را به آن سطح برساند',
other: 'کاری به غیر از گزینه‌های ذکر شده انجام می‌دهید',
})
export const SESSION_CANCELLATION_RESPONSE = Object.freeze({
teach_how_to_reduce_costs: 'آموزش روش‌های کاهش هزینه به صاحب بیت',
provide_solutions_to_cover_meeting_costs: 'ارائه راهکارهای تامین هزینه‌های جلسه',
setup_or_find_an_alternative_meeting: 'راه‌اندازی یا پیدا کردن یک جلسه جایگزین با همان جمع',
convince_the_homeowner_to_continue: 'توجیه و اقناع صاحب بیت برای ادامه دادن',
other: 'کاری به غیر از گزینه‌های ذکر شده انجام می‌دهید',
})
export const AUDIENCE_CONFLICT_RESPONSE = Object.freeze({
divide_the_crowd:
'جمع را تفکیک می‌کنید و برای هر کدام متناسب با آن چیزی که می‌خواهند ارائه می‌دهید',
convince_one_of_the_groups: 'سعی می‌کنید یکی از گروه‌ها را متقاعد کنید',
considering_one_of_the_groups: 'بی‌توجه به یکی از گروه‌ها به ارائه خود می‌پردازید',
other: 'کاری غیر از گزینه‌های ذکر شده را انجام می‌دهید',
})
export const COMPETING_PROPAGATOR_RESPONSE = Object.freeze({
strengthen_yourself: 'خود را در زمینه ابزارها و روش‌ها تقویت می‌کنید تا جلسه شما پررونق شود',
close_your_meeting_and_strengthen_the_preacher:
'جلسه خود را تعطیل کرده و سعی در تقویت بنیه معرفتی مبلغه جلسه مذکور خواهید داشت',
convince_the_other_preacher_to_strengthen_or_close:
'سعی می‌کنید مبلغه دیگر را توجیه و اقناع کنید تا یا بنیه خود را تقویت کند یا جلسه را تعطیل کند',
bring_a_skilled_person_with_me:
'یک نفر دارای مهارت را به عنوان کمک و معین برای تقویت جلسه و روش و ابزارها، با خود همراه می‌کردم',
other: 'کاری غیر از گزینه‌های ذکر شده انجام می‌دادم',
})
export const VERIFICATION_MEDIA_TYPE = Object.freeze({
FAITH_PRODUCTION: 'faith_production',
LEADER_MESSAGE: 'leader_message',
})
export const COURSE_CONTENT_TYPE = Object.freeze({
video: 'ویدئو',
voice: 'صوت',
text: 'متن',
})
export const COURSE_CONTENT_TYPE_ACCEPT = Object.freeze({
video: 'video/*',
voice: 'audio/*',
text: '.pdf,.doc,.docx,.txt',
})
export const SESSION_TYPE = Object.freeze({
in_person: 'حضوری',
online: 'آنلاین',
offline: 'آفلاین',
video: 'ویدئو',
audio: 'صوتی',
text: 'متن',
slide: 'اسلاید',
pdf: 'PDF',
})
export const SESSION_PLATFORM = Object.freeze({
zoom: 'Zoom',
google_meet: 'Google Meet',
teams: 'Microsoft Teams',
custom: 'سایر',
})
export const ASSIGNMENT_PRIORITY = Object.freeze({
mandatory: 'اجباری',
optional: 'اختیاری',
})
// Single ticket-lifecycle vocabulary. Used by every ticket-like resource —
// admin /messages, admin /services, admin /consultations, counselor, student
// /my-tickets, /user/services, /user/consultants. Backend exposes exactly
// these three values across all of them.
export const TICKET_STATUS = Object.freeze({
open: 'باز',
answered: 'پاسخ داده شده',
closed: 'بسته شده',
})
// Priority levels for student-created tickets. Sent to the backend on POST
// /student/tickets (currently carried via the `category` field).
export const TICKET_PRIORITY = Object.freeze({
low: 'کم اهمیت',
normal: 'عادی',
high: 'مهم',
urgent: 'فوری',
})
export const STUDENT_COURSE_STATUS = Object.freeze({
active: 'در حال گذراندن',
completed: 'تکمیل شده',
})
export const PRIORITY_STATUS = Object.freeze({
high: 'بالا',
medium: 'متوسط',
low: 'پایین',
})
export const SERVICE_TYPE = Object.freeze({
loan: 'وام',
consultation: 'مشاوره',
educational: 'آموزشی',
other: 'سایر',
})
// Lifecycle of a dispatch request assigned to a missionary. `pending` is the
// initial backend state; the missionary may set seen, accepted, or rejected.
export const MISSIONARY_REQUEST_STATUS = Object.freeze({
pending: 'در انتظار بررسی',
seen: 'دیده شده',
accepted: 'پذیرفته شده',
rejected: 'رد شده',
})
// Landing route per role after login / when a logged-in user hits a guest
// page. Roles not listed here fall back to the student dashboard.
export const ROLE_HOME_ROUTES = Object.freeze({
admin: 'admin-dashboard',
counselor: 'counselor-dashboard',
missionary: 'missionary-dashboard',
student: 'student-dashboard',
})