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