1- import { useState } from 'react' ;
1+ import { useEffect , useState } from 'react' ;
22import Image from 'next/image' ;
33import { useRouter } from 'next/navigation' ;
4+ import { useRecoilState , useRecoilValue } from 'recoil' ;
45import EditName from './EditName' ;
56import Warning from '../../warning/Warning' ;
7+ import getClassInfo from '@/src/api/classUser/getClassInfo' ;
68import putUserName from '@/src/api/classUser/putUserName' ;
9+ import classUserState from '@/src/recoil/atoms/classUserState' ;
10+ import userState from '@/src/recoil/atoms/userState' ;
711import { ParamsProps } from '@/src/interfaces/navbar' ;
8- import { User } from '@/src/interfaces/user' ;
9- import ClassUser from '@/src/model/User' ;
1012import icons from '@/public/svgs/navbar' ;
13+ import ROLES from '@/src/constants/roles' ;
1114
12- const Profile = ( { user , params} : { user : User ; params : ParamsProps } ) => {
15+ const Profile = ( { cId , params} : { cId : string | null ; params : ParamsProps } ) => {
1316 const router = useRouter ( ) ;
17+ const user = useRecoilValue ( userState ) ;
18+ const [ classUser , setClassUser ] = useRecoilState ( classUserState ) ;
1419 const [ dropdownOpen , setDropdownOpen ] = useState < boolean > ( false ) ;
1520 const [ isEditOpen , setIsEditOpen ] = useState < boolean > ( false ) ;
1621 const [ isOpen , setIsOpen ] = useState < boolean > ( false ) ;
1722
23+ useEffect ( ( ) => {
24+ if ( cId && ! classUser ) {
25+ getClassInfo ( user . id , parseInt ( cId ) ) . then ( res => {
26+ console . log ( res ) ;
27+ setClassUser ( res ) ;
28+ } ) ;
29+ }
30+ if ( ! params . className ) {
31+ setClassUser ( null ) ;
32+ }
33+ } , [ cId , classUser , params ] ) ;
34+
1835 const toggleDropdown = ( ) => {
1936 setDropdownOpen ( ! dropdownOpen ) ;
2037 console . log ( params ) ;
2138 } ;
2239
2340 const handleEditName = ( name : string ) => {
2441 setDropdownOpen ( false ) ;
25- putUserName ( user . id , 4 , name ) ;
42+ if ( classUser ) putUserName ( classUser . uid , 4 , name ) ;
2643 } ;
2744
2845 const handleClickDelete = ( ) => {
@@ -38,14 +55,16 @@ const Profile = ({user, params}: {user: User; params: ParamsProps}) => {
3855 < div className = "relative w-full h-12 flex items-start justify-between box-content " >
3956 < div className = "flex items-center" >
4057 < Image
41- src = { user . image }
58+ src = { user ? user . image : '' }
4259 width = { 10 }
4360 height = { 10 }
4461 alt = "userImage"
4562 className = "w-8 h-8 rounded-lg object-cover"
4663 />
4764
48- < div className = "mx-2" > { user . name } </ div >
65+ < div className = "mx-2" >
66+ { classUser ? classUser . nickname : user ? user . name : '' }
67+ </ div >
4968 </ div >
5069 < button
5170 className = "relative w-8 h-8 rounded-lg float-end"
@@ -55,37 +74,41 @@ const Profile = ({user, params}: {user: User; params: ParamsProps}) => {
5574 </ button >
5675 { dropdownOpen && (
5776 < ul className = "absolute top-[32px] right-0 bg-white rounded-lg overflow-hidden drop-shadow-lg" >
58- < li
59- className = "p-2 hover:bg-gray-200"
60- onClick = { ( ) => {
61- setIsEditOpen ( true ) ;
62- setDropdownOpen ( false ) ;
63- } }
64- >
65- Edit Name
66- </ li >
67- { ClassUser . managerRoll === 'manager' ? (
68- < li
69- className = "p-2 hover:bg-gray-200"
70- onClick = { ( ) => {
71- setIsOpen ( true ) ;
72- setDropdownOpen ( false ) ;
73- } }
74- >
75- Edit group
76- </ li >
77+ { classUser ? (
78+ < >
79+ < li
80+ className = "p-2 hover:bg-gray-200"
81+ onClick = { ( ) => {
82+ setIsEditOpen ( true ) ;
83+ setDropdownOpen ( false ) ;
84+ } }
85+ >
86+ Edit Name
87+ </ li >
88+ { ROLES [ classUser . role_id ] === 'ADMIN' ? (
89+ < li
90+ className = "p-2 hover:bg-gray-200"
91+ onClick = { ( ) => {
92+ setIsOpen ( true ) ;
93+ setDropdownOpen ( false ) ;
94+ } }
95+ >
96+ Edit group
97+ </ li >
98+ ) : null }
99+ < li
100+ className = "p-2 hover:bg-gray-200"
101+ onClick = { ( ) => {
102+ setIsOpen ( true ) ;
103+ setDropdownOpen ( false ) ;
104+ } }
105+ >
106+ { ROLES [ classUser . role_id ] === 'ADMIN'
107+ ? 'Delete group'
108+ : 'Leave group' }
109+ </ li >
110+ </ >
77111 ) : null }
78- < li
79- className = "p-2 hover:bg-gray-200"
80- onClick = { ( ) => {
81- setIsOpen ( true ) ;
82- setDropdownOpen ( false ) ;
83- } }
84- >
85- { ClassUser . managerRoll === 'manager'
86- ? 'Delete group'
87- : 'Leave group' }
88- </ li >
89112 < li className = "p-2 hover:bg-gray-200" onClick = { handleClickLogout } >
90113 Logout
91114 </ li >
0 commit comments