UNPKG

@alifd/next

Version:

A configurable component library for web built on React.

250 lines (249 loc) 7.09 kB
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 {};