Skip to content

Commit ca12901

Browse files
authored
fix: first formats work (#84)
* fix: Format logic * add test case * update test case
1 parent 27ba564 commit ca12901

File tree

5 files changed

+87
-11
lines changed

5 files changed

+87
-11
lines changed

src/Picker.tsx

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

215215
// ============================= Text ==============================
216-
const valueTexts = useValueTexts(selectedValue, {
216+
const [valueTexts, firstValueText] = useValueTexts(selectedValue, {
217217
formatList,
218218
generateConfig,
219219
locale,
@@ -316,7 +316,7 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
316316

317317
if (!valueTexts.length || valueTexts[0] === '') {
318318
triggerTextChange('');
319-
} else if (!valueTexts.includes(text)) {
319+
} else if (firstValueText !== text) {
320320
resetText();
321321
}
322322
}

src/RangePicker.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -472,9 +472,15 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
472472
locale,
473473
};
474474

475-
const startValueTexts = useValueTexts<DateType>(getValue(selectedValue, 0), sharedTextHooksProps);
475+
const [startValueTexts, firstStartValueText] = useValueTexts<DateType>(
476+
getValue(selectedValue, 0),
477+
sharedTextHooksProps,
478+
);
476479

477-
const endValueTexts = useValueTexts<DateType>(getValue(selectedValue, 1), sharedTextHooksProps);
480+
const [endValueTexts, firstEndValueText] = useValueTexts<DateType>(
481+
getValue(selectedValue, 1),
482+
sharedTextHooksProps,
483+
);
478484

479485
const onTextChange = (newText: string, index: 0 | 1) => {
480486
const inputDate = generateConfig.locale.parse(locale.locale, newText, formatList);
@@ -552,12 +558,12 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
552558

553559
if (!startValueTexts.length || startValueTexts[0] === '') {
554560
triggerStartTextChange('');
555-
} else if (!startValueTexts.includes(startText)) {
561+
} else if (firstStartValueText !== startText) {
556562
resetStartText();
557563
}
558564
if (!endValueTexts.length || endValueTexts[0] === '') {
559565
triggerEndTextChange('');
560-
} else if (!endValueTexts.includes(endText)) {
566+
} else if (firstEndValueText !== endText) {
561567
resetEndText();
562568
}
563569
}

src/hooks/useValueTexts.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,27 @@ export default function useValueTexts<DateType>(
1313
value: DateType | null,
1414
{ formatList, generateConfig, locale }: ValueTextConfig<DateType>,
1515
) {
16-
return useMemo<string[]>(
16+
return useMemo<[string[], string]>(
1717
() => {
1818
if (!value) {
19-
return [''];
19+
return [[''], ''];
2020
}
21-
return formatList.map(subFormat =>
22-
generateConfig.locale.format(locale.locale, value, subFormat),
23-
);
21+
22+
// We will convert data format back to first format
23+
let firstValueText: string = '';
24+
const fullValueTexts: string[] = [];
25+
26+
for (let i = 0; i < formatList.length; i += 1) {
27+
const format = formatList[i];
28+
const formatStr = generateConfig.locale.format(locale.locale, value, format);
29+
fullValueTexts.push(formatStr);
30+
31+
if (i === 0) {
32+
firstValueText = formatStr;
33+
}
34+
}
35+
36+
return [fullValueTexts, firstValueText];
2437
},
2538
[value, formatList],
2639
(prev, next) => prev[0] !== next[0] || !shallowEqual(prev[1], next[1]),

tests/picker.spec.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,4 +640,16 @@ describe('Picker.Basic', () => {
640640
.text(),
641641
).toEqual('1990-10-06');
642642
});
643+
644+
it('format', () => {
645+
const wrapper = mount(<MomentPicker format={['YYYYMMDD', 'YYYY-MM-DD']} />);
646+
wrapper.openPicker();
647+
wrapper.find('input').simulate('change', {
648+
target: {
649+
value: '2000-01-01',
650+
},
651+
});
652+
wrapper.closePicker();
653+
expect(wrapper.find('input').prop('value')).toEqual('20000101');
654+
});
643655
});

tests/range.spec.tsx

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,4 +1155,49 @@ describe('Picker.Range', () => {
11551155
wrapper.openPicker(1);
11561156
expect(wrapper.findCell('15').hasClass('rc-picker-cell-disabled')).toBeFalsy();
11571157
});
1158+
1159+
it('format', () => {
1160+
const wrapper = mount(
1161+
<MomentRangePicker
1162+
format={['YYYYMMDD', 'YYYY-MM-DD']}
1163+
defaultValue={[getMoment('2000-12-15'), getMoment('2021-02-03')]}
1164+
/>,
1165+
);
1166+
1167+
// Start date
1168+
wrapper.openPicker();
1169+
wrapper
1170+
.find('input')
1171+
.first()
1172+
.simulate('change', {
1173+
target: {
1174+
value: '1989-09-03',
1175+
},
1176+
});
1177+
wrapper.closePicker();
1178+
expect(
1179+
wrapper
1180+
.find('input')
1181+
.first()
1182+
.prop('value'),
1183+
).toEqual('19890903');
1184+
1185+
// end date
1186+
wrapper.openPicker(1);
1187+
wrapper
1188+
.find('input')
1189+
.last()
1190+
.simulate('change', {
1191+
target: {
1192+
value: '1990-11-28',
1193+
},
1194+
});
1195+
wrapper.closePicker(1);
1196+
expect(
1197+
wrapper
1198+
.find('input')
1199+
.last()
1200+
.prop('value'),
1201+
).toEqual('19901128');
1202+
});
11581203
});

0 commit comments

Comments
 (0)