vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 6.2 kB
Source Map (JSON)
{"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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"}