diff --git a/src/app/dashboard/members/page.tsx b/src/app/dashboard/members/page.tsx
index 75a2249..21d4967 100644
--- a/src/app/dashboard/members/page.tsx
+++ b/src/app/dashboard/members/page.tsx
@@ -6,6 +6,7 @@ import Link from 'next/link'
import Loader from '@/components/ui/common/Loader'
import UserDetailsModal from '@/components/admin/UserDetailsModal'
import { GdgSegmentedButton } from '@/components/ui/design-system'
+import { formatMajorLabel } from '@/constant/majorOptions'
import { useAuthenticatedApi } from '@/hooks/useAuthenticatedApi'
import { formatPhoneNumberDisplay } from '@/utils/phoneNumber'
@@ -264,7 +265,7 @@ export default function DashboardMembersPage() {
members.map((member) => (
| {member.name} |
- {member.major} |
+ {formatMajorLabel(member.major)} |
{member.studentId} |
{formatPhoneNumberDisplay(member.phoneNumber)}
diff --git a/src/app/dashboard/users/page.tsx b/src/app/dashboard/users/page.tsx
index 65cba77..e4be22f 100644
--- a/src/app/dashboard/users/page.tsx
+++ b/src/app/dashboard/users/page.tsx
@@ -4,6 +4,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'
import Link from 'next/link'
import Loader from '@/components/ui/common/Loader'
+import { formatMajorLabel } from '@/constant/majorOptions'
import { useAuth } from '@/hooks/useAuth'
import { useAuthenticatedApi } from '@/hooks/useAuthenticatedApi'
@@ -350,7 +351,7 @@ export default function DashboardUsersPage() {
| {user.id} |
{user.name} |
{user.email} |
- {user.major || '-'} |
+ {formatMajorLabel(user.major)} |
{user.studentId || '-'} |
{editable ? (
diff --git a/src/app/recruit/core/page.tsx b/src/app/recruit/core/page.tsx
index ddf8ed7..f7d42a1 100644
--- a/src/app/recruit/core/page.tsx
+++ b/src/app/recruit/core/page.tsx
@@ -15,6 +15,7 @@ import {
GdgInputField
} from '@/components/ui/design-system'
import { PrivacyPolicyNotice } from '@/components/ui/common/PrivacyPolicyNotice'
+import { normalizeMajorCode } from '@/constant/majorOptions'
import { useAuthenticatedApi } from '@/hooks/useAuthenticatedApi'
import { usePhoneNumber } from '@/hooks/usePhoneNumber'
import { unwrapApiResponse } from '@/utils/api/unwrap'
@@ -272,7 +273,7 @@ export default function RecruitCore() {
name: prev.name || payload.name || '',
studentId: prev.studentId || payload.studentId || '',
email: prev.email || payload.email || '',
- major: prev.major || payload.major || '',
+ major: prev.major || normalizeMajorCode(payload.major) || '',
phone: formatInput(prev.phone || payload.phone || '')
}))
} catch (error: any) {
@@ -439,7 +440,7 @@ export default function RecruitCore() {
name: formData.name,
studentId: formData.studentId,
phone: toDigits(formData.phone),
- major: formData.major,
+ major: normalizeMajorCode(formData.major),
email: formData.email
},
team: formData.team,
diff --git a/src/components/admin/AdminDashboard.tsx b/src/components/admin/AdminDashboard.tsx
index 6ee70e5..9c42770 100644
--- a/src/components/admin/AdminDashboard.tsx
+++ b/src/components/admin/AdminDashboard.tsx
@@ -1,6 +1,7 @@
'use client';
import React, { useMemo } from 'react';
+import { formatMajorLabel } from '@/constant/majorOptions';
import {
ResponsiveContainer,
PieChart,
@@ -21,7 +22,7 @@ function normalizeMembers(rawMembers = []) {
return rawMembers.map((u) => ({
id: u?.id ?? u?.member?.id,
name: u?.name ?? u?.member?.name ?? '',
- major: u?.major ?? u?.member?.major ?? u?.member?.majors?.main ?? '기타',
+ major: formatMajorLabel(u?.major ?? u?.member?.major ?? u?.member?.majors?.main ?? '기타'),
admissionSemester: u?.admissionSemester ?? u?.member?.admissionSemester ?? '미상',
studentId: String(u?.studentId ?? u?.member?.studentId ?? ''),
isPayed: typeof (u?.isPayed ?? u?.member?.isPayed) === 'boolean' ? (u?.isPayed ?? u?.member?.isPayed) : false,
@@ -207,4 +208,3 @@ export default function AdminDashboard({ members = [], totalCount }) {
);
}
-
diff --git a/src/components/admin/AdminTableCell.tsx b/src/components/admin/AdminTableCell.tsx
index 8f10642..1e80945 100644
--- a/src/components/admin/AdminTableCell.tsx
+++ b/src/components/admin/AdminTableCell.tsx
@@ -2,6 +2,7 @@
import React from 'react';
import { User, Chip, Checkbox } from '@nextui-org/react';
+import { formatMajorLabel } from '@/constant/majorOptions';
const statusColorMap = {
true: 'success',
@@ -28,7 +29,7 @@ export default function AdminTableCell({ user, columnKey, onTogglePay }) {
case 'major':
return (
- {user.major}
+ {formatMajorLabel(user.major)}
{user.studentId}
);
@@ -54,4 +55,3 @@ export default function AdminTableCell({ user, columnKey, onTogglePay }) {
}
}
-
diff --git a/src/components/admin/UserDetailsModal.tsx b/src/components/admin/UserDetailsModal.tsx
index 5787e14..6e50032 100644
--- a/src/components/admin/UserDetailsModal.tsx
+++ b/src/components/admin/UserDetailsModal.tsx
@@ -3,6 +3,7 @@
import React, { useEffect } from 'react';
import { Button } from '@nextui-org/react';
import clsx from 'clsx';
+import { formatMajorLabel } from '@/constant/majorOptions';
import { formatPhoneNumberDisplay } from '@/utils/phoneNumber';
const FIELD_LABELS = {
@@ -79,6 +80,9 @@ const formatFieldValue = (key, value) => {
if (key === 'isPayed' && typeof value === 'boolean') {
return value ? '입금 완료' : '미입금';
}
+ if (key === 'major' && typeof value === 'string') {
+ return formatMajorLabel(value);
+ }
return formatValue(value);
};
diff --git a/src/components/auth/screen/AuthFindId.jsx b/src/components/auth/screen/AuthFindId.jsx
index 7f1315d..9ebdc55 100644
--- a/src/components/auth/screen/AuthFindId.jsx
+++ b/src/components/auth/screen/AuthFindId.jsx
@@ -8,7 +8,7 @@ import axios from 'axios';
import TransparentInput from '@/components/ui/input/TransparentInput';
import { usePhoneNumber } from '@/hooks/usePhoneNumber';
-import { majorOptions } from '@/constant/majorOptions';
+import { majorOptions, normalizeMajorCode } from '@/constant/majorOptions';
export default function AuthFindId({ handleBackToLogin }) {
const [name, setName] = useState('');
@@ -92,14 +92,14 @@ export default function AuthFindId({ handleBackToLogin }) {
base: 'bg-[#1c1c1c] text-white',
},
}}
- selectedKeys={major}
- onSelectionChange={setMajor}
+ selectedKeys={normalizeMajorCode(major)}
+ onSelectionChange={(value) => setMajor(String(value ?? ''))}
>
{majorOptions.map((major) => (
{major.items.map((item) => (
-
- {item.value}
+
+ {item.label}
))}
diff --git a/src/components/study/ui/card/ApplicantInfoList.jsx b/src/components/study/ui/card/ApplicantInfoList.jsx
index 906c44e..34693ba 100644
--- a/src/components/study/ui/card/ApplicantInfoList.jsx
+++ b/src/components/study/ui/card/ApplicantInfoList.jsx
@@ -2,6 +2,7 @@
// components
import GreenTextButton from "@/components/ui/button/GreenTextButton";
+import { formatMajorLabel } from '@/constant/majorOptions';
export default function ApplicantInfoList({
applications,
@@ -57,7 +58,7 @@ export default function ApplicantInfoList({
onClick={() => handleApplicantDetailPopup(app.id)}
>
| {app.name} |
- {app.major} |
+ {formatMajorLabel(app.major)} |
{app.studentId} |
{/* 이미 처리된 지원자가 있으면 상태 뱃지 표시 */}
@@ -104,4 +105,4 @@ export default function ApplicantInfoList({
);
-}
\ No newline at end of file
+}
diff --git a/src/components/study/ui/modal/ApplicantDetailModal.jsx b/src/components/study/ui/modal/ApplicantDetailModal.jsx
index f5bc167..558bbe7 100644
--- a/src/components/study/ui/modal/ApplicantDetailModal.jsx
+++ b/src/components/study/ui/modal/ApplicantDetailModal.jsx
@@ -2,6 +2,7 @@
import { useEffect } from 'react';
import { Spinner } from "@nextui-org/react";
+import { formatMajorLabel } from '@/constant/majorOptions';
// API Services
import { useApplicantDetail } from '@/services/study/useApplicantDetail';
@@ -58,7 +59,7 @@ export default function ApplicantDetailModal({ apiClient, studyId, selectedAppli
| 학번 |