index.mjs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { inject, ref, computed, onMounted, watch, toRef, onUnmounted } from 'vue';
  2. import '../../tokens/index.mjs';
  3. import { useId } from '../use-id/index.mjs';
  4. import { formContextKey, formItemContextKey } from '../../tokens/form.mjs';
  5. const useFormItem = () => {
  6. const form = inject(formContextKey, void 0);
  7. const formItem = inject(formItemContextKey, void 0);
  8. return {
  9. form,
  10. formItem
  11. };
  12. };
  13. const useFormItemInputId = (props, {
  14. formItemContext,
  15. disableIdGeneration,
  16. disableIdManagement
  17. }) => {
  18. if (!disableIdGeneration) {
  19. disableIdGeneration = ref(false);
  20. }
  21. if (!disableIdManagement) {
  22. disableIdManagement = ref(false);
  23. }
  24. const inputId = ref();
  25. let idUnwatch = void 0;
  26. const isLabeledByFormItem = computed(() => {
  27. var _a;
  28. return !!(!props.label && formItemContext && formItemContext.inputIds && ((_a = formItemContext.inputIds) == null ? void 0 : _a.length) <= 1);
  29. });
  30. onMounted(() => {
  31. idUnwatch = watch([toRef(props, "id"), disableIdGeneration], ([id, disableIdGeneration2]) => {
  32. const newId = id != null ? id : !disableIdGeneration2 ? useId().value : void 0;
  33. if (newId !== inputId.value) {
  34. if (formItemContext == null ? void 0 : formItemContext.removeInputId) {
  35. inputId.value && formItemContext.removeInputId(inputId.value);
  36. if (!(disableIdManagement == null ? void 0 : disableIdManagement.value) && !disableIdGeneration2 && newId) {
  37. formItemContext.addInputId(newId);
  38. }
  39. }
  40. inputId.value = newId;
  41. }
  42. }, { immediate: true });
  43. });
  44. onUnmounted(() => {
  45. idUnwatch && idUnwatch();
  46. if (formItemContext == null ? void 0 : formItemContext.removeInputId) {
  47. inputId.value && formItemContext.removeInputId(inputId.value);
  48. }
  49. });
  50. return {
  51. isLabeledByFormItem,
  52. inputId
  53. };
  54. };
  55. export { useFormItem, useFormItemInputId };
  56. //# sourceMappingURL=index.mjs.map