UNPKG

4.05 kBTypeScriptView Raw
1/// <reference types="react" />
2
3import * as React from 'react';
4import CommonProps from '../util';
5import { PopupProps } from '../overlay';
6import { InputProps } from '../input';
7import { ButtonProps } from '../button';
8import { Dayjs, ConfigType } from 'dayjs';
9
10interface IPresetType {
11 label?: string;
12 value?: ConfigType | (() => ConfigType);
13}
14interface HTMLAttributesWeak extends React.HTMLAttributes<HTMLElement> {
15 defaultValue?: any;
16 onChange?: any;
17}
18
19export interface DatePreset extends ButtonProps {
20 label: string;
21 // 时间值(dayjs 对象或时间字符串)或者返回时间值的函数
22 value: any;
23}
24
25export interface RangePreset {
26 [propName: string]: (Dayjs)[];
27}
28
29export interface TimePickerProps extends HTMLAttributesWeak, CommonProps {
30 /**
31 * 按钮的文案
32 */
33 label?: React.ReactNode;
34 name?: string;
35
36 /**
37 * 输入框状态
38 */
39 state?: 'error' | 'success';
40
41 /**
42 * 输入框提示
43 */
44 placeholder?: string;
45
46 /**
47 * 时间值(dayjs 对象或时间字符串,受控状态使用)
48 */
49 value?: ConfigType;
50
51 /**
52 * 时间初值(dayjs 对象或时间字符串,非受控状态使用)
53 */
54 defaultValue?: ConfigType;
55
56 /**
57 * 时间选择框的尺寸
58 */
59 size?: 'small' | 'medium' | 'large';
60
61 /**
62 * 是否允许清空时间
63 */
64 hasClear?: boolean;
65
66 /**
67 * 时间的格式
68 * https://dayjs.gitee.io/docs/zh-CN/display/format
69 */
70 format?: string;
71
72 /**
73 * 小时选项步长
74 */
75 hourStep?: number;
76
77 /**
78 * 分钟选项步长
79 */
80 minuteStep?: number;
81
82 /**
83 * 秒钟选项步长
84 */
85 secondStep?: number;
86
87 /**
88 * 禁用小时函数
89 */
90 disabledHours?: (index: number) => boolean;
91
92 /**
93 * 禁用分钟函数
94 */
95 disabledMinutes?: (index: number) => boolean;
96
97 /**
98 * 禁用秒钟函数
99 */
100 disabledSeconds?: (index: number) => boolean;
101
102 /**
103 * 弹层是否显示(受控)
104 */
105 visible?: boolean;
106
107 /**
108 * 弹层默认是否显示(非受控)
109 */
110 defaultVisible?: boolean;
111
112 /**
113 * 弹层容器
114 */
115 popupContainer?: string | HTMLElement | ((target: HTMLElement) => HTMLElement);
116
117 /**
118 * 弹层对齐方式, 详情见Overlay 文档
119 */
120 popupAlign?: string;
121
122 /**
123 * 弹层触发方式
124 */
125 popupTriggerType?: 'click' | 'hover';
126
127 /**
128 * 弹层展示状态变化时的回调
129 */
130 onVisibleChange?: (visible: boolean, reason: string) => void;
131
132 /**
133 * 弹层自定义样式
134 */
135 popupStyle?: React.CSSProperties;
136
137 /**
138 * 弹层自定义样式类
139 */
140 popupClassName?: string;
141
142 /**
143 * 弹层属性
144 */
145 popupProps?: PopupProps;
146
147 /**
148 * 是否禁用
149 */
150 disabled?: boolean;
151
152 /**
153 * 输入框是否有边框
154 */
155 hasBorder?: boolean;
156
157 /**
158 * 透传给 Input 的属性
159 */
160 inputProps?: InputProps;
161
162 /**
163 * 预设值,会显示在时间面板下面
164 */
165 ranges?: RangePreset | DatePreset[];
166
167 /**
168 * 时间值改变时的回调
169 */
170 onChange?: (date: Dayjs, dateString: string) => void;
171}
172
173
174export interface RangePickerProps
175 extends Omit<
176 TimePickerProps,
177 | 'value'
178 | 'placeholder'
179 | 'defaultValue'
180 | 'onOk'
181 | 'disabled'
182 | 'onChange'
183 | 'preset'
184 > {
185 value?: Array<ConfigType>;
186 defaultValue?: Array<ConfigType>;
187 onOk?: (value: Array<Dayjs>, strVal: Array<string>) => void;
188 onChange?: (value: Array<Dayjs>, strVal: Array<string>) => void;
189 placeholder?: string | Array<string>;
190 disabled?: boolean | boolean[];
191 preset?: IPresetType | IPresetType[];
192}
193
194export class RangePicker extends React.Component<RangePickerProps, any> {
195 type: 'range';
196}
197
198export default class TimePicker extends React.Component<TimePickerProps, any> {
199 static RangePicker: typeof RangePicker;
200}