2024-01-29 09:26:07 +08:00

75 lines
1.8 KiB
JavaScript

import { computed, inject, provide, onBeforeUnmount } from 'vue';
import { createInjectionKey } from "../_utils/index.mjs";
export const formItemInjectionKey = createInjectionKey('n-form-item');
export default function useFormItem(props, {
defaultSize = 'medium',
mergedSize,
mergedDisabled
} = {}) {
const NFormItem = inject(formItemInjectionKey, null);
provide(formItemInjectionKey, null);
const mergedSizeRef = computed(mergedSize ? () => mergedSize(NFormItem) : () => {
const {
size
} = props;
if (size) return size;
if (NFormItem) {
const {
mergedSize
} = NFormItem;
if (mergedSize.value !== undefined) {
return mergedSize.value;
}
}
return defaultSize;
});
const mergedDisabledRef = computed(mergedDisabled ? () => mergedDisabled(NFormItem) : () => {
const {
disabled
} = props;
if (disabled !== undefined) {
return disabled;
}
if (NFormItem) {
return NFormItem.disabled.value;
}
return false;
});
const mergedStatusRef = computed(() => {
const {
status
} = props;
if (status) return status;
return NFormItem === null || NFormItem === void 0 ? void 0 : NFormItem.mergedValidationStatus.value;
});
onBeforeUnmount(() => {
if (NFormItem) {
NFormItem.restoreValidation();
}
});
return {
mergedSizeRef,
mergedDisabledRef,
mergedStatusRef,
nTriggerFormBlur() {
if (NFormItem) {
NFormItem.handleContentBlur();
}
},
nTriggerFormChange() {
if (NFormItem) {
NFormItem.handleContentChange();
}
},
nTriggerFormFocus() {
if (NFormItem) {
NFormItem.handleContentFocus();
}
},
nTriggerFormInput() {
if (NFormItem) {
NFormItem.handleContentInput();
}
}
};
}