Skip to content

Commit 8fdc4fb

Browse files
Merge pull request #4932 from yuki0410-dev/bugfix/4922
fix DatePickerProps
2 parents 062d41e + ee69d7b commit 8fdc4fb

File tree

1 file changed

+43
-24
lines changed

1 file changed

+43
-24
lines changed

src/index.tsx

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export type DatePickerProps = Omit<
126126
| "selectsMultiple"
127127
| "dropdownMode"
128128
> &
129-
Pick<AdditionalProps, "excludeScrollbar"> &
129+
Partial<Pick<AdditionalProps, "excludeScrollbar">> &
130130
Pick<CalendarIconProps, "icon"> &
131131
Omit<PortalProps, "children" | "portalId"> &
132132
Omit<
@@ -197,7 +197,7 @@ export type DatePickerProps = Omit<
197197
onChangeRaw?: (
198198
event?: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,
199199
) => void;
200-
onSelect: (
200+
onSelect?: (
201201
date: Date | null,
202202
event?:
203203
| React.MouseEvent<HTMLElement, MouseEvent>
@@ -207,7 +207,7 @@ export type DatePickerProps = Omit<
207207
| {
208208
selectsRange?: never;
209209
selectsMultiple?: never;
210-
onChange: (
210+
onChange?: (
211211
date: Date | null,
212212
event?:
213213
| React.MouseEvent<HTMLElement>
@@ -217,7 +217,7 @@ export type DatePickerProps = Omit<
217217
| {
218218
selectsRange: true;
219219
selectsMultiple?: never;
220-
onChange: (
220+
onChange?: (
221221
date: [Date | null, Date | null],
222222
event?:
223223
| React.MouseEvent<HTMLElement>
@@ -227,7 +227,7 @@ export type DatePickerProps = Omit<
227227
| {
228228
selectsRange?: never;
229229
selectsMultiple: true;
230-
onChange: (
230+
onChange?: (
231231
date: Date[] | null,
232232
event?:
233233
| React.MouseEvent<HTMLElement>
@@ -752,27 +752,41 @@ export default class DatePicker extends Component<
752752
const hasStartRange = startDate && !endDate;
753753
const isRangeFilled = startDate && endDate;
754754
if (noRanges) {
755-
onChange([changedDate, null], event);
755+
onChange
756+
? onChange([changedDate, null], event)
757+
: DatePicker.defaultProps.onChange;
756758
} else if (hasStartRange) {
757759
if (changedDate === null) {
758-
onChange([null, null], event);
760+
onChange
761+
? onChange([null, null], event)
762+
: DatePicker.defaultProps.onChange;
759763
} else if (isDateBefore(changedDate, startDate)) {
760764
if (swapRange) {
761-
onChange([changedDate, startDate], event);
765+
onChange
766+
? onChange([changedDate, startDate], event)
767+
: DatePicker.defaultProps.onChange;
762768
} else {
763-
onChange([changedDate, null], event);
769+
onChange
770+
? onChange([changedDate, null], event)
771+
: DatePicker.defaultProps.onChange;
764772
}
765773
} else {
766-
onChange([startDate, changedDate], event);
774+
onChange
775+
? onChange([startDate, changedDate], event)
776+
: DatePicker.defaultProps.onChange;
767777
}
768778
}
769779
if (isRangeFilled) {
770-
onChange([changedDate, null], event);
780+
onChange
781+
? onChange([changedDate, null], event)
782+
: DatePicker.defaultProps.onChange;
771783
}
772784
} else if (selectsMultiple) {
773785
if (changedDate !== null) {
774786
if (!selectedDates?.length) {
775-
onChange([changedDate], event);
787+
onChange
788+
? onChange([changedDate], event)
789+
: DatePicker.defaultProps.onChange;
776790
} else {
777791
const isChangedDateAlreadySelected = selectedDates.some(
778792
(selectedDate) => isSameDay(selectedDate, changedDate),
@@ -783,19 +797,26 @@ export default class DatePicker extends Component<
783797
(selectedDate) => !isSameDay(selectedDate, changedDate),
784798
);
785799

786-
onChange(nextDates, event);
800+
onChange
801+
? onChange(nextDates, event)
802+
: DatePicker.defaultProps.onChange;
787803
} else {
788-
onChange([...selectedDates, changedDate], event);
804+
onChange
805+
? onChange([...selectedDates, changedDate], event)
806+
: DatePicker.defaultProps.onChange;
789807
}
790808
}
791809
}
792810
} else {
793-
onChange(changedDate, event);
811+
onChange
812+
? onChange(changedDate, event)
813+
: DatePicker.defaultProps.onChange;
794814
}
795815
}
796816

797817
if (!keepInput) {
798-
this.props.onSelect(changedDate, event);
818+
const onSelect = this.props.onSelect ?? DatePicker.defaultProps.onSelect;
819+
onSelect(changedDate, event);
799820
this.setState({ inputValue: null });
800821
}
801822
};
@@ -856,7 +877,8 @@ export default class DatePicker extends Component<
856877
preSelection: changedDate,
857878
});
858879

859-
this.props.onChange(changedDate);
880+
const onChange = this.props.onChange ?? DatePicker.defaultProps.onChange;
881+
onChange(changedDate);
860882
if (this.props.shouldCloseOnSelect && !this.props.showTimeInput) {
861883
this.sendFocusBackToInput();
862884
this.setOpen(false);
@@ -1154,16 +1176,13 @@ export default class DatePicker extends Component<
11541176

11551177
const { selectsRange, onChange } = this.props;
11561178
if (selectsRange) {
1157-
onChange([null, null], event);
1179+
onChange
1180+
? onChange([null, null], event)
1181+
: DatePicker.defaultProps.onChange();
11581182
} else {
1159-
onChange(null, event);
1183+
onChange ? onChange(null, event) : DatePicker.defaultProps.onChange();
11601184
}
11611185

1162-
if (this.props.selectsRange) {
1163-
this.props.onChange([null, null], event);
1164-
} else {
1165-
this.props.onChange(null, event);
1166-
}
11671186
this.setState({ inputValue: null });
11681187
};
11691188

0 commit comments

Comments
 (0)