Skip to content

Commit ced4dac

Browse files
authored
Merge pull request #2 from react-component/master
update
2 parents 8549583 + 13bc085 commit ced4dac

File tree

14 files changed

+294
-515
lines changed

14 files changed

+294
-515
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';

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rc-picker",
3-
"version": "2.5.5",
3+
"version": "2.5.12",
44
"description": "React date & time picker",
55
"keywords": [
66
"react",

src/Picker.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,11 @@ type OmitPanelProps<Props> = Omit<
9898
'onChange' | 'hideHeader' | 'pickerValue' | 'onPickerValueChange'
9999
>;
100100

101-
export type PickerBaseProps<DateType> = {} & PickerSharedProps<DateType> & OmitPanelProps<PickerPanelBaseProps<DateType>>;
101+
export type PickerBaseProps<DateType> = {} & PickerSharedProps<DateType> &
102+
OmitPanelProps<PickerPanelBaseProps<DateType>>;
102103

103-
export type PickerDateProps<DateType> = {} & PickerSharedProps<DateType> & OmitPanelProps<PickerPanelDateProps<DateType>>;
104+
export type PickerDateProps<DateType> = {} & PickerSharedProps<DateType> &
105+
OmitPanelProps<PickerPanelDateProps<DateType>>;
104106

105107
export type PickerTimeProps<DateType> = {
106108
picker: 'time';
@@ -109,7 +111,8 @@ export type PickerTimeProps<DateType> = {
109111
* since `defaultOpenValue` will confuse user of current value status
110112
*/
111113
defaultOpenValue?: DateType;
112-
} & PickerSharedProps<DateType> & Omit<OmitPanelProps<PickerPanelTimeProps<DateType>>, 'format'>;
114+
} & PickerSharedProps<DateType> &
115+
Omit<OmitPanelProps<PickerPanelTimeProps<DateType>>, 'format'>;
113116

114117
export type PickerProps<DateType> =
115118
| PickerBaseProps<DateType>
@@ -194,9 +197,8 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
194197
const [selectedValue, setSelectedValue] = React.useState<DateType | null>(mergedValue);
195198

196199
// Operation ref
197-
const operationRef: React.MutableRefObject<ContextOperationRefProps | null> = React.useRef<ContextOperationRefProps>(
198-
null,
199-
);
200+
const operationRef: React.MutableRefObject<ContextOperationRefProps | null> =
201+
React.useRef<ContextOperationRefProps>(null);
200202

201203
// Open
202204
const [mergedOpen, triggerInnerOpen] = useMergedState(false, {
@@ -433,6 +435,7 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
433435
triggerOpen(false);
434436
}}
435437
className={`${prefixCls}-clear`}
438+
role="button"
436439
>
437440
{clearIcon || <span className={`${prefixCls}-clear-btn`} />}
438441
</span>

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/RangePicker.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ export type RangePickerSharedProps<DateType> = {
102102
onPanelChange?: (values: RangeValue<DateType>, modes: [PanelMode, PanelMode]) => void;
103103
onFocus?: React.FocusEventHandler<HTMLInputElement>;
104104
onBlur?: React.FocusEventHandler<HTMLInputElement>;
105+
onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
106+
onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;
105107
onOk?: (dates: RangeValue<DateType>) => void;
106108
direction?: 'ltr' | 'rtl';
107109
autoComplete?: string;
@@ -204,6 +206,8 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
204206
onCalendarChange,
205207
onFocus,
206208
onBlur,
209+
onMouseEnter,
210+
onMouseLeave,
207211
onOk,
208212
onKeyDown,
209213
components,
@@ -1086,6 +1090,8 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
10861090
})}
10871091
style={style}
10881092
onClick={onPickerClick}
1093+
onMouseEnter={onMouseEnter}
1094+
onMouseLeave={onMouseLeave}
10891095
onMouseDown={onPickerMouseDown}
10901096
{...getDataOrAriaProps(props)}
10911097
>

