Skip to content

Commit 5789aed

Browse files
committed
fix: RangePicker showTime defaultValue should work
1 parent 615ca49 commit 5789aed

File tree

6 files changed

+56
-3
lines changed

6 files changed

+56
-3
lines changed

src/RangePicker.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { toArray } from './utils/miscUtil';
1515
import RangeContext from './RangeContext';
1616
import { isSameDate } from './utils/dateUtil';
1717
import { getDefaultFormat } from './utils/uiUtil';
18+
import { SharedTimeProps } from './panels/TimePanel';
1819

1920
type RangeValue<DateType> = [DateType | null, DateType | null] | null;
2021

@@ -66,6 +67,7 @@ type OmitPickerProps<Props> = Omit<
6667
| 'placeholder'
6768
| 'disabledTime'
6869
| 'showToday'
70+
| 'showTime'
6971
>;
7072

7173
export interface RangePickerBaseProps<DateType>
@@ -74,7 +76,13 @@ export interface RangePickerBaseProps<DateType>
7476

7577
export interface RangePickerDateProps<DateType>
7678
extends RangePickerSharedProps<DateType>,
77-
OmitPickerProps<PickerDateProps<DateType>> {}
79+
OmitPickerProps<PickerDateProps<DateType>> {
80+
showTime?:
81+
| boolean
82+
| (Omit<SharedTimeProps<DateType>, 'defaultValue'> & {
83+
defaultValue?: DateType[];
84+
});
85+
}
7886

7987
export interface RangePickerTimeProps<DateType>
8088
extends RangePickerSharedProps<DateType>,
@@ -133,6 +141,16 @@ function InternalRangePicker<DateType>(
133141
getDefaultFormat(format, picker, showTime, use12Hours),
134142
);
135143

144+
const [startShowTime, endShowTime] = React.useMemo(() => {
145+
if (showTime && typeof showTime === 'object' && showTime.defaultValue) {
146+
return [
147+
{ ...showTime, defaultValue: showTime.defaultValue[0] },
148+
{ ...showTime, defaultValue: showTime.defaultValue[1] },
149+
];
150+
}
151+
return [showTime, showTime];
152+
}, [showTime]);
153+
136154
const mergedSelectable = React.useMemo<
137155
[boolean | undefined, boolean | undefined]
138156
>(() => [selectable && selectable[0], selectable && selectable[1]], [
@@ -312,7 +330,7 @@ function InternalRangePicker<DateType>(
312330
value={value1}
313331
placeholder={placeholder && placeholder[0]}
314332
defaultPickerValue={defaultPickerValue && defaultPickerValue[0]}
315-
{...{ disabledTime: disabledStartTime }} // Fix ts define
333+
{...{ disabledTime: disabledStartTime, showTime: startShowTime }} // Fix ts define
316334
disabled={disabled || mergedSelectable[0] === false}
317335
disabledDate={disabledStartDate}
318336
onChange={date => {
@@ -329,7 +347,7 @@ function InternalRangePicker<DateType>(
329347
value={value2}
330348
placeholder={placeholder && placeholder[1]}
331349
defaultPickerValue={defaultPickerValue && defaultPickerValue[1]}
332-
{...{ disabledTime: disabledEndTime }} // Fix ts define
350+
{...{ disabledTime: disabledEndTime, showTime: endShowTime }} // Fix ts define
333351
disabled={disabled || mergedSelectable[1] === false}
334352
disabledDate={disabledEndDate}
335353
onChange={date => {

src/panels/DatePanel/DateBody.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ function DateBody<DateType>({
8989
row.push(
9090
<td
9191
key={`${x}-${y}`}
92+
title={generateConfig.locale.format(
93+
locale.locale,
94+
currentDate,
95+
'YYYY-MM-DD',
96+
)}
9297
onClick={() => {
9398
if (disabled) {
9499
return;

src/panels/MonthPanel/MonthBody.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ function MonthBody<DateType>({
5555
row.push(
5656
<td
5757
key={j}
58+
title={generateConfig.locale.format(
59+
locale.locale,
60+
monthDate,
61+
'YYYY-MM',
62+
)}
5863
className={classNames(monthPrefixCls, {
5964
[`${monthPrefixCls}-disabled`]: disabled,
6065
[`${monthPrefixCls}-in-view`]: true,

src/panels/YearPanel/YearBody.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import * as React from 'react';
22
import classNames from 'classnames';
33
import { GenerateConfig } from '../../generate';
44
import { YEAR_DECADE_COUNT } from '.';
5+
import { Locale } from '../../interface';
56

67
export const YEAR_COL_COUNT = 3;
78
const YEAR_ROW_COUNT = 4;
89

910
export interface YearBodyProps<DateType> {
1011
prefixCls: string;
12+
locale: Locale;
1113
generateConfig: GenerateConfig<DateType>;
1214
viewDate: DateType;
1315
disabledDate?: (date: DateType) => boolean;
@@ -17,6 +19,7 @@ export interface YearBodyProps<DateType> {
1719
function YearBody<DateType>({
1820
prefixCls,
1921
viewDate,
22+
locale,
2023
generateConfig,
2124
disabledDate,
2225
onSelect,
@@ -46,6 +49,7 @@ function YearBody<DateType>({
4649
row.push(
4750
<td
4851
key={j}
52+
title={generateConfig.locale.format(locale.locale, yearDate, 'YYYY')}
4953
className={classNames(yearPrefixCls, {
5054
[`${yearPrefixCls}-disabled`]: disabled,
5155
[`${yearPrefixCls}-in-view`]:

tests/__snapshots__/picker.spec.tsx.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ exports[`Basic icon 1`] = `
66
>
77
<input
88
readonly=""
9+
size="12"
910
value="1990-09-03"
1011
/>
1112
<span

tests/range.spec.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,5 +426,25 @@ describe('Range', () => {
426426
ref.current!.rangePickerRef.current!.blur();
427427
expect(blurred).toBeTruthy();
428428
});
429+
430+
it('not crash with showTime defaultValue', () => {
431+
const wrapper = mount(
432+
<MomentRangePicker
433+
showTime={{
434+
defaultValue: [getMoment('01:02:03'), getMoment('05:06:07')],
435+
}}
436+
/>,
437+
);
438+
439+
wrapper.openPicker();
440+
wrapper.selectCell(13);
441+
wrapper.closePicker();
442+
443+
wrapper.openPicker(1);
444+
wrapper.selectCell(23, 1);
445+
wrapper.closePicker(1);
446+
447+
matchValues(wrapper, '1990-09-13 01:02:03', '1990-09-23 05:06:07');
448+
});
429449
});
430450
});

0 commit comments

Comments
 (0)