Skip to content

Commit 49a2d61

Browse files
committed
Merge branch 'main' of https://github.com/Hacker0x01/react-datepicker into chore/upgrade-dependencies
2 parents ac03056 + 9a8a4bd commit 49a2d61

26 files changed

+1122
-655
lines changed

.yarn/install-state.gz

10.5 KB
Binary file not shown.

docs-site/.yarn/install-state.gz

2 Bytes
Binary file not shown.
49.5 KB
Binary file not shown.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"@testing-library/react": "^16.0.0",
5555
"@types/eslint": "^8.56.10",
5656
"@types/jest": "^29.5.12",
57-
"@types/node": "20",
57+
"@types/node": "22",
5858
"@types/react": "^18.3.4",
5959
"@types/react-dom": "^18.3.0",
6060
"@typescript-eslint/eslint-plugin": "^7.18.0",

src/calendar.tsx

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import Year from "./year";
5050
import YearDropdown from "./year_dropdown";
5151

5252
import type { ClickOutsideHandler } from "./click_outside_wrapper";
53-
import type { Day } from "date-fns/types";
53+
import type { Day } from "date-fns";
5454

5555
interface YearDropdownProps
5656
extends React.ComponentPropsWithoutRef<typeof YearDropdown> {}
@@ -369,17 +369,11 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
369369
};
370370

371371
handleYearChange = (date: Date): void => {
372-
if (this.props.onYearChange) {
373-
this.props.onYearChange(date);
374-
this.setState({ isRenderAriaLiveMessage: true });
375-
}
372+
this.props.onYearChange?.(date);
373+
this.setState({ isRenderAriaLiveMessage: true });
376374
if (this.props.adjustDateOnChange) {
377-
if (this.props.onSelect) {
378-
this.props.onSelect(date);
379-
}
380-
if (this.props.setOpen) {
381-
this.props.setOpen(true);
382-
}
375+
this.props.onSelect(date);
376+
this.props.setOpen?.(true);
383377
}
384378

385379
this.props.setPreSelection && this.props.setPreSelection(date);
@@ -388,22 +382,16 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
388382
handleMonthChange = (date: Date): void => {
389383
this.handleCustomMonthChange(date);
390384
if (this.props.adjustDateOnChange) {
391-
if (this.props.onSelect) {
392-
this.props.onSelect(date);
393-
}
394-
if (this.props.setOpen) {
395-
this.props.setOpen(true);
396-
}
385+
this.props.onSelect(date);
386+
this.props.setOpen?.(true);
397387
}
398388

399389
this.props.setPreSelection && this.props.setPreSelection(date);
400390
};
401391

402392
handleCustomMonthChange = (date: Date): void => {
403-
if (this.props.onMonthChange) {
404-
this.props.onMonthChange(date);
405-
this.setState({ isRenderAriaLiveMessage: true });
406-
}
393+
this.props.onMonthChange?.(date);
394+
this.setState({ isRenderAriaLiveMessage: true });
407395
};
408396

409397
handleMonthYearChange = (date: Date): void => {

src/index.tsx

Lines changed: 16 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -260,22 +260,10 @@ export default class DatePicker extends Component<
260260
allowSameDay: false,
261261
dateFormat: "MM/dd/yyyy",
262262
dateFormatCalendar: "LLLL yyyy",
263-
onChange() {},
264263
disabled: false,
265264
disabledKeyboardNavigation: false,
266265
dropdownMode: "scroll" as const,
267-
onFocus() {},
268-
onBlur() {},
269-
onKeyDown() {},
270-
onInputClick() {},
271-
onSelect() {},
272-
onClickOutside() {},
273-
onMonthChange() {},
274-
onCalendarOpen() {},
275-
onCalendarClose() {},
276266
preventOpenOnFocus: false,
277-
onYearChange() {},
278-
onInputError() {},
279267
monthsShown: 1,
280268
readOnly: false,
281269
withPortal: false,
@@ -751,41 +739,27 @@ export default class DatePicker extends Component<
751739
const hasStartRange = startDate && !endDate;
752740
const isRangeFilled = startDate && endDate;
753741
if (noRanges) {
754-
onChange
755-
? onChange([changedDate, null], event)
756-
: DatePicker.defaultProps.onChange;
742+
onChange?.([changedDate, null], event);
757743
} else if (hasStartRange) {
758744
if (changedDate === null) {
759-
onChange
760-
? onChange([null, null], event)
761-
: DatePicker.defaultProps.onChange;
745+
onChange?.([null, null], event);
762746
} else if (isDateBefore(changedDate, startDate)) {
763747
if (swapRange) {
764-
onChange
765-
? onChange([changedDate, startDate], event)
766-
: DatePicker.defaultProps.onChange;
748+
onChange?.([changedDate, startDate], event);
767749
} else {
768-
onChange
769-
? onChange([changedDate, null], event)
770-
: DatePicker.defaultProps.onChange;
750+
onChange?.([changedDate, null], event);
771751
}
772752
} else {
773-
onChange
774-
? onChange([startDate, changedDate], event)
775-
: DatePicker.defaultProps.onChange;
753+
onChange?.([startDate, changedDate], event);
776754
}
777755
}
778756
if (isRangeFilled) {
779-
onChange
780-
? onChange([changedDate, null], event)
781-
: DatePicker.defaultProps.onChange;
757+
onChange?.([changedDate, null], event);
782758
}
783759
} else if (selectsMultiple) {
784760
if (changedDate !== null) {
785761
if (!selectedDates?.length) {
786-
onChange
787-
? onChange([changedDate], event)
788-
: DatePicker.defaultProps.onChange;
762+
onChange?.([changedDate], event);
789763
} else {
790764
const isChangedDateAlreadySelected = selectedDates.some(
791765
(selectedDate) => isSameDay(selectedDate, changedDate),
@@ -796,26 +770,19 @@ export default class DatePicker extends Component<
796770
(selectedDate) => !isSameDay(selectedDate, changedDate),
797771
);
798772

799-
onChange
800-
? onChange(nextDates, event)
801-
: DatePicker.defaultProps.onChange;
773+
onChange?.(nextDates, event);
802774
} else {
803-
onChange
804-
? onChange([...selectedDates, changedDate], event)
805-
: DatePicker.defaultProps.onChange;
775+
onChange?.([...selectedDates, changedDate], event);
806776
}
807777
}
808778
}
809779
} else {
810-
onChange
811-
? onChange(changedDate, event)
812-
: DatePicker.defaultProps.onChange;
780+
onChange?.(changedDate, event);
813781
}
814782
}
815783

