import Select from '../select'; import { Group, Button } from '../radio'; import type { CalendarMode, SelectInfo } from './generateCalendar'; import type { Ref } from 'vue'; import { defineComponent, ref } from 'vue'; import type { Locale } from '../vc-picker/interface'; import type { GenerateConfig } from '../vc-picker/generate'; import { FormItemInputContext } from '../form/FormItemContext'; const YearSelectOffset = 10; const YearSelectTotal = 20; interface SharedProps { prefixCls: string; value: DateType; validRange?: [DateType, DateType]; generateConfig: GenerateConfig; locale: Locale; fullscreen: boolean; divRef: Ref; onChange: (year: DateType) => void; } function YearSelect(props: SharedProps) { const { fullscreen, validRange, generateConfig, locale, prefixCls, value, onChange, divRef } = props; const year = generateConfig.getYear(value || generateConfig.getNow()); let start = year - YearSelectOffset; let end = start + YearSelectTotal; if (validRange) { start = generateConfig.getYear(validRange[0]); end = generateConfig.getYear(validRange[1]) + 1; } const suffix = locale && locale.year === '年' ? '年' : ''; const options: { label: string; value: number }[] = []; for (let index = start; index < end; index++) { options.push({ label: `${index}${suffix}`, value: index }); } return ( { onChange(generateConfig.setMonth(value, newMonth)); }} getPopupContainer={() => divRef!.value!} /> ); } MonthSelect.inheritAttrs = false; interface ModeSwitchProps extends Omit, 'onChange'> { mode: CalendarMode; onModeChange: (type: CalendarMode) => void; } function ModeSwitch(props: ModeSwitchProps) { const { prefixCls, locale, mode, fullscreen, onModeChange } = props; return ( { onModeChange(value); }} value={mode} size={fullscreen ? undefined : 'small'} class={`${prefixCls}-mode-switch`} > ); } ModeSwitch.inheritAttrs = false; export interface CalendarHeaderProps { prefixCls: string; value: DateType; validRange?: [DateType, DateType]; generateConfig: GenerateConfig; locale: Locale; mode: CalendarMode; fullscreen: boolean; onChange: (date: DateType, source: SelectInfo['source']) => void; onModeChange: (mode: CalendarMode) => void; } export default defineComponent>({ name: 'CalendarHeader', inheritAttrs: false, props: [ 'mode', 'prefixCls', 'value', 'validRange', 'generateConfig', 'locale', 'mode', 'fullscreen', ] as any, setup(_props, { attrs }) { const divRef = ref(null); const formItemInputContext = FormItemInputContext.useInject(); FormItemInputContext.useProvide(formItemInputContext, { isFormItemInput: false }); return () => { const props = { ..._props, ...attrs }; const { prefixCls, fullscreen, mode, onChange, onModeChange } = props; const sharedProps = { ...props, fullscreen, divRef, } as any; return (
{ onChange(v, 'year'); }} /> {mode === 'month' && ( { onChange(v, 'month'); }} /> )}
); }; }, });