import TimeHeader from './TimeHeader'; import type { BodyOperationRef } from './TimeBody'; import TimeBody from './TimeBody'; import type { PanelSharedProps, DisabledTimes } from '../../interface'; import { createKeyDownHandler } from '../../utils/uiUtil'; import classNames from '../../../_util/classNames'; import { ref } from '@vue/reactivity'; export type SharedTimeProps = { format?: string; showNow?: boolean; showHour?: boolean; showMinute?: boolean; showSecond?: boolean; use12Hours?: boolean; hourStep?: number; minuteStep?: number; secondStep?: number; hideDisabledOptions?: boolean; defaultValue?: DateType; } & DisabledTimes; export type TimePanelProps = { format?: string; active?: boolean; } & PanelSharedProps & SharedTimeProps; const countBoolean = (boolList: (boolean | undefined)[]) => boolList.filter(bool => bool !== false).length; function TimePanel(props: TimePanelProps) { const { generateConfig, format = 'HH:mm:ss', prefixCls, active, operationRef, showHour, showMinute, showSecond, use12Hours = false, onSelect, value, } = props; const panelPrefixCls = `${prefixCls}-time-panel`; const bodyOperationRef = ref(); // ======================= Keyboard ======================= const activeColumnIndex = ref(-1); const columnsCount = countBoolean([showHour, showMinute, showSecond, use12Hours]); operationRef.current = { onKeyDown: event => createKeyDownHandler(event, { onLeftRight: diff => { activeColumnIndex.value = (activeColumnIndex.value + diff + columnsCount) % columnsCount; }, onUpDown: diff => { if (activeColumnIndex.value === -1) { activeColumnIndex.value = 0 } else if (bodyOperationRef.value) { bodyOperationRef.value.onUpDown(diff); } }, onEnter: () => { onSelect(value || generateConfig.getNow(), 'key'); activeColumnIndex.value = -1 }, }), onBlur: () => { activeColumnIndex.value = -1 }, }; return (
); } TimePanel.displayName ='TimePanel' TimePanel.inheritAttrs = false; export default TimePanel;