src/hooks/usePickerInput.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,12 @@ export default function usePickerInput({
112112

113113
if (blurToCancel) {
114114
setTimeout(() => {
115-
if (isClickOutside(document.activeElement)) {
115+
let { activeElement } = document;
116+
while (activeElement && activeElement.shadowRoot) {
117+
activeElement = activeElement.shadowRoot.activeElement;
118+
}
119+
120+
if (isClickOutside(activeElement)) {
116121
onCancel();
117122
}
118123
}, 0);

src/locale/fr_CA.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import type { Locale } from '../interface';
2+
3+
const locale: Locale = {
4+
locale: 'fr_CA',
5+
today: "Aujourd'hui",
6+
now: 'Maintenant',
7+
backToToday: "Aujourd'hui",
8+
ok: 'Ok',
9+
clear: 'Rétablir',
10+
month: 'Mois',
11+
year: 'Année',
12+
timeSelect: "Sélectionner l'heure",
13+
dateSelect: 'Sélectionner la date',
14+
monthSelect: 'Choisissez un mois',
15+
yearSelect: 'Choisissez une année',
16+
decadeSelect: 'Choisissez une décennie',
17+
yearFormat: 'YYYY',
18+
dateFormat: 'DD/MM/YYYY',
19+
dayFormat: 'DD',
20+
dateTimeFormat: 'DD/MM/YYYY HH:mm:ss',
21+
monthBeforeYear: true,
22+
previousMonth: 'Mois précédent (PageUp)',
23+
nextMonth: 'Mois suivant (PageDown)',
24+
previousYear: 'Année précédente (Ctrl + gauche)',
25+
nextYear: 'Année prochaine (Ctrl + droite)',
26+
previousDecade: 'Décennie précédente',
27+
nextDecade: 'Décennie suivante',
28+
previousCentury: 'Siècle précédent',
29+
nextCentury: 'Siècle suivant',
30+
};
31+
32+
export default locale;

src/locale/km_KH.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import type { Locale } from '../interface';
2+
3+
const locale: Locale = {
4+
locale: 'km',
5+
today: 'ថ្ងៃនេះ',
6+
now: 'ឥឡូវ​នេះ',
7+
backToToday: 'ត្រលប់ទៅថ្ងៃនេះ',
8+
ok: 'កំណត់',
9+
timeSelect: 'រយៈពេលជ្រើសរើស',
10+
dateSelect: 'ជ្រើសរើសកាលបរិច្ឆេទ',
11+
weekSelect: 'ជ្រើសរើសសប្តាហ៍',
12+
clear: 'ច្បាស់',
13+
month: 'ខែ',
14+
year: 'ឆ្នាំ',
15+
previousMonth: 'ខែមុន (ឡើងទំព័រ)',
16+
nextMonth: 'ខែបន្ទាប់ (ប៊ូតុងចុះទំព័រ)',
17+
monthSelect: 'ជ្រើសរើសខែ',
18+
yearSelect: 'ជ្រើសរើសឆ្នាំ',
19+
decadeSelect: 'ជ្រើសរើសអាយុ',
20+
yearFormat: 'YYYY',
21+
dayFormat: 'D',
22+
dateFormat: 'YYYY-M-D',
23+
dateTimeFormat: 'YYYY-M-D HH:mm:ss',
24+
previousYear: 'ឆ្នាំមុន (Controlគ្រាប់ចុចបូកព្រួញខាងឆ្វេង)',
25+
nextYear: 'ឆ្នាំក្រោយ (Control គ្រាប់ចុចបូកព្រួញស្ដាំ)',
26+
previousDecade: 'ជំនាន់ចុងក្រោយ',
27+
nextDecade: 'ជំនាន់​ក្រោយ',
28+
previousCentury: 'សតវត្សចុងក្រោយ',
29+
nextCentury: 'សតវត្សរ៍បន្ទាប់',
30+
};
31+
32+
export default locale;

src/locale/ml_IN.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import type { Locale } from '../interface';
2+
3+
const locale: Locale = {
4+
locale: 'ml_IN',
5+
today: 'ഇന്ന്',
6+
now: 'ഇപ്പോൾ',
7+
backToToday: 'ഇന്നത്തെ ദിവസത്തിലേക്ക് തിരിച്ചു പോകുക',
8+
ok: 'ശരിയാണ്',
9+
clear: 'നീക്കം ചെയ്യുക',
10+
month: 'മാസം',
11+
year: 'വർഷം',
12+
timeSelect: 'സമയം തിരഞ്ഞെടുക്കുക',
13+
dateSelect: 'ദിവസം തിരഞ്ഞെടുക്കുക',
14+
weekSelect: 'വാരം തിരഞ്ഞെടുക്കുക',
15+
monthSelect: 'മാസം തിരഞ്ഞെടുക്കുക',
16+
yearSelect: 'വർഷം തിരഞ്ഞെടുക്കുക',
17+
decadeSelect: 'ദശാബ്ദം തിരഞ്ഞെടുക്കുക',
18+
yearFormat: 'YYYY',
19+
dateFormat: 'M/D/YYYY',
20+
dayFormat: 'D',
21+
dateTimeFormat: 'M/D/YYYY HH:mm:ss',
22+
monthBeforeYear: true,
23+
previousMonth: 'കഴിഞ്ഞ മാസം (PageUp)',
24+
nextMonth: 'അടുത്ത മാസം (PageDown)',
25+
previousYear: 'കഴിഞ്ഞ വർഷം (Control + left)',
26+
nextYear: 'അടുത്ത വർഷം (Control + right)',
27+
previousDecade: 'കഴിഞ്ഞ ദശാബ്ദം',
28+
nextDecade: 'അടുത്ത ദശാബ്ദം',
29+
previousCentury: 'കഴിഞ്ഞ നൂറ്റാണ്ട്',
30+
nextCentury: 'അടുത്ത നൂറ്റാണ്ട്',
31+
};
32+
33+
export default locale;

src/locale/pt_BR.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@ const locale: Locale = {
2727
nextDecade: 'Próxima década',
2828
previousCentury: 'Século anterior',
2929
nextCentury: 'Próximo século',
30+
shortWeekDays: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],
31+
shortMonths: [
32+
'Jan',
33+
'Fev',
34+
'Mar',
35+
'Abr',
36+
'Mai',
37+
'Jun',
38+
'Jul',
39+
'Ago',
40+
'Set',
41+
'Out',
42+
'Nov',
43+
'Dez',
44+
],
3045
};
3146

3247
export default locale;

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,

tests/__snapshots__/picker.spec.tsx.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ exports[`Picker.Basic icon 1`] = `
2020
</span>
2121
<span
2222
class="rc-picker-clear"
23+
role="button"
2324
>
2425
<span
2526
class="suffix-icon"

0 commit comments

Comments
 (0)