Skip to content

Commit bdd943b

Browse files
authored
fix: showTime.defaultValue should only works at first render (#339)
1 parent 6f1c8a7 commit bdd943b

File tree

2 files changed

+89
-89
lines changed

2 files changed

+89
-89
lines changed

src/panels/DatetimePanel/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ function DatetimePanel<DateType>(props: DatetimePanelProps<DateType>) {
135135
setTime(
136136
generateConfig,
137137
date,
138-
showTime && typeof showTime === 'object' ? showTime.defaultValue : null,
138+
!value && typeof showTime === 'object' ? showTime.defaultValue : null,
139139
),
140140
'date',
141141
);

tests/panel.spec.tsx

Lines changed: 88 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ describe('Picker.Panel', () => {
7171
expect(wrapper.find('.rc-picker-year-panel').length).toBeTruthy();
7272
});
7373

74-
[['month', 'Aug'], ['quarter', 'Q3']].forEach(([picker, cell]) => {
74+
[
75+
['month', 'Aug'],
76+
['quarter', 'Q3'],
77+
].forEach(([picker, cell]) => {
7578
it(picker, () => {
7679
const wrapper = mount(<MomentPickerPanel picker={picker as any} />);
7780
wrapper.find('.rc-picker-year-btn').simulate('click');
@@ -91,7 +94,7 @@ describe('Picker.Panel', () => {
9194
});
9295

9396
describe('time click to scroll', () => {
94-
[true, false].forEach(bool => {
97+
[true, false].forEach((bool) => {
9598
it(`spy requestAnimationFrame: ${bool}`, () => {
9699
let scrollTop = 90;
97100
const domSpy = spyElementPrototypes(HTMLElement, {
@@ -116,19 +119,9 @@ describe('Picker.Panel', () => {
116119
const wrapper = mount(<MomentPickerPanel picker="time" />);
117120

118121
// Multiple times should only one work
119-
wrapper
120-
.find('ul')
121-
.first()
122-
.find('li')
123-
.at(3)
124-
.simulate('click');
125-
126-
wrapper
127-
.find('ul')
128-
.first()
129-
.find('li')
130-
.at(11)
131-
.simulate('click');
122+
wrapper.find('ul').first().find('li').at(3).simulate('click');
123+
124+
wrapper.find('ul').first().find('li').at(11).simulate('click');
132125
jest.runAllTimers();
133126

134127
expect(requestAnimationFrameSpy).toHaveBeenCalled();
@@ -158,7 +151,7 @@ describe('Picker.Panel', () => {
158151
expect(wrapper.find('.rc-picker-header-view').text()).toEqual('Sep1990');
159152
});
160153

161-
['month', 'quarter'].forEach(picker => {
154+
['month', 'quarter'].forEach((picker) => {
162155
it(picker, () => {
163156
const wrapper = mount(
164157
<MomentPickerPanel defaultValue={getMoment('1990-09-03')} picker={picker as any} />,
@@ -215,30 +208,63 @@ describe('Picker.Panel', () => {
215208
);
216209

217210
expect(wrapper.find('.rc-picker-time-panel-column')).toHaveLength(2);
218-
expect(
219-
wrapper
220-
.find('.rc-picker-time-panel-column')
221-
.first()
222-
.find('li')
223-
.first()
224-
.text(),
225-
).toEqual('04');
211+
expect(wrapper.find('.rc-picker-time-panel-column').first().find('li').first().text()).toEqual(
212+
'04',
213+
);
226214

227215
// Click on date
228216
wrapper.selectCell(5);
229217
expect(isSame(onSelect.mock.calls[0][0], '1990-09-05 01:03:07')).toBeTruthy();
230218

231219
// Click on time
232220
onSelect.mockReset();
233-
wrapper
234-
.find('ul')
235-
.first()
236-
.find('li')
237-
.at(11)
238-
.simulate('click');
221+
wrapper.find('ul').first().find('li').at(11).simulate('click');
239222
expect(isSame(onSelect.mock.calls[0][0], '2001-01-02 11:00:00')).toBeTruthy();
240223
});
241224

225+
it('showTime.defaultValue only works at first render', () => {
226+
const onSelect = jest.fn();
227+
const wrapper = mount(
228+
<MomentPickerPanel
229+
showTime={{
230+
defaultValue: getMoment('2001-01-02 01:03:07'),
231+
}}
232+
onSelect={onSelect}
233+
/>,
234+
);
235+
236+
wrapper.selectCell(5);
237+
// use showTime.defaultValue
238+
expect(isSame(onSelect.mock.calls[0][0], '1990-09-05 01:03:07')).toBeTruthy();
239+
240+
// set hour to 10
241+
wrapper.find('ul').first().find('li').at(10).simulate('click');
242+
243+
// expect hour changed
244+
expect(isSame(onSelect.mock.calls[1][0], '1990-09-05 10:03:07')).toBeTruthy();
245+
246+
wrapper.selectCell(20);
247+
// expect using last selection time
248+
expect(isSame(onSelect.mock.calls[2][0], '1990-09-20 10:03:07')).toBeTruthy();
249+
});
250+
251+
it('datepicker has defaultValue and showTime.defaultValue ', () => {
252+
const onSelect = jest.fn();
253+
const wrapper = mount(
254+
<MomentPickerPanel
255+
value={getMoment('2001-01-02 10:10:10')}
256+
showTime={{
257+
defaultValue: getMoment('2001-01-02 09:09:09'),
258+
}}
259+
onSelect={onSelect}
260+
/>,
261+
);
262+
263+
wrapper.selectCell(5);
264+
// showTime.defaultValue not used
265+
expect(isSame(onSelect.mock.calls[0][0], '2001-01-05 10:10:10')).toBeTruthy();
266+
});
267+
242268
describe('not trigger onSelect when cell disabled', () => {
243269
it('time', () => {
244270
const onSelect = jest.fn();
@@ -247,17 +273,11 @@ describe('Picker.Panel', () => {
247273
);
248274

249275
// Disabled
250-
wrapper
251-
.find('li')
252-
.first()
253-
.simulate('click');
276+
wrapper.find('li').first().simulate('click');
254277
expect(onSelect).not.toHaveBeenCalled();
255278

256279
// Enabled
257-
wrapper
258-
.find('li')
259-
.at(1)
260-
.simulate('click');
280+
wrapper.find('li').at(1).simulate('click');
261281
expect(onSelect).toHaveBeenCalled();
262282
});
263283

@@ -267,7 +287,7 @@ describe('Picker.Panel', () => {
267287
<MomentPickerPanel
268288
picker="month"
269289
onSelect={onSelect}
270-
disabledDate={date => date.month() === 0}
290+
disabledDate={(date) => date.month() === 0}
271291
/>,
272292
);
273293

@@ -284,7 +304,7 @@ describe('Picker.Panel', () => {
284304
<MomentPickerPanel
285305
picker="year"
286306
onSelect={onSelect}
287-
disabledDate={date => date.year() === 1990}
307+
disabledDate={(date) => date.year() === 1990}
288308
/>,
289309
);
290310

@@ -302,7 +322,7 @@ describe('Picker.Panel', () => {
302322
<MomentPickerPanel
303323
mode="decade"
304324
onPanelChange={onPanelChange}
305-
disabledDate={date => date.year() === 1900}
325+
disabledDate={(date) => date.year() === 1900}
306326
/>,
307327
);
308328

@@ -337,12 +357,7 @@ describe('Picker.Panel', () => {
337357
/>,
338358
);
339359

340-
wrapper
341-
.find('.rc-picker-time-panel-column')
342-
.last()
343-
.find('li')
344-
.last()
345-
.simulate('click');
360+
wrapper.find('.rc-picker-time-panel-column').last().find('li').last().simulate('click');
346361
expect(isSame(onChange.mock.calls[0][0], '2000-01-01 12:01:02', 'second')).toBeTruthy();
347362
});
348363

@@ -474,7 +489,7 @@ describe('Picker.Panel', () => {
474489
});
475490

476491
describe('hideHeader', () => {
477-
['decade', 'year', 'month', 'quarter', 'date', 'time'].forEach(mode => {
492+
['decade', 'year', 'month', 'quarter', 'date', 'time'].forEach((mode) => {
478493
it(mode, () => {
479494
const wrapper = mount(<MomentPickerPanel mode={mode as any} hideHeader />);
480495
expect(wrapper.find('.rc-picker-header')).toHaveLength(0);
@@ -499,51 +514,41 @@ describe('Picker.Panel', () => {
499514

500515
it('monthCellRender', () => {
501516
const wrapper = mount(
502-
<MomentPickerPanel picker="month" monthCellRender={date => date.format('YYYY-MM')} />,
517+
<MomentPickerPanel picker="month" monthCellRender={(date) => date.format('YYYY-MM')} />,
503518
);
504519

505520
expect(wrapper.find('tbody').render()).toMatchSnapshot();
506521
});
507522

508523
describe('start weekday should be correct', () => {
509-
[{ locale: zhCN, startDate: '30' }, { locale: enUS, startDate: '29' }].forEach(
510-
({ locale, startDate }) => {
511-
it(locale.locale, () => {
512-
const wrapper = mount(
513-
<MomentPickerPanel defaultValue={getMoment('2020-04-02')} locale={locale} />,
514-
);
524+
[
525+
{ locale: zhCN, startDate: '30' },
526+
{ locale: enUS, startDate: '29' },
527+
].forEach(({ locale, startDate }) => {
528+
it(locale.locale, () => {
529+
const wrapper = mount(
530+
<MomentPickerPanel defaultValue={getMoment('2020-04-02')} locale={locale} />,
531+
);
515532

516-
expect(
517-
wrapper
518-
.find('td')
519-
.first()
520-
.text(),
521-
).toEqual(startDate);
522-
});
523-
},
524-
);
533+
expect(wrapper.find('td').first().text()).toEqual(startDate);
534+
});
535+
});
525536

526-
[{ locale: zhCN, startDate: '24' }, { locale: enUS, startDate: '1' }].forEach(
527-
({ locale, startDate }) => {
528-
it(`another align test of ${locale.locale}`, () => {
529-
const wrapper = mount(
530-
<MomentPickerPanel defaultValue={getMoment('2020-03-01')} locale={locale} />,
531-
);
537+
[
538+
{ locale: zhCN, startDate: '24' },
539+
{ locale: enUS, startDate: '1' },
540+
].forEach(({ locale, startDate }) => {
541+
it(`another align test of ${locale.locale}`, () => {
542+
const wrapper = mount(
543+
<MomentPickerPanel defaultValue={getMoment('2020-03-01')} locale={locale} />,
544+
);
532545

533-
expect(
534-
wrapper
535-
.find('td')
536-
.first()
537-
.text(),
538-
).toEqual(startDate);
539-
});
540-
},
541-
);
546+
expect(wrapper.find('td').first().text()).toEqual(startDate);
547+
});
548+
});
542549

543550
it('update firstDayOfWeek', () => {
544-
const defaultFirstDay = moment(enUS.locale)
545-
.localeData()
546-
.firstDayOfWeek();
551+
const defaultFirstDay = moment(enUS.locale).localeData().firstDayOfWeek();
547552
moment.updateLocale(enUS.locale, {
548553
week: {
549554
dow: 5,
@@ -555,12 +560,7 @@ describe('Picker.Panel', () => {
555560
<MomentPickerPanel defaultValue={getMoment('2020-04-02')} locale={enUS} />,
556561
);
557562

558-
expect(
559-
wrapper
560-
.find('td')
561-
.first()
562-
.text(),
563-
).toEqual('27');
563+
expect(wrapper.find('td').first().text()).toEqual('27');
564564

565565
moment.updateLocale(enUS.locale, {
566566
week: {

0 commit comments

Comments
 (0)