Skip to content

Commit a934f71

Browse files
committed
feat(datepicker): add cancel-range-select-limit API
1 parent f98ca2e commit a934f71

File tree

14 files changed

+365
-948
lines changed

14 files changed

+365
-948
lines changed

db/TDesign.db

0 Bytes
Binary file not shown.

packages/products/tdesign-react/src/date-picker/defaultProps.ts

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,11 @@
22
* 该文件为脚本自动生成文件,请勿随意修改。如需修改请联系 PMC
33
* */
44

5-
import { TdDatePickerProps, TdDateRangePickerProps, TdDatePickerPanelProps, TdDateRangePickerPanelProps } from './type';
6-
7-
export const datePickerDefaultProps: TdDatePickerProps = {
8-
allowInput: false,
9-
clearable: false,
10-
defaultTime: '00:00:00',
11-
enableTimePicker: false,
12-
format: undefined,
13-
mode: 'date',
14-
placeholder: undefined,
15-
presetsPlacement: 'bottom',
16-
size: 'medium',
17-
status: 'default',
18-
defaultValue: '',
19-
};
5+
import { TdDateRangePickerProps } from './type';
206

217
export const dateRangePickerDefaultProps: TdDateRangePickerProps = {
228
allowInput: false,
9+
cancelRangeSelectLimit: false,
2310
clearable: false,
2411
defaultTime: ['00:00:00', '23:59:59'],
2512
enableTimePicker: false,
@@ -30,7 +17,3 @@ export const dateRangePickerDefaultProps: TdDateRangePickerProps = {
3017
status: 'default',
3118
defaultValue: [],
3219
};
33-
34-
export const datePickerPanelDefaultProps: TdDatePickerPanelProps = { defaultTime: '00:00:00' };
35-
36-
export const dateRangePickerPanelDefaultProps: TdDateRangePickerPanelProps = { defaultTime: ['00:00:00', '23:59:59'] };

packages/products/tdesign-react/src/date-picker/type.ts

Lines changed: 8 additions & 314 deletions
Original file line numberDiff line numberDiff line change
@@ -4,150 +4,24 @@
44
* 该文件为脚本自动生成文件,请勿随意修改。如需修改请联系 PMC
55
* */
66

7-
import { InputProps } from '../input';
87
import { PopupProps } from '../popup';
8+
import { RangeInputProps } from '../range-input';
99
import { TimePickerProps } from '../time-picker';
1010
import { Dayjs } from 'dayjs';
11-
import { RangeInputProps } from '../range-input';
1211
import { TNode, TElement, SizeEnum } from '../common';
1312
import { MouseEvent, FocusEvent, FormEvent } from 'react';
1413

15-
export interface TdDatePickerProps {
14+
export interface TdDateRangePickerProps {
1615
/**
1716
* 是否允许输入日期
1817
* @default false
1918
*/
2019
allowInput?: boolean;
2120
/**
22-
* 是否显示清除按钮
23-
* @default false
24-
*/
25-
clearable?: boolean;
26-
/**
27-
* 时间选择器默认值,当 value/defaultValue 未设置值时有效
28-
* @default '00:00:00'
29-
*/
30-
defaultTime?: string;
31-
/**
32-
* 禁用日期,示例:['A', 'B'] 表示日期 A 和日期 B 会被禁用。`{ from: 'A', to: 'B' }` 表示在 A 到 B 之间的日期会被禁用。`{ before: 'A', after: 'B' }` 表示在 A 之前和在 B 之后的日期都会被禁用。其中 A = '2021-01-01',B = '2021-02-01'。值类型为 Function 则表示返回值为 true 的日期会被禁用
33-
*/
34-
disableDate?: DisableDate;
35-
/**
36-
* 是否禁用组件
37-
*/
38-
disabled?: boolean;
39-
/**
40-
* 是否显示时间选择
41-
* @default false
42-
*/
43-
enableTimePicker?: boolean;
44-
/**
45-
* 第一天从星期几开始
46-
*/
47-
firstDayOfWeek?: number;
48-
/**
49-
* 仅用于格式化日期显示的格式,不影响日期值。注意和 `valueType` 的区别,`valueType`会直接决定日期值 `value` 的格式。全局配置默认为:'YYYY-MM-DD',[详细文档](https://day.js.org/docs/en/display/format)
50-
*/
51-
format?: string;
52-
/**
53-
* 透传给输入框(Input)组件的参数
54-
*/
55-
inputProps?: InputProps;
56-
/**
57-
* 选择器模式
58-
* @default date
59-
*/
60-
mode?: 'year' | 'quarter' | 'month' | 'week' | 'date';
61-
/**
62-
* 占位符
63-
*/
64-
placeholder?: string;
65-
/**
66-
* 透传给 popup 组件的参数
67-
*/
68-
popupProps?: PopupProps;
69-
/**
70-
* 用于自定义组件前置图标
71-
*/
72-
prefixIcon?: TElement;
73-
/**
74-
* 预设快捷日期选择,示例:`{ '元旦': '2021-01-01', '昨天': dayjs().subtract(1, 'day').format('YYYY-MM-DD'), '特定日期': () => ['2021-02-01'] }`
75-
*/
76-
presets?: PresetDate;
77-
/**
78-
* 预设面板展示区域(包含确定按钮)
79-
* @default bottom
80-
*/
81-
presetsPlacement?: 'left' | 'top' | 'right' | 'bottom';
82-
/**
83-
* 输入框尺寸
84-
* @default medium
85-
*/
86-
size?: SizeEnum;
87-
/**
88-
* 输入框状态
89-
* @default default
90-
*/
91-
status?: 'default' | 'success' | 'warning' | 'error';
92-
/**
93-
* 用于自定义组件后置图标
94-
*/
95-
suffixIcon?: TElement;
96-
/**
97-
* 透传 TimePicker 组件属性
98-
*/
99-
timePickerProps?: TimePickerProps;
100-
/**
101-
* 输入框下方提示文本,会根据不同的 `status` 呈现不同的样式
102-
*/
103-
tips?: TNode;
104-
/**
105-
* 选中值
106-
* @default ''
107-
*/
108-
value?: DateValue;
109-
/**
110-
* 选中值,非受控属性
111-
* @default ''
112-
*/
113-
defaultValue?: DateValue;
114-
/**
115-
* 用于格式化日期的值,仅支持部分格式,时间戳、日期等。⚠️ `YYYYMMDD` 这种格式不支持,请勿使用,如果希望支持可以给 `dayjs` 提个 PR。注意和 `format` 的区别,`format` 仅用于处理日期在页面中呈现的格式。`ValueTypeEnum` 即将废弃,请更为使用 `DatePickerValueType`
116-
* @default ''
117-
*/
118-
valueType?: DatePickerValueType;
119-
/**
120-
* 当输入框失去焦点时触发
121-
*/
122-
onBlur?: (context: { value: DateValue; e: FocusEvent<HTMLInputElement> }) => void;
123-
/**
124-
* 选中值发生变化时触发
125-
*/
126-
onChange?: (value: DateValue, context: { dayjsValue?: Dayjs; trigger?: DatePickerTriggerSource }) => void;
127-
/**
128-
* 如果存在“确定”按钮,则点击“确定”按钮时触发
129-
*/
130-
onConfirm?: (context: { date: Date; e: MouseEvent<HTMLDivElement> }) => void;
131-
/**
132-
* 输入框获得焦点时触发
133-
*/
134-
onFocus?: (context: { value: DateValue; e: FocusEvent<HTMLInputElement> }) => void;
135-
/**
136-
* 面板选中值后触发
137-
*/
138-
onPick?: (value: DateValue) => void;
139-
/**
140-
* 点击预设按钮后触发
141-
*/
142-
onPresetClick?: (context: { preset: PresetDate; e: MouseEvent<HTMLDivElement> }) => void;
143-
}
144-
145-
export interface TdDateRangePickerProps {
146-
/**
147-
* 是否允许输入日期
21+
* 默认的日期选择交互是根据点击前后日期的顺序来决定并且会加以限制。比如:用户先点击开始时间输入框,选择了一个日期例如2020-05-15,紧接着交互会自动将焦点跳到结束日期输入框,等待用户选择结束时间。此时用户只能选择大于2020-05-15的日期(之前的日期会被灰态禁止点击,限制用户的点击)。当该值传递`true`时,则取消该限制。
14822
* @default false
14923
*/
150-
allowInput?: boolean;
24+
cancelRangeSelectLimit?: boolean;
15125
/**
15226
* 是否显示清除按钮
15327
* @default false
@@ -304,158 +178,10 @@ export interface TdDateRangePickerProps {
304178
onPresetClick?: (context: { preset: PresetDate; e: MouseEvent<HTMLDivElement> }) => void;
305179
}
306180

307-
export interface TdDatePickerPanelProps
308-
extends Pick<
309-
TdDatePickerProps,
310-
| 'value'
311-
| 'defaultValue'
312-
| 'disableDate'
313-
| 'enableTimePicker'
314-
| 'firstDayOfWeek'
315-
| 'format'
316-
| 'mode'
317-
| 'presets'
318-
| 'presetsPlacement'
319-
| 'timePickerProps'
320-
> {
321-
/**
322-
* 时间选择器默认值,当 value/defaultValue 未设置值时有效
323-
* @default '00:00:00'
324-
*/
325-
defaultTime?: string;
326-
/**
327-
* 点击日期单元格时触发
328-
*/
329-
onCellClick?: (context: { date: Date; e: MouseEvent<HTMLDivElement> }) => void;
330-
/**
331-
* 选中值发生变化时触发。参数 `context.trigger` 表示触发当前事件的来源,不同的模式触发来源也会不同
332-
*/
333-
onChange?: (
334-
value: DateValue,
335-
context: { dayjsValue?: Dayjs; e?: MouseEvent<HTMLDivElement>; trigger?: DatePickerTriggerSource },
336-
) => void;
337-
/**
338-
* 如果存在“确定”按钮,则点击“确定”按钮时触发
339-
*/
340-
onConfirm?: (context: { date: Date; e: MouseEvent<HTMLDivElement> }) => void;
341-
/**
342-
* 月份切换发生变化时触发
343-
*/
344-
onMonthChange?: (context: {
345-
month: number;
346-
date: Date;
347-
e?: MouseEvent<HTMLDivElement>;
348-
trigger: DatePickerMonthChangeTrigger;
349-
}) => void;
350-
/**
351-
* 点击面板时触发
352-
*/
353-
onPanelClick?: (context: { e: MouseEvent<HTMLDivElement> }) => void;
354-
/**
355-
* 点击预设按钮后触发
356-
*/
357-
onPresetClick?: (context: { preset: PresetDate; e: MouseEvent<HTMLDivElement> }) => void;
358-
/**
359-
* 时间切换发生变化时触发
360-
*/
361-
onTimeChange?: (context: {
362-
time: string;
363-
date: Date;
364-
trigger: DatePickerTimeChangeTrigger;
365-
e?: MouseEvent<HTMLDivElement>;
366-
}) => void;
367-
/**
368-
* 年份切换发生变化时触发
369-
*/
370-
onYearChange?: (context: {
371-
year: number;
372-
date: Date;
373-
trigger: DatePickerYearChangeTrigger;
374-
e?: MouseEvent<HTMLDivElement>;
375-
}) => void;
376-
}
377-
378-
export interface TdDateRangePickerPanelProps
379-
extends Pick<
380-
TdDateRangePickerProps,
381-
| 'value'
382-
| 'defaultValue'
383-
| 'disableDate'
384-
| 'enableTimePicker'
385-
| 'firstDayOfWeek'
386-
| 'format'
387-
| 'mode'
388-
| 'presets'
389-
| 'presetsPlacement'
390-
| 'panelPreselection'
391-
| 'timePickerProps'
392-
> {
393-
/**
394-
* 时间选择器默认值,当 value/defaultValue 未设置值时有效
395-
* @default ["00:00:00", "23:59:59"]
396-
*/
397-
defaultTime?: string[];
398-
/**
399-
* 点击日期单元格时触发
400-
*/
401-
onCellClick?: (context: { date: Date[]; partial: DateRangePickerPartial; e: MouseEvent<HTMLDivElement> }) => void;
402-
/**
403-
* 选中值发生变化时触发。参数 `context.trigger` 表示触发当前事件的来源,不同的模式触发来源也会不同
404-
*/
405-
onChange?: (
406-
value: DateRangeValue,
407-
context: {
408-
dayjsValue?: Dayjs[];
409-
partial: DateRangePickerPartial;
410-
e?: MouseEvent<HTMLDivElement>;
411-
trigger?: DatePickerTriggerSource;
412-
},
413-
) => void;
414-
/**
415-
* 如果存在“确定”按钮,则点击“确定”按钮时触发
416-
*/
417-
onConfirm?: (context: { date: Date[]; e: MouseEvent<HTMLDivElement> }) => void;
418-
/**
419-
* 月份切换发生变化时触发
420-
*/
421-
onMonthChange?: (context: {
422-
month: number;
423-
date: Date[];
424-
partial: DateRangePickerPartial;
425-
e?: MouseEvent<HTMLDivElement>;
426-
trigger: DatePickerMonthChangeTrigger;
427-
}) => void;
428-
/**
429-
* 点击面板时触发
430-
*/
431-
onPanelClick?: (context: { e: MouseEvent<HTMLDivElement> }) => void;
432-
/**
433-
* 点击预设按钮后触发
434-
*/
435-
onPresetClick?: (context: { preset: PresetDate; e: MouseEvent<HTMLDivElement> }) => void;
436-
/**
437-
* 时间切换发生变化时触发
438-
*/
439-
onTimeChange?: (context: {
440-
time: string;
441-
date: Date[];
442-
partial: DateRangePickerPartial;
443-
trigger: DatePickerTimeChangeTrigger;
444-
e?: MouseEvent<HTMLDivElement>;
445-
}) => void;
446-
/**
447-
* 年份切换发生变化时触发
448-
*/
449-
onYearChange?: (context: {
450-
year: number;
451-
date: Date[];
452-
partial: DateRangePickerPartial;
453-
trigger: DatePickerYearChangeTrigger;
454-
e?: MouseEvent<HTMLDivElement>;
455-
}) => void;
456-
}
457-
458-
export type DisableDate = Array<DateValue> | DisableDateObj | ((date: DateValue) => boolean);
181+
export type DisableRangeDate =
182+
| Array<DateValue>
183+
| DisableDateObj
184+
| ((context: { date: DateRangeValue; partial: DateRangePickerPartial }) => boolean);
459185

460186
export interface DisableDateObj {
461187
from?: string;
@@ -464,32 +190,6 @@ export interface DisableDateObj {
464190
after?: string;
465191
}
466192

467-
export interface PresetDate {
468-
[name: string]: DateValue | (() => DateValue);
469-
}
470-
471-
export type DateValue = string | number | Date;
472-
473-
export type DatePickerValueType =
474-
| 'time-stamp'
475-
| 'Date'
476-
| 'YYYY'
477-
| 'YYYY-MM'
478-
| 'YYYY-MM-DD'
479-
| 'YYYY-MM-DD HH'
480-
| 'YYYY-MM-DD HH:mm'
481-
| 'YYYY-MM-DD HH:mm:ss'
482-
| 'YYYY-MM-DD HH:mm:ss:SSS';
483-
484-
export type ValueTypeEnum = DatePickerValueType;
485-
486-
export type DatePickerTriggerSource = 'confirm' | 'pick' | 'enter' | 'preset' | 'clear';
487-
488-
export type DisableRangeDate =
489-
| Array<DateValue>
490-
| DisableDateObj
491-
| ((context: { date: DateRangeValue; partial: DateRangePickerPartial }) => boolean);
492-
493193
export type DateRangePickerPartial = 'start' | 'end';
494194

495195
export interface PresetRange {
@@ -504,9 +204,3 @@ export interface PickContext {
504204
e: MouseEvent<HTMLDivElement>;
505205
partial: DateRangePickerPartial;
506206
}
507-
508-
export type DatePickerMonthChangeTrigger = 'month-select' | 'month-arrow-next' | 'month-arrow-previous' | 'today';
509-
510-
export type DatePickerTimeChangeTrigger = 'time-hour' | 'time-minute' | 'time-second';
511-
512-
export type DatePickerYearChangeTrigger = 'year-select' | 'year-arrow-next' | 'year-arrow-previous' | 'today';

0 commit comments

Comments
 (0)