Skip to content

Commit d1786ca

Browse files
author
Balaji Sridharan
committed
fix: Clear the previously selected date on empty input with showTimeSelectOnly
Previously, the selected date was not being cleared and retained the previously selected time when an empty value was passed to the date input while showTimeSelectOnly was enabled due to a bug. This commit address the issue and adds test cases to ensure proper functionality. Closes #4170
1 parent 87c8e0d commit d1786ca

File tree

2 files changed

+56
-13
lines changed

2 files changed

+56
-13
lines changed

src/index.jsx

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -542,21 +542,14 @@ export default class DatePicker extends React.Component {
542542
if (
543543
this.props.showTimeSelectOnly &&
544544
this.props.selected &&
545+
date &&
545546
!isSameDay(date, this.props.selected)
546547
) {
547-
if (date == null) {
548-
date = set(this.props.selected, {
549-
hours: getHours(this.props.selected),
550-
minutes: getMinutes(this.props.selected),
551-
seconds: getSeconds(this.props.selected),
552-
});
553-
} else {
554-
date = set(this.props.selected, {
555-
hours: getHours(date),
556-
minutes: getMinutes(date),
557-
seconds: getSeconds(date),
558-
});
559-
}
548+
date = set(this.props.selected, {
549+
hours: getHours(date),
550+
minutes: getMinutes(date),
551+
seconds: getSeconds(date),
552+
});
560553
}
561554
if (date || !event.target.value) {
562555
this.setSelected(date, event, true);

test/datepicker_test.test.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { findDOMNode } from "react-dom";
44
import TestUtils from "react-dom/test-utils";
55
import { enUS, enGB } from "date-fns/locale";
66
import { mount } from "enzyme";
7+
import { render, fireEvent } from "@testing-library/react";
78
import defer from "lodash/defer";
89
import DatePicker, { registerLocale } from "../src/index.jsx";
910
import Day from "../src/day.jsx";
@@ -2102,6 +2103,55 @@ describe("DatePicker", () => {
21022103
});
21032104
});
21042105

2106+
it("clears the selected date on empty date input", () => {
2107+
let date = "2023-10-23 10:00:00";
2108+
const selected = utils.newDate(date);
2109+
2110+
const { container: datepicker } = render(
2111+
<DatePicker
2112+
selected={selected}
2113+
onChange={(d) => {
2114+
date = d;
2115+
}}
2116+
showTimeSelect
2117+
dateFormat="MMMM d, yyyy h:mm aa"
2118+
/>,
2119+
);
2120+
2121+
const input = datepicker.querySelector(
2122+
".react-datepicker__input-container > input",
2123+
);
2124+
fireEvent.change(input, { target: { value: "" } });
2125+
2126+
expect(date).toBe(null);
2127+
});
2128+
2129+
it("clears the selected date on empty date input with showTimeSelectOnly", () => {
2130+
const format = "h:mm aa";
2131+
2132+
let date = "2022-02-24 10:00:00";
2133+
const selected = utils.newDate(date);
2134+
2135+
const { container: datepicker } = render(
2136+
<DatePicker
2137+
selected={selected}
2138+
onChange={(d) => {
2139+
date = d;
2140+
}}
2141+
showTimeSelectOnly
2142+
dateFormat={format}
2143+
timeFormat={format}
2144+
/>,
2145+
);
2146+
2147+
const input = datepicker.querySelector(
2148+
".react-datepicker__input-container > input",
2149+
);
2150+
fireEvent.change(input, { target: { value: "" } });
2151+
2152+
expect(date).toBe(null);
2153+
});
2154+
21052155
it("should selected month when specified minDate same month", () => {
21062156
const selected = utils.newDate("2023-01-09");
21072157
let date = null;

0 commit comments

Comments
 (0)