From 49da266c282940db0fff2997ae0cf46cb522976e Mon Sep 17 00:00:00 2001 From: yin yukun Date: Mon, 15 Apr 2024 11:28:41 +0100 Subject: [PATCH 1/4] add second support to isTimeDisabled, added test --- src/date_utils.js | 3 ++- test/include_times_test.test.js | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/date_utils.js b/src/date_utils.js index 5f0940096..8b5d55a7e 100644 --- a/src/date_utils.js +++ b/src/date_utils.js @@ -599,7 +599,8 @@ export function isTimeInList(time, times) { return times.some( (listTime) => getHours(listTime) === getHours(time) && - getMinutes(listTime) === getMinutes(time), + getMinutes(listTime) === getMinutes(time) && + getSeconds(listTime) === getSeconds(time), ); } diff --git a/test/include_times_test.test.js b/test/include_times_test.test.js index 758c0236b..bdd9d9f79 100644 --- a/test/include_times_test.test.js +++ b/test/include_times_test.test.js @@ -54,4 +54,28 @@ describe("TimeComponent", () => { }); expect(enabledTimeItemsHasNoAriaDisabled).toBe(true); }); + + it.only("should factor in seconds", () => { + const includeHoursMinutesSeconds = [ + utils.addHours(utils.addSeconds(today, 30), 1), //01:00:30 + utils.addSeconds(today, 30), //00:00:30 + ]; + const { container: timeComponent } = render( + , + ); + + const disabledTimeItems = timeComponent.querySelectorAll( + ".react-datepicker__time-list-item--disabled", + ); + + expect( + Array.from(disabledTimeItems).map((node) => node.textContent), + ).toContain("01:00:00"); + expect( + Array.from(disabledTimeItems).map((node) => node.textContent), + ).toContain("00:00:00"); + }); }); From 1fc36faacd3863f8c5211914477ed5345cab5d03 Mon Sep 17 00:00:00 2001 From: yin yukun Date: Mon, 15 Apr 2024 11:53:46 +0100 Subject: [PATCH 2/4] update isTimeInDisabledRange to support seconds --- src/date_utils.js | 24 ++++++++++++++---------- test/date_utils_test.test.js | 11 +++++++---- test/include_times_test.test.js | 2 +- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/date_utils.js b/src/date_utils.js index 8b5d55a7e..4e58002b4 100644 --- a/src/date_utils.js +++ b/src/date_utils.js @@ -620,16 +620,20 @@ export function isTimeInDisabledRange(time, { minTime, maxTime }) { if (!minTime || !maxTime) { throw new Error("Both minTime and maxTime props required"); } - const base = newDate(); - const baseTime = setHours(setMinutes(base, getMinutes(time)), getHours(time)); - const min = setHours( - setMinutes(base, getMinutes(minTime)), - getHours(minTime), - ); - const max = setHours( - setMinutes(base, getMinutes(maxTime)), - getHours(maxTime), - ); + let baseTime = newDate(); + baseTime = setHours(baseTime, getHours(time)); + baseTime = setMinutes(baseTime, getMinutes(time)); + baseTime = setSeconds(baseTime, getSeconds(time)); + + let min = newDate(); + min = setHours(min, getHours(minTime)); + min = setMinutes(min, getMinutes(minTime)); + min = setSeconds(min, getSeconds(minTime)); + + let max = newDate(); + max = setHours(max, getHours(maxTime)); + max = setMinutes(max, getMinutes(maxTime)); + max = setSeconds(max, getSeconds(maxTime)); let valid; try { diff --git a/test/date_utils_test.test.js b/test/date_utils_test.test.js index e77adceb0..9659654b2 100644 --- a/test/date_utils_test.test.js +++ b/test/date_utils_test.test.js @@ -49,7 +49,7 @@ import { setHours } from "date-fns/setHours"; import { addQuarters } from "date-fns/addQuarters"; import { ptBR } from "date-fns/locale/pt-BR"; import { registerLocale } from "../src/date_utils"; -import { addYears } from "date-fns"; +import { addYears, setSeconds } from "date-fns"; registerLocale("pt-BR", ptBR); @@ -888,9 +888,12 @@ describe("date_utils", () => { describe("isTimeInDisabledRange", () => { it("should tell if time is in disabled range", () => { const date = newDate("2016-03-15"); - const time = setHours(setMinutes(date, 30), 1); - const minTime = setHours(setMinutes(date, 30), 0); - const maxTime = setHours(setMinutes(date, 30), 5); + let time = setHours(date, 1); + time = setMinutes(time, 30); + time = setSeconds(time, 30); // 2016-03-15 01:30:30 + + const minTime = setHours(setMinutes(date, 30), 0); //2016-03-15 00:30:00 + const maxTime = setHours(setMinutes(setSeconds(date, 35), 30), 1); //2016-03-15 01:30:35 expect(isTimeInDisabledRange(time, { minTime, maxTime })).toBe(false); }); diff --git a/test/include_times_test.test.js b/test/include_times_test.test.js index bdd9d9f79..4b3ec4609 100644 --- a/test/include_times_test.test.js +++ b/test/include_times_test.test.js @@ -55,7 +55,7 @@ describe("TimeComponent", () => { expect(enabledTimeItemsHasNoAriaDisabled).toBe(true); }); - it.only("should factor in seconds", () => { + it("should factor in seconds", () => { const includeHoursMinutesSeconds = [ utils.addHours(utils.addSeconds(today, 30), 1), //01:00:30 utils.addSeconds(today, 30), //00:00:30 From 7325c377c2208111d1b4d19a65809526f5cba7cf Mon Sep 17 00:00:00 2001 From: yin yukun Date: Mon, 15 Apr 2024 16:25:40 +0100 Subject: [PATCH 3/4] fix: clearer test --- test/include_times_test.test.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/include_times_test.test.js b/test/include_times_test.test.js index 4b3ec4609..566c1f3d9 100644 --- a/test/include_times_test.test.js +++ b/test/include_times_test.test.js @@ -67,10 +67,23 @@ describe("TimeComponent", () => { />, ); + const allTimeItems = timeComponent.querySelectorAll( + ".react-datepicker__time-list-item", + ); + + // 01:00:30 and 00:00:30 should be correctly visible in the time list + expect(Array.from(allTimeItems).map((node) => node.textContent)).toContain( + "01:00:30", + ); + expect(Array.from(allTimeItems).map((node) => node.textContent)).toContain( + "00:00:30", + ); + const disabledTimeItems = timeComponent.querySelectorAll( ".react-datepicker__time-list-item--disabled", ); + // 01:00:00 and 00:00:00 should be correctly disabled expect( Array.from(disabledTimeItems).map((node) => node.textContent), ).toContain("01:00:00"); From 9af5770fde70ab5530e3f0aa33ec12bbc3615e97 Mon Sep 17 00:00:00 2001 From: yin yukun Date: Mon, 15 Apr 2024 17:51:34 +0100 Subject: [PATCH 4/4] fix: remove errorneous test assumptions --- test/include_times_test.test.js | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/test/include_times_test.test.js b/test/include_times_test.test.js index 566c1f3d9..533e1811e 100644 --- a/test/include_times_test.test.js +++ b/test/include_times_test.test.js @@ -67,23 +67,11 @@ describe("TimeComponent", () => { />, ); - const allTimeItems = timeComponent.querySelectorAll( - ".react-datepicker__time-list-item", - ); - - // 01:00:30 and 00:00:30 should be correctly visible in the time list - expect(Array.from(allTimeItems).map((node) => node.textContent)).toContain( - "01:00:30", - ); - expect(Array.from(allTimeItems).map((node) => node.textContent)).toContain( - "00:00:30", - ); - const disabledTimeItems = timeComponent.querySelectorAll( ".react-datepicker__time-list-item--disabled", ); - // 01:00:00 and 00:00:00 should be correctly disabled + // 01:00:00 and 00:00:00 should be correctly disabled because they are not included expect( Array.from(disabledTimeItems).map((node) => node.textContent), ).toContain("01:00:00");