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: 'سایر', })