223 lines
8.0 KiB
JavaScript
223 lines
8.0 KiB
JavaScript
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',
|
||
})
|