{"version":3,"file":"useFormParent.mjs","sources":["../../../../../src/composables/useForm/useFormParent.ts"],"sourcesContent":["import { computed, provide, ref, shallowRef, type Ref, unref, toRef, UnwrapRef } from 'vue'\nimport { FormServiceKey } from './consts'\nimport { Form, FormFiled } from './types'\nimport { useFormChild } from './useFormChild'\nimport { createFormContext, FormParentOptions } from './formContext'\n\nexport const useFormParent = <Names extends string = string>(options: FormParentOptions): Form<Names> => {\n  const formContext = createFormContext<Names>(options)\n\n  provide<typeof formContext>(FormServiceKey, formContext)\n\n  const { fields, forceDirty } = formContext\n\n  const fieldNames = computed(() => fields.value.map((field) => unref(field.name)).filter(Boolean) as Names[])\n  const fieldsNamed = computed(() => fields.value.reduce((acc, field) => {\n    if (unref(field.name)) { acc[unref(field.name) as Names] = field }\n    return acc\n  }, {} as Record<Names, UnwrapRef<FormFiled>>))\n  const formData = computed(() => fields.value.reduce((acc, field) => {\n    if (unref(field.name)) { acc[unref(field.name) as Names] = unref(field.value) }\n    return acc\n  }, {} as Record<Names, UnwrapRef<FormFiled['value']>>))\n  const isValid = computed(() => fields.value.every((field) => unref(field.isValid)))\n  const isLoading = computed(() => fields.value.some((field) => unref(field.isLoading)))\n  const errorMessages = computed(() => fields.value.map((field) => unref(field.errorMessages)).flat())\n  const errorMessagesNamed = computed(() => fields.value.reduce((acc, field) => {\n    if (unref(field.name)) { acc[unref(field.name) as Names] = unref(field.errorMessages) }\n    return acc\n  }, {} as Record<Names, any>))\n  const isDirty = computed({\n    get () { return fields.value.some((field) => unref(field.isDirty)) || forceDirty.value },\n    set (v) {\n      forceDirty.value = v\n      fields.value.forEach((field) => { field.isDirty = v })\n    },\n  })\n  const isTouched = computed({\n    get () {\n      return fields.value.some((field) => field.isTouched)\n    },\n    set (v) {\n      fields.value.forEach((field) => { field.isTouched = v })\n    },\n  })\n\n  const validate = () => {\n    isDirty.value = true\n    // Validate each filed to get the error messages\n    return fields.value.reduce((acc, field) => {\n      return field.validate() && acc\n    }, true)\n  }\n\n  const validateAsync = () => {\n    isDirty.value = true\n    return Promise.all(fields.value.map((field) => field.validateAsync())).then((results) => {\n      return results.every(Boolean)\n    })\n  }\n\n  const reset = () => {\n    isDirty.value = false\n    fields.value.forEach((field) => field.reset())\n  }\n\n  const resetValidation = () => {\n    isDirty.value = false\n    fields.value.forEach((field) => field.resetValidation())\n  }\n\n  const focus = () => {\n    fields.value[0]?.focus()\n  }\n\n  const focusInvalidField = () => {\n    const invalidField = fields.value.find((field) => !field.isValid)\n\n    invalidField?.focus()\n  }\n\n  useFormChild({\n    name: toRef(options, 'name'),\n    isValid: isValid,\n    isLoading: isLoading,\n    isDirty: isDirty,\n    isTouched: isTouched,\n    validate,\n    validateAsync,\n    reset,\n    resetValidation,\n    focus,\n    errorMessages: errorMessages,\n  })\n\n  return {\n    immediate: computed(() => options.immediate),\n    isDirty,\n    isTouched,\n    formData,\n    fields,\n    fieldsNamed,\n    fieldNames,\n    isValid,\n    isLoading,\n    errorMessages,\n    errorMessagesNamed,\n    validate,\n    validateAsync,\n    reset,\n    resetValidation,\n    focus,\n    focusInvalidField,\n  }\n}\n"],"names":[],"mappings":"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"}