refactor: calendar

pull/4499/head
tangjinzhou 2021-08-09 09:08:11 +08:00
parent e4a606379e
commit c69495a5ea
73 changed files with 123 additions and 132 deletions

View File

@ -1,9 +1,10 @@
import Select from '../select';
import { Group, Button } from '../radio';
import { CalendarMode } from './generateCalendar';
import { defineComponent, ref, Ref } from 'vue';
import { Locale } from '../vc-picker/interface';
import { GenerateConfig } from '../vc-picker/generate';
import type { CalendarMode } 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';
const YearSelectOffset = 10;
const YearSelectTotal = 20;
@ -72,6 +73,7 @@ function YearSelect<DateType>(props: SharedProps<DateType>) {
/>
);
}
YearSelect.inheritAttrs = false;
function MonthSelect<DateType>(props: SharedProps<DateType>) {
const { prefixCls, fullscreen, validRange, value, generateConfig, locale, onChange, divRef } =
@ -115,6 +117,8 @@ function MonthSelect<DateType>(props: SharedProps<DateType>) {
);
}
MonthSelect.inheritAttrs = false;
interface ModeSwitchProps<DateType> extends Omit<SharedProps<DateType>, 'onChange'> {
mode: CalendarMode;
onModeChange: (type: CalendarMode) => void;
@ -136,6 +140,7 @@ function ModeSwitch<DateType>(props: ModeSwitchProps<DateType>) {
</Group>
);
}
ModeSwitch.inheritAttrs = false;
export interface CalendarHeaderProps<DateType> {
prefixCls: string;
@ -151,6 +156,7 @@ export interface CalendarHeaderProps<DateType> {
export default defineComponent<CalendarHeaderProps<any>>({
name: 'CalendarHeader',
inheritAttrs: false,
setup(_props, { attrs }) {
const divRef = ref<HTMLDivElement>(null);
return () => {

View File

@ -1,4 +1,4 @@
import { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs';
import generateConfig from '../vc-picker/generate/dayjs';
import { withInstall } from '../_util/type';
import generateCalendar, { CalendarProps } from './generateCalendar';

View File

@ -1,9 +1,9 @@
import useMergedState from '../_util/hooks/useMergedState';
import padStart from 'lodash-es/padStart';
import { PickerPanel as RCPickerPanel } from '../vc-picker';
import { Locale } from '../vc-picker/interface';
import { GenerateConfig } from '../vc-picker/generate';
import {
import { PickerPanel } from '../vc-picker';
import type { Locale } from '../vc-picker/interface';
import type { GenerateConfig } from '../vc-picker/generate';
import type {
PickerPanelBaseProps as RCPickerPanelBaseProps,
PickerPanelDateProps as RCPickerPanelDateProps,
PickerPanelTimeProps as RCPickerPanelTimeProps,
@ -11,8 +11,9 @@ import {
import { useLocaleReceiver } from '../locale-provider/LocaleReceiver';
import enUS from './locale/en_US';
import CalendarHeader from './Header';
import { VueNode } from '../_util/type';
import { App, computed, defineComponent, toRef } from 'vue';
import type { VueNode } from '../_util/type';
import type { App } from 'vue';
import { computed, defineComponent, toRef } from 'vue';
import useConfigInject from '../_util/hooks/useConfigInject';
import classNames from '../_util/classNames';
@ -255,11 +256,11 @@ function generateCalendar<DateType>(generateConfig: GenerateConfig<DateType>) {
<div
{...attrs}
class={classNames(
calendarPrefixCls,
calendarPrefixCls.value,
{
[`${calendarPrefixCls}-full`]: fullscreen,
[`${calendarPrefixCls}-mini`]: !fullscreen,
[`${calendarPrefixCls}-rtl`]: direction.value === 'rtl',
[`${calendarPrefixCls.value}-full`]: fullscreen,
[`${calendarPrefixCls.value}-mini`]: !fullscreen,
[`${calendarPrefixCls.value}-rtl`]: direction.value === 'rtl',
},
attrs.class,
)}
@ -285,7 +286,7 @@ function generateCalendar<DateType>(generateConfig: GenerateConfig<DateType>) {
/>
)}
<RCPickerPanel
<PickerPanel
value={mergedValue.value}
prefixCls={prefixCls.value}
locale={mergedLocale.value.lang}

View File

@ -1,4 +1,4 @@
import { Moment } from 'moment';
import type { Moment } from 'moment';
import generateConfig from '../vc-picker/generate/moment';
import { withInstall } from '../_util/type';
import generateCalendar, { CalendarProps } from './generateCalendar';

View File

@ -6,7 +6,7 @@ import type {
RangePickerProps as BaseRangePickerProps,
} from './generatePicker';
import generatePicker from './generatePicker';
import { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props';
import type { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props';
export type DatePickerProps = PickerProps<Date> & ExtraDatePickerProps<Date>;
export type MonthPickerProps = Omit<PickerDateProps<Date>, 'picker'> & ExtraDatePickerProps<Date>;

View File

@ -7,7 +7,7 @@ import type {
RangePickerProps as BaseRangePickerProps,
} from './generatePicker';
import generatePicker from './generatePicker';
import { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props';
import type { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props';
export type DatePickerProps = PickerProps<Dayjs> & ExtraDatePickerProps<Dayjs>;
export type MonthPickerProps = Omit<PickerDateProps<Dayjs>, 'picker'> & ExtraDatePickerProps<Dayjs>;

View File

@ -12,9 +12,10 @@ import { getTimeProps, Components } from '.';
import { computed, defineComponent, ref } from 'vue';
import useConfigInject from '../../_util/hooks/useConfigInject';
import classNames from '../../_util/classNames';
import { commonProps, ExtraRangePickerProps, rangePickerProps } from './props';
import { PanelMode, RangeValue } from '../../vc-picker/interface';
import { RangePickerSharedProps } from '../../vc-picker/RangePicker';
import type { ExtraRangePickerProps } from './props';
import { commonProps, rangePickerProps } from './props';
import type { PanelMode, RangeValue } from '../../vc-picker/interface';
import type { RangePickerSharedProps } from '../../vc-picker/RangePicker';
import devWarning from '../../vc-util/devWarning';
export default function generateRangePicker<DateType>(

View File

@ -9,10 +9,12 @@ import { getPlaceholder } from '../util';
import { useLocaleReceiver } from '../../locale-provider/LocaleReceiver';
import type { PickerProps, PickerDateProps, PickerTimeProps } from '.';
import { getTimeProps, Components } from '.';
import { computed, DefineComponent, defineComponent, ref } from 'vue';
import type { DefineComponent } from 'vue';
import { computed, defineComponent, ref } from 'vue';
import useConfigInject from '../../_util/hooks/useConfigInject';
import classNames from '../../_util/classNames';
import { commonProps, datePickerProps, ExtraDatePickerProps } from './props';
import type { ExtraDatePickerProps } from './props';
import { commonProps, datePickerProps } from './props';
import devWarning from '../../vc-util/devWarning';
export default function generatePicker<DateType>(

View File

@ -7,7 +7,7 @@ import type {
RangePickerProps as BaseRangePickerProps,
} from './generatePicker';
import generatePicker from './generatePicker';
import { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props';
import type { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props';
export type DatePickerProps = PickerProps<Moment> & ExtraDatePickerProps<Moment>;
export type MonthPickerProps = Omit<PickerDateProps<Moment>, 'picker'> &

View File

@ -1,4 +1,5 @@
import type { VNodeTypes, PropType, ComputedRef } from 'vue';
import { toRefs, unref } from 'vue';
import { inject, defineComponent, computed } from 'vue';
import PropTypes from '../_util/vue-types';
import defaultLocaleData from './default';
@ -66,13 +67,13 @@ type LocaleComponent = keyof Locale;
export function useLocaleReceiver<T extends LocaleComponent>(
componentName: T,
defaultLocale?: Locale[T] | Function,
defaultLocale?: Locale[T] | Function | ComputedRef<Locale[T] | Function>,
): [ComputedRef<Locale[T]>] {
const localeData = inject<LocaleReceiverContext>('localeData', {} as LocaleReceiverContext);
const componentLocale = computed<Locale[T]>(() => {
const { antLocale } = localeData;
const locale =
defaultLocale || (defaultLocaleData as LocaleInterface)[componentName || 'global'];
unref(defaultLocale) || (defaultLocaleData as LocaleInterface)[componentName || 'global'];
const localeFromContext = componentName && antLocale ? antLocale[componentName] : {};
return {

View File

@ -1,7 +1,7 @@
import createTimePicker from './time-picker';
import dateFnsGenerateConfig from '../vc-picker/generate/dateFns';
import { App } from 'vue';
import { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
import type { App } from 'vue';
import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
const { TimePicker, TimeRangePicker } = createTimePicker<Date>(dateFnsGenerateConfig);

View File

@ -1,8 +1,8 @@
import { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs';
import createTimePicker from './time-picker';
import dayjsGenerateConfig from '../vc-picker/generate/dayjs';
import { App } from 'vue';
import { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
import type { App } from 'vue';
import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
const { TimePicker, TimeRangePicker } = createTimePicker<Dayjs>(dayjsGenerateConfig);

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'اختيار الوقت',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Vaxtı seç',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Избор на час',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Выберыце час',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Seleccionar hora',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Vybrat čas',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Vælg tid',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Zeit auswählen',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Επιλέξτε ώρα',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Select time',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Select time',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Seleccionar hora',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Vali aeg',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'انتخاب زمان',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Valitse aika',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: "Sélectionner l'heure",

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: "Sélectionner l'heure",

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: "Sélectionner l'heure",

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Roghnaigh am',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Escolla hora',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'בחר שעה',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'समय का चयन करें',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Odaberite vrijeme',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Válasszon időt',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Pilih waktu',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Velja tíma',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: "Selezionare l'orario",

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: '時間を選択',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Уақытты таңдаңыз',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Demê hilbijêre',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'ಸಮಯ ಆಯ್ಕೆಮಾಡಿ',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: '시간 선택',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Pasirinkite laiką',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Izvēlieties laiku',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Избери време',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Цаг сонгох',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Sila pilih masa',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Velg tid',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Selecteer tijd',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Selecteer tijd',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Wybierz godzinę',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Hora',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Hora',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Selectează ora',

View File

@ -1,5 +1,5 @@
/** Created by Andrey Gayvoronsky on 13/04/16. */
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Выберите время',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Vybrať čas',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Izberite čas',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Izaberi vreme',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Välj tid',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'நேரத்தைத் தேர்ந்தெடுக்கவும்',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'เลือกเวลา',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Zaman seç',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Оберіть час',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: 'Chọn thời gian',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: '请选择时间',

View File

@ -1,4 +1,4 @@
import { TimePickerLocale } from '../index';
import type { TimePickerLocale } from '../index';
const locale: TimePickerLocale = {
placeholder: '請選擇時間',

View File

@ -1,8 +1,8 @@
import { Moment } from 'moment';
import type { Moment } from 'moment';
import createTimePicker from './time-picker';
import momentGenerateConfig from '../vc-picker/generate/moment';
import { App } from 'vue';
import { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
import type { App } from 'vue';
import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
const { TimePicker, TimeRangePicker } = createTimePicker<Moment>(momentGenerateConfig);

View File

@ -1,16 +1,14 @@
import { defineComponent, ref } from 'vue';
import generatePicker, {
PickerTimeProps,
RangePickerTimeProps,
} from '../date-picker/generatePicker';
import type { PickerTimeProps, RangePickerTimeProps } from '../date-picker/generatePicker';
import generatePicker from '../date-picker/generatePicker';
import {
commonProps,
datePickerProps,
rangePickerProps,
} from '../date-picker/generatePicker/props';
import { GenerateConfig } from '../vc-picker/generate';
import { PanelMode, RangeValue } from '../vc-picker/interface';
import { RangePickerSharedProps } from '../vc-picker/RangePicker';
import type { GenerateConfig } from '../vc-picker/generate';
import type { PanelMode, RangeValue } from '../vc-picker/interface';
import type { RangePickerSharedProps } from '../vc-picker/RangePicker';
import devWarning from '../vc-util/devWarning';
export interface TimePickerLocale {

View File

@ -32,7 +32,7 @@ export const useProvidePanel = (props: PanelContextProps) => {
};
export const useInjectPanel = () => {
return inject(PanelContextKey);
return inject(PanelContextKey, {});
};
export default PanelContextKey;

View File

@ -36,7 +36,7 @@ import type { AlignType } from '../vc-align/interface';
import useMergedState from '../_util/hooks/useMergedState';
import { warning } from '../vc-util/warning';
import classNames from '../_util/classNames';
import { SharedTimeProps } from './panels/TimePanel';
import type { SharedTimeProps } from './panels/TimePanel';
export type PickerRefConfig = {
focus: () => void;

View File

@ -1,39 +1,21 @@
<template>
<div>
<demo />
</div>
<a-calendar v-model:value="value" @panelChange="onPanelChange" />
</template>
<script>
import { defineComponent } from 'vue';
import demo from '../v2-doc/src/docs/time-picker/demo/index.vue';
// import Affix from '../components/affix';
<script lang="ts">
import { defineComponent, ref } from 'vue';
import { Dayjs } from 'dayjs';
export default defineComponent({
components: {
demo,
// Affix,
},
data() {
return {
visible: false,
pStyle: {
fontSize: '16px',
color: 'rgba(0,0,0,0.85)',
lineHeight: '24px',
display: 'block',
marginBottom: '16px',
},
pStyle2: {
marginBottom: '24px',
},
setup() {
const value = ref<Dayjs>();
const onPanelChange = (value: Dayjs, mode: string) => {
console.log(value, mode);
};
return {
value,
onPanelChange,
};
},
methods: {
showDrawer() {
this.visible = true;
},
onClose() {
this.visible = false;
},
},
});
</script>