Skip to content

Commit a4d0d09

Browse files
committed
Fix end_date persistence bug
1 parent ec6efd1 commit a4d0d09

File tree

4 files changed

+22
-14
lines changed

4 files changed

+22
-14
lines changed

components/dash-core-components/src/fragments/DatePickerRange.tsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,18 +124,27 @@ const DatePickerRange = ({
124124
}, [internalEndDate, display_format]);
125125

126126
useEffect(() => {
127-
// Controls whether or not to call `setProps`
127+
// Controls when setProps is called. Basically, whenever internal state
128+
// diverges from props (i.e., user interaction)
128129
const startChanged = !isSameDay(start_date, internalStartDate);
129130
const endChanged = !isSameDay(end_date, internalEndDate);
130131

131-
const newDates: Partial<DatePickerRangeProps> = {
132-
...(startChanged && {start_date: dateAsStr(internalStartDate)}),
133-
...(endChanged && {end_date: dateAsStr(internalEndDate)}),
134-
};
132+
if (!startChanged && !endChanged) {
133+
return;
134+
}
135135

136-
const numPropsRequiredForUpdate = updatemode === 'bothdates' ? 2 : 1;
137-
if (Object.keys(newDates).length >= numPropsRequiredForUpdate) {
138-
setProps(newDates);
136+
if (internalStartDate && internalEndDate) {
137+
// Both dates are set - send both
138+
setProps({
139+
start_date: dateAsStr(internalStartDate),
140+
end_date: dateAsStr(internalEndDate),
141+
});
142+
} else if (updatemode === 'singledate' && internalStartDate) {
143+
// Only start changed - send just that one
144+
setProps({start_date: dateAsStr(internalStartDate)});
145+
} else if (updatemode === 'singledate' && internalEndDate) {
146+
// Only end changed - send just that one
147+
setProps({end_date: dateAsStr(internalEndDate)});
139148
}
140149
}, [start_date, internalStartDate, end_date, internalEndDate, updatemode]);
141150

components/dash-core-components/tests/dash_core_components_page.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ def select_date_range(self, compid, day_range, start_first=True):
6767
)
6868
return
6969

70-
prefix = "Start" if start_first else "End"
71-
date = self.find_element(f'#{compid}[aria-label="{prefix} Date"]')
70+
if not start_first:
71+
compid += "-end-date"
72+
date = self.find_element(f"#{compid}")
7273
date.click()
7374
for day in day_range:
7475
self._wait_until_day_is_clickable()

components/dash-core-components/tests/integration/calendar/test_a11y_date_picker_range.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def update_output(start_date, end_date):
149149
send_keys(dash_dcc.driver, Keys.SPACE)
150150

151151
# Verify new start date was selected (only start_date, no end_date)
152-
dash_dcc.wait_for_text_to_equal("#output-dates", "Start: 2021-01-12")
152+
dash_dcc.wait_for_text_to_equal("#output-dates", "2021-01-12 to 2021-01-20")
153153

154154
# Navigate to new end date: Arrow Down + Arrow Right (Jan 12 -> 19 -> 20)
155155
send_keys(dash_dcc.driver, Keys.ARROW_DOWN)

components/dash-core-components/tests/integration/misc/test_persistence.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ def test_msps001_basic_persistence(dash_dcc):
2525
id="datepickerrange",
2626
start_date="2017-08-21",
2727
end_date="2024-04-08",
28-
start_date_id="start_date",
29-
end_date_id="end_date",
3028
initial_visible_month="2019-05-01",
3129
persistence=True,
3230
),
@@ -127,7 +125,7 @@ def make_output(*args):
127125
dash_dcc.select_date_range("datepickerrange", day_range=(4,))
128126
dash_dcc.select_date_range("datepickerrange", day_range=(14,), start_first=False)
129127

130-
dash_dcc.find_element("#datepickersingle input").click()
128+
dash_dcc.find_element("#datepickersingle").click()
131129
dash_dcc.select_date_single("datepickersingle", day="20")
132130

133131
dash_dcc.find_element("#dropdownsingle").click()

0 commit comments

Comments
 (0)