11import { useState } from "react" ;
2- import clsx from "clsx" ;
3- import Image from "next/image" ;
42
53interface AssigneeSelectProps {
64 value : string ;
75 onChange : ( value : string ) => void ;
6+ users : string [ ] ; // users는 string[]이어야 합니다.
87 label ?: string ;
98 required ?: boolean ;
109}
1110
12- const ASSIGNEES = [ "배유철" , "배동석" , "이지은" ] ;
13-
14- function getInitial ( name : string ) {
15- return name . charAt ( 0 ) . toUpperCase ( ) ;
16- }
17-
18- function getColor ( index : number ) {
19- const colors = [ "bg-[#A0E6FF]" , "bg-[#FFD29D]" , "bg-[#C2A1FF]" ] ;
20- return colors [ index % colors . length ] ;
21- }
22-
2311export default function AssigneeSelect ( {
2412 value,
2513 onChange,
14+ users,
2615 label,
2716 required,
2817} : AssigneeSelectProps ) {
2918 const [ isOpen , setIsOpen ] = useState ( false ) ;
3019 const [ filter , setFilter ] = useState ( "" ) ;
3120
32- const filtered = ASSIGNEES . filter ( ( name ) => name . includes ( filter ) ) ;
21+ const filtered = users . filter ( ( name ) =>
22+ name . toLowerCase ( ) . includes ( filter . toLowerCase ( ) || "" )
23+ ) ;
3324
3425 return (
3526 < div className = "inline-flex flex-col items-start gap-2.5 w-full max-w-[520px]" >
3627 { label && (
3728 < p className = "font-18m text-[var(--color-black)]" >
38- { label } { " " }
29+ { label }
3930 { required && < span className = "text-[var(--color-purple)]" > *</ span > }
4031 </ p >
4132 ) }
@@ -46,22 +37,19 @@ export default function AssigneeSelect({
4637 onClick = { ( ) => setIsOpen ( ! isOpen ) }
4738 >
4839 < div className = "flex items-center gap-2" >
49- < span
50- className = { clsx (
51- "w-6 h-6 rounded-full text-xs text-white flex items-center justify-center" ,
52- getColor ( ASSIGNEES . indexOf ( value ) )
53- ) }
54- >
55- { getInitial ( value ) }
56- </ span >
57- < span className = "font-18r" > { value || "이름을 입력해주세요" } </ span >
40+ { value ? (
41+ < >
42+ < span className = "w-6 h-6 rounded-full text-xs text-white flex items-center justify-center bg-[#A0E6FF]" >
43+ { value . charAt ( 0 ) . toUpperCase ( ) }
44+ </ span >
45+ < span className = "font-18r" > { value } </ span >
46+ </ >
47+ ) : (
48+ < span className = "font-18r text-[var(--color-gray2)]" >
49+ 이름을 입력해주세요
50+ </ span >
51+ ) }
5852 </ div >
59- < Image
60- src = "/svgs/arrow-down.svg"
61- width = { 20 }
62- height = { 20 }
63- alt = "dropdown"
64- />
6553 </ div >
6654
6755 { isOpen && (
@@ -76,17 +64,7 @@ export default function AssigneeSelect({
7664 } }
7765 className = "px-4 py-2 cursor-pointer hover:bg-[var(--color-gray1)] flex items-center justify-between"
7866 >
79- < div className = "flex items-center gap-2" >
80- < span
81- className = { clsx (
82- "w-6 h-6 rounded-full text-xs text-white flex items-center justify-center" ,
83- getColor ( idx )
84- ) }
85- >
86- { getInitial ( name ) }
87- </ span >
88- < span className = "text-sm" > { name } </ span >
89- </ div >
67+ < span className = "text-sm" > { name } </ span >
9068 { value === name && (
9169 < span className = "text-[var(--primary)]" > ✔</ span >
9270 ) }
0 commit comments