Skip to content

Commit b2b8da3

Browse files
authored
chore: optimize experience of hover value (#220)
1 parent 6af42f8 commit b2b8da3

File tree

4 files changed

+47
-30
lines changed

4 files changed

+47
-30
lines changed

examples/basic.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
2-
import moment, { Moment } from 'moment';
2+
import type { Moment } from 'moment';
3+
import moment from 'moment';
34
import Picker from '../src/Picker';
45
import momentGenerateConfig from '../src/generate/moment';
56
import zhCN from '../src/locale/zh_CN';

src/PickerPanel.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import type { MonthCellRender } from './panels/MonthPanel/MonthBody';
3737
import RangeContext from './RangeContext';
3838
import getExtraFooter from './utils/getExtraFooter';
3939
import getRanges from './utils/getRanges';
40-
import { getLowerBoundTime, setTime } from './utils/timeUtil';
40+
import { getLowerBoundTime, setDateTime, setTime } from './utils/timeUtil';
4141

4242
export type PickerPanelSharedProps<DateType> = {
4343
prefixCls?: string;
@@ -202,7 +202,21 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
202202
const [viewDate, setInnerViewDate] = useMergedState<DateType | null, DateType>(null, {
203203
value: pickerValue,
204204
defaultValue: defaultPickerValue || mergedValue,
205-
postState: (date) => date || generateConfig.getNow(),
205+
postState: (date) => {
206+
const now = generateConfig.getNow();
207+
if (!date) return now;
208+
// When value is null and set showTime
209+
if (!mergedValue && showTime) {
210+
if (typeof showTime === 'object') {
211+
return setDateTime(generateConfig, date, showTime.defaultValue || now);
212+
}
213+
if (defaultValue) {
214+
return setDateTime(generateConfig, date, defaultValue);
215+
}
216+
return setDateTime(generateConfig, date, now);
217+
}
218+
return date;
219+
},
206220
});
207221

208222
const setViewDate = (date: DateType) => {

src/panels/DatetimePanel/index.tsx

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,8 @@ import DatePanel from '../DatePanel';
66
import type { SharedTimeProps } from '../TimePanel';
77
import TimePanel from '../TimePanel';
88
import { tuple } from '../../utils/miscUtil';
9-
import type { PanelRefProps, DisabledTime, NullableDateType } from '../../interface';
10-
import type { GenerateConfig } from '../../generate';
11-
12-
function setTime<DateType>(
13-
generateConfig: GenerateConfig<DateType>,
14-
date: DateType,
15-
defaultDate: NullableDateType<DateType>,
16-
) {
17-
if (!defaultDate) {
18-
return date;
19-
}
20-
21-
let newDate = date;
22-
newDate = generateConfig.setHour(
23-
newDate,
24-
generateConfig.getHour(defaultDate),
25-
);
26-
newDate = generateConfig.setMinute(
27-
newDate,
28-
generateConfig.getMinute(defaultDate),
29-
);
30-
newDate = generateConfig.setSecond(
31-
newDate,
32-
generateConfig.getSecond(defaultDate),
33-
);
34-
return newDate;
35-
}
9+
import { setDateTime as setTime } from '../../utils/timeUtil';
10+
import type { PanelRefProps, DisabledTime } from '../../interface';
3611

3712
export type DatetimePanelProps<DateType> = {
3813
disabledTime?: DisabledTime<DateType>;

src/utils/timeUtil.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { NullableDateType } from '../interface';
12
import type { GenerateConfig } from '../generate';
23

34
export function setTime<DateType>(
@@ -13,6 +14,32 @@ export function setTime<DateType>(
1314
return nextTime;
1415
}
1516

17+
export function setDateTime<DateType>(
18+
generateConfig: GenerateConfig<DateType>,
19+
date: DateType,
20+
defaultDate: NullableDateType<DateType>,
21+
) {
22+
if (!defaultDate) {
23+
return date;
24+
}
25+
26+
let newDate = date;
27+
newDate = generateConfig.setHour(
28+
newDate,
29+
generateConfig.getHour(defaultDate),
30+
);
31+
newDate = generateConfig.setMinute(
32+
newDate,
33+
generateConfig.getMinute(defaultDate),
34+
);
35+
newDate = generateConfig.setSecond(
36+
newDate,
37+
generateConfig.getSecond(defaultDate),
38+
);
39+
return newDate;
40+
}
41+
42+
1643
export function getLowerBoundTime(
1744
hour: number,
1845
minute: number,

0 commit comments

Comments
 (0)