Skip to content

Commit 94f4118

Browse files
guilhermepatriarcatresko
authored andcommitted
feat: add isStartDate and isEndDate
1 parent 87687cf commit 94f4118

File tree

18 files changed

+260
-130
lines changed

18 files changed

+260
-130
lines changed

packages/hooks/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ Returns `true` if a date is focused, otherwise `false`.
124124

125125
Returns `true` if a date is the first or the last date in the selected range, otherwise `false`.
126126

127+
#### `isStartDate: (date: Date) => boolean`
128+
129+
Returns `true` if a date is the first or the last date in the selected range, otherwise `false`.
130+
131+
#### `isEndDate: (date: Date) => boolean`
132+
133+
Returns `true` if a date is the first or the last date in the selected range, otherwise `false`.
134+
127135
#### `onResetDates: () => void`
128136

129137
Reset start and end date.

packages/hooks/lib/index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import {
1515
import {
1616
isDateSelected,
1717
isFirstOrLastSelectedDate,
18+
isStartDate,
19+
isEndDate,
1820
isDateBlocked,
1921
getCurrentYearMonthAndDate,
2022
getDateMonthAndYear,
@@ -43,6 +45,8 @@ export {
4345
CalendarDay,
4446
isDateSelected,
4547
isFirstOrLastSelectedDate,
48+
isStartDate,
49+
isEndDate,
4650
isDateBlocked,
4751
getCurrentYearMonthAndDate,
4852
getDateMonthAndYear,

packages/hooks/lib/useDatepicker/index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import {
1010
import {
1111
isDateSelected,
1212
isFirstOrLastSelectedDate,
13+
isStartDate,
14+
isEndDate,
1315
isDateBlocked,
1416
getCurrentYearMonthAndDate,
1517
getDateMonthAndYear,
@@ -25,6 +27,8 @@ export {
2527
useDatepicker,
2628
isDateSelected,
2729
isFirstOrLastSelectedDate,
30+
isStartDate,
31+
isEndDate,
2832
isDateBlocked,
2933
getCurrentYearMonthAndDate,
3034
getDateMonthAndYear,

packages/hooks/lib/useDatepicker/useDatepicker.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ export declare function useDatepicker({
4242
isDateSelected: (date: Date) => boolean
4343
isDateHovered: (date: Date) => boolean
4444
isFirstOrLastSelectedDate: (date: Date) => boolean
45+
isStartDate: (date: Date) => boolean
46+
isEndDate: (date: Date) => boolean
4547
isDateBlocked: (date: Date) => boolean
4648
numberOfMonths: number
4749
isDateFocused: (date: Date) => boolean

packages/hooks/lib/useDatepicker/useDatepicker.utils.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ export declare function isFirstOrLastSelectedDate(
1212
startDate: Date | null,
1313
endDate: Date | null,
1414
): boolean
15+
export declare function isStartDate(
16+
date: Date,
17+
startDate: Date | null,
18+
): boolean
19+
export declare function isEndDate(
20+
date: Date,
21+
endDate: Date | null,
22+
): boolean
1523
interface IsDateBlockedProps {
1624
date: Date
1725
startDate: Date | null

packages/hooks/lib/useDay/useDay.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ interface UseDayProps {
77
isDateHovered(date: Date): boolean
88
isDateBlocked(date: Date): boolean
99
isFirstOrLastSelectedDate(date: Date): boolean
10+
isStartDate(date: Date): boolean
11+
isEndDate(date: Date): boolean
1012
onDateFocus(date: Date): void
1113
onDateSelect(date: Date): void
1214
onDateHover(date: Date): void
@@ -18,6 +20,8 @@ declare function useDay({
1820
isDateSelected,
1921
isDateFocused,
2022
isFirstOrLastSelectedDate,
23+
isStartDate,
24+
isEndDate,
2125
isDateHovered,
2226
isDateBlocked,
2327
onDateSelect,

packages/hooks/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import {
1515
import {
1616
isDateSelected,
1717
isFirstOrLastSelectedDate,
18+
isEndDate,
19+
isStartDate,
1820
isDateBlocked,
1921
getCurrentYearMonthAndDate,
2022
getDateMonthAndYear,
@@ -44,6 +46,8 @@ export {
4446
CalendarDay,
4547
isDateSelected,
4648
isFirstOrLastSelectedDate,
49+
isStartDate,
50+
isEndDate,
4751
isDateBlocked,
4852
getCurrentYearMonthAndDate,
4953
getDateMonthAndYear,

packages/hooks/src/useDatepicker/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import {
1010
import {
1111
isDateSelected,
1212
isFirstOrLastSelectedDate,
13+
isStartDate,
14+
isEndDate,
1315
isDateBlocked,
1416
getCurrentYearMonthAndDate,
1517
getDateMonthAndYear,
@@ -26,6 +28,8 @@ export {
2628
useDatepicker,
2729
isDateSelected,
2830
isFirstOrLastSelectedDate,
31+
isStartDate,
32+
isEndDate,
2933
isDateBlocked,
3034
getCurrentYearMonthAndDate,
3135
getDateMonthAndYear,

packages/hooks/src/useDatepicker/useDatepicker.test.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,52 @@ describe('useDatepicker', () => {
519519
clear()
520520
})
521521

522+
523+
test('should check if date is start date', () => {
524+
const onDatesChange = jest.fn()
525+
advanceTo(new Date(2019, 2, 27, 0, 0, 0))
526+
const {result} = renderHook(() =>
527+
useDatepicker({
528+
startDate: new Date(2019, 3, 1, 0, 0, 0),
529+
endDate: new Date(2019, 3, 3, 0, 0, 0),
530+
minBookingDate: new Date(2019, 3, 1, 0, 0, 0),
531+
maxBookingDate: new Date(2019, 3, 10, 0, 0, 0),
532+
focusedInput: START_DATE,
533+
onDatesChange: onDatesChange,
534+
}),
535+
)
536+
537+
expect(result.current.isStartDate(new Date(2019, 3, 1, 0, 0, 0))).toBe(true)
538+
expect(result.current.isStartDate(new Date(2019, 3, 2, 0, 0, 0))).toBe(false)
539+
expect(result.current.isStartDate(new Date(2019, 3, 3, 0, 0, 0))).toBe(false)
540+
expect(result.current.isStartDate(new Date(2019, 3, 10, 0, 0, 0))).toBe(false)
541+
expect(result.current.isStartDate(new Date(2019, 2, 27, 0, 0, 0))).toBe(false)
542+
clear()
543+
})
544+
545+
546+
test('should check if date is end date', () => {
547+
const onDatesChange = jest.fn()
548+
advanceTo(new Date(2019, 3, 27, 0, 0, 0))
549+
const {result} = renderHook(() =>
550+
useDatepicker({
551+
startDate: new Date(2019, 3, 1, 0, 0, 0),
552+
endDate: new Date(2019, 3, 3, 0, 0, 0),
553+
minBookingDate: new Date(2019, 3, 1, 0, 0, 0),
554+
maxBookingDate: new Date(2019, 3, 10, 0, 0, 0),
555+
focusedInput: START_DATE,
556+
onDatesChange: onDatesChange,
557+
}),
558+
)
559+
560+
expect(result.current.isEndDate(new Date(2019, 3, 1, 0, 0, 0))).toBe(false)
561+
expect(result.current.isEndDate(new Date(2019, 3, 2, 0, 0, 0))).toBe(false)
562+
expect(result.current.isEndDate(new Date(2019, 3, 3, 0, 0, 0))).toBe(true)
563+
expect(result.current.isEndDate(new Date(2019, 3, 10, 0, 0, 0))).toBe(false)
564+
expect(result.current.isEndDate(new Date(2019, 3, 27, 0, 0, 0))).toBe(false)
565+
clear()
566+
})
567+
522568
test.each([
523569
{
524570
startDate: null,

packages/hooks/src/useDatepicker/useDatepicker.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import {
1111
isDateSelected as isDateSelectedFn,
1212
isDateBlocked as isDateBlockedFn,
1313
isFirstOrLastSelectedDate as isFirstOrLastSelectedDateFn,
14+
isEndDate as isEndDateFn,
15+
isStartDate as isStartDateFn,
1416
canSelectRange,
1517
isDateHovered as isDateHoveredFn,
1618
isInUnavailableDates,
@@ -95,6 +97,10 @@ export function useDatepicker({
9597
const isFirstOrLastSelectedDate = (date: Date) =>
9698
isFirstOrLastSelectedDateFn(date, startDate, endDate)
9799

100+
const isStartDate = (date: Date) => isStartDateFn(date, startDate)
101+
102+
const isEndDate = (date: Date) => isEndDateFn(date, endDate)
103+
98104
const isDateBlocked = (date: Date) =>
99105
isDateBlockedFn({
100106
date,
@@ -321,6 +327,8 @@ export function useDatepicker({
321327
isDateSelected,
322328
isDateHovered,
323329
isFirstOrLastSelectedDate,
330+
isStartDate,
331+
isEndDate,
324332
isDateBlocked,
325333
numberOfMonths,
326334
isDateFocused,

0 commit comments

Comments
 (0)