Skip to content

Commit bd8d860

Browse files
🚑 - feat: allow enter key to submit date range picker
1 parent 2f84852 commit bd8d860

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

Diff for: src/components/form/dateinput/dateinput.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ export const DateInput: React.FC<DateInputProps> = ({
260260
const dateString = date2DateString(date);
261261
dispatchEvent(dateString);
262262
setIsPristine(false);
263-
} else if (!isPristine) {
263+
} else {
264264
// Date is invalid after previous valid value, dispatch "".
265265
dispatchEvent("");
266266
setIsPristine(false);

Diff for: src/components/form/daterangeinput/daterangeinput.tsx

+34-7
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,31 @@ export const DateRangeInput: React.FC<DateRangeInputProps> = ({
165165

166166
const newValues = new Array(2);
167167
newValues[index] = value;
168-
newValues[flippedIndex] = _values[flippedIndex] || value;
168+
newValues[flippedIndex] = _values[flippedIndex];
169169
queuedValueState.current = newValues;
170170
},
171171
[queuedValueState.current],
172172
);
173173

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+
174193
/**
175194
* Gets called when a blur event is received.
176195
* @param event
@@ -183,16 +202,24 @@ export const DateRangeInput: React.FC<DateRangeInputProps> = ({
183202

184203
const { currentTarget, relatedTarget } = e;
185204
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 || "");
190212
}
191213
},
192-
[document.activeElement, valuesState, normalizeValuesState],
214+
[document.activeElement, queuedValueState.current, normalizeValuesState],
193215
);
194216
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+
>
196223
<input
197224
ref={fakeInputRef}
198225
className="mykn-daterangeinput__input"

0 commit comments

Comments
 (0)