File tree Expand file tree Collapse file tree
src/common/component/CycleDropDown Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11import { useState } from 'react' ;
22
33import { IcDropdown } from '@/assets/svg' ;
4+ import CycleList from '@/common/component/CycleDropDown/CycleList' ;
45import {
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
1315const 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} ;
Original file line number Diff line number Diff line change 1- import { useState } from 'react' ;
2-
31import { listContainer , listItem , listText } from '@/common/component/CycleDropDown/CycleList.css' ;
42
53const CYCLE_TYPE = [ '매일' , '매주' , '한 번' ] as const ;
6-
74type 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 } ) }
You can’t perform that action at this time.
0 commit comments