Skip to content

Commit 08a2e63

Browse files
committed
fix: avoid submitting unconfirmed range values on blur
1 parent 738bcac commit 08a2e63

2 files changed

Lines changed: 32 additions & 4 deletions

File tree

src/PickerInput/RangePicker.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ export type RangeValueType<DateType> = [
5656
/** Used for change event, it should always be not undefined */
5757
export type NoUndefinedRangeValueType<DateType> = [start: DateType | null, end: DateType | null];
5858

59-
export interface BaseRangePickerProps<DateType extends object>
60-
extends Omit<SharedPickerProps<DateType>, 'showTime' | 'id'> {
59+
export interface BaseRangePickerProps<DateType extends object> extends Omit<
60+
SharedPickerProps<DateType>,
61+
'showTime' | 'id'
62+
> {
6163
// Structure
6264
id?: SelectorIdType;
6365

@@ -132,7 +134,8 @@ export interface BaseRangePickerProps<DateType extends object>
132134
}
133135

134136
export interface RangePickerProps<DateType extends object>
135-
extends BaseRangePickerProps<DateType>,
137+
extends
138+
BaseRangePickerProps<DateType>,
136139
Omit<RangeTimeProps<DateType>, 'format' | 'defaultValue' | 'defaultOpenValue'> {}
137140

138141
function getActiveRange(activeIndex: number) {
@@ -666,7 +669,9 @@ function RangePicker<DateType extends object = any>(
666669
return;
667670
}
668671

669-
lastOperation('input');
672+
if (!needConfirm) {
673+
lastOperation('input');
674+
}
670675

671676
triggerOpen(true, {
672677
inherit: true,

tests/range.spec.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,29 @@ describe('Picker.Range', () => {
895895
expect(document.querySelector('input').value).toEqual('');
896896
});
897897

898+
it('should not submit unconfirmed values on blur when allowEmpty lets fields switch', () => {
899+
const onChange = jest.fn();
900+
const { container } = render(<DayRangePicker showTime allowEmpty onChange={onChange} />);
901+
902+
openPicker(container, 0);
903+
selectCell(11);
904+
905+
openPicker(container, 1);
906+
openPicker(container, 0);
907+
908+
fireEvent.mouseDown(document.body);
909+
container.querySelectorAll('input')[0].blur();
910+
911+
for (let i = 0; i < 5; i += 1) {
912+
act(() => {
913+
jest.runAllTimers();
914+
});
915+
}
916+
917+
expect(onChange).not.toHaveBeenCalled();
918+
matchValues(container, '', '');
919+
});
920+
898921
describe('viewDate', () => {
899922
function matchTitle(title: string) {
900923
expect(document.querySelector('.rc-picker-header-view').textContent).toEqual(title);

0 commit comments

Comments
 (0)