@@ -56,26 +56,40 @@ export const RLDatePicker = forwardRef<RLDatePickerRef, RLDatePickerProps>(
5656 [ withTime ]
5757 )
5858
59+ const toDate = useCallback ( ( v : Date | Date [ ] | string | null | undefined ) : Date | Date [ ] | null | undefined => {
60+ if ( ! v ) return v as null | undefined
61+ if ( typeof v === 'string' ) {
62+ const d = new Date ( v )
63+ return isNaN ( d . getTime ( ) ) ? null : d
64+ }
65+ return v
66+ } , [ ] )
67+
68+ const calendarValue = useMemo ( ( ) => toDate ( value ) ?? null , [ value , toDate ] )
69+
5970 const formattedValue = useMemo ( ( ) : string | undefined => {
6071 if ( ! value ) return undefined
6172
62- if ( Array . isArray ( value ) ) {
73+ const resolved = toDate ( value )
74+ if ( ! resolved ) return undefined
75+
76+ if ( Array . isArray ( resolved ) ) {
6377 if ( selectionMode === 'range' ) {
64- const [ startDate , endDate ] = value
78+ const [ startDate , endDate ] = resolved
6579 const formattedStartDate = formatDate ( startDate )
6680 const formattedEndDate = endDate ? formatDate ( endDate ) : ''
6781 return `${ formattedStartDate } ~ ${ formattedEndDate } `
6882 } else if ( selectionMode === 'multiple' ) {
69- return value . map ( ( date ) => formatDate ( date ) ) . join ( ', ' )
83+ return resolved . map ( ( date ) => formatDate ( date ) ) . join ( ', ' )
7084 }
7185 }
7286
73- if ( value instanceof Date ) {
74- return formatDate ( value )
87+ if ( resolved instanceof Date ) {
88+ return formatDate ( resolved )
7589 }
7690
7791 return ''
78- } , [ value , selectionMode , formatDate ] )
92+ } , [ value , selectionMode , formatDate , toDate ] )
7993
8094 const handleDateSelect = useCallback (
8195 ( date : Date | Date [ ] | null ) => {
@@ -141,7 +155,7 @@ export const RLDatePicker = forwardRef<RLDatePickerRef, RLDatePickerProps>(
141155 { errorMessage && < ErrorMessage > { errorMessage } </ ErrorMessage > }
142156 </ div >
143157 < Calendar
144- value = { value }
158+ value = { calendarValue }
145159 onChange = { ( e ) => handleDateSelect ( e . value as Date | Date [ ] | null ) }
146160 dateFormat = "yy/mm/dd"
147161 inline
0 commit comments