{"version":3,"file":"dropDownList.js","sources":["../../../Framework/Controls/dropDownList.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 { computed, defineComponent, PropType, ref, watch } from \"vue\";\r\nimport { Select as AntSelect } from \"ant-design-vue\";\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport RockFormField from \"./rockFormField\";\r\nimport { deepEqual } from \"@Obsidian/Utility/util\";\r\nimport { standardRockFormFieldProps, updateRefValue, useStandardRockFormFieldProps } from \"@Obsidian/Utility/component\";\r\nimport { defaultControlCompareValue } from \"@Obsidian/Utility/stringUtils\";\r\n\r\n/** The type definition for a select option, since the ones from the library are wrong. */\r\nexport type SelectOption = {\r\n    value?: string;\r\n\r\n    label: string;\r\n\r\n    options?: SelectOption[];\r\n};\r\n\r\nexport default defineComponent({\r\n    name: \"DropDownList\",\r\n\r\n    components: {\r\n        AntSelect,\r\n        RockFormField,\r\n        VNodes: (_, { attrs }) => {\r\n            return attrs.vnodes;\r\n        }\r\n    },\r\n\r\n    props: {\r\n        modelValue: {\r\n            type: Object as PropType<string | string[]>,\r\n            required: true\r\n        },\r\n\r\n        items: {\r\n            type: Array as PropType<ListItemBag[]>,\r\n            default: []\r\n        },\r\n\r\n        showBlankItem: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: true\r\n        },\r\n\r\n        blankValue: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n\r\n        multiple: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        /** No longer used. */\r\n        formControlClasses: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n\r\n        inputClasses: {\r\n            type: String as PropType<string>,\r\n            default: \"\"\r\n        },\r\n\r\n        enhanceForLongLists: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        grouped: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        loading: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        compareValue: {\r\n            type: Function as PropType<((value: string, itemValue: string) => boolean)>,\r\n            default: defaultControlCompareValue\r\n        },\r\n\r\n        ...standardRockFormFieldProps\r\n    },\r\n\r\n    emits: {\r\n        open: () => true,\r\n        \"update:modelValue\": (_value: string | string[]) => true\r\n    },\r\n\r\n    setup(props, { emit }) {\r\n        // #region Values\r\n\r\n        const internalValue = ref(props.modelValue ? props.modelValue : null);\r\n        const controlWrapper = ref<HTMLElement | null>(null);\r\n        const standardFieldProps = useStandardRockFormFieldProps(props);\r\n\r\n        // #endregion\r\n\r\n        // #region Computed Values\r\n\r\n        /** Determines if the blank item should be used. */\r\n        const computedShowBlankItem = computed((): boolean => {\r\n            // Only show the blank item if requested and we are not in multiple\r\n            // selection mode.\r\n            return !props.multiple && props.showBlankItem;\r\n        });\r\n\r\n        /** The options to be used by the Ant Select box. */\r\n        const computedOptions = computed((): SelectOption[] => {\r\n            // If we are not showing grouped items then simply map our item bags\r\n            // into a format that can be used by the picker.\r\n            if (!props.grouped) {\r\n                return props.items.map((o): SelectOption => {\r\n                    return {\r\n                        value: o.value ?? \"\",\r\n                        label: o.text ?? \"\"\r\n                    };\r\n                });\r\n            }\r\n\r\n            const groupedOptions: SelectOption[] = [];\r\n\r\n            // Loop through all the options and group everything that has a\r\n            // category together.\r\n            for (const o of props.items) {\r\n                // If no category then just include it as a regular item.\r\n                if (!o.category) {\r\n                    groupedOptions.push({\r\n                        value: o.value ?? \"\",\r\n                        label: o.text ?? \"\"\r\n                    });\r\n                    continue;\r\n                }\r\n\r\n                const matchedGroups = groupedOptions.filter(g => g.label === o.category && !!g.options);\r\n\r\n                // If we found an existing group then just add this item to\r\n                // that group. Otherwise create a new group for this item.\r\n                if (matchedGroups.length >= 1 && !!matchedGroups[0].options) {\r\n                    matchedGroups[0].options.push({\r\n                        value: o.value ?? \"\",\r\n                        label: o.text ?? \"\"\r\n                    });\r\n                }\r\n                else {\r\n                    groupedOptions.push({\r\n                        label: o.category,\r\n                        options: [{\r\n                            value: o.value ?? \"\",\r\n                            label: o.text ?? \"\"\r\n                        }]\r\n                    });\r\n                }\r\n            }\r\n\r\n            return groupedOptions;\r\n        });\r\n\r\n        /** Determines if the control is currently in a loading state. */\r\n        const computedLoading = computed((): boolean => {\r\n            return props.loading;\r\n        });\r\n\r\n        /** The mode for the Ant Select control to operate in. */\r\n        const mode = computed((): \"multiple\" | undefined => {\r\n            return props.multiple ? \"multiple\" : undefined;\r\n        });\r\n\r\n        /** Determines if we have any selected values. */\r\n        const hasValue = computed((): boolean => {\r\n            if (Array.isArray(internalValue.value)) {\r\n                return internalValue.value.length > 0;\r\n            }\r\n            else {\r\n                return internalValue.value !== \"\";\r\n            }\r\n        });\r\n\r\n        /** Determines if the clear icon should be visible. */\r\n        const isClearable = computed((): boolean => {\r\n            return computedShowBlankItem.value && !computedLoading.value && hasValue.value && internalValue.value !== props.blankValue;\r\n        });\r\n\r\n        /** Determines if the control should be in a disabled state. */\r\n        const isDisabled = computed((): boolean => {\r\n            return props.disabled;\r\n        });\r\n\r\n        // #endregion\r\n\r\n        // #region Functions\r\n\r\n        /**\r\n         * Synchronizes our internal value with the modelValue and current\r\n         * component property values.\r\n         */\r\n        const syncInternalValue = (): void => {\r\n            let value: string | string[] | null = props.modelValue;\r\n\r\n            if (props.multiple) {\r\n                // We are in multiple mode, if our value is a single value then\r\n                // convert it to an array of the one value.\r\n                if (!Array.isArray(value)) {\r\n                    value = value === \"\" ? [] : [value];\r\n                }\r\n\r\n                // Ensure they are all valid values and make sure they are the\r\n                // correct matching value from the item rather than what was\r\n                // originally provided.\r\n                value = props.items\r\n                    .filter(o => (value as string[]).some(v => props.compareValue(v, o.value ?? \"\")))\r\n                    .map(o => o.value ?? \"\");\r\n            }\r\n            else {\r\n                // We are in single mode, if our value is an array of values then\r\n                // convert it to a single value by taking the first value.\r\n                if (Array.isArray(value)) {\r\n                    value = value.length === 0 ? null : value[0];\r\n                }\r\n\r\n                // If no value is selected, then take either the blank value\r\n                // or the first value in the list.\r\n                if (value === null) {\r\n                    value = computedShowBlankItem.value\r\n                        ? props.blankValue\r\n                        : (props.items[0]?.value || props.blankValue);\r\n                }\r\n\r\n                // Ensure it is a valid value, if not then set it to either the\r\n                // blank value or the first value in the list.\r\n                const selectedOption = props.items.find(o => props.compareValue(value as string, o.value ?? \"\")) || null;\r\n\r\n                if (!selectedOption) {\r\n                    value = computedShowBlankItem.value\r\n                        ? props.blankValue\r\n                        : (props.items[0]?.value || props.blankValue);\r\n                }\r\n                else {\r\n                    value = selectedOption.value ?? \"\";\r\n                }\r\n            }\r\n\r\n            updateRefValue(internalValue, value);\r\n        };\r\n\r\n        /**\r\n         * Determines if a single option should be included during a search\r\n         * operation.\r\n         *\r\n         * @param input The search string typed by the individual.\r\n         * @param option The option to be filtered.\r\n         *\r\n         * @returns true if the option should be included in the list, otherwise false.\r\n         */\r\n        const filterItem = (input: string, option: SelectOption): boolean => {\r\n            return (option.label || \"\").toLocaleLowerCase().indexOf(input.toLocaleLowerCase()) >= 0;\r\n        };\r\n\r\n        /**\r\n         * Gets the element that will contain the popup. By default this is the\r\n         * document body, but that breaks if the user is viewing the page\r\n         * fullscreen via one of the panel fullscreen buttons.\r\n         *\r\n         * @returns The HTML element to place the popup into.\r\n         */\r\n        const getPopupContainer = (): HTMLElement => {\r\n            return controlWrapper.value ?? document.body;\r\n        };\r\n\r\n        // #endregion\r\n\r\n        // #region Event Handlers\r\n\r\n        const onDropdownVisibleChange = (open: boolean): void => {\r\n            if (open) {\r\n                emit(\"open\");\r\n            }\r\n        };\r\n\r\n        // #endregion\r\n\r\n        watch([() => props.modelValue, computedShowBlankItem, () => props.multiple, () => props.items], () => {\r\n            syncInternalValue();\r\n        });\r\n\r\n        // Watch for changes to the selection made in the UI and then make\r\n        // make sure its in the right format and valid.\r\n        watch(internalValue, () => {\r\n            let newValue = internalValue.value;\r\n\r\n            if (props.multiple) {\r\n                // We are in multiple select mode, but if we have a non-array\r\n                // value then convert it to an array.\r\n                if (!Array.isArray(newValue)) {\r\n                    newValue = newValue === null ? [] : [newValue];\r\n                }\r\n            }\r\n            else {\r\n                // We are in single select mode, but if we have an array\r\n                // value then convert it to a single item.\r\n                if (Array.isArray(newValue)) {\r\n                    newValue = newValue.length === 0 ? null : newValue[0];\r\n                }\r\n\r\n                // Ensure that single item is valid.\r\n                if (newValue === null) {\r\n                    newValue = computedShowBlankItem.value\r\n                        ? props.blankValue\r\n                        : (props.items[0]?.value || props.blankValue);\r\n                }\r\n            }\r\n\r\n            // If the value hasn't changed, then emit the new value. Normally\r\n            // we wouldn't have to do this check, but when emitting complex\r\n            // things like an array it can sometimes cause unwanted loops if\r\n            // we don't.\r\n            if (!deepEqual(props.modelValue, newValue, true)) {\r\n                emit(\"update:modelValue\", newValue);\r\n            }\r\n        });\r\n\r\n        syncInternalValue();\r\n\r\n        return {\r\n            computedLoading,\r\n            computedOptions,\r\n            controlWrapper,\r\n            filterItem,\r\n            internalValue,\r\n            isClearable,\r\n            isDisabled,\r\n            getPopupContainer,\r\n            mode,\r\n            onDropdownVisibleChange,\r\n            standardFieldProps\r\n        };\r\n    },\r\n\r\n    template: `\r\n<RockFormField\r\n    v-bind=\"standardFieldProps\"\r\n    :modelValue=\"internalValue\"\r\n    :formGroupClasses=\"'rock-drop-down-list ' + formGroupClasses\"\r\n    name=\"dropdownlist\">\r\n    <template #default=\"{uniqueId, field}\">\r\n        <div ref=\"controlWrapper\" class=\"control-wrapper\">\r\n            <slot name=\"prepend\" :isInputGroupSupported=\"true\" />\r\n            <div :class=\"{'input-group': $slots.inputGroupPrepend || $slots.inputGroupAppend}\">\r\n                <slot name=\"inputGroupPrepend\" :isInputGroupSupported=\"true\" />\r\n                <AntSelect\r\n                    v-model:value=\"internalValue\"\r\n                    v-bind=\"field\"\r\n                    class=\"form-control\"\r\n                    :class=\"inputClasses\"\r\n                    :allowClear=\"isClearable\"\r\n                    :loading=\"computedLoading\"\r\n                    :disabled=\"isDisabled\"\r\n                    :options=\"computedOptions\"\r\n                    :showSearch=\"enhanceForLongLists\"\r\n                    :filterOption=\"filterItem\"\r\n                    :mode=\"mode\"\r\n                    :getPopupContainer=\"getPopupContainer\"\r\n                    showArrow\r\n                    @dropdownVisibleChange=\"onDropdownVisibleChange\">\r\n                    <template #clearIcon>\r\n                        <i class=\"fa fa-times\"></i>\r\n                    </template>\r\n\r\n                    <template #suffixIcon>\r\n                        <i v-if=\"!computedLoading\" class=\"fa fa-caret-down\"></i>\r\n                        <i v-else class=\"fa fa-spinner fa-spin\"></i>\r\n                    </template>\r\n\r\n                    <template #notFoundContent>\r\n                        <div style=\"color:#999\"><slot name=\"empty\">No Data</slot></div>\r\n                    </template>\r\n\r\n                    <template #dropdownRender=\"{ menuNode: menu }\">\r\n                        <div v-if=\"computedLoading\" class=\"text-center\"><i class=\"fa fa-spinner fa-spin\"></i> Data is loading...</div>\r\n                        <v-nodes v-else :vnodes=\"menu\" />\r\n                    </template>\r\n                </AntSelect>\r\n                <slot name=\"inputGroupAppend\" :isInputGroupSupported=\"true\" />\r\n            </div>\r\n            <slot name=\"append\" :isInputGroupSupported=\"true\" />\r\n        </div>\r\n    </template>\r\n</RockFormField>\r\n`\r\n});\r\n"],"names":["defineComponent","name","components","AntSelect","RockFormField","VNodes","_","_ref","attrs","vnodes","props","_objectSpread","modelValue","type","Object","required","items","Array","default","showBlankItem","Boolean","blankValue","String","multiple","formControlClasses","inputClasses","enhanceForLongLists","grouped","disabled","loading","compareValue","Function","defaultControlCompareValue","standardRockFormFieldProps","emits","open","_value","setup","_ref2","emit","internalValue","ref","controlWrapper","standardFieldProps","useStandardRockFormFieldProps","computedShowBlankItem","computed","computedOptions","map","o","_o$value","_o$text","value","label","text","groupedOptions","_iterator","_createForOfIteratorHelper","_step","_loop","category","_o$value2","_o$text2","push","matchedGroups","filter","g","options","length","_o$value3","_o$text3","_o$value4","_o$text4","s","n","done","_ret","err","e","f","computedLoading","mode","undefined","hasValue","isArray","isClearable","isDisabled","syncInternalValue","some","v","_o$value5","_o$value6","_props$items$","selectedOption","find","_o$value7","_props$items$2","_selectedOption$value","updateRefValue","filterItem","input","option","toLocaleLowerCase","indexOf","getPopupContainer","_controlWrapper$value","document","body","onDropdownVisibleChange","watch","newValue","_props$items$3","deepEqual","template"],"mappings":"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"}