75 lines
1.8 KiB
JavaScript
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();
|
|
}
|
|
}
|
|
};
|
|
} |