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