{"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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"}