From c56c3fbe93d04495f210602e620ee1d9fb834331 Mon Sep 17 00:00:00 2001 From: ravijadhav3 Date: Sun, 21 Feb 2021 13:29:38 -0800 Subject: [PATCH 1/4] Fixing off by one error in DatePickerRange. 1. Fix requires converting max_date_allowed and min_date_allowed into moment.js date objects. 2. Added test to cover the scenario reported in [#867](https://github.com/plotly/dash-core-components/issues/867) --- src/fragments/DatePickerRange.react.js | 5 +++- .../calendar/test_date_picker_range.py | 28 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/fragments/DatePickerRange.react.js b/src/fragments/DatePickerRange.react.js index f4c0a040a..17b4aba2b 100644 --- a/src/fragments/DatePickerRange.react.js +++ b/src/fragments/DatePickerRange.react.js @@ -82,7 +82,10 @@ export default class DatePickerRange extends Component { } isOutsideRange(date) { - const {min_date_allowed, max_date_allowed} = this.props; + const {min_date_allowed, max_date_allowed} = convertToMoment(this.props, [ + 'min_date_allowed', + 'max_date_allowed', + ]); return ( (min_date_allowed && date.isBefore(min_date_allowed)) || diff --git a/tests/integration/calendar/test_date_picker_range.py b/tests/integration/calendar/test_date_picker_range.py index e0a09bf87..7bf160dbf 100644 --- a/tests/integration/calendar/test_date_picker_range.py +++ b/tests/integration/calendar/test_date_picker_range.py @@ -80,3 +80,31 @@ def test_dtpr003_no_initial_month_no_min_date_start_date(dash_dcc): "#dps-initial-month .CalendarMonth.CalendarMonth_1[data-visible=true] strong", "August 2019", ) + +def test_dtpr004_max_and_min_dates_are_clickable(dash_dcc): + app = dash.Dash(__name__) + app.layout = html.Div( + [ + dcc.DatePickerRange( + id="dps-initial-month", + start_date=datetime(2021, 1, 11), + end_date=datetime(2021,1,19), + max_date_allowed=datetime(2021, 1, 20), + min_date_allowed=datetime(2021, 1, 10), + ) + ] + ) + + dash_dcc.start_server(app) + + dash_dcc.select_date_range('dps-initial-month',(10,20)) + + dash_dcc.wait_for_text_to_equal( + '#dps-initial-month .DateInput_input.DateInput_input_1[placeholder="Start Date"]', + "01/10/2021", + ) + + dash_dcc.wait_for_text_to_equal( + '#dps-initial-month .DateInput_input.DateInput_input_1[placeholder="End Date"]', + "01/20/2021", + ) From 03ead21508354b32b3525ef03ca60535275b836c Mon Sep 17 00:00:00 2001 From: Alex Johnson Date: Wed, 3 Mar 2021 23:50:26 -0500 Subject: [PATCH 2/4] lint datepickerrange test --- tests/integration/calendar/test_date_picker_range.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/integration/calendar/test_date_picker_range.py b/tests/integration/calendar/test_date_picker_range.py index 7bf160dbf..c93ae6cd1 100644 --- a/tests/integration/calendar/test_date_picker_range.py +++ b/tests/integration/calendar/test_date_picker_range.py @@ -81,6 +81,7 @@ def test_dtpr003_no_initial_month_no_min_date_start_date(dash_dcc): "August 2019", ) + def test_dtpr004_max_and_min_dates_are_clickable(dash_dcc): app = dash.Dash(__name__) app.layout = html.Div( @@ -88,7 +89,7 @@ def test_dtpr004_max_and_min_dates_are_clickable(dash_dcc): dcc.DatePickerRange( id="dps-initial-month", start_date=datetime(2021, 1, 11), - end_date=datetime(2021,1,19), + end_date=datetime(2021, 1, 19), max_date_allowed=datetime(2021, 1, 20), min_date_allowed=datetime(2021, 1, 10), ) @@ -97,8 +98,8 @@ def test_dtpr004_max_and_min_dates_are_clickable(dash_dcc): dash_dcc.start_server(app) - dash_dcc.select_date_range('dps-initial-month',(10,20)) - + dash_dcc.select_date_range('dps-initial-month', (10, 20)) + dash_dcc.wait_for_text_to_equal( '#dps-initial-month .DateInput_input.DateInput_input_1[placeholder="Start Date"]', "01/10/2021", From e4d37b270f26575c6e8b44b3f86bc827bee63f55 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Wed, 3 Mar 2021 23:56:46 -0500 Subject: [PATCH 3/4] black datepickerrange test --- src/fragments/DatePickerRange.react.js | 8 ++++---- tests/integration/calendar/test_date_picker_range.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/fragments/DatePickerRange.react.js b/src/fragments/DatePickerRange.react.js index 17b4aba2b..f572dc168 100644 --- a/src/fragments/DatePickerRange.react.js +++ b/src/fragments/DatePickerRange.react.js @@ -82,10 +82,10 @@ export default class DatePickerRange extends Component { } isOutsideRange(date) { - const {min_date_allowed, max_date_allowed} = convertToMoment(this.props, [ - 'min_date_allowed', - 'max_date_allowed', - ]); + const {min_date_allowed, max_date_allowed} = convertToMoment( + this.props, + ['min_date_allowed', 'max_date_allowed'] + ); return ( (min_date_allowed && date.isBefore(min_date_allowed)) || diff --git a/tests/integration/calendar/test_date_picker_range.py b/tests/integration/calendar/test_date_picker_range.py index c93ae6cd1..2bc26b251 100644 --- a/tests/integration/calendar/test_date_picker_range.py +++ b/tests/integration/calendar/test_date_picker_range.py @@ -98,7 +98,7 @@ def test_dtpr004_max_and_min_dates_are_clickable(dash_dcc): dash_dcc.start_server(app) - dash_dcc.select_date_range('dps-initial-month', (10, 20)) + dash_dcc.select_date_range("dps-initial-month", (10, 20)) dash_dcc.wait_for_text_to_equal( '#dps-initial-month .DateInput_input.DateInput_input_1[placeholder="Start Date"]', From 687c336e53299f1be5c90b3726bab01e67675c2b Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Thu, 4 Mar 2021 09:09:01 -0500 Subject: [PATCH 4/4] changelog entry for datepickerrange off-by-one fix --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aab51a21e..58baaefd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). - [#923](https://github.com/plotly/dash-core-components/pull/923) Set autoComplete to off in `dcc.Dropdown`. This fixes [#808](https://github.com/plotly/dash-core-components/issues/808) +### Fixed +- [#930](https://github.com/plotly/dash-core-components/pull/930) Fixed a bug [#867](https://github.com/plotly/dash-core-components/issues/867) with `DatePickerRange` that would sometimes shift the allowed dates by one day. + ## [1.15.0] - 2021-01-19 ### Fixed - [#905](https://github.com/plotly/dash-core-components/pull/905) Make sure the `figure` prop of `dcc.Graph` receives updates from user interactions in the graph, by using the same `layout` object as provided in the prop rather than cloning it. Fixes [#879](https://github.com/plotly/dash-core-components/issues/879).