Skip to content

Commit ac3de2b

Browse files
봄봄
authored andcommitted
feat: props 에 따른 드롭다운 설정
1 parent a887e99 commit ac3de2b

2 files changed

Lines changed: 22 additions & 18 deletions

File tree

src/common/component/CycleDropDown/CycleDropDown.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,39 @@
11
import { useState } from 'react';
22

33
import { IcDropdown } from '@/assets/svg';
4+
import CycleList from '@/common/component/CycleDropDown/CycleList';
45
import {
56
cycleContainer,
67
cycleText,
78
dropdownIcon,
89
} from '@/common/component/CycleDropDown/CycleDropDown.css';
9-
import CycleList from '@/common/component/CycleDropDown/CycleList';
1010

11-
const CYCLE_TYPE = '매일';
11+
const CYCLE_TYPE = ['매일', '매주', '한 번'] as const;
12+
13+
type CycleType = (typeof CYCLE_TYPE)[number];
1214

1315
const CycleDropDown = () => {
1416
const [isOpen, setIsOpen] = useState(false);
15-
const state = isOpen ? 'clicked' : 'default';
17+
const [selectedType, setSelectedType] = useState<CycleType>(CYCLE_TYPE[0]);
1618

1719
const toggleDropdown = () => {
1820
setIsOpen((prev) => !prev);
1921
};
22+
const handleType = (type: CycleType) => {
23+
setSelectedType(type);
24+
setIsOpen(false);
25+
};
26+
27+
const state = isOpen ? 'clicked' : 'default';
2028

2129
return (
2230
<>
2331
<button className={cycleContainer} onClick={toggleDropdown}>
24-
<p className={cycleText({ state })}>{CYCLE_TYPE}</p>
32+
<p className={cycleText({ state })}>{selectedType}</p>
2533
<IcDropdown className={dropdownIcon({ state })} />
2634
</button>
2735

28-
{isOpen && <CycleList />}
36+
{isOpen && <CycleList selectedType={selectedType} onSelect={handleType} />}
2937
</>
3038
);
3139
};

src/common/component/CycleDropDown/CycleList.tsx

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,22 @@
1-
import { useState } from 'react';
2-
31
import { listContainer, listItem, listText } from '@/common/component/CycleDropDown/CycleList.css';
42

53
const CYCLE_TYPE = ['매일', '매주', '한 번'] as const;
6-
74
type CycleType = (typeof CYCLE_TYPE)[number];
85

9-
const CycleList = () => {
10-
const [selectedType, setSelectedType] = useState<CycleType>(CYCLE_TYPE[0]);
11-
12-
const handleType = (currentType: CycleType) => {
13-
setSelectedType(currentType);
14-
};
6+
type CycleProps = {
7+
selectedType: CycleType;
8+
onSelect: (type: CycleType) => void;
9+
};
1510

11+
const CycleList = ({ selectedType, onSelect }: CycleProps) => {
1612
return (
1713
<div className={listContainer}>
18-
{CYCLE_TYPE.map((cycle) => {
19-
const state = selectedType === cycle ? 'selected' : 'default';
14+
{CYCLE_TYPE.map((type) => {
15+
const state = selectedType === type ? 'selected' : 'default';
2016

2117
return (
22-
<button key={cycle} className={listItem} onClick={() => handleType(cycle)}>
23-
<p className={listText({ state })}>{cycle}</p>
18+
<button key={type} className={listItem} onClick={() => onSelect(type)}>
19+
<p className={listText({ state })}>{type}</p>
2420
</button>
2521
);
2622
})}

0 commit comments

Comments
 (0)