-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathUserModal.tsx
More file actions
65 lines (56 loc) · 1.87 KB
/
UserModal.tsx
File metadata and controls
65 lines (56 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { useEffect, useRef } from 'react';
import { IcDivider } from '@/assets/svg';
import * as styles from '@/common/component/UserModal/UserModal.css';
import { useGetUser } from '@/api/domain/signup/hook/useGetUser';
import { usePostLogout } from '@/api/domain/signup/hook/usePostLogout';
interface UserModalProps {
onClose: () => void;
}
const UserModal = ({ onClose }: UserModalProps) => {
const modalRef = useRef<HTMLDivElement>(null);
const { data: user, isLoading, isError } = useGetUser();
const { mutate: logoutMutate } = usePostLogout();
const handleClickOutside = (e: MouseEvent) => {
if (modalRef.current && !modalRef.current.contains(e.target as Node)) {
onClose();
}
};
const handleLogout = () => {
logoutMutate(undefined, {
onSuccess: () => {
localStorage.removeItem('accessToken');
onClose();
window.location.reload();
},
onError: (error) => {
console.error('로그아웃 실패:', error);
onClose();
},
});
};
useEffect(() => {
document.addEventListener('mousedown', handleClickOutside);
return () => {
document.removeEventListener('mousedown', handleClickOutside);
};
}, []);
if (isLoading || isError || !user) {
return null;
}
return (
<div className={styles.modalContainer} ref={modalRef}>
<div className={styles.profileContainer}>
<img src={user.profileImageUrl} className={styles.profileImage} alt="프로필 이미지" />
<div className={styles.textContainer}>
<strong className={styles.nameText}>{user.name}</strong>
<p className={styles.emailText}>{user.email}</p>
</div>
</div>
<IcDivider className={styles.dividerIcon} />
<button onClick={handleLogout} className={styles.logoutButton}>
로그아웃
</button>
</div>
);
};
export default UserModal;