Files
banu-front/src/enums/index.js
T
sajjadtalkhabi b8ccbcc030
Deploy banu-front / deploy (push) Failing after 16s
fix: tickets
2026-06-05 19:42:09 +03:30

204 lines
7.2 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))
export const USER_STATUS = Object.freeze({
approved: 'تأیید شده',
pending: 'در انتظار',
rejected: 'رد شده',
blocked: 'مسدود',
})
export const MARITAL_STATUS = Object.freeze({
single: 'مجرد',
married: 'متاهل',
divorced: 'مطلقه',
widowed: 'بیوه',
})
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: 'طلبه',
seminary_and_university_student: 'طلبه و دانشجو',
graduate: 'فارغ التحصیلی',
})
export const SEMINARY_LEVEL = Object.freeze({
level_2: 'سطح دو',
level_3: 'سطح سه',
level_4: 'سطح چهار',
not_applicable: 'طلبه نیستم',
})
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: 'سایر',
})