@alifd/next
Version:
A configurable component library for web built on React.
250 lines (249 loc) • 7.09 kB
TypeScript
import type React from 'react';
import type { Dayjs, ConfigType, ManipulateType } from 'dayjs';
import type { CommonProps } from '../util';
import type { Locale } from '../locale/types';
interface HTMLAttributesWeak extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange' | 'defaultValue' | 'onSelect'> {
}
/**
* @api
*/
export interface CalendarProps extends HTMLAttributesWeak, Omit<CommonProps, 'locale'> {
/**
* @deprecated use Form.Item name instead
* @skip
*/
name?: string;
/**
* 默认选中的日期(dayjs 对象)
* @en Default selected date (dayjs object)
*/
defaultValue?: ConfigType;
/**
* 选中的日期值 (dayjs 对象)
* @en Selected date value (dayjs object)
*/
value?: ConfigType;
/**
* 面板默认显示的日期
* @en Default displayed date
*/
defaultPanelValue?: ConfigType;
/**
* 面板显示的日期(受控)
* @en Displayed date
*/
panelValue?: ConfigType;
/**
* 展现形态
* @en Display shape
* @defaultValue 'fullscreen'
*/
shape?: 'card' | 'fullscreen' | 'panel';
/**
* 日期模式
* @en Date mode
* @defaultValue 'month'
*/
mode?: CalendarMode;
/**
* 面板模式,未指定时会根据 mode 自动推断
* @en Panel mode, will be inferred automatically if not specified
*/
panelMode?: CalendarPanelMode;
/**
* 选择日期单元格时的回调
* @en Callback when selecting a date cell
*/
onSelect?: (value: Dayjs, strVal: string) => void;
/**
* 值改变时的回调
* @en Callback when value changes
*/
onChange?: (value: Dayjs, strVal: string) => void;
/**
* 日期面板变化回调
* @en Callback when date panel changes
*/
onPanelChange?: (value: Dayjs, mode: string, reason?: string) => void;
/**
* 自定义样式类
* @en Custom style class
*/
className?: string;
/**
* 自定义日期渲染
* @en Custom date rendering
*/
dateCellRender?: CustomCellRender;
/**
* 自定义月份渲染函数
* @en Custom month rendering function
*/
monthCellRender?: CustomCellRender;
/**
* 自定义年份渲染函数
* @en Custom year rendering function
*/
yearCellRender?: CustomCellRender;
/**
* 自定义季度渲染函数
* @en Custom quarter rendering function
*/
quarterCellRender?: CustomCellRender;
/**
* 不可选择的日期
* @en Disabled date
*/
disabledDate?: (value: Dayjs, mode: CalendarPanelMode) => boolean;
/**
* @skip
*/
locale?: Locale['Calendar'];
/**
* 点击头部左单箭头时触发的回调
* @en Callback when clicking the left single arrow
*/
onPrev?: OnPrevOrNext;
/**
* 点击头部右单箭头时触发的回调
* @en Callback when clicking the right single arrow
*/
onNext?: OnPrevOrNext;
/**
* 点击头部左双箭头时触发的回调
* @en callback when clicking the left double arrow
*/
onSuperPrev?: OnPrevOrNext;
/**
* 点击头部右双箭头时触发的回调
* @en callback when clicking the right double arrow
*/
onSuperNext?: OnPrevOrNext;
/**
* 头部自定义渲染
* @en Header custom rendering
*/
headerRender?: (props: HeaderPanelProps) => React.ReactNode;
/**
* 可选择的年份的有效区间
* @en Valid year range
*/
validValue?: [Dayjs, Dayjs];
/**
* 渲染头部额外内容
* @en Render header extra content
*/
renderHeaderExtra?: (props: HeaderPanelProps) => React.ReactNode;
/**
* 渲染头部标题,仅当 showTitle 为 true 时生效
* @en Render header title
* @skip
*/
titleRender?: (value: ConfigType) => React.ReactNode;
/**
* 显示头部标题
* @en Show header title
* @skip
* @remarks 实现有问题暂不开放
*/
showTitle?: boolean;
/**
* 展示的总行数
* @en Total rows
* @skip
* @remarks 命名有些问题,感觉应该叫 rowNum
*/
colNum?: number;
/**
* @skip
* @deprecated not implemented
*/
hoveredState?: (value: unknown) => boolean;
/**
* 单元格自定义样式
* @en Cell custom style
*/
cellClassName?: (value: Dayjs) => Record<string, boolean> | undefined | null;
/**
* 单元格自定义属性
* @en Cell custom property
*/
cellProps?: {
onMouseEnter?: (v: Dayjs, e: React.MouseEvent<HTMLElement>, args: Pick<CellData, 'isCurrent' | 'label'>) => void;
onMouseLeave?: (v: Dayjs, e: React.MouseEvent<HTMLElement>, args: Pick<CellData, 'isCurrent' | 'label'>) => void;
};
}
/**
* @api
*/
export type OnPrevOrNext = (value: Dayjs, options: {
unit: ManipulateType;
num: number;
}) => void;
/**
* @api
*/
export type CalendarMode = 'month' | 'year';
/**
* @api
*/
export type CalendarPanelMode = 'date' | 'week' | 'month' | 'quarter' | 'year' | 'decade';
export interface CalendarState {
value: CalendarProps['value'];
mode: CalendarMode;
panelMode: CalendarPanelMode;
panelValue: Dayjs;
}
export interface HeaderPanelProps extends Omit<CommonProps, 'locale'> {
panelValue: Dayjs;
locale: Locale['Calendar'];
onPanelValueChange: (value: Dayjs, type?: 'PANEL') => void;
onPrev?: OnPrevOrNext;
onNext?: OnPrevOrNext;
onSuperPrev?: OnPrevOrNext;
onSuperNext?: OnPrevOrNext;
mode: CalendarMode;
onModeChange: (mode: CalendarMode) => void;
validValue?: CalendarProps['validValue'];
panelMode: CalendarPanelMode;
onPanelModeChange: (mode: CalendarPanelMode) => void;
shape: CalendarProps['shape'];
showTitle: boolean;
value?: CalendarState['value'];
showModeSwitch: boolean;
renderHeaderExtra?: CalendarProps['renderHeaderExtra'];
headerRender?: CalendarProps['headerRender'];
titleRender?: CalendarProps['titleRender'];
}
/**
* @api
*/
export type CustomCellRender = (value: Dayjs) => React.ReactNode;
export interface DateTableProps extends Omit<CommonProps, 'locale'> {
mode: CalendarPanelMode;
panelValue: Dayjs;
colNum?: number;
hoveredState?: CalendarProps['hoveredState'];
cellClassName?: CalendarProps['cellClassName'];
dateCellRender?: CustomCellRender;
quarterCellRender?: CustomCellRender;
monthCellRender?: CustomCellRender;
yearCellRender?: CustomCellRender;
cellProps?: CalendarProps['cellProps'];
disabledDate?: CalendarProps['disabledDate'];
onSelect?: (v: Dayjs, e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, args: Pick<CellData, 'isCurrent' | 'label'>) => void;
value: ConfigType;
}
export interface DateTableState {
hoverValue: unknown;
}
/**
* @api
*/
export interface CellData {
value: Dayjs;
label: number | string;
isCurrent: boolean;
key: string | number;
}
export {};