|
1 | 1 | export type OptionType = string | [string, string, boolean?] | string[]; |
2 | 2 |
|
3 | | -interface IProp |
4 | | - extends Omit< |
5 | | - React.HTMLAttributes<HTMLSelectElement>, |
6 | | - 'onChange' | 'defaultValue' |
7 | | - > { |
| 3 | +interface IProp extends Omit<React.HTMLAttributes<HTMLSelectElement>, 'onChange' | 'defaultValue'> { |
8 | 4 | /** 드롭다운 선택지 (문자열 or [Key 문자열, Value 문자열, 배열째 반환 여부] ) */ |
9 | 5 | options: Array<OptionType>; |
10 | 6 | // eslint-disable-next-line no-unused-vars |
11 | 7 | onChange: (data: OptionType) => void; |
12 | 8 | defaultValue: OptionType; |
13 | 9 | } |
14 | 10 |
|
15 | | -export const Dropdown = ({ |
16 | | - options, |
17 | | - onChange, |
18 | | - defaultValue, |
19 | | - ...rest |
20 | | -}: IProp) => { |
| 11 | +export const Dropdown = ({ options, onChange, defaultValue, ...rest }: IProp) => { |
21 | 12 | return ( |
22 | 13 | <div className="w-[100px] h-fit rounded-[4px] overflow-hidden border-BORDER-SUB bg-BG-SUB border-[1px] shrink-0 relative"> |
23 | 14 | <select |
24 | 15 | {...rest} |
25 | 16 | onChange={(e) => { |
26 | 17 | const value = options.find((i) => |
27 | | - typeof i === 'object' |
28 | | - ? i[0] === e.target.value |
29 | | - : i === e.target.value, |
| 18 | + typeof i === 'object' ? i[0] === e.target.value : i === e.target.value, |
30 | 19 | ) as OptionType; |
31 | | - onChange( |
32 | | - typeof value === 'object' ? (value[2] ? value : value[1]) : value, |
33 | | - ); |
| 20 | + onChange(typeof value === 'object' ? (value[2] ? value : value[1]) : value); |
34 | 21 | }} |
35 | | - defaultValue={ |
36 | | - typeof defaultValue === 'object' ? defaultValue[0] : defaultValue |
37 | | - } |
| 22 | + defaultValue={typeof defaultValue === 'object' ? defaultValue[0] : defaultValue} |
38 | 23 | className="w-full h-[32px] px-2 bg-TRANSPARENT text-I2 max-TBL:text-I4 text-TEXT-MAIN cursor-pointer relative z-40" |
39 | 24 | > |
40 | 25 | {options.map((i, j) => ( |
41 | | - <option key={j}>{typeof i === 'object' ? i[0] : i}</option> |
| 26 | + <option key={j} className="bg-BG-SUB"> |
| 27 | + {typeof i === 'object' ? i[0] : i} |
| 28 | + </option> |
42 | 29 | ))} |
43 | 30 | </select> |
44 | 31 | <div className="w-0 h-0 border-[4px] border-TRANSPARENT border-t-BORDER-SUB absolute top-[15px] right-2" /> |
|
0 commit comments