{"version":3,"file":"rockFormField.obs.js","sources":["../../../Framework/Controls/rockFormField.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<script lang=\"ts\">\r\n\r\n    // NOTE: This file can be converted to final SFC form after upgrading Vue to\r\n    // 3.3 so we can use the defineOptions() to disable inheritence.\r\n    import { standardRockFormFieldProps } from \"@Obsidian/Utility/component\";\r\n    import { useFormState } from \"@Obsidian/Utility/form\";\r\n    import { newGuid } from \"@Obsidian/Utility/guid\";\r\n    import { normalizeRules, validateValue } from \"@Obsidian/ValidationRules\";\r\n    import { computed, defineComponent, onBeforeUnmount, ref, watch } from \"vue\";\r\n    import RockLabel from \"./rockLabel.obs\";\r\n\r\n    export default defineComponent({\r\n        name: \"RockFormField\",\r\n\r\n        inheritAttrs: false,\r\n\r\n        components: {\r\n            RockLabel\r\n        },\r\n\r\n        compilerOptions: {\r\n            whitespace: \"preserve\"\r\n        },\r\n\r\n        props: {\r\n            modelValue: {\r\n                required: true\r\n            },\r\n\r\n            name: {\r\n                type: String,\r\n                required: true\r\n            },\r\n\r\n            disableLabel: {\r\n                type: Boolean,\r\n                default: false\r\n            },\r\n\r\n            ...standardRockFormFieldProps\r\n        },\r\n\r\n        setup(props) {\r\n            /** The reactive state of the form. */\r\n            const formState = useFormState();\r\n\r\n            /** The unique identifier used to identify this form field. */\r\n            const uniqueId = `rock-${props.name}-${newGuid()}`;\r\n\r\n            /** The internal value being tracked for the field. */\r\n            const internalValue = ref<unknown>(\"\");\r\n\r\n            /** The internal rules we will be used for calculations. */\r\n            const internalRules = computed(() => normalizeRules(props.rules));\r\n\r\n            /** Determines if this field is marked as required. */\r\n            const isRequired = computed((): boolean => internalRules.value.includes(\"required\"));\r\n\r\n            /** Holds the current error message for this form field. */\r\n            const currentError = ref(\"\");\r\n\r\n            /** Any error classes to be applied to the field depending on the current state. */\r\n            const errorClasses = computed((): string[] => {\r\n                if (!formState || formState.submitCount < 1) {\r\n                    return [];\r\n                }\r\n\r\n                return currentError.value !== \"\" ? [\"has-error\"] : [];\r\n            });\r\n\r\n            /** The text label to display to the user which identifies this field. */\r\n            const fieldLabel = computed((): string => {\r\n                return props.validationTitle || props.label;\r\n            });\r\n\r\n            // Watch for changes to the modelValue and update our internalValue.\r\n            watch(() => [props.modelValue, props.rules], () => {\r\n                internalValue.value = props.modelValue;\r\n\r\n                const errors = validateValue(internalValue.value, props.rules);\r\n\r\n                if (errors.length > 0) {\r\n                    currentError.value = errors[0];\r\n                    formState?.setError(uniqueId, fieldLabel.value, currentError.value);\r\n                }\r\n                else {\r\n                    currentError.value = \"\";\r\n                    formState?.setError(uniqueId, fieldLabel.value, \"\");\r\n                }\r\n            }, {\r\n                immediate: true\r\n            });\r\n\r\n            // If we are removed from the DOM completely, clear the error before we go.\r\n            onBeforeUnmount(() => {\r\n                currentError.value = \"\";\r\n                formState?.setError(uniqueId, fieldLabel.value, \"\");\r\n            });\r\n\r\n            return {\r\n                errorClasses,\r\n                fieldLabel,\r\n                formState,\r\n                isRequired,\r\n                uniqueId,\r\n            };\r\n        },\r\n\r\n        template: `\r\n<slot name=\"pre\" />\r\n<div v-if=\"label || help || disableLabel\" class=\"form-group\" :class=\"[formGroupClasses, isRequired && !isRequiredIndicatorHidden ? 'required' : '', errorClasses]\">\r\n    <RockLabel :for=\"uniqueId\" :help=\"help\" v-if=\"!disableLabel\">\r\n        {{label}} <slot name=\"besideLabel\" />\r\n    </RockLabel>\r\n    <slot v-bind=\"{field: $attrs, uniqueId, errors, fieldLabel}\" />\r\n</div>\r\n<slot v-else v-bind=\"{field: $attrs, uniqueId, errors, fieldLabel}\" />\r\n<slot name=\"post\" />\r\n`\r\n    });\r\n</script>\r\n"],"names":["defineComponent","name","inheritAttrs","components","RockLabel","compilerOptions","whitespace","props","_objectSpread","modelValue","required","type","String","disableLabel","Boolean","default","standardRockFormFieldProps","setup","formState","useFormState","uniqueId","concat","newGuid","internalValue","ref","internalRules","computed","normalizeRules","rules","isRequired","value","includes","currentError","errorClasses","submitCount","fieldLabel","validationTitle","label","watch","errors","validateValue","length","setError","immediate","onBeforeUnmount","template"],"mappings":"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"}