@@ -20,15 +20,21 @@ import { addLeadingZero } from '../utils/string';
2020import useOutsideClick from '../hooks/useOutsideClick' ;
2121
2222interface Iprops {
23- initValue ?: Date ;
24- onChange ?: ( activeDate : Date ) => void ;
23+ initValue ?: Date | null ;
24+ isClearButton ?: boolean ;
25+ onChange ?: ( activeDate : Date | null ) => void ;
2526}
2627
27- function Container ( { initValue = new Date ( ) , onChange } : Iprops ) {
28+ function Container ( {
29+ initValue = null ,
30+ isClearButton = false ,
31+ onChange,
32+ } : Iprops ) {
2833 // 인수가 없을 땐 LOCAL 기준 현재 시간을 반환한다.
29- const [ value , setValue ] = useState < Date > ( initValue ) ;
34+ const NEW_DATE = new Date ( ) ;
35+ const [ value , setValue ] = useState < Date | null > ( initValue ) ;
3036 const [ viewDate , setViewDate ] = useState < string > (
31- getFormatDatetime ( initValue , 'YYYY-MM-DD' )
37+ getFormatDatetime ( value || NEW_DATE , 'YYYY-MM-DD' )
3238 ) ;
3339 const [ viewType , setViewType ] = useState <
3440 'century' | 'decade' | 'year' | 'month'
@@ -85,21 +91,31 @@ function Container({ initValue = new Date(), onChange }: Iprops) {
8591
8692 useEffect ( ( ) => {
8793 setIsVisible ( false ) ;
88- setViewDate ( getFormatDatetime ( value , 'YYYY-MM-DD' ) ) ;
94+ setViewDate ( getFormatDatetime ( value || NEW_DATE , 'YYYY-MM-DD' ) ) ;
8995 if ( onChange ) {
9096 onChange ( value ) ;
9197 }
98+ // eslint-disable-next-line react-hooks/exhaustive-deps
9299 } , [ value , onChange , setViewDate ] ) ;
93100
94101 return (
95102 < div className = { `${ NAME_SPACE } __wrapper` } >
96103 < div className = { `${ NAME_SPACE } __input-container` } >
97104 < input
105+ className = { `${ NAME_SPACE } __input` }
98106 type = "text"
99107 value = { getFormatDatetime ( value , 'YYYY-MM-DD' ) }
100108 readOnly
101109 onFocus = { handleFocus }
102110 />
111+ { isClearButton && value && (
112+ < button
113+ className = { `${ NAME_SPACE } __clear` }
114+ onClick = { ( ) => setValue ( null ) }
115+ >
116+ Clear
117+ </ button >
118+ ) }
103119 </ div >
104120 { isVisible && (
105121 < div className = { `${ NAME_SPACE } __datepicker-container` } ref = { container } >
0 commit comments