From f5cb895a2a866ce27f5e2e3fa94fb0c2b7b43d83 Mon Sep 17 00:00:00 2001 From: zombiej Date: Tue, 19 May 2020 11:30:46 +0800 Subject: [PATCH 1/2] add test case --- .eslintrc.js | 6 ++---- tests/picker.spec.tsx | 10 ++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2a73143a3..0e0f78632 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,6 +4,7 @@ module.exports = { ...base, rules: { ...base.rules, + 'arrow-parens': 0, 'no-template-curly-in-string': 0, 'prefer-promise-reject-errors': 0, 'react/no-array-index-key': 0, @@ -13,9 +14,6 @@ module.exports = { 'no-confusing-arrow': 0, 'jsx-a11y/no-autofocus': 0, 'jsx-a11y/heading-has-content': 0, - 'import/no-extraneous-dependencies': [ - 'error', - { devDependencies: ['**/tests/**'] }, - ], + 'import/no-extraneous-dependencies': ['error', { devDependencies: ['**/tests/**'] }], }, }; diff --git a/tests/picker.spec.tsx b/tests/picker.spec.tsx index 9b5a481c7..ad1fa3fcc 100644 --- a/tests/picker.spec.tsx +++ b/tests/picker.spec.tsx @@ -630,4 +630,14 @@ describe('Picker.Basic', () => { const wrapper = mount(); expect(wrapper.find('input').props().id).toEqual('light'); }); + + it('dateRender', () => { + const wrapper = mount( date.format('YYYY-MM-DD')} />); + expect( + wrapper + .find('tbody td') + .last() + .text(), + ).toEqual('1990-10-06'); + }); }); From 579ed3b522c481e827543ef2d2dd900bd14f5166 Mon Sep 17 00:00:00 2001 From: zombiej Date: Tue, 19 May 2020 11:50:57 +0800 Subject: [PATCH 2/2] update test case --- src/RangePicker.tsx | 21 +++++++++++++++++++++ tests/range.spec.tsx | 23 +++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/RangePicker.tsx b/src/RangePicker.tsx index aef2d6949..5df8ebf64 100644 --- a/src/RangePicker.tsx +++ b/src/RangePicker.tsx @@ -21,6 +21,7 @@ import useRangeDisabled from './hooks/useRangeDisabled'; import getExtraFooter from './utils/getExtraFooter'; import getRanges from './utils/getRanges'; import useRangeViewDates from './hooks/useRangeViewDates'; +import { DateRender } from './panels/DatePanel/DateBody'; function reorderValues( values: RangeValue, @@ -54,6 +55,14 @@ function canValueTrigger( return false; } +export type RangeDateRender = ( + currentDate: DateType, + today: DateType, + info: { + range: 'start' | 'end'; + }, +) => React.ReactNode; + export interface RangePickerSharedProps { id?: string; value?: RangeValue; @@ -79,6 +88,7 @@ export interface RangePickerSharedProps { autoComplete?: string; /** @private Internal control of active picker. Do not use since it's private usage */ activePickerIndex?: 0 | 1; + dateRender?: RangeDateRender; } type OmitPickerProps = Omit< @@ -98,6 +108,7 @@ type OmitPickerProps = Omit< | 'pickerValue' | 'onPickerValueChange' | 'onOk' + | 'dateRender' >; type RangeShowTimeObject = Omit, 'defaultValue'> & { @@ -162,6 +173,7 @@ function InnerRangePicker(props: RangePickerProps) { defaultOpen, disabledDate, disabledTime, + dateRender, ranges, allowEmpty, allowClear, @@ -623,6 +635,14 @@ function InnerRangePicker(props: RangePickerProps) { }; } + let panelDateRender: DateRender | null = null; + if (dateRender) { + panelDateRender = (date, today) => + dateRender(date, today, { + range: mergedActivePickerIndex ? 'end' : 'start', + }); + } + return ( (props: RangePickerProps) { {...(props as any)} {...panelProps} + dateRender={panelDateRender} showTime={panelShowTime} mode={mergedModes[mergedActivePickerIndex]} generateConfig={generateConfig} diff --git a/tests/range.spec.tsx b/tests/range.spec.tsx index e72ef9c5b..b49a3572b 100644 --- a/tests/range.spec.tsx +++ b/tests/range.spec.tsx @@ -1063,4 +1063,27 @@ describe('Picker.Range', () => { .props().id, ).toEqual('bamboo'); }); + + it('dateRender', () => { + let range = 'start'; + + const wrapper = mount( + { + expect(info.range).toEqual(range); + return date.format('YYYY-MM-DD'); + }} + />, + ); + expect( + wrapper + .find('tbody td') + .last() + .text(), + ).toEqual('1990-11-10'); + + range = 'end'; + wrapper.openPicker(1); + }); });