Skip to content

Commit f9b5957

Browse files
jkeammartijnrusschen
authored andcommitted
catch range errors when dates are invalid and instead return boolean indicating validity (#1577)
1 parent 59c1b93 commit f9b5957

File tree

2 files changed

+69
-3
lines changed

2 files changed

+69
-3
lines changed

src/date_utils.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,13 @@ export function isSameDay(date1, date2) {
224224
}
225225

226226
export function isDayInRange(day, startDate, endDate) {
227-
return isWithinInterval(day, { start: startDate, end: endDate });
227+
let valid;
228+
try {
229+
valid = isWithinInterval(day, { start: startDate, end: endDate });
230+
} catch (err) {
231+
valid = false;
232+
}
233+
return valid;
228234
}
229235

230236
// *** Diffing ***
@@ -326,7 +332,14 @@ export function isTimeInDisabledRange(time, { minTime, maxTime }) {
326332
setMinutes(base, getMinutes(maxTime)),
327333
getHours(maxTime)
328334
);
329-
return !isWithinInterval(baseTime, { start: min, end: max });
335+
336+
let valid;
337+
try {
338+
valid = !isWithinInterval(baseTime, { start: min, end: max });
339+
} catch (err) {
340+
valid = false;
341+
}
342+
return valid;
330343
}
331344

332345
export function monthDisabledBefore(day, { minDate, includeDates } = {}) {

test/date_utils_test.js

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ import {
1010
monthDisabledBefore,
1111
monthDisabledAfter,
1212
getEffectiveMinDate,
13-
getEffectiveMaxDate
13+
getEffectiveMaxDate,
14+
isTimeInDisabledRange,
15+
isDayInRange
1416
} from "../src/date_utils";
17+
import setMinutes from "date-fns/setMinutes";
18+
import setHours from "date-fns/setHours";
1519

1620
describe("date_utils", function() {
1721
describe("isSameDay", function() {
@@ -245,4 +249,53 @@ describe("date_utils", function() {
245249
assert(isEqual(getEffectiveMaxDate({ maxDate, includeDates }), date1));
246250
});
247251
});
252+
253+
describe("isTimeInDisabledRange", () => {
254+
it("should tell if time is in disabled range", () => {
255+
const date = newDate("2016-03-15");
256+
const time = setHours(setMinutes(date, 30), 1);
257+
const minTime = setHours(setMinutes(date, 30), 0);
258+
const maxTime = setHours(setMinutes(date, 30), 5);
259+
expect(isTimeInDisabledRange(time, { minTime, maxTime })).to.be.false;
260+
});
261+
262+
it("should tell if time is not in disabled range", () => {
263+
const date = newDate("2016-03-15");
264+
const time = setHours(setMinutes(date, 30), 0);
265+
const minTime = setHours(setMinutes(date, 30), 1);
266+
const maxTime = setHours(setMinutes(date, 30), 5);
267+
expect(isTimeInDisabledRange(time, { minTime, maxTime })).to.be.true;
268+
});
269+
270+
it("should not throw an exception if max time is before min time", () => {
271+
const date = newDate("2016-03-15");
272+
const time = setHours(setMinutes(date, 30), 10);
273+
const minTime = setHours(setMinutes(date, 30), 5);
274+
const maxTime = setHours(setMinutes(date, 30), 0);
275+
expect(isTimeInDisabledRange(time, { minTime, maxTime })).to.be.false;
276+
});
277+
});
278+
279+
describe("isDayInRange", () => {
280+
it("should tell if day is in range", () => {
281+
const day = newDate("2016-02-15");
282+
const startDate = newDate("2016-02-01");
283+
const endDate = newDate("2016-03-15");
284+
expect(isDayInRange(day, startDate, endDate)).to.be.true;
285+
});
286+
287+
it("should tell if day is not in range", () => {
288+
const day = newDate("2016-07-15");
289+
const startDate = newDate("2016-02-15");
290+
const endDate = newDate("2016-03-15");
291+
expect(isDayInRange(day, startDate, endDate)).to.be.false;
292+
});
293+
294+
it("should not throw exception if end date is before start date", () => {
295+
const day = newDate("2016-02-01");
296+
const startDate = newDate("2016-02-15");
297+
const endDate = newDate("2016-01-15");
298+
expect(isDayInRange(day, startDate, endDate)).to.be.false;
299+
});
300+
});
248301
});

0 commit comments

Comments
 (0)