///
import * as React from 'react';
import CommonProps from '../util';
import { PopupProps } from '../overlay';
import { InputProps } from '../input';
import { ButtonProps } from '../button';
import { Dayjs, ConfigType } from 'dayjs';
interface IPresetType {
label?: string;
value?: ConfigType | (() => ConfigType);
}
interface HTMLAttributesWeak extends React.HTMLAttributes {
defaultValue?: any;
onChange?: any;
}
export interface DatePreset extends ButtonProps {
label: string;
// 时间值(dayjs 对象或时间字符串)或者返回时间值的函数
value: any;
}
export interface RangePreset {
[propName: string]: (Dayjs)[];
}
export interface TimePickerProps extends HTMLAttributesWeak, CommonProps {
/**
* 按钮的文案
*/
label?: React.ReactNode;
name?: string;
/**
* 输入框状态
*/
state?: 'error' | 'success';
/**
* 输入框提示
*/
placeholder?: string;
/**
* 时间值(dayjs 对象或时间字符串,受控状态使用)
*/
value?: ConfigType;
/**
* 时间初值(dayjs 对象或时间字符串,非受控状态使用)
*/
defaultValue?: ConfigType;
/**
* 时间选择框的尺寸
*/
size?: 'small' | 'medium' | 'large';
/**
* 是否允许清空时间
*/
hasClear?: boolean;
/**
* 时间的格式
* https://dayjs.gitee.io/docs/zh-CN/display/format
*/
format?: string;
/**
* 小时选项步长
*/
hourStep?: number;
/**
* 分钟选项步长
*/
minuteStep?: number;
/**
* 秒钟选项步长
*/
secondStep?: number;
/**
* 禁用小时函数
*/
disabledHours?: (index: number) => boolean;
/**
* 禁用分钟函数
*/
disabledMinutes?: (index: number) => boolean;
/**
* 禁用秒钟函数
*/
disabledSeconds?: (index: number) => boolean;
/**
* 弹层是否显示(受控)
*/
visible?: boolean;
/**
* 弹层默认是否显示(非受控)
*/
defaultVisible?: boolean;
/**
* 弹层容器
*/
popupContainer?: string | HTMLElement | ((target: HTMLElement) => HTMLElement);
/**
* 弹层对齐方式, 详情见Overlay 文档
*/
popupAlign?: string;
/**
* 弹层触发方式
*/
popupTriggerType?: 'click' | 'hover';
/**
* 弹层展示状态变化时的回调
*/
onVisibleChange?: (visible: boolean, reason: string) => void;
/**
* 弹层自定义样式
*/
popupStyle?: React.CSSProperties;
/**
* 弹层自定义样式类
*/
popupClassName?: string;
/**
* 弹层属性
*/
popupProps?: PopupProps;
/**
* 是否禁用
*/
disabled?: boolean;
/**
* 输入框是否有边框
*/
hasBorder?: boolean;
/**
* 透传给 Input 的属性
*/
inputProps?: InputProps;
/**
* 预设值,会显示在时间面板下面
*/
ranges?: RangePreset | DatePreset[];
/**
* 时间值改变时的回调
*/
onChange?: (date: Dayjs, dateString: string) => void;
}
export interface RangePickerProps
extends Omit<
TimePickerProps,
| 'value'
| 'placeholder'
| 'defaultValue'
| 'onOk'
| 'disabled'
| 'onChange'
| 'preset'
> {
value?: Array;
defaultValue?: Array;
onOk?: (value: Array, strVal: Array) => void;
onChange?: (value: Array, strVal: Array) => void;
placeholder?: string | Array;
disabled?: boolean | boolean[];
preset?: IPresetType | IPresetType[];
}
export class RangePicker extends React.Component {
type: 'range';
}
export default class TimePicker extends React.Component {
static RangePicker: typeof RangePicker;
}