11import { useState } from "react" ;
2- import RandomProfile from "@/components/common/RandomProfile" ;
32
43interface User {
54 id : number ;
6- name : string ;
5+ userId : number ;
6+ nickname : string ;
7+ profileImageUrl : string | null ;
78}
89
910interface AssigneeSelectProps {
@@ -23,11 +24,10 @@ export default function AssigneeSelect({
2324} : AssigneeSelectProps ) {
2425 const [ isOpen , setIsOpen ] = useState ( false ) ;
2526 const [ filter , setFilter ] = useState ( "" ) ;
26- const selectedUser = users . find ( ( u ) => u . name === value ) ;
2727
28- // 유저 필터링
28+ const selectedUser = users . find ( ( u ) => u . nickname === value ) ;
2929 const filtered = users . filter ( ( user ) =>
30- user . name . toLowerCase ( ) . includes ( filter . toLowerCase ( ) )
30+ user . nickname . toLowerCase ( ) . includes ( filter . toLowerCase ( ) )
3131 ) ;
3232
3333 return (
@@ -40,21 +40,25 @@ export default function AssigneeSelect({
4040 ) }
4141
4242 < div className = "relative w-full" >
43- { /* 선택된 담당자 */ }
43+ { /* 선택된 담당자 표시 */ }
4444 < div
4545 className = "flex items-center justify-between h-[48px] px-4 border border-[var(--color-gray3)] rounded-md cursor-pointer focus-within:border-[var(--primary)]"
4646 onClick = { ( ) => setIsOpen ( ! isOpen ) }
4747 >
4848 < div className = "flex items-center gap-2" >
49- { value ? (
49+ { selectedUser ? (
5050 < >
51- < RandomProfile
52- name = { value }
53- userId = { selectedUser ?. id ?? 0 }
54- className = "w-[26px] h-[26px]"
55- />
51+ { selectedUser . profileImageUrl ? (
52+ < img
53+ src = { selectedUser . profileImageUrl }
54+ alt = { `${ selectedUser . nickname } 프로필` }
55+ className = "w-[26px] h-[26px] rounded-full object-cover"
56+ />
57+ ) : (
58+ < div className = "w-[26px] h-[26px] rounded-full bg-gray-300" />
59+ ) }
5660 < span className = "font-normal text-[14px] sm:text-[16px]" >
57- { value }
61+ { selectedUser . nickname }
5862 </ span >
5963 </ >
6064 ) : (
@@ -65,35 +69,34 @@ export default function AssigneeSelect({
6569 </ div >
6670 </ div >
6771
68- { /* 드롭다운 */ }
72+ { /* 드롭다운 목록 */ }
6973 { isOpen && (
70- < ul
71- className = "absolute z-10 top-full left-0 mt-1
72- w-full max-h-[200px] overflow-y-auto
73- bg-white border border-[var(--color-gray3)] rounded-md shadow-lg"
74- >
75- { filtered . map ( ( user , idx ) => (
74+ < ul className = "absolute z-10 top-full left-0 mt-1 w-full max-h-[200px] overflow-y-auto bg-white border border-[var(--color-gray3)] rounded-md shadow-lg" >
75+ { filtered . map ( ( user ) => (
7676 < li
77- key = { idx }
77+ key = { user . userId }
7878 onClick = { ( ) => {
79- onChange ( user . name ) ;
79+ onChange ( user . nickname ) ;
8080 setIsOpen ( false ) ;
8181 setFilter ( "" ) ;
8282 } }
83- className = "flex items-center justify-between
84- px-4 py-2 cursor-pointer hover:bg-gray-100"
83+ className = "flex items-center justify-between px-4 py-2 cursor-pointer hover:bg-gray-100"
8584 >
8685 < div className = "flex items-center gap-2" >
87- < RandomProfile
88- name = { user . name }
89- userId = { user . id }
90- className = "w-[26px] h-[26px]"
91- />
86+ { user . profileImageUrl ? (
87+ < img
88+ src = { user . profileImageUrl }
89+ alt = { `${ user . nickname } 프로필` }
90+ className = "w-[26px] h-[26px] rounded-full object-cover"
91+ />
92+ ) : (
93+ < div className = "w-[26px] h-[26px] rounded-full bg-gray-300" />
94+ ) }
9295 < span className = "font-normal text-black3 sm:text-[16px] text-[14px]" >
93- { user . name }
96+ { user . nickname }
9497 </ span >
9598 </ div >
96- { value === user . name && (
99+ { value === user . nickname && (
97100 < span className = "text-[var(--primary)]" > ✔</ span >
98101 ) }
99102 </ li >
0 commit comments