{"version":3,"file":"rockForm.obs.js","sources":["../../../Framework/Controls/rockForm.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\n<template>\n <form @submit.prevent.stop=\"onInternalSubmit()\">\n <RockValidation v-if=\"!hideErrors\" :errors=\"visibleErrors\" />\n <slot />\n </form>\n</template>\n\n<script setup lang=\"ts\">\n import { PropType, reactive, ref, watch } from \"vue\";\n import { FormError, FormState, provideFormState } from \"@Obsidian/Utility/form\";\n import { updateRefValue } from \"@Obsidian/Utility/component\";\n import RockValidation from \"./rockValidation.obs\";\n import { isPromise } from \"@Obsidian/Utility/promiseUtils\";\n\n const props = defineProps({\n /** True if the form should attempt to submit. */\n submit: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n\n /** True if the validation errors should not be displayed. */\n hideErrors: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n\n /**\n * This value can be used to reset the form to it's initial state.\n * Any time this value changes the submission count and error list\n * will be reset. This does not effect the values in the form controls.\n */\n formResetKey: {\n type: String as PropType<string>,\n default: \"\"\n },\n\n onSubmit: {\n type: Function as PropType<(() => void | PromiseLike<void>)>,\n required: false\n },\n });\n\n const emit = defineEmits<{\n // This contains all active errors even if the UI is not in sync.\n (e: \"validationChanged\", errors: FormError[]): void;\n // This contains just the errors that should be currently displayed in the UI.\n (e: \"visibleValidationChanged\", errors: FormError[]): void;\n (e: \"update:submit\", value: boolean): void;\n }>();\n\n const visibleErrors = ref<FormError[]>([]);\n const errorValues = ref<FormError[]>([]);\n const errors = ref<Record<string, FormError>>({});\n const submit = ref(props.submit);\n\n const onInternalSubmit = (): void => {\n submit.value = true;\n };\n\n // Construct the form state.\n const formState = reactive<FormState>({\n submitCount: 0,\n setError: (id: string, name: string, error: string): void => {\n const newErrors = {\n ...errors.value\n };\n\n // If this identifier has an error, then set the error.\n // Otherwise clear the error.\n if (error) {\n newErrors[id] = {\n name,\n text: error\n };\n }\n else {\n delete newErrors[id];\n }\n\n updateRefValue(errors, newErrors);\n }\n });\n\n provideFormState(formState);\n\n // Watch for requests to submit from the parent component.\n watch(() => props.submit, () => {\n if (submit.value !== props.submit) {\n submit.value = props.submit;\n }\n });\n\n // Watch for any submit actions and check the validation.\n watch(submit, async () => {\n if (submit.value) {\n formState.submitCount++;\n\n // Update the visible errors.\n visibleErrors.value = errorValues.value;\n emit(\"visibleValidationChanged\", visibleErrors.value);\n\n try {\n if (Object.keys(errors.value).length === 0) {\n const submitHandler = props.onSubmit;\n\n if (submitHandler) {\n const result = submitHandler();\n\n if (isPromise(result)) {\n await result;\n }\n }\n }\n }\n finally {\n submit.value = false;\n }\n }\n\n emit(\"update:submit\", submit.value);\n });\n\n // If any errors change then update the list of errors.\n watch(errors, () => {\n const values: FormError[] = [];\n\n for (const key in errors.value) {\n values.push(errors.value[key]);\n }\n\n errorValues.value = values;\n emit(\"validationChanged\", errorValues.value);\n });\n\n watch(() => props.formResetKey, () => {\n formState.submitCount = 0;\n updateRefValue(errors, {});\n updateRefValue(visibleErrors, []);\n emit(\"visibleValidationChanged\", visibleErrors.value);\n });\n</script>\n"],"names":["props","__props","emit","__emit","visibleErrors","ref","errorValues","errors","submit","onInternalSubmit","value","formState","reactive","submitCount","setError","id","name","error","newErrors","_objectSpread","text","updateRefValue","provideFormState","watch","_asyncToGenerator","Object","keys","length","submitHandler","onSubmit","result","isPromise","values","key","push","formResetKey"],"mappings":"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"}