{"version":3,"file":"rockForm.js","sources":["../../../Framework/Controls/rockForm.ts"],"sourcesContent":["// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\nimport { defineComponent, PropType, reactive, ref, watch } from \"vue\";\r\nimport { FormError, FormState, provideFormState } from \"@Obsidian/Utility/form\";\r\nimport { updateRefValue } from \"@Obsidian/Utility/component\";\r\nimport RockValidation from \"./rockValidation\";\r\n\r\nexport default defineComponent({\r\n name: \"RockForm\",\r\n\r\n components: {\r\n RockValidation\r\n },\r\n\r\n props: {\r\n /** True if the form should attempt to submit. */\r\n submit: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n /** True if the validation errors should not be displayed. */\r\n hideErrors: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n /**\r\n * This value can be used to reset the form to it's initial state.\r\n * Any time this value changes the submission count and error list\r\n * will be reset. This does not effect the values in the form controls.\r\n */\r\n formResetKey: {\r\n type: String as PropType,\r\n default: \"\"\r\n }\r\n },\r\n\r\n emits: {\r\n \"submit\": () => true,\r\n // This contains all active errors even if the UI is not in sync.\r\n \"validationChanged\": (_errors: FormError[]) => true,\r\n // This contains just the errors that should be currently displayed in the UI.\r\n \"visibleValidationChanged\": (_errors: FormError[]) => true,\r\n \"update:submit\": (_value: boolean) => true\r\n },\r\n\r\n setup(props, { emit }) {\r\n const visibleErrors = ref([]);\r\n const errorValues = ref([]);\r\n const errors = ref>({});\r\n const submit = ref(props.submit);\r\n\r\n const onInternalSubmit = (): void => {\r\n submit.value = true;\r\n };\r\n\r\n // Construct the form state.\r\n const formState = reactive({\r\n submitCount: 0,\r\n setError: (id: string, name: string, error: string): void => {\r\n const newErrors = {\r\n ...errors.value\r\n };\r\n\r\n // If this identifier has an error, then set the error.\r\n // Otherwise clear the error.\r\n if (error) {\r\n newErrors[id] = {\r\n name,\r\n text: error\r\n };\r\n }\r\n else {\r\n delete newErrors[id];\r\n }\r\n\r\n updateRefValue(errors, newErrors);\r\n }\r\n });\r\n\r\n provideFormState(formState);\r\n\r\n // Watch for requests to submit from the parent component.\r\n watch(() => props.submit, () => {\r\n if (submit.value !== props.submit) {\r\n submit.value = props.submit;\r\n }\r\n });\r\n\r\n // Watch for any submit actions and check the validation.\r\n watch(submit, () => {\r\n if (submit.value) {\r\n formState.submitCount++;\r\n\r\n // Update the visible errors.\r\n visibleErrors.value = errorValues.value;\r\n emit(\"visibleValidationChanged\", visibleErrors.value);\r\n\r\n if (Object.keys(errors.value).length === 0) {\r\n emit(\"submit\");\r\n }\r\n\r\n submit.value = false;\r\n }\r\n\r\n emit(\"update:submit\", submit.value);\r\n });\r\n\r\n // If any errors change then update the list of errors.\r\n watch(errors, () => {\r\n const values: FormError[] = [];\r\n\r\n for (const key in errors.value) {\r\n values.push(errors.value[key]);\r\n }\r\n\r\n errorValues.value = values;\r\n emit(\"validationChanged\", errorValues.value);\r\n });\r\n\r\n watch(() => props.formResetKey, () => {\r\n formState.submitCount = 0;\r\n updateRefValue(errors, {});\r\n updateRefValue(visibleErrors, []);\r\n emit(\"visibleValidationChanged\", visibleErrors.value);\r\n });\r\n\r\n return {\r\n errors,\r\n visibleErrors,\r\n onInternalSubmit\r\n };\r\n },\r\n\r\n template: `\r\n\r\n`\r\n});\r\n"],"names":["defineComponent","name","components","RockValidation","props","submit","type","Boolean","default","hideErrors","formResetKey","String","emits","_errors","_value","setup","_ref","emit","visibleErrors","ref","errorValues","errors","onInternalSubmit","value","formState","reactive","submitCount","setError","id","error","newErrors","_objectSpread","text","updateRefValue","provideFormState","watch","Object","keys","length","values","key","push","template"],"mappings":"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"}