Skip to content

Commit bd96283

Browse files
authored
feat: RangePicker dateRender support additional info (#74)
* add test case * update test case
1 parent 9d94a4d commit bd96283

File tree

4 files changed

+56
-4
lines changed

4 files changed

+56
-4
lines changed

.eslintrc.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module.exports = {
44
...base,
55
rules: {
66
...base.rules,
7+
'arrow-parens': 0,
78
'no-template-curly-in-string': 0,
89
'prefer-promise-reject-errors': 0,
910
'react/no-array-index-key': 0,
@@ -13,9 +14,6 @@ module.exports = {
1314
'no-confusing-arrow': 0,
1415
'jsx-a11y/no-autofocus': 0,
1516
'jsx-a11y/heading-has-content': 0,
16-
'import/no-extraneous-dependencies': [
17-
'error',
18-
{ devDependencies: ['**/tests/**'] },
19-
],
17+
'import/no-extraneous-dependencies': ['error', { devDependencies: ['**/tests/**'] }],
2018
},
2119
};

src/RangePicker.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import useRangeDisabled from './hooks/useRangeDisabled';
2121
import getExtraFooter from './utils/getExtraFooter';
2222
import getRanges from './utils/getRanges';
2323
import useRangeViewDates from './hooks/useRangeViewDates';
24+
import { DateRender } from './panels/DatePanel/DateBody';
2425

2526
function reorderValues<DateType>(
2627
values: RangeValue<DateType>,
@@ -54,6 +55,14 @@ function canValueTrigger<DateType>(
5455
return false;
5556
}
5657

58+
export type RangeDateRender<DateType> = (
59+
currentDate: DateType,
60+
today: DateType,
61+
info: {
62+
range: 'start' | 'end';
63+
},
64+
) => React.ReactNode;
65+
5766
export interface RangePickerSharedProps<DateType> {
5867
id?: string;
5968
value?: RangeValue<DateType>;
@@ -79,6 +88,7 @@ export interface RangePickerSharedProps<DateType> {
7988
autoComplete?: string;
8089
/** @private Internal control of active picker. Do not use since it's private usage */
8190
activePickerIndex?: 0 | 1;
91+
dateRender?: RangeDateRender<DateType>;
8292
}
8393

8494
type OmitPickerProps<Props> = Omit<
@@ -98,6 +108,7 @@ type OmitPickerProps<Props> = Omit<
98108
| 'pickerValue'
99109
| 'onPickerValueChange'
100110
| 'onOk'
111+
| 'dateRender'
101112
>;
102113

103114
type RangeShowTimeObject<DateType> = Omit<SharedTimeProps<DateType>, 'defaultValue'> & {
@@ -162,6 +173,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
162173
defaultOpen,
163174
disabledDate,
164175
disabledTime,
176+
dateRender,
165177
ranges,
166178
allowEmpty,
167179
allowClear,
@@ -623,6 +635,14 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
623635
};
624636
}
625637

638+
let panelDateRender: DateRender<DateType> | null = null;
639+
if (dateRender) {
640+
panelDateRender = (date, today) =>
641+
dateRender(date, today, {
642+
range: mergedActivePickerIndex ? 'end' : 'start',
643+
});
644+
}
645+
626646
return (
627647
<RangeContext.Provider
628648
value={{
@@ -635,6 +655,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
635655
<PickerPanel<DateType>
636656
{...(props as any)}
637657
{...panelProps}
658+
dateRender={panelDateRender}
638659
showTime={panelShowTime}
639660
mode={mergedModes[mergedActivePickerIndex]}
640661
generateConfig={generateConfig}

tests/picker.spec.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,4 +630,14 @@ describe('Picker.Basic', () => {
630630
const wrapper = mount(<MomentPicker id="light" />);
631631
expect(wrapper.find('input').props().id).toEqual('light');
632632
});
633+
634+
it('dateRender', () => {
635+
const wrapper = mount(<MomentPicker open dateRender={date => date.format('YYYY-MM-DD')} />);
636+
expect(
637+
wrapper
638+
.find('tbody td')
639+
.last()
640+
.text(),
641+
).toEqual('1990-10-06');
642+
});
633643
});

tests/range.spec.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,4 +1063,27 @@ describe('Picker.Range', () => {
10631063
.props().id,
10641064
).toEqual('bamboo');
10651065
});
1066+
1067+
it('dateRender', () => {
1068+
let range = 'start';
1069+
1070+
const wrapper = mount(
1071+
<MomentRangePicker
1072+
open
1073+
dateRender={(date, _, info) => {
1074+
expect(info.range).toEqual(range);
1075+
return date.format('YYYY-MM-DD');
1076+
}}
1077+
/>,
1078+
);
1079+
expect(
1080+
wrapper
1081+
.find('tbody td')
1082+
.last()
1083+
.text(),
1084+
).toEqual('1990-11-10');
1085+
1086+
range = 'end';
1087+
wrapper.openPicker(1);
1088+
});
10661089
});

0 commit comments

Comments
 (0)