816784
if (!keepInput) {
817-
const onSelect = this.props.onSelect ?? DatePicker.defaultProps.onSelect;
818-
onSelect(changedDate, event);
785+
this.props.onSelect?.(changedDate, event);
819786
this.setState({ inputValue: null });
820787
}
821788
};
@@ -876,8 +843,7 @@ export default class DatePicker extends Component<
876843
preSelection: changedDate,
877844
});
878845

879-
const onChange = this.props.onChange ?? DatePicker.defaultProps.onChange;
880-
onChange(changedDate);
846+
this.props.onChange?.(changedDate);
881847
if (this.props.shouldCloseOnSelect && !this.props.showTimeInput) {
882848
this.sendFocusBackToInput();
883849
this.setOpen(false);
@@ -913,7 +879,7 @@ export default class DatePicker extends Component<
913879
eventKey === KeyType.ArrowUp ||
914880
eventKey === KeyType.Enter
915881
) {
916-
this.onInputClick();
882+
this.onInputClick?.();
917883
}
918884
return;
919885
}
@@ -1126,9 +1092,7 @@ export default class DatePicker extends Component<
11261092
break;
11271093
}
11281094
if (!newSelection) {
1129-
if (this.props.onInputError) {
1130-
this.props.onInputError({ code: 1, msg: INPUT_ERR_1 });
1131-
}
1095+
this.props.onInputError?.({ code: 1, msg: INPUT_ERR_1 });
11321096
return;
11331097
}
11341098
event.preventDefault();
@@ -1175,11 +1139,9 @@ export default class DatePicker extends Component<
11751139

11761140
const { selectsRange, onChange } = this.props;
11771141
if (selectsRange) {
1178-
onChange
1179-
? onChange([null, null], event)
1180-
: DatePicker.defaultProps.onChange();
1142+
onChange?.([null, null], event);
11811143
} else {
1182-
onChange ? onChange(null, event) : DatePicker.defaultProps.onChange();
1144+
onChange?.(null, event);
11831145
}
11841146

11851147
this.setState({ inputValue: null });

src/test/calendar_icon.test.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import React from "react";
44
import CalendarIcon from "../calendar_icon";
55

66
import { IconParkSolidApplication } from "./helper_components/calendar_icon";
7+
import { safeQuerySelector } from "./test_utils";
78

89
describe("CalendarIcon", () => {
910
let onClickMock: jest.Mock;
@@ -38,9 +39,11 @@ describe("CalendarIcon", () => {
3839
it("should fire onClick event when the icon is clicked", () => {
3940
const { container } = render(<CalendarIcon onClick={onClickMock} />);
4041

41-
const icon = container.querySelector("svg.react-datepicker__calendar-icon");
42-
expect(icon).not.toBeNull();
43-
fireEvent.click(icon ?? new Element());
42+
const icon = safeQuerySelector(
43+
container,
44+
"svg.react-datepicker__calendar-icon",
45+
);
46+
fireEvent.click(icon);
4447

4548
expect(onClickMock).toHaveBeenCalledTimes(1);
4649
});
@@ -50,9 +53,8 @@ describe("CalendarIcon", () => {
5053
<CalendarIcon icon="fa-example-icon" onClick={onClickMock} />,
5154
);
5255

53-
const icon = container.querySelector("i.fa-example-icon");
54-
expect(icon).not.toBeNull();
55-
fireEvent.click(icon ?? new Element());
56+
const icon = safeQuerySelector(container, "i.fa-example-icon");
57+
fireEvent.click(icon);
5658

5759
expect(onClickMock).toHaveBeenCalledTimes(1);
5860
});
@@ -75,8 +77,11 @@ describe("CalendarIcon", () => {
7577
/>,
7678
);
7779

78-
const icon = container.querySelector("svg.react-datepicker__calendar-icon");
79-
fireEvent.click(icon ?? new Element());
80+
const icon = safeQuerySelector(
81+
container,
82+
"svg.react-datepicker__calendar-icon",
83+
);
84+
fireEvent.click(icon);
8085

8186
expect(onClickMock).toHaveBeenCalledTimes(1);
8287
expect(onClickCustomIcon).toHaveBeenCalledTimes(1);

0 commit comments

Comments
 (0)