{"version":3,"file":"textFieldComponents.js","sources":["../../../Framework/FieldTypes/textFieldComponents.ts"],"sourcesContent":["// \n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// \n//\nimport { computed, defineComponent, ref, watch } from \"vue\";\nimport { getFieldConfigurationProps, getFieldEditorProps } from \"./utils\";\nimport TextBox from \"@Obsidian/Controls/textBox.obs\";\nimport CheckBox from \"@Obsidian/Controls/checkBox.obs\";\nimport NumberBox from \"@Obsidian/Controls/numberBox.obs\";\nimport { asBoolean, asBooleanOrNull, asTrueFalseOrNull } from \"@Obsidian/Utility/booleanUtils\";\nimport { toNumberOrNull } from \"@Obsidian/Utility/numberUtils\";\n\n// We can't import the ConfigurationValueKey from textField.partial.ts\n// because it causes a recursive import back to this file by way of\n// the fieldType.ts import in textField.partial.ts.\nexport const enum ConfigurationValueKey {\n /** Contains \"True\" if the text field is designed for password entry. */\n IsPassword = \"ispassword\",\n\n /** The maximum number of characters allowed in the text entry field. */\n MaxCharacters = \"maxcharacters\",\n\n /** Contains \"True\" if the text field should show the character countdown. */\n ShowCountdown = \"showcountdown\"\n}\n\nexport const EditComponent = defineComponent({\n name: \"TextField.Edit\",\n\n components: {\n TextBox\n },\n\n props: getFieldEditorProps(),\n\n setup(props, { emit }) {\n // The internal value used by the text editor.\n const internalValue = ref(\"\");\n\n // Configuration attributes passed to the text editor.\n const configAttributes = computed((): Record => {\n const attributes: Record = {};\n\n const maxCharsConfig = props.configurationValues[ConfigurationValueKey.MaxCharacters];\n if (maxCharsConfig) {\n const maxCharsValue = Number(maxCharsConfig);\n\n if (maxCharsValue) {\n attributes.maxLength = maxCharsValue;\n }\n }\n\n const showCountDownConfig = props.configurationValues[ConfigurationValueKey.ShowCountdown];\n if (showCountDownConfig && showCountDownConfig) {\n const showCountDownValue = asBooleanOrNull(showCountDownConfig) || false;\n\n if (showCountDownValue) {\n attributes.showCountDown = showCountDownValue;\n }\n }\n\n return attributes;\n });\n\n // The type of text input field to use on the text editor.\n const textType = computed((): string => {\n const isPasswordConfig = props.configurationValues[ConfigurationValueKey.IsPassword];\n const isPassword = asBooleanOrNull(isPasswordConfig) ?? false;\n\n return isPassword ? \"password\" : \"\";\n\n });\n\n // Watch for changes from the parent component and update the text editor.\n watch(() => props.modelValue, () => {\n internalValue.value = props.modelValue;\n }, {\n immediate: true\n });\n\n // Watch for changes from the text editor and update the parent component.\n watch(internalValue, () => {\n emit(\"update:modelValue\", internalValue.value);\n });\n\n return {\n configAttributes,\n internalValue,\n textType\n };\n },\n\n template: `\n\n`\n});\n\nexport const ConfigurationComponent = defineComponent({\n name: \"TextField.Configuration\",\n\n components: {\n CheckBox,\n NumberBox\n },\n\n props: getFieldConfigurationProps(),\n\n emits: [\"update:modelValue\", \"updateConfiguration\", \"updateConfigurationValue\" ],\n\n setup(props, { emit }) {\n // Define the properties that will hold the current selections.\n const passwordField = ref(false);\n const maxCharacters = ref(null);\n const showCountdown = ref(false);\n\n /**\n * Update the modelValue property if any value of the dictionary has\n * actually changed. This helps prevent unwanted postbacks if the value\n * didn't really change - which can happen if multiple values get updated\n * at the same time.\n *\n * @returns true if a new modelValue was emitted to the parent component.\n */\n const maybeUpdateModelValue = (): boolean => {\n const newValue: Record = {};\n\n // Construct the new value that will be emitted if it is different\n // than the current value.\n newValue[ConfigurationValueKey.IsPassword] = asTrueFalseOrNull(passwordField.value) ?? \"False\";\n newValue[ConfigurationValueKey.MaxCharacters] = maxCharacters.value?.toString() ?? \"\";\n newValue[ConfigurationValueKey.ShowCountdown] = asTrueFalseOrNull(showCountdown.value) ?? \"False\";\n\n // Compare the new value and the old value.\n const anyValueChanged = newValue[ConfigurationValueKey.IsPassword] !== (props.modelValue[ConfigurationValueKey.IsPassword] ?? \"False\")\n || newValue[ConfigurationValueKey.MaxCharacters] !== (props.modelValue[ConfigurationValueKey.MaxCharacters] ?? \"\")\n || newValue[ConfigurationValueKey.ShowCountdown] !== (props.modelValue[ConfigurationValueKey.ShowCountdown] ?? \"False\");\n\n // If any value changed then emit the new model value.\n if (anyValueChanged) {\n emit(\"update:modelValue\", newValue);\n return true;\n }\n else {\n return false;\n }\n };\n\n /**\n * Emits the updateConfigurationValue if the value has actually changed.\n *\n * @param key The key that was possibly modified.\n * @param value The new value.\n */\n const maybeUpdateConfiguration = (key: string, value: string): void => {\n if (maybeUpdateModelValue()) {\n emit(\"updateConfigurationValue\", key, value);\n }\n };\n\n // Watch for changes coming in from the parent component and update our\n // data to match the new information.\n watch(() => [props.modelValue, props.configurationProperties], () => {\n passwordField.value = asBoolean(props.modelValue[ConfigurationValueKey.IsPassword]);\n maxCharacters.value = toNumberOrNull(props.modelValue[ConfigurationValueKey.MaxCharacters]);\n showCountdown.value = asBoolean(props.modelValue[ConfigurationValueKey.ShowCountdown]);\n }, {\n immediate: true\n });\n\n // Watch for changes in properties that require new configuration\n // properties to be retrieved from the server.\n // THIS IS JUST A PLACEHOLDER FOR COPYING TO NEW FIELDS THAT MIGHT NEED IT.\n // THIS FIELD DOES NOT NEED THIS\n watch([], () => {\n if (maybeUpdateModelValue()) {\n emit(\"updateConfiguration\");\n }\n });\n\n // Watch for changes in properties that only require a local UI update.\n watch(passwordField, () => maybeUpdateConfiguration(ConfigurationValueKey.IsPassword, asTrueFalseOrNull(passwordField.value) ?? \"False\"));\n watch(maxCharacters, () => maybeUpdateConfiguration(ConfigurationValueKey.MaxCharacters, maxCharacters.value?.toString() ?? \"\"));\n watch(showCountdown, () => maybeUpdateConfiguration(ConfigurationValueKey.ShowCountdown, asTrueFalseOrNull(showCountdown.value) ?? \"False\"));\n\n return {\n maxCharacters,\n passwordField,\n showCountdown\n };\n },\n\n template: `\n
\n \n \n \n
\n`\n});\n"],"names":["ConfigurationValueKey","EditComponent","defineComponent","name","components","TextBox","props","getFieldEditorProps","setup","_ref","emit","internalValue","ref","configAttributes","computed","attributes","maxCharsConfig","configurationValues","MaxCharacters","maxCharsValue","Number","maxLength","showCountDownConfig","ShowCountdown","showCountDownValue","asBooleanOrNull","showCountDown","textType","_asBooleanOrNull","isPasswordConfig","IsPassword","isPassword","watch","modelValue","value","immediate","template","ConfigurationComponent","CheckBox","NumberBox","getFieldConfigurationProps","emits","_ref2","passwordField","maxCharacters","showCountdown","maybeUpdateModelValue","_asTrueFalseOrNull","_maxCharacters$value$","_maxCharacters$value","_asTrueFalseOrNull2","_props$modelValue$Con","_props$modelValue$Con2","_props$modelValue$Con3","newValue","asTrueFalseOrNull","toString","anyValueChanged","maybeUpdateConfiguration","key","configurationProperties","asBoolean","toNumberOrNull","_asTrueFalseOrNull3","_maxCharacters$value$2","_maxCharacters$value2","_asTrueFalseOrNull4"],"mappings":"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"}