@@ -165,12 +165,31 @@ export const DateRangeInput: React.FC<DateRangeInputProps> = ({
165
165
166
166
const newValues = new Array ( 2 ) ;
167
167
newValues [ index ] = value ;
168
- newValues [ flippedIndex ] = _values [ flippedIndex ] || value ;
168
+ newValues [ flippedIndex ] = _values [ flippedIndex ] ;
169
169
queuedValueState . current = newValues ;
170
170
} ,
171
171
[ queuedValueState . current ] ,
172
172
) ;
173
173
174
+ /**
175
+ * Gets called when a keyUp event is received.
176
+ * Implements enter key change trigger..
177
+ */
178
+ const handleKeyUp = useCallback < React . KeyboardEventHandler < HTMLInputElement > > (
179
+ ( e ) => {
180
+ if ( e . key === "Enter" ) {
181
+ const dates = normalizeValuesState ( queuedValueState . current )
182
+ ?. map ( value2Date )
183
+ . filter ( ( v ) : v is Date => Boolean ( v ) )
184
+ . map ( date2DateString ) ;
185
+
186
+ const dateString = dates ?. length === 2 && dates . join ( "/" ) ;
187
+ dispatchEvent ( dateString || "" ) ;
188
+ }
189
+ } ,
190
+ [ queuedValueState . current , normalizeValuesState ] ,
191
+ ) ;
192
+
174
193
/**
175
194
* Gets called when a blur event is received.
176
195
* @param event
@@ -183,16 +202,24 @@ export const DateRangeInput: React.FC<DateRangeInputProps> = ({
183
202
184
203
const { currentTarget, relatedTarget } = e ;
185
204
if ( ! relatedTarget || ! currentTarget . contains ( relatedTarget ) ) {
186
- const newValuesState = normalizeValuesState ( queuedValueState . current ) ;
187
- setValuesState ( newValuesState ) ;
188
- const newValue = newValuesState ?. join ( "/" ) || "" ;
189
- dispatchEvent ( newValue ) ;
205
+ const dates = normalizeValuesState ( queuedValueState . current )
206
+ ?. map ( value2Date )
207
+ . filter ( ( v ) : v is Date => Boolean ( v ) )
208
+ . map ( date2DateString ) ;
209
+
210
+ const dateString = dates ?. length === 2 && dates . join ( "/" ) ;
211
+ dispatchEvent ( dateString || "" ) ;
190
212
}
191
213
} ,
192
- [ document . activeElement , valuesState , normalizeValuesState ] ,
214
+ [ document . activeElement , queuedValueState . current , normalizeValuesState ] ,
193
215
) ;
194
216
return (
195
- < div ref = { nodeRef } className = "mykn-daterangeinput" onBlur = { handleBlur } >
217
+ < div
218
+ ref = { nodeRef }
219
+ className = "mykn-daterangeinput"
220
+ onBlur = { handleBlur }
221
+ onKeyUp = { handleKeyUp }
222
+ >
196
223
< input
197
224
ref = { fakeInputRef }
198
225
className = "mykn-daterangeinput__input"
0 commit comments