Skip to content

Commit f90a2f9

Browse files
committed
Fix sync text logic
1 parent 7b187b8 commit f90a2f9

File tree

4 files changed

+53
-21
lines changed

4 files changed

+53
-21
lines changed

src/Picker.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,12 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
213213
}
214214
};
215215

216-
const triggerOpen = (newOpen: boolean) => {
216+
const triggerOpen = (
217+
newOpen: boolean,
218+
preventChangeEvent: boolean = false,
219+
) => {
217220
triggerInnerOpen(newOpen);
218-
if (!newOpen) {
221+
if (!newOpen && !preventChangeEvent) {
219222
triggerChange(selectedValue);
220223
}
221224
};
@@ -235,7 +238,7 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
235238
locale,
236239
});
237240

238-
const [text, triggerTextChange] = useTextValueMapping({
241+
const [text, triggerTextChange, resetText] = useTextValueMapping({
239242
valueTexts,
240243
onTextChange: newText => {
241244
const inputDate = generateConfig.locale.parse(
@@ -264,10 +267,13 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
264267
),
265268
onSubmit: () => {
266269
triggerChange(selectedValue);
270+
triggerOpen(false, true);
271+
resetText();
267272
},
268273
onCancel: () => {
269-
triggerChange(mergedValue);
274+
triggerOpen(false, true);
270275
setSelectedValue(mergedValue);
276+
resetText();
271277
},
272278
onFocus,
273279
onBlur,

src/RangePicker.tsx

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,6 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
252252
(!isEqual(generateConfig, getIndexValue(mergedValue, 0), startValue) ||
253253
!isEqual(generateConfig, getIndexValue(mergedValue, 1), endValue))
254254
) {
255-
console.warn('trigger change!!!!');
256255
onChange(values, [
257256
startValue
258257
? generateConfig.locale.format(
@@ -268,13 +267,19 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
268267
}
269268
};
270269

271-
const triggerOpen = (newOpen: boolean, index: 0 | 1) => {
270+
const triggerOpen = (
271+
newOpen: boolean,
272+
index: 0 | 1,
273+
preventChangeEvent: boolean = false,
274+
) => {
272275
if (newOpen) {
273276
setActivePickerIndex(index);
274277
triggerInnerOpen(newOpen);
275278
} else if (activePickerIndex === index) {
276279
triggerInnerOpen(newOpen);
277-
triggerChange(selectedValue);
280+
if (!preventChangeEvent) {
281+
triggerChange(selectedValue);
282+
}
278283
}
279284
};
280285

@@ -314,26 +319,25 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
314319
}
315320
};
316321

317-
const [startText, triggerStartTextChange] = useTextValueMapping<DateType>({
322+
const [
323+
startText,
324+
triggerStartTextChange,
325+
resetStartText,
326+
] = useTextValueMapping<DateType>({
318327
valueTexts: startValueTexts,
319328
onTextChange: newText => onTextChange(newText, 0),
320329
});
321330

322-
const [endText, triggerEndTextChange] = useTextValueMapping<DateType>({
331+
const [endText, triggerEndTextChange, resetEndText] = useTextValueMapping<
332+
DateType
333+
>({
323334
valueTexts: endValueTexts,
324335
onTextChange: newText => onTextChange(newText, 1),
325336
});
326337

327338
// ============================= Input =============================
328339
const sharedInputHookProps = {
329340
forwardKeyDown,
330-
onSubmit: () => {
331-
triggerChange(selectedValue);
332-
},
333-
onCancel: () => {
334-
triggerChange(mergedValue);
335-
setSelectedValue(mergedValue);
336-
},
337341
onBlur,
338342
};
339343

@@ -362,6 +366,16 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
362366
passOnFocus(e);
363367
},
364368
triggerOpen: newOpen => triggerOpen(newOpen, 0),
369+
onSubmit: () => {
370+
triggerChange(selectedValue);
371+
triggerOpen(false, 0, true);
372+
resetStartText();
373+
},
374+
onCancel: () => {
375+
triggerOpen(false, 0, true);
376+
setSelectedValue(mergedValue);
377+
resetStartText();
378+
},
365379
});
366380

367381
const [
@@ -383,6 +397,16 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
383397
passOnFocus(e);
384398
},
385399
triggerOpen: newOpen => triggerOpen(newOpen, 1),
400+
onSubmit: () => {
401+
triggerChange(selectedValue);
402+
triggerOpen(false, 1, true);
403+
resetEndText();
404+
},
405+
onCancel: () => {
406+
triggerOpen(false, 1, true);
407+
setSelectedValue(mergedValue);
408+
resetEndText();
409+
},
386410
});
387411

388412
// ============================= Sync ==============================

src/hooks/usePickerInput.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ export default function usePickerInput({
4545
triggerOpen(true);
4646
} else {
4747
onSubmit();
48-
triggerOpen(false);
4948
setTyping(true);
5049
}
5150
return;
@@ -65,7 +64,6 @@ export default function usePickerInput({
6564
}
6665

6766
case KeyCode.ESC: {
68-
triggerOpen(false);
6967
setTyping(true);
7068
onCancel();
7169
return;

src/hooks/useTextValueMapping.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export default function useTextValueMapping<ValueType>({
77
/** Must useMemo, to assume that `valueTexts` only match on the first change */
88
valueTexts: string[];
99
onTextChange: (text: string) => void;
10-
}): [string, React.ChangeEventHandler<HTMLInputElement>] {
10+
}): [string, React.ChangeEventHandler<HTMLInputElement>, () => void] {
1111
const [text, setInnerText] = React.useState('');
1212

1313
function triggerTextChange({
@@ -17,11 +17,15 @@ export default function useTextValueMapping<ValueType>({
1717
onTextChange(value);
1818
}
1919

20+
function resetText() {
21+
setInnerText(valueTexts[0]);
22+
}
23+
2024
React.useEffect(() => {
2125
if (valueTexts.every(valText => valText !== text)) {
22-
setInnerText(valueTexts[0]);
26+
resetText();
2327
}
2428
}, [valueTexts.join('||')]);
2529

26-
return [text, triggerTextChange];
30+
return [text, triggerTextChange, resetText];
2731
}

0 commit comments

Comments
 (0)