Skip to content

Commit 6c91ae1

Browse files
committed
Refactor: UserDetailsModal 사용자 정보 표시 로직 개선 및 변경된 응답 스키마 반영 #6
1 parent 009095c commit 6c91ae1

File tree

1 file changed

+26
-37
lines changed

1 file changed

+26
-37
lines changed

src/components/admin/UserDetailsModal.jsx

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ export default function UserDetailsModal({ user, isOpen, onClose, preventClose }
1919

2020
if (!isOpen) return null;
2121

22-
const member = user?.member ?? user ?? {};
23-
2422
const rowStyle = 'border border-[#5b5b6699]';
2523
const cellStyle = 'p-3 font-bold text-gray-300';
2624
const valueStyle = 'p-3';
@@ -31,53 +29,44 @@ export default function UserDetailsModal({ user, isOpen, onClose, preventClose }
3129
<div className='max-w-[600px] w-full max-h-[90vh] mobile:max-h-[80vh] bg-[#27272A] rounded-lg shadow-md p-6 overflow-y-auto'>
3230
<div className='text-lg font-bold text-center text-white mb-4'>User Details</div>
3331

34-
{/* User Basic Info */}
32+
{/* User Basic Info (신 응답 스키마에 맞춤) */}
3533
<table className='w-full border-collapse border text-white mb-6'>
3634
<tbody>
3735
{[
38-
['이름', user.member.name],
39-
['학년', user.member.grade],
40-
['학번', user.member.studentId],
41-
['전화번호', user.member.phoneNumber],
42-
['국적', user.member.nationality === 'etc' ? user.member.nationalityContent : user.member.nationality],
43-
['Email', user.member.email],
44-
['성별', user.member.gender],
45-
['생년월일', user.member.birth],
46-
['학교', user.member.school],
47-
['전공', user.member.majors.main],
48-
['부전공', user.member.majors.second.join(', ') || '없음'],
49-
['가입 경로', user.member.route],
50-
['회비 송금 여부', user.member.isPayed ? 'Yes' : 'No'],
51-
].map(([label, userValue], idx) => (
52-
<tr key={idx} className={rowStyle}>
53-
<td className={clsx(cellStyle)}>{label}</td>
54-
<td className={clsx(valueStyle)}>{userValue}</td>
55-
</tr>
56-
))}
36+
['이름', user?.name],
37+
['전공', user?.major],
38+
['학번', user?.studentId],
39+
['회비 송금 여부', typeof user?.isPayed === 'boolean' ? (user.isPayed ? 'Yes' : 'No') : undefined],
40+
]
41+
.filter(([, val]) => val !== undefined && val !== null && val !== '')
42+
.map(([label, userValue], idx) => (
43+
<tr key={idx} className={rowStyle}>
44+
<td className={clsx(cellStyle)}>{label}</td>
45+
<td className={clsx(valueStyle)}>{userValue}</td>
46+
</tr>
47+
))}
5748
</tbody>
5849
</table>
5950

6051
<div className='text-white space-y-7'>
61-
{user.answers.map((answer, idx) => {
52+
{(Array.isArray(user?.answers?.answers) ? user.answers.answers : []).map((answer, idx) => {
6253
const questionMap = {
63-
1: '지원 동기',
64-
2: '진로 경험 & 이야기',
65-
3: '관심 분야',
66-
4: 'GDG 기수',
67-
5: '경로',
68-
6: '얻어가고 싶은 거',
69-
7: '기대하는 활동',
70-
8: '피드백',
54+
APPLY_MOTIVATION: '지원 동기',
55+
LIFE_STORY: '진로 경험 & 이야기',
56+
INTERESTS: '관심 분야',
57+
GDG_PERIOD: 'GDG 기수',
58+
ROUTE_TO_KNOW: '경로',
59+
WANT_TO_GET: '얻어가고 싶은 거',
60+
EXPECTED_ACTIVITY: '기대하는 활동',
61+
FEEDBACK: '피드백',
7162
};
7263

73-
const question = questionMap[answer.questionId];
74-
//배열일시 전환
75-
const response = Array.isArray(answer.responseValue)
76-
? answer.responseValue.join(', ')
77-
: answer.responseValue;
64+
const question = questionMap[answer?.inputType] ?? answer?.inputType ?? '질문';
65+
const value = answer?.responseValue;
66+
const response = Array.isArray(value) ? value.join(', ') : value;
7867

7968
return (
80-
<div key={idx}>
69+
<div key={answer?.id ?? idx}>
8170
<hr className='border-[#5b5b6699]' />
8271
<div className={clsx(infoTextStyle)}>{question}</div>
8372
<div className='text-sm'>{response || '없음'}</div>

0 commit comments

Comments
 (0)