From bcbdc09e52764fbd04360b9cb0d303509a16afc8 Mon Sep 17 00:00:00 2001 From: wanghao Date: Fri, 7 Jan 2022 14:20:42 +0800 Subject: [PATCH] fix: showTime.defaultValue should only works at first render --- src/panels/DatetimePanel/index.tsx | 2 +- tests/panel.spec.tsx | 176 ++++++++++++++--------------- 2 files changed, 89 insertions(+), 89 deletions(-) diff --git a/src/panels/DatetimePanel/index.tsx b/src/panels/DatetimePanel/index.tsx index 90efe72d0..21f4245ea 100644 --- a/src/panels/DatetimePanel/index.tsx +++ b/src/panels/DatetimePanel/index.tsx @@ -135,7 +135,7 @@ function DatetimePanel(props: DatetimePanelProps) { setTime( generateConfig, date, - showTime && typeof showTime === 'object' ? showTime.defaultValue : null, + !value && typeof showTime === 'object' ? showTime.defaultValue : null, ), 'date', ); diff --git a/tests/panel.spec.tsx b/tests/panel.spec.tsx index c5816a0de..d2c3bdf5e 100644 --- a/tests/panel.spec.tsx +++ b/tests/panel.spec.tsx @@ -71,7 +71,10 @@ describe('Picker.Panel', () => { expect(wrapper.find('.rc-picker-year-panel').length).toBeTruthy(); }); - [['month', 'Aug'], ['quarter', 'Q3']].forEach(([picker, cell]) => { + [ + ['month', 'Aug'], + ['quarter', 'Q3'], + ].forEach(([picker, cell]) => { it(picker, () => { const wrapper = mount(); wrapper.find('.rc-picker-year-btn').simulate('click'); @@ -91,7 +94,7 @@ describe('Picker.Panel', () => { }); describe('time click to scroll', () => { - [true, false].forEach(bool => { + [true, false].forEach((bool) => { it(`spy requestAnimationFrame: ${bool}`, () => { let scrollTop = 90; const domSpy = spyElementPrototypes(HTMLElement, { @@ -116,19 +119,9 @@ describe('Picker.Panel', () => { const wrapper = mount(); // Multiple times should only one work - wrapper - .find('ul') - .first() - .find('li') - .at(3) - .simulate('click'); - - wrapper - .find('ul') - .first() - .find('li') - .at(11) - .simulate('click'); + wrapper.find('ul').first().find('li').at(3).simulate('click'); + + wrapper.find('ul').first().find('li').at(11).simulate('click'); jest.runAllTimers(); expect(requestAnimationFrameSpy).toHaveBeenCalled(); @@ -158,7 +151,7 @@ describe('Picker.Panel', () => { expect(wrapper.find('.rc-picker-header-view').text()).toEqual('Sep1990'); }); - ['month', 'quarter'].forEach(picker => { + ['month', 'quarter'].forEach((picker) => { it(picker, () => { const wrapper = mount( , @@ -215,14 +208,9 @@ describe('Picker.Panel', () => { ); expect(wrapper.find('.rc-picker-time-panel-column')).toHaveLength(2); - expect( - wrapper - .find('.rc-picker-time-panel-column') - .first() - .find('li') - .first() - .text(), - ).toEqual('04'); + expect(wrapper.find('.rc-picker-time-panel-column').first().find('li').first().text()).toEqual( + '04', + ); // Click on date wrapper.selectCell(5); @@ -230,15 +218,53 @@ describe('Picker.Panel', () => { // Click on time onSelect.mockReset(); - wrapper - .find('ul') - .first() - .find('li') - .at(11) - .simulate('click'); + wrapper.find('ul').first().find('li').at(11).simulate('click'); expect(isSame(onSelect.mock.calls[0][0], '2001-01-02 11:00:00')).toBeTruthy(); }); + it('showTime.defaultValue only works at first render', () => { + const onSelect = jest.fn(); + const wrapper = mount( + , + ); + + wrapper.selectCell(5); + // use showTime.defaultValue + expect(isSame(onSelect.mock.calls[0][0], '1990-09-05 01:03:07')).toBeTruthy(); + + // set hour to 10 + wrapper.find('ul').first().find('li').at(10).simulate('click'); + + // expect hour changed + expect(isSame(onSelect.mock.calls[1][0], '1990-09-05 10:03:07')).toBeTruthy(); + + wrapper.selectCell(20); + // expect using last selection time + expect(isSame(onSelect.mock.calls[2][0], '1990-09-20 10:03:07')).toBeTruthy(); + }); + + it('datepicker has defaultValue and showTime.defaultValue ', () => { + const onSelect = jest.fn(); + const wrapper = mount( + , + ); + + wrapper.selectCell(5); + // showTime.defaultValue not used + expect(isSame(onSelect.mock.calls[0][0], '2001-01-05 10:10:10')).toBeTruthy(); + }); + describe('not trigger onSelect when cell disabled', () => { it('time', () => { const onSelect = jest.fn(); @@ -247,17 +273,11 @@ describe('Picker.Panel', () => { ); // Disabled - wrapper - .find('li') - .first() - .simulate('click'); + wrapper.find('li').first().simulate('click'); expect(onSelect).not.toHaveBeenCalled(); // Enabled - wrapper - .find('li') - .at(1) - .simulate('click'); + wrapper.find('li').at(1).simulate('click'); expect(onSelect).toHaveBeenCalled(); }); @@ -267,7 +287,7 @@ describe('Picker.Panel', () => { date.month() === 0} + disabledDate={(date) => date.month() === 0} />, ); @@ -284,7 +304,7 @@ describe('Picker.Panel', () => { date.year() === 1990} + disabledDate={(date) => date.year() === 1990} />, ); @@ -302,7 +322,7 @@ describe('Picker.Panel', () => { date.year() === 1900} + disabledDate={(date) => date.year() === 1900} />, ); @@ -337,12 +357,7 @@ describe('Picker.Panel', () => { />, ); - wrapper - .find('.rc-picker-time-panel-column') - .last() - .find('li') - .last() - .simulate('click'); + wrapper.find('.rc-picker-time-panel-column').last().find('li').last().simulate('click'); expect(isSame(onChange.mock.calls[0][0], '2000-01-01 12:01:02', 'second')).toBeTruthy(); }); @@ -474,7 +489,7 @@ describe('Picker.Panel', () => { }); describe('hideHeader', () => { - ['decade', 'year', 'month', 'quarter', 'date', 'time'].forEach(mode => { + ['decade', 'year', 'month', 'quarter', 'date', 'time'].forEach((mode) => { it(mode, () => { const wrapper = mount(); expect(wrapper.find('.rc-picker-header')).toHaveLength(0); @@ -499,51 +514,41 @@ describe('Picker.Panel', () => { it('monthCellRender', () => { const wrapper = mount( - date.format('YYYY-MM')} />, + date.format('YYYY-MM')} />, ); expect(wrapper.find('tbody').render()).toMatchSnapshot(); }); describe('start weekday should be correct', () => { - [{ locale: zhCN, startDate: '30' }, { locale: enUS, startDate: '29' }].forEach( - ({ locale, startDate }) => { - it(locale.locale, () => { - const wrapper = mount( - , - ); + [ + { locale: zhCN, startDate: '30' }, + { locale: enUS, startDate: '29' }, + ].forEach(({ locale, startDate }) => { + it(locale.locale, () => { + const wrapper = mount( + , + ); - expect( - wrapper - .find('td') - .first() - .text(), - ).toEqual(startDate); - }); - }, - ); + expect(wrapper.find('td').first().text()).toEqual(startDate); + }); + }); - [{ locale: zhCN, startDate: '24' }, { locale: enUS, startDate: '1' }].forEach( - ({ locale, startDate }) => { - it(`another align test of ${locale.locale}`, () => { - const wrapper = mount( - , - ); + [ + { locale: zhCN, startDate: '24' }, + { locale: enUS, startDate: '1' }, + ].forEach(({ locale, startDate }) => { + it(`another align test of ${locale.locale}`, () => { + const wrapper = mount( + , + ); - expect( - wrapper - .find('td') - .first() - .text(), - ).toEqual(startDate); - }); - }, - ); + expect(wrapper.find('td').first().text()).toEqual(startDate); + }); + }); it('update firstDayOfWeek', () => { - const defaultFirstDay = moment(enUS.locale) - .localeData() - .firstDayOfWeek(); + const defaultFirstDay = moment(enUS.locale).localeData().firstDayOfWeek(); moment.updateLocale(enUS.locale, { week: { dow: 5, @@ -555,12 +560,7 @@ describe('Picker.Panel', () => { , ); - expect( - wrapper - .find('td') - .first() - .text(), - ).toEqual('27'); + expect(wrapper.find('td').first().text()).toEqual('27'); moment.updateLocale(enUS.locale, { week: {