element-plus
Version:
A Component Library for Vue 3
76 lines (73 loc) • 2.38 kB
JavaScript
import { inject, ref, getCurrentInstance, computed, onMounted, watch, toRef, onUnmounted } from 'vue';
import { useId } from '../../../../hooks/use-id/index.mjs';
import { formContextKey, formItemContextKey } from '../constants.mjs';
const useFormItem = () => {
const form = inject(formContextKey, void 0);
const formItem = inject(formItemContextKey, void 0);
return {
form,
formItem
};
};
const useFormItemInputId = (props, {
formItemContext,
disableIdGeneration,
disableIdManagement
}) => {
if (!disableIdGeneration) {
disableIdGeneration = ref(false);
}
if (!disableIdManagement) {
disableIdManagement = ref(false);
}
const instance = getCurrentInstance();
const inLabel = () => {
let parent = instance == null ? void 0 : instance.parent;
while (parent) {
if (parent.type.name === "ElFormItem") {
return false;
}
if (parent.type.name === "ElLabelWrap") {
return true;
}
parent = parent.parent;
}
return false;
};
const inputId = ref();
let idUnwatch = void 0;
const isLabeledByFormItem = computed(() => {
var _a;
return !!(!(props.label || props.ariaLabel) && formItemContext && formItemContext.inputIds && ((_a = formItemContext.inputIds) == null ? void 0 : _a.length) <= 1);
});
onMounted(() => {
idUnwatch = watch(
[toRef(props, "id"), disableIdGeneration],
([id, disableIdGeneration2]) => {
const newId = id != null ? id : !disableIdGeneration2 ? useId().value : void 0;
if (newId !== inputId.value) {
if ((formItemContext == null ? void 0 : formItemContext.removeInputId) && !inLabel()) {
inputId.value && formItemContext.removeInputId(inputId.value);
if (!(disableIdManagement == null ? void 0 : disableIdManagement.value) && !disableIdGeneration2 && newId) {
formItemContext.addInputId(newId);
}
}
inputId.value = newId;
}
},
{ immediate: true }
);
});
onUnmounted(() => {
idUnwatch && idUnwatch();
if (formItemContext == null ? void 0 : formItemContext.removeInputId) {
inputId.value && formItemContext.removeInputId(inputId.value);
}
});
return {
isLabeledByFormItem,
inputId
};
};
export { useFormItem, useFormItemInputId };
//# sourceMappingURL=use-form-item.mjs.map