{"version":3,"file":"singleSelectFieldComponents.js","sources":["../../../Framework/FieldTypes/singleSelectField.partial.ts","../../../Framework/FieldTypes/singleSelectFieldComponents.ts"],"sourcesContent":["// <copyright>\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// </copyright>\r\n//\r\nimport { Component } from \"vue\";\r\nimport { defineAsyncComponent } from \"@Obsidian/Utility/component\";\r\nimport { ComparisonValue } from \"@Obsidian/Types/Reporting/comparisonValue\";\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { FieldTypeBase } from \"./fieldType\";\r\nimport { getStandardFilterComponent } from \"./utils\";\r\nimport { ComparisonType } from \"@Obsidian/Enums/Reporting/comparisonType\";\r\n\r\nexport const enum ConfigurationValueKey {\r\n    Values = \"values\",\r\n    FieldType = \"fieldtype\",\r\n    RepeatColumns = \"repeatColumns\",\r\n\r\n    /** Only used during editing of the field type configuration. */\r\n    CustomValues = \"customValues\"\r\n}\r\n\r\n\r\n// The edit component can be quite large, so load it only as needed.\r\nconst editComponent = defineAsyncComponent(async () => {\r\n    return (await import(\"./singleSelectFieldComponents\")).EditComponent;\r\n});\r\n\r\n// Load the filter component only as needed.\r\nconst filterComponent = defineAsyncComponent(async () => {\r\n    return (await import(\"./singleSelectFieldComponents\")).FilterComponent;\r\n});\r\n\r\n// Load the configuration component only as needed.\r\nconst configurationComponent = defineAsyncComponent(async () => {\r\n    return (await import(\"./singleSelectFieldComponents\")).ConfigurationComponent;\r\n});\r\n\r\n/**\r\n * The field type handler for the SingleSelect field.\r\n */\r\nexport class SingleSelectFieldType extends FieldTypeBase {\r\n    public override getTextValue(value: string, configurationValues: Record<string, string>): string {\r\n        if (value === \"\") {\r\n            return \"\";\r\n        }\r\n\r\n        try {\r\n            const values = JSON.parse(configurationValues[ConfigurationValueKey.Values] ?? \"[]\") as ListItemBag[];\r\n            const selectedValues = values.filter(v => v.value === value);\r\n\r\n            if (selectedValues.length >= 1) {\r\n                return selectedValues[0].text ?? \"\";\r\n            }\r\n            else {\r\n                return \"\";\r\n            }\r\n        }\r\n        catch {\r\n            return value;\r\n        }\r\n    }\r\n\r\n    public override getEditComponent(): Component {\r\n        return editComponent;\r\n    }\r\n\r\n    public override getConfigurationComponent(): Component {\r\n        return configurationComponent;\r\n    }\r\n\r\n    public override getFilterComponent(): Component {\r\n        return getStandardFilterComponent(\"Is\", filterComponent);\r\n    }\r\n\r\n    public override getFilterValueText(value: ComparisonValue, configurationValues: Record<string, string>): string {\r\n        if (value.value === \"\") {\r\n            return \"\";\r\n        }\r\n\r\n        try {\r\n            const rawValues = value.value.split(\",\");\r\n            const values = JSON.parse(configurationValues?.[ConfigurationValueKey.Values] ?? \"[]\") as ListItemBag[];\r\n            const selectedValues = values.filter(v => rawValues.includes(v.value ?? \"\"));\r\n\r\n            if (selectedValues.length >= 1) {\r\n                return `'${selectedValues.map(v => v.value).join(\"' OR '\")}'`;\r\n            }\r\n            else {\r\n                return \"\";\r\n            }\r\n        }\r\n        catch {\r\n            return value.value;\r\n        }\r\n    }\r\n\r\n    public override doesValueMatchFilter(value: string, filterValue: ComparisonValue, _configurationValues: Record<string, string>): boolean {\r\n        const selectedValues = (filterValue.value ?? \"\").split(\",\").filter(v => v !== \"\").map(v => v.toLowerCase());\r\n        let comparisonType = filterValue.comparisonType;\r\n\r\n        if (comparisonType === ComparisonType.EqualTo) {\r\n            // Treat EqualTo as if it were Contains.\r\n            comparisonType = ComparisonType.Contains;\r\n        }\r\n        else if (comparisonType === ComparisonType.NotEqualTo) {\r\n            // Treat NotEqualTo as if it were DoesNotContain.\r\n            comparisonType = ComparisonType.DoesNotContain;\r\n        }\r\n\r\n        if (comparisonType === ComparisonType.IsBlank) {\r\n            return value === \"\";\r\n        }\r\n        else if (comparisonType === ComparisonType.IsNotBlank) {\r\n            return value !== \"\";\r\n        }\r\n\r\n        if (selectedValues.length > 0) {\r\n            let matched = selectedValues.includes(value.toLowerCase());\r\n\r\n            if (comparisonType === ComparisonType.DoesNotContain) {\r\n                matched = !matched;\r\n            }\r\n\r\n            return matched;\r\n        }\r\n\r\n        return false;\r\n    }\r\n}\r\n","// <copyright>\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// </copyright>\r\n//\r\nimport { computed, defineComponent, inject, ref, watch } from \"vue\";\r\nimport { getFieldConfigurationProps, getFieldEditorProps } from \"./utils\";\r\nimport CheckBoxList from \"@Obsidian/Controls/checkBoxList\";\r\nimport DropDownList from \"@Obsidian/Controls/dropDownList\";\r\nimport NumberBox from \"@Obsidian/Controls/numberBox\";\r\nimport RadioButtonList from \"@Obsidian/Controls/radioButtonList\";\r\nimport TextBox from \"@Obsidian/Controls/textBox\";\r\nimport { toNumberOrNull } from \"@Obsidian/Utility/numberUtils\";\r\nimport { ConfigurationValueKey } from \"./singleSelectField.partial\";\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { updateRefValue } from \"@Obsidian/Utility/component\";\r\n\r\nexport const EditComponent = defineComponent({\r\n    name: \"SingleSelectField.Edit\",\r\n\r\n    components: {\r\n        DropDownList,\r\n        RadioButtonList\r\n    },\r\n\r\n    props: getFieldEditorProps(),\r\n\r\n    setup() {\r\n        return {\r\n            isRequired: inject(\"isRequired\") as boolean\r\n        };\r\n    },\r\n\r\n    data() {\r\n        return {\r\n            internalValue: \"\"\r\n        };\r\n    },\r\n\r\n    computed: {\r\n        /** The options to choose from in the drop down list */\r\n        options(): ListItemBag[] {\r\n            try {\r\n                const providedOptions = JSON.parse(this.configurationValues[ConfigurationValueKey.Values] ?? \"[]\") as ListItemBag[];\r\n\r\n                if (this.isRadioButtons && !this.isRequired) {\r\n                    providedOptions.unshift({\r\n                        text: \"None\",\r\n                        value: \"\"\r\n                    });\r\n                }\r\n\r\n                return providedOptions;\r\n            }\r\n            catch {\r\n                return [];\r\n            }\r\n        },\r\n\r\n        /** Any additional attributes that will be assigned to the drop down list control */\r\n        ddlConfigAttributes(): Record<string, number | boolean> {\r\n            const attributes: Record<string, number | boolean> = {};\r\n            const fieldTypeConfig = this.configurationValues[ConfigurationValueKey.FieldType];\r\n\r\n            if (fieldTypeConfig === \"ddl_enhanced\") {\r\n                attributes.enhanceForLongLists = true;\r\n            }\r\n\r\n            return attributes;\r\n        },\r\n\r\n        /** Any additional attributes that will be assigned to the radio button control */\r\n        rbConfigAttributes(): Record<string, number | boolean> {\r\n            const attributes: Record<string, number | boolean> = {};\r\n            const repeatColumnsConfig = this.configurationValues[ConfigurationValueKey.RepeatColumns];\r\n\r\n            if (repeatColumnsConfig) {\r\n                attributes[\"repeatColumns\"] = toNumberOrNull(repeatColumnsConfig) || 0;\r\n            }\r\n\r\n            return attributes;\r\n        },\r\n\r\n        /** Is the control going to be radio buttons? */\r\n        isRadioButtons(): boolean {\r\n            const fieldTypeConfig = this.configurationValues[ConfigurationValueKey.FieldType];\r\n            return fieldTypeConfig === \"rb\";\r\n        }\r\n    },\r\n\r\n    watch: {\r\n        internalValue() {\r\n            this.$emit(\"update:modelValue\", this.internalValue);\r\n        },\r\n\r\n        modelValue: {\r\n            immediate: true,\r\n            handler() {\r\n                this.internalValue = this.modelValue || \"\";\r\n            }\r\n        }\r\n    },\r\n\r\n    template: `\r\n<RadioButtonList v-if=\"isRadioButtons\" v-model=\"internalValue\" v-bind=\"rbConfigAttributes\" :items=\"options\" horizontal />\r\n<DropDownList v-else v-model=\"internalValue\" v-bind=\"ddlConfigAttributes\" :items=\"options\" />\r\n`\r\n});\r\n\r\nexport const FilterComponent = defineComponent({\r\n    name: \"SingleSelectField.Filter\",\r\n\r\n    components: {\r\n        CheckBoxList\r\n    },\r\n\r\n    props: getFieldEditorProps(),\r\n\r\n    setup(props, { emit }) {\r\n        const internalValue = ref(props.modelValue.split(\",\").filter(v => v !== \"\"));\r\n\r\n        const options = computed((): ListItemBag[] => {\r\n            try {\r\n                const providedOptions = JSON.parse(props.configurationValues[ConfigurationValueKey.Values] ?? \"[]\") as ListItemBag[];\r\n\r\n                return providedOptions;\r\n            }\r\n            catch {\r\n                return [];\r\n            }\r\n        });\r\n\r\n        watch(() => props.modelValue, () => {\r\n            updateRefValue(internalValue, props.modelValue.split(\",\").filter(v => v !== \"\"));\r\n        });\r\n\r\n        watch(internalValue, () => {\r\n            emit(\"update:modelValue\", internalValue.value.join(\",\"));\r\n        });\r\n\r\n        return {\r\n            internalValue,\r\n            options\r\n        };\r\n    },\r\n\r\n    template: `\r\n<CheckBoxList v-model=\"internalValue\" :items=\"options\" horizontal />\r\n`\r\n});\r\n\r\nconst controlTypeOptions: ListItemBag[] = [\r\n    {\r\n        value: \"ddl\",\r\n        text: \"Drop Down List\"\r\n    },\r\n    {\r\n        value: \"ddl_enhanced\",\r\n        text: \"Drop Down List (Enhanced for Long Lists)\"\r\n    },\r\n    {\r\n        value: \"rb\",\r\n        text: \"Radio Buttons\"\r\n    }\r\n];\r\n\r\nexport const ConfigurationComponent = defineComponent({\r\n    name: \"SingleSelectField.Configuration\",\r\n\r\n    components: {\r\n        DropDownList,\r\n        TextBox,\r\n        NumberBox\r\n    },\r\n\r\n    props: getFieldConfigurationProps(),\r\n\r\n    emits: [\r\n        \"update:modelValue\",\r\n        \"updateConfiguration\",\r\n        \"updateConfigurationValue\"\r\n    ],\r\n\r\n    setup(props, { emit }) {\r\n        // Define the properties that will hold the current selections.\r\n        const rawValues = ref(\"\");\r\n        const internalRawValues = ref(\"\");\r\n        const controlType = ref(\"\");\r\n        const repeatColumns = ref<number | null>(null);\r\n\r\n        const isRadioList = computed((): boolean => {\r\n            return controlType.value === \"rb\";\r\n        });\r\n\r\n        const onBlur = (): void => {\r\n            internalRawValues.value = rawValues.value;\r\n        };\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<string, string> = {...props.modelValue};\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.CustomValues] = internalRawValues.value ?? \"\";\r\n            newValue[ConfigurationValueKey.FieldType] = controlType.value ?? \"\";\r\n            newValue[ConfigurationValueKey.RepeatColumns] = repeatColumns.value?.toString() ?? \"\";\r\n\r\n            // Compare the new value and the old value.\r\n            const anyValueChanged = newValue[ConfigurationValueKey.CustomValues] !== (props.modelValue[ConfigurationValueKey.CustomValues] ?? \"\")\r\n                || newValue[ConfigurationValueKey.FieldType] !== (props.modelValue[ConfigurationValueKey.FieldType] ?? \"\")\r\n                || newValue[ConfigurationValueKey.RepeatColumns] !== (props.modelValue[ConfigurationValueKey.RepeatColumns] ?? \"\");\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            rawValues.value = props.modelValue[ConfigurationValueKey.CustomValues] ?? \"\";\r\n            internalRawValues.value = rawValues.value;\r\n            controlType.value = props.modelValue[ConfigurationValueKey.FieldType] ?? \"ddl\";\r\n            repeatColumns.value = toNumberOrNull(props.modelValue[ConfigurationValueKey.RepeatColumns]);\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        watch([internalRawValues], () => {\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(controlType, () => maybeUpdateConfiguration(ConfigurationValueKey.FieldType, controlType.value ?? \"ddl\"));\r\n        watch(repeatColumns, () => maybeUpdateConfiguration(ConfigurationValueKey.RepeatColumns, repeatColumns.value?.toString() ?? \"\"));\r\n\r\n        return {\r\n            controlType,\r\n            controlTypeOptions,\r\n            isRadioList,\r\n            onBlur,\r\n            rawValues,\r\n            repeatColumns\r\n        };\r\n    },\r\n\r\n    template: `\r\n<div>\r\n    <TextBox v-model=\"rawValues\"\r\n        label=\"Values\"\r\n        help=\"The source of the values to display in a list.  Format is either 'value1,value2,value3,...', 'value1^text1,value2^text2,value3^text3,...', or a SQL Select statement that returns a result set with a 'Value' and 'Text' column <span class='tip tip-lava'></span>.\"\r\n        textMode=\"multiline\"\r\n        @blur=\"onBlur\" />\r\n\r\n    <DropDownList v-model=\"controlType\"\r\n        label=\"Control Type\"\r\n        help=\"The type of control to use for selecting a single value from the list.\"\r\n        :items=\"controlTypeOptions\"\r\n        :showBlankItem=\"false\" />\r\n\r\n    <NumberBox v-if=\"isRadioList\"\r\n        v-model=\"repeatColumns\"\r\n        label=\"Columns\"\r\n        help=\"Select how many columns the list should use before going to the next row. If blank or 0 then 4 columns will be displayed. There is no enforced upper limit however the block this control is used in might add contraints due to available space.\" />\r\n</div>\r\n`\r\n});\r\n"],"names":["ConfigurationValueKey","defineAsyncComponent","_asyncToGenerator","EditComponent","FilterComponent","ConfigurationComponent","defineComponent","name","components","DropDownList","RadioButtonList","props","getFieldEditorProps","setup","isRequired","inject","data","internalValue","computed","options","_this$configurationVa","providedOptions","JSON","parse","configurationValues","Values","isRadioButtons","unshift","text","value","_unused","ddlConfigAttributes","attributes","fieldTypeConfig","FieldType","enhanceForLongLists","rbConfigAttributes","repeatColumnsConfig","RepeatColumns","toNumberOrNull","watch","$emit","modelValue","immediate","handler","template","CheckBoxList","_ref","emit","ref","split","filter","v","_props$configurationV","_unused2","updateRefValue","join","controlTypeOptions","TextBox","NumberBox","getFieldConfigurationProps","emits","_ref2","rawValues","internalRawValues","controlType","repeatColumns","isRadioList","onBlur","maybeUpdateModelValue","_internalRawValues$va","_controlType$value","_repeatColumns$value$","_repeatColumns$value","_props$modelValue$Con","_props$modelValue$Con2","_props$modelValue$Con3","newValue","_objectSpread","CustomValues","toString","anyValueChanged","maybeUpdateConfiguration","key","configurationProperties","_props$modelValue$Con4","_props$modelValue$Con5","_controlType$value2","_repeatColumns$value$2","_repeatColumns$value2"],"mappings":"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"}