time-picker: simple optimization
parent
723bb47a42
commit
d0a0f9f8bc
|
|
@ -77,6 +77,34 @@ function createTimePicker<
|
||||||
});
|
});
|
||||||
|
|
||||||
const { TimePicker: InternalTimePicker, RangePicker: InternalRangePicker } = DatePicker as any;
|
const { TimePicker: InternalTimePicker, RangePicker: InternalRangePicker } = DatePicker as any;
|
||||||
|
|
||||||
|
const usePickerExpose = (pickerRef: Ref) => ({
|
||||||
|
focus: () => pickerRef.value?.focus?.(),
|
||||||
|
blur: () => pickerRef.value?.blur?.(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const useFormItemEvents = (emit: any, formItemContext: any) => ({
|
||||||
|
onChange: (value: any, dateString: any) => {
|
||||||
|
emit('update:value', value);
|
||||||
|
emit('change', value, dateString);
|
||||||
|
formItemContext.onFieldChange();
|
||||||
|
},
|
||||||
|
onBlur: (e: FocusEvent) => {
|
||||||
|
emit('blur', e);
|
||||||
|
formItemContext.onFieldBlur();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const useCommonEvents = (emit: any) => ({
|
||||||
|
onOpenChange: (open: boolean) => {
|
||||||
|
emit('update:open', open);
|
||||||
|
emit('openChange', open);
|
||||||
|
},
|
||||||
|
onFocus: (e: FocusEvent) => {
|
||||||
|
emit('focus', e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const TimePicker = defineComponent<DTimePickerProps>({
|
const TimePicker = defineComponent<DTimePickerProps>({
|
||||||
name: 'ATimePicker',
|
name: 'ATimePicker',
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
|
|
@ -96,53 +124,37 @@ function createTimePicker<
|
||||||
setup(p, { slots, expose, emit, attrs }) {
|
setup(p, { slots, expose, emit, attrs }) {
|
||||||
const props = p as unknown as DTimePickerProps;
|
const props = p as unknown as DTimePickerProps;
|
||||||
const formItemContext = useInjectFormItemContext();
|
const formItemContext = useInjectFormItemContext();
|
||||||
|
const pickerRef = ref();
|
||||||
|
|
||||||
devWarning(
|
devWarning(
|
||||||
!(slots.addon || props.addon),
|
!(slots.addon || props.addon),
|
||||||
'TimePicker',
|
'TimePicker',
|
||||||
'`addon` is deprecated. Please use `v-slot:renderExtraFooter` instead.',
|
'`addon` is deprecated. Please use `v-slot:renderExtraFooter` instead.',
|
||||||
);
|
);
|
||||||
const pickerRef = ref();
|
|
||||||
expose({
|
expose(usePickerExpose(pickerRef));
|
||||||
focus: () => {
|
|
||||||
pickerRef.value?.focus();
|
const { onChange, onBlur } = useFormItemEvents(emit, formItemContext);
|
||||||
},
|
const { onOpenChange, onFocus } = useCommonEvents(emit);
|
||||||
blur: () => {
|
|
||||||
pickerRef.value?.blur();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const onChange = (value: DateType | string, dateString: string) => {
|
|
||||||
emit('update:value', value);
|
|
||||||
emit('change', value, dateString);
|
|
||||||
formItemContext.onFieldChange();
|
|
||||||
};
|
|
||||||
const onOpenChange = (open: boolean) => {
|
|
||||||
emit('update:open', open);
|
|
||||||
emit('openChange', open);
|
|
||||||
};
|
|
||||||
const onFocus = (e: FocusEvent) => {
|
|
||||||
emit('focus', e);
|
|
||||||
};
|
|
||||||
const onBlur = (e: FocusEvent) => {
|
|
||||||
emit('blur', e);
|
|
||||||
formItemContext.onFieldBlur();
|
|
||||||
};
|
|
||||||
const onOk = (value: DateType) => {
|
const onOk = (value: DateType) => {
|
||||||
emit('ok', value);
|
emit('ok', value);
|
||||||
};
|
};
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
const { id = formItemContext.id.value } = props;
|
const { id = formItemContext.id.value } = props;
|
||||||
//restProps.addon
|
const renderExtraFooter = props.addon || slots.addon || props.renderExtraFooter || slots.renderExtraFooter;
|
||||||
|
const omittedProps = omit(props, ['onUpdate:value', 'onUpdate:open']);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<InternalTimePicker
|
<InternalTimePicker
|
||||||
{...attrs}
|
{...attrs}
|
||||||
{...omit(props, ['onUpdate:value', 'onUpdate:open'])}
|
{...omittedProps}
|
||||||
id={id}
|
id={id}
|
||||||
dropdownClassName={props.popupClassName}
|
dropdownClassName={props.popupClassName}
|
||||||
mode={undefined}
|
mode={undefined}
|
||||||
ref={pickerRef}
|
ref={pickerRef}
|
||||||
renderExtraFooter={
|
renderExtraFooter={renderExtraFooter}
|
||||||
props.addon || slots.addon || props.renderExtraFooter || slots.renderExtraFooter
|
|
||||||
}
|
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
onOpenChange={onOpenChange}
|
onOpenChange={onOpenChange}
|
||||||
onFocus={onFocus}
|
onFocus={onFocus}
|
||||||
|
|
@ -174,42 +186,23 @@ function createTimePicker<
|
||||||
const props = p as unknown as DTimeRangePickerProps;
|
const props = p as unknown as DTimeRangePickerProps;
|
||||||
const pickerRef = ref();
|
const pickerRef = ref();
|
||||||
const formItemContext = useInjectFormItemContext();
|
const formItemContext = useInjectFormItemContext();
|
||||||
expose({
|
|
||||||
focus: () => {
|
expose(usePickerExpose(pickerRef));
|
||||||
pickerRef.value?.focus();
|
|
||||||
},
|
const { onChange, onBlur } = useFormItemEvents(emit, formItemContext);
|
||||||
blur: () => {
|
const { onOpenChange, onFocus } = useCommonEvents(emit);
|
||||||
pickerRef.value?.blur();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const onChange = (
|
|
||||||
values: RangeValue<string> | RangeValue<DateType>,
|
|
||||||
dateStrings: [string, string],
|
|
||||||
) => {
|
|
||||||
emit('update:value', values);
|
|
||||||
emit('change', values, dateStrings);
|
|
||||||
formItemContext.onFieldChange();
|
|
||||||
};
|
|
||||||
const onOpenChange = (open: boolean) => {
|
|
||||||
emit('update:open', open);
|
|
||||||
emit('openChange', open);
|
|
||||||
};
|
|
||||||
const onFocus = (e: FocusEvent) => {
|
|
||||||
emit('focus', e);
|
|
||||||
};
|
|
||||||
const onBlur = (e: FocusEvent) => {
|
|
||||||
emit('blur', e);
|
|
||||||
formItemContext.onFieldBlur();
|
|
||||||
};
|
|
||||||
const onPanelChange = (
|
const onPanelChange = (
|
||||||
values: RangeValue<string> | RangeValue<DateType>,
|
values: RangeValue<string> | RangeValue<DateType>,
|
||||||
modes: [PanelMode, PanelMode],
|
modes: [PanelMode, PanelMode],
|
||||||
) => {
|
) => {
|
||||||
emit('panelChange', values, modes);
|
emit('panelChange', values, modes);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onOk = (values: RangeValue<string | DateType>) => {
|
const onOk = (values: RangeValue<string | DateType>) => {
|
||||||
emit('ok', values);
|
emit('ok', values);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onCalendarChange: RangePickerSharedProps<DateType>['onCalendarChange'] = (
|
const onCalendarChange: RangePickerSharedProps<DateType>['onCalendarChange'] = (
|
||||||
values: RangeValue<string> | RangeValue<DateType>,
|
values: RangeValue<string> | RangeValue<DateType>,
|
||||||
dateStrings: [string, string],
|
dateStrings: [string, string],
|
||||||
|
|
@ -217,12 +210,15 @@ function createTimePicker<
|
||||||
) => {
|
) => {
|
||||||
emit('calendarChange', values, dateStrings, info);
|
emit('calendarChange', values, dateStrings, info);
|
||||||
};
|
};
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
const { id = formItemContext.id.value } = props;
|
const { id = formItemContext.id.value } = props;
|
||||||
|
const omittedProps = omit(props, ['onUpdate:open', 'onUpdate:value'] as any);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<InternalRangePicker
|
<InternalRangePicker
|
||||||
{...attrs}
|
{...attrs}
|
||||||
{...omit(props, ['onUpdate:open', 'onUpdate:value'] as any)}
|
{...omittedProps}
|
||||||
id={id}
|
id={id}
|
||||||
dropdownClassName={props.popupClassName}
|
dropdownClassName={props.popupClassName}
|
||||||
picker="time"
|
picker="time"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue