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

77 lines
1.9 KiB
Vue

import QuarterHeader from './QuarterHeader';
import QuarterBody from './QuarterBody';
import type { PanelSharedProps } from '../../interface';
import { createKeyDownHandler } from '../../utils/uiUtil';
export type QuarterPanelProps<DateType> = {} & PanelSharedProps<DateType>;
function QuarterPanel<DateType>(props: QuarterPanelProps<DateType>) {
const {
prefixCls,
operationRef,
onViewDateChange,
generateConfig,
value,
viewDate,
onPanelChange,
onSelect,
} = props;
const panelPrefixCls = `${prefixCls}-quarter-panel`;
// ======================= Keyboard =======================
operationRef.current = {
onKeyDown: event =>
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;