Skip to content

Commit e54a234

Browse files
authored
fix: RangePicker should reorder when start is after end (#31)
* should reorder when range exchange * add test case
1 parent e62542d commit e54a234

File tree

2 files changed

+52
-10
lines changed

2 files changed

+52
-10
lines changed

src/RangePicker.tsx

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -382,25 +382,31 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
382382
const startValue = getValue(values, 0);
383383
let endValue = getValue(values, 1);
384384

385-
// Clean up end date when start date is after end date
386385
if (
387386
startValue &&
388387
endValue &&
389-
!isSameDate(generateConfig, startValue, endValue) &&
390388
generateConfig.isAfter(startValue, endValue)
391389
) {
392-
values = [startValue, null];
393-
endValue = null;
390+
if (!isSameDate(generateConfig, startValue, endValue)) {
391+
// Clean up end date when start date is after end date
392+
values = [startValue, null];
393+
endValue = null;
394+
} else {
395+
// Reorder when in same date
396+
values = [endValue, startValue];
397+
}
394398
}
395399

396400
setSelectedValue(values);
397401

398-
const startStr = startValue
399-
? generateConfig.locale.format(locale.locale, startValue, formatList[0])
400-
: '';
401-
const endStr = endValue
402-
? generateConfig.locale.format(locale.locale, endValue, formatList[0])
403-
: '';
402+
const startStr =
403+
values && values[0]
404+
? generateConfig.locale.format(locale.locale, values[0], formatList[0])
405+
: '';
406+
const endStr =
407+
values && values[1]
408+
? generateConfig.locale.format(locale.locale, values[1], formatList[0])
409+
: '';
404410

405411
if (onCalendarChange) {
406412
onCalendarChange(values, [startStr, endStr]);

tests/range.spec.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,4 +1045,40 @@ describe('Picker.Range', () => {
10451045
expect(wrapper.find('DatePanel').length).toBeFalsy();
10461046
expect(wrapper.find('MonthPanel').length).toBeTruthy();
10471047
});
1048+
1049+
it('datetime should reorder in onChange if start is after end in same date', () => {
1050+
const onChange = jest.fn();
1051+
1052+
const wrapper = mount(<MomentRangePicker onChange={onChange} showTime />);
1053+
wrapper.openPicker();
1054+
wrapper.selectCell(15);
1055+
wrapper
1056+
.find('ul')
1057+
.first()
1058+
.find('li')
1059+
.last()
1060+
.simulate('click');
1061+
wrapper.find('.rc-picker-ok button').simulate('click');
1062+
1063+
wrapper.selectCell(15);
1064+
wrapper
1065+
.find('ul')
1066+
.first()
1067+
.find('li')
1068+
.first()
1069+
.simulate('click');
1070+
wrapper.find('.rc-picker-ok button').simulate('click');
1071+
1072+
expect(onChange).toHaveBeenCalledWith(expect.anything(), [
1073+
'1990-09-15 00:00:00',
1074+
'1990-09-15 23:00:00',
1075+
]);
1076+
1077+
expect(
1078+
isSame(onChange.mock.calls[0][0][0], '1990-09-15 00:00:00'),
1079+
).toBeTruthy();
1080+
expect(
1081+
isSame(onChange.mock.calls[0][0][1], '1990-09-15 23:00:00'),
1082+
).toBeTruthy();
1083+
});
10481084
});

0 commit comments

Comments
 (0)