@@ -68,48 +68,60 @@ const Input: React.FC<Props> = (e: Props) => {
68
68
( e : React . ChangeEvent < HTMLInputElement > ) => {
69
69
const inputValue = e . target . value ;
70
70
71
- const start = parseFormattedDate ( inputValue . slice ( 0 , 10 ) , displayFormat ) . format (
72
- DATE_FORMAT
73
- ) ;
74
- const end = asSingle
75
- ? start
76
- : parseFormattedDate ( inputValue . slice ( 11 , inputValue . length ) , displayFormat ) . format (
77
- DATE_FORMAT
78
- ) ;
79
-
80
- const input = inputRef ?. current ;
81
-
82
- if (
83
- start . length === 10 &&
84
- end . length === 10 &&
85
- dateIsValid ( new Date ( start ) ) &&
86
- dateIsValid ( new Date ( end ) ) &&
87
- ( dayjs ( start ) . isBefore ( end ) || asSingle )
88
- ) {
71
+ const dates = [ ] ;
72
+
73
+ if ( asSingle ) {
74
+ const date = parseFormattedDate ( inputValue , displayFormat ) ;
75
+ if ( dateIsValid ( date . toDate ( ) ) ) {
76
+ dates . push ( date . format ( DATE_FORMAT ) ) ;
77
+ }
78
+ } else {
79
+ const parsed = inputValue . split ( separator ) ;
80
+ if ( parsed . length === 2 ) {
81
+ const startDate = parseFormattedDate ( parsed [ 0 ] , displayFormat ) ;
82
+ const endDate = parseFormattedDate ( parsed [ 1 ] , displayFormat ) ;
83
+
84
+ if (
85
+ dateIsValid ( startDate . toDate ( ) ) &&
86
+ dateIsValid ( endDate . toDate ( ) ) &&
87
+ startDate . isBefore ( endDate )
88
+ ) {
89
+ dates . push ( startDate . format ( DATE_FORMAT ) ) ;
90
+ dates . push ( endDate . format ( DATE_FORMAT ) ) ;
91
+ }
92
+ } else {
93
+ // TODO: Handle the case where there is separator in the date format or no separator at all
94
+ }
95
+ }
96
+
97
+ if ( dates [ 0 ] ) {
89
98
changeDatepickerValue (
90
99
{
91
- startDate : start ,
92
- endDate : end
100
+ startDate : dates [ 0 ] ,
101
+ endDate : dates [ 1 ] || dates [ 0 ]
93
102
} ,
94
103
e . target
95
104
) ;
96
- if ( ! asSingle ) changeDayHover ( dayjs ( end ) . add ( - 1 , "day" ) . format ( DATE_FORMAT ) ) ;
97
- else changeDayHover ( start ) ;
98
- hideDatepicker ( ) ;
105
+ if ( dates [ 1 ] ) changeDayHover ( dayjs ( dates [ 1 ] ) . add ( - 1 , "day" ) . format ( DATE_FORMAT ) ) ;
106
+ else changeDayHover ( dates [ 0 ] ) ;
107
+ }
108
+
109
+ changeInputText ( e . target . value ) ;
110
+ } ,
111
+ [ asSingle , displayFormat , separator , changeDatepickerValue , changeDayHover , changeInputText ]
112
+ ) ;
113
+
114
+ const handleInputKeyDown = useCallback (
115
+ ( e : React . KeyboardEvent < HTMLInputElement > ) => {
116
+ if ( e . key === "Enter" ) {
117
+ const input = inputRef . current ;
99
118
if ( input ) {
100
119
input . blur ( ) ;
101
120
}
121
+ hideDatepicker ( ) ;
102
122
}
103
- changeInputText ( e . target . value ) ;
104
123
} ,
105
- [
106
- changeDatepickerValue ,
107
- changeDayHover ,
108
- changeInputText ,
109
- hideDatepicker ,
110
- displayFormat ,
111
- asSingle
112
- ]
124
+ [ hideDatepicker ]
113
125
) ;
114
126
115
127
const renderToggleIcon = useCallback (
@@ -266,6 +278,7 @@ const Input: React.FC<Props> = (e: Props) => {
266
278
autoComplete = "off"
267
279
role = "presentation"
268
280
onChange = { handleInputChange }
281
+ onKeyDown = { handleInputKeyDown }
269
282
/>
270
283
271
284
< button
0 commit comments