refactor: date

pull/4499/head
tangjinzhou 2021-07-21 15:58:50 +08:00
parent e1277cdee0
commit 59085a1990
7 changed files with 29 additions and 26 deletions

View File

@ -1,4 +1,5 @@
import type { Ref, UnwrapRef } from 'vue'; import type { Ref, UnwrapRef } from 'vue';
import { toRaw } from 'vue';
import { watchEffect } from 'vue'; import { watchEffect } from 'vue';
import { unref } from 'vue'; import { unref } from 'vue';
import { watch } from 'vue'; import { watch } from 'vue';
@ -36,7 +37,7 @@ export default function useMergedState<T, R = Ref<T>>(
function triggerChange(newValue: T) { function triggerChange(newValue: T) {
const preVal = mergedValue.value; const preVal = mergedValue.value;
innerValue.value = newValue; innerValue.value = newValue;
if (mergedValue.value !== newValue && option.onChange) { if (toRaw(mergedValue.value) !== newValue && option.onChange) {
option.onChange(newValue, preVal); option.onChange(newValue, preVal);
} }
} }

View File

@ -47,9 +47,10 @@ export default function generateRangePicker<DateType>(generateConfig: GenerateCo
bordered = true, bordered = true,
placeholder, placeholder,
suffixIcon = slots.suffixIcon?.(), suffixIcon = slots.suffixIcon?.(),
picker = 'date',
...restProps ...restProps
} = p; } = p;
const { format, showTime, picker } = p as any; const { format, showTime } = p as any;
let additionalOverrideProps: any = {}; let additionalOverrideProps: any = {};
@ -76,6 +77,7 @@ export default function generateRangePicker<DateType>(generateConfig: GenerateCo
allowClear allowClear
transitionName={`${rootPrefixCls.value}-slide-up`} transitionName={`${rootPrefixCls.value}-slide-up`}
{...additionalOverrideProps} {...additionalOverrideProps}
picker={picker}
class={classNames( class={classNames(
{ {
[`${pre}-${size.value}`]: size.value, [`${pre}-${size.value}`]: size.value,

View File

@ -1,5 +1,5 @@
import type { Moment } from 'moment'; import type { Moment } from 'moment';
import { App } from 'vue'; import type { App } from 'vue';
import momentGenerateConfig from '../vc-picker/generate/moment'; import momentGenerateConfig from '../vc-picker/generate/moment';
import type { import type {
PickerProps, PickerProps,

View File

@ -566,7 +566,7 @@ function Picker<DateType>() {
inputReadOnly || typeof formatList.value[0] === 'function' || !typing.value inputReadOnly || typeof formatList.value[0] === 'function' || !typing.value
} }
value={hoverValue.value || text.value} value={hoverValue.value || text.value}
onChange={(e: ChangeEvent) => { onInput={(e: ChangeEvent) => {
triggerTextChange(e.target.value); triggerTextChange(e.target.value);
}} }}
autofocus={autofocus} autofocus={autofocus}

View File

@ -132,8 +132,8 @@ function PickerPanel<DateType>() {
defaultPickerValue: Object, defaultPickerValue: Object,
disabledDate: Function, disabledDate: Function,
mode: String, mode: String,
picker: String, picker: { type: String, default: 'date' },
tabindex: [Number, String], tabindex: { type: [Number, String], default: 0 },
showNow: Boolean, showNow: Boolean,
showTime: Boolean, showTime: Boolean,
showToday: Boolean, showToday: Boolean,
@ -430,7 +430,6 @@ function PickerPanel<DateType>() {
}; };
delete pickerProps.onChange; delete pickerProps.onChange;
delete pickerProps.onSelect; delete pickerProps.onSelect;
switch (mergedMode.value) { switch (mergedMode.value) {
case 'decade': case 'decade':
panelNode = ( panelNode = (

View File

@ -983,9 +983,8 @@ function RangerPicker<DateType>() {
}); });
if (picker !== 'time' && !showTime) { if (picker !== 'time' && !showTime) {
const viewDate = mergedActivePickerIndex.value const viewDate =
? startViewDate.value mergedActivePickerIndex.value === 0 ? startViewDate.value : endViewDate.value;
: endViewDate.value;
const nextViewDate = getClosingViewDate(viewDate, picker, generateConfig); const nextViewDate = getClosingViewDate(viewDate, picker, generateConfig);
const currentMode = mergedModes.value[mergedActivePickerIndex.value]; const currentMode = mergedModes.value[mergedActivePickerIndex.value];
@ -1166,7 +1165,7 @@ function RangerPicker<DateType>() {
inputReadOnly || typeof formatList.value[0] === 'function' || !startTyping.value inputReadOnly || typeof formatList.value[0] === 'function' || !startTyping.value
} }
value={startHoverValue.value || startText.value} value={startHoverValue.value || startText.value}
onChange={(e: ChangeEvent) => { onInput={(e: ChangeEvent) => {
triggerStartTextChange(e.target.value); triggerStartTextChange(e.target.value);
}} }}
autofocus={autofocus} autofocus={autofocus}
@ -1193,7 +1192,7 @@ function RangerPicker<DateType>() {
inputReadOnly || typeof formatList.value[0] === 'function' || !endTyping.value inputReadOnly || typeof formatList.value[0] === 'function' || !endTyping.value
} }
value={endHoverValue.value || endText.value} value={endHoverValue.value || endText.value}
onChange={(e: ChangeEvent) => { onInput={(e: ChangeEvent) => {
triggerEndTextChange(e.target.value); triggerEndTextChange(e.target.value);
}} }}
placeholder={getValue(placeholder, 1) || ''} placeholder={getValue(placeholder, 1) || ''}

View File

@ -2,7 +2,8 @@ import type { RangeValue, PickerMode } from '../interface';
import type { GenerateConfig } from '../generate'; import type { GenerateConfig } from '../generate';
import { getValue, updateValues } from '../utils/miscUtil'; import { getValue, updateValues } from '../utils/miscUtil';
import { getClosingViewDate, isSameYear, isSameMonth, isSameDecade } from '../utils/dateUtil'; import { getClosingViewDate, isSameYear, isSameMonth, isSameDecade } from '../utils/dateUtil';
import type { ComputedRef, Ref } from 'vue'; import type { Ref } from 'vue';
import { watch } from 'vue';
import { computed } from 'vue'; import { computed } from 'vue';
import { ref } from 'vue'; import { ref } from 'vue';
@ -73,11 +74,7 @@ export default function useRangeViewDates<DateType>({
picker: Ref<PickerMode>; picker: Ref<PickerMode>;
defaultDates: RangeValue<DateType> | undefined; defaultDates: RangeValue<DateType> | undefined;
generateConfig: Ref<GenerateConfig<DateType>>; generateConfig: Ref<GenerateConfig<DateType>>;
}): [ }): [Ref<DateType>, Ref<DateType>, (viewDate: DateType | null, index: 0 | 1) => void] {
ComputedRef<DateType>,
ComputedRef<DateType>,
(viewDate: DateType | null, index: 0 | 1) => void,
] {
const defaultViewDates = ref<[DateType | null, DateType | null]>([ const defaultViewDates = ref<[DateType | null, DateType | null]>([
getValue(defaultDates, 0), getValue(defaultDates, 0),
getValue(defaultDates, 1), getValue(defaultDates, 1),
@ -86,7 +83,7 @@ export default function useRangeViewDates<DateType>({
const startDate = computed(() => getValue(values.value, 0)); const startDate = computed(() => getValue(values.value, 0));
const endDate = computed(() => getValue(values.value, 1)); const endDate = computed(() => getValue(values.value, 1));
function getViewDate(index: 0 | 1): DateType { const getViewDate = (index: 0 | 1): DateType => {
// If set default view date, use it // If set default view date, use it
if (defaultViewDates.value[index]) { if (defaultViewDates.value[index]) {
return defaultViewDates.value[index]! as DateType; return defaultViewDates.value[index]! as DateType;
@ -99,14 +96,19 @@ export default function useRangeViewDates<DateType>({
endDate.value || endDate.value ||
generateConfig.value.getNow() generateConfig.value.getNow()
); );
} };
const startViewDate = computed(() => {
return getViewDate(0);
});
const endViewDate = computed(() => { const startViewDate = ref(null);
return getViewDate(1);
}); const endViewDate = ref(null);
watch(
viewDates,
() => {
startViewDate.value = getViewDate(0);
endViewDate.value = getViewDate(1);
},
{ immediate: true },
);
function setViewDate(viewDate: DateType | null, index: 0 | 1) { function setViewDate(viewDate: DateType | null, index: 0 | 1) {
if (viewDate) { if (viewDate) {