|
1 | 1 | import Chip from '@/common/components/Chip'; |
2 | 2 | import * as s from './style.css'; |
3 | | -import { COLOR_TYPES_MAP, QUALITY_TYPES_MAP, SIZE_TYPES_MAP } from '@/libs/types/post'; |
| 3 | +import { |
| 4 | + COLOR_TYPES_MAP, |
| 5 | + QUALITY_TYPES_MAP, |
| 6 | + SIZE_TYPES_MAP, |
| 7 | + type ColorType, |
| 8 | + type QualityType, |
| 9 | + type SizeType, |
| 10 | +} from '@/libs/types/post'; |
| 11 | +import { useState } from 'react'; |
| 12 | + |
| 13 | +const renderChipGroup = <T extends string>( |
| 14 | + map: Record<T, string>, |
| 15 | + selected: T | null, |
| 16 | + setSelected: React.Dispatch<React.SetStateAction<T | null>>, |
| 17 | +) => ( |
| 18 | + <div className={s.ChipColumn}> |
| 19 | + {(Object.keys(map) as T[]).map(key => ( |
| 20 | + <Chip key={key} isSelected={selected === key} onClick={() => setSelected(selected === key ? null : key)}> |
| 21 | + {map[key]} |
| 22 | + </Chip> |
| 23 | + ))} |
| 24 | + </div> |
| 25 | +); |
4 | 26 |
|
5 | 27 | const Step4 = () => { |
| 28 | + const [selectedSizes, setSelectedSizes] = useState<SizeType | null>(null); |
| 29 | + const [selectedColors, setSelectedColors] = useState<ColorType | null>(null); |
| 30 | + const [selectedQualities, setSelectedQualities] = useState<QualityType | null>(null); |
| 31 | + |
6 | 32 | return ( |
7 | 33 | <div> |
8 | | - <header className={s.Head}> |
9 | | - ํ๊ทธ๋ฅผ ์ ํํด ์ฃผ์ธ์ |
10 | | - </header> |
| 34 | + <header className={s.Head}>ํ๊ทธ๋ฅผ ์ ํํด ์ฃผ์ธ์</header> |
11 | 35 | <div className={s.Content}> |
12 | 36 | <div className={s.DetailContent}> |
13 | 37 | ์ฌ์ด์ฆ๋ฅผ ์ ํํด ์ฃผ์ธ์ |
14 | | - <div className={s.ChipColumn}> |
15 | | - {Object.entries(SIZE_TYPES_MAP).map(([key, label]) => ( |
16 | | - <Chip key={key}>{label}</Chip> |
17 | | - ))} |
18 | | - </div> |
| 38 | + {renderChipGroup(SIZE_TYPES_MAP, selectedSizes, setSelectedSizes)} |
19 | 39 | </div> |
20 | 40 | <div className={s.DetailContent}> |
21 | 41 | ์์์ ์ ํํด ์ฃผ์ธ์ |
22 | | - <div className={s.ChipColumn}> |
23 | | - {Object.entries(COLOR_TYPES_MAP).map(([key, label]) => ( |
24 | | - <Chip key={key}>{label}</Chip> |
25 | | - ))} |
26 | | - </div> |
| 42 | + {renderChipGroup(COLOR_TYPES_MAP, selectedColors, setSelectedColors)} |
27 | 43 | </div> |
28 | 44 | <div className={s.DetailContent}> |
29 | 45 | ํ์ง์ ์ ํํด ์ฃผ์ธ์ |
30 | | - <div className={s.ChipColumn}> |
31 | | - {Object.entries(QUALITY_TYPES_MAP).map(([key, label]) => ( |
32 | | - <Chip key={key}>{label}</Chip> |
33 | | - ))} |
34 | | - </div> |
| 46 | + {renderChipGroup(QUALITY_TYPES_MAP, selectedQualities, setSelectedQualities)} |
35 | 47 | </div> |
36 | 48 | </div> |
37 | | - </div>); |
38 | | - |
| 49 | + </div> |
| 50 | + ); |
39 | 51 | }; |
40 | 52 |
|
41 | 53 | export default Step4; |
0 commit comments