ant-design-vue/components/vc-picker/panels/QuarterPanel/index.tsx

77 lines
2.0 KiB
Vue

import QuarterHeader from './QuarterHeader';
import QuarterBody from './QuarterBody';
import type { PanelSharedProps } from '../../interface';
import { createKeydownHandler } from '../../utils/uiUtil';
import useMergeProps from '../../hooks/useMergeProps';
export type QuarterPanelProps<DateType> = {} & PanelSharedProps<DateType>;
function QuarterPanel<DateType>(_props: QuarterPanelProps<DateType>) {
const props = useMergeProps(_props);
const {
prefixCls,
operationRef,
onViewDateChange,
generateConfig,
value,
viewDate,
onPanelChange,
onSelect,
} = props;
const panelPrefixCls = `${prefixCls}-quarter-panel`;
// ======================= Keyboard =======================
operationRef.value = {
onKeydown: (event: KeyboardEvent) =>
createKeydownHandler(event, {
onLeftRight: diff => {
onSelect(generateConfig.addMonth(value || viewDate, diff * 3), 'key');
},
onCtrlLeftRight: diff => {
onSelect(generateConfig.addYear(value || viewDate, diff), 'key');
},
onUpDown: diff => {
onSelect(generateConfig.addYear(value || viewDate, diff), 'key');
},
}),
};
// ==================== View Operation ====================
const onYearChange = (diff: number) => {
const newDate = generateConfig.addYear(viewDate, diff);
onViewDateChange(newDate);
onPanelChange(null, newDate);
};
return (
<div class={panelPrefixCls}>
<QuarterHeader
{...props}
prefixCls={prefixCls}
onPrevYear={() => {
onYearChange(-1);
}}
onNextYear={() => {
onYearChange(1);
}}
onYearClick={() => {
onPanelChange('year', viewDate);
}}
/>
<QuarterBody<DateType>
{...props}
prefixCls={prefixCls}
onSelect={date => {
onSelect(date, 'mouse');
}}
/>
</div>
);
}
QuarterPanel.displayName = 'QuarterPanel';
QuarterPanel.inheritAttrs = false;
export default QuarterPanel;