{"version":3,"file":"baseAsyncPicker.obs.js","sources":["../../../Framework/Controls/baseAsyncPicker.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n <DropDownList v-if=\"isDropDownListStyle\"\r\n v-model=\"internalValue\"\r\n v-bind=\"standardProps\"\r\n :disabled=\"disabled\"\r\n :grouped=\"grouped\"\r\n :loading=\"isLoading\"\r\n :items=\"actualItems\"\r\n :multiple=\"multiple\"\r\n :showBlankItem=\"showBlankItem\"\r\n :blankValue=\"blankValue\"\r\n :enhanceForLongLists=\"enhanceForLongLists\"\r\n :lazyMode=\"lazyMode\"\r\n displayStyle=\"auto\"\r\n @open=\"onOpen\">\r\n\r\n <template #prepend=\"{ isInputGroupSupported }\" v-if=\"$slots.prepend\">\r\n <slot name=\"prepend\" :isInputGroupSupported=\"isInputGroupSupported\" />\r\n </template>\r\n <template #inputGroupPrepend=\"{ isInputGroupSupported }\" v-if=\"$slots.inputGroupPrepend\">\r\n <slot name=\"inputGroupPrepend\" :isInputGroupSupported=\"isInputGroupSupported\" />\r\n </template>\r\n <template #inputGroupAppend=\"{ isInputGroupSupported }\" v-if=\"$slots.inputGroupAppend\">\r\n <slot name=\"inputGroupAppend\" :isInputGroupSupported=\"isInputGroupSupported\" />\r\n </template>\r\n <template #append=\"{ isInputGroupSupported }\" v-if=\"$slots.append\">\r\n <slot name=\"append\" :isInputGroupSupported=\"isInputGroupSupported\" />\r\n </template>\r\n\r\n </DropDownList>\r\n\r\n <CheckBoxList v-if=\"isCheckBoxListStyle\"\r\n v-model=\"(internalValue as string[])\"\r\n v-bind=\"standardProps\"\r\n :disabled=\"disabled\"\r\n :horizontal=\"isHorizontal\"\r\n :items=\"actualItems\"\r\n :repeatColumns=\"columnCount\">\r\n\r\n <template #prepend=\"{ isInputGroupSupported }\" v-if=\"$slots.prepend\">\r\n <slot name=\"prepend\" :isInputGroupSupported=\"isInputGroupSupported\" />\r\n </template>\r\n <template #append=\"{ isInputGroupSupported }\" v-if=\"$slots.append\">\r\n <slot name=\"append\" :isInputGroupSupported=\"isInputGroupSupported\" />\r\n </template>\r\n\r\n </CheckBoxList>\r\n\r\n <RadioButtonList v-if=\"isRadioButtonListStyle\"\r\n v-model=\"(internalValue as string)\"\r\n v-bind=\"standardProps\"\r\n :disabled=\"disabled\"\r\n :horizontal=\"isHorizontal\"\r\n :items=\"actualItems\"\r\n :repeatColumns=\"columnCount\"\r\n :showBlankItem=\"showBlankItem\">\r\n\r\n <template #prepend=\"{ isInputGroupSupported }\" v-if=\"$slots.prepend\">\r\n <slot name=\"prepend\" :isInputGroupSupported=\"isInputGroupSupported\" />\r\n </template>\r\n <template #append=\"{ isInputGroupSupported }\" v-if=\"$slots.append\">\r\n <slot name=\"append\" :isInputGroupSupported=\"isInputGroupSupported\" />\r\n </template>\r\n\r\n </RadioButtonList>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { standardAsyncPickerProps, updateRefValue, useStandardRockFormFieldProps } from \"@Obsidian/Utility/component\";\r\n import { isPromise } from \"@Obsidian/Utility/promiseUtils\";\r\n import { useSuspense } from \"@Obsidian/Utility/suspense\";\r\n import { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n import { ControlLazyMode } from \"@Obsidian/Enums/Controls/controlLazyMode\";\r\n import { computed, PropType, ref, watch } from \"vue\";\r\n import CheckBoxList from \"./checkBoxList.obs\";\r\n import DropDownList from \"./dropDownList.obs\";\r\n import RadioButtonList from \"./radioButtonList.obs\";\r\n import { PickerDisplayStyle } from \"@Obsidian/Enums/Controls/pickerDisplayStyle\";\r\n\r\n /**\r\n * Convert a model value to the internal value. Basically, this extracts the\r\n * value from a ListItemBag and also ensures correct array/non-array state\r\n * depending on the isMultiple value.\r\n *\r\n * @param value The modelValue from the parent component.\r\n * @param isMultiple True if the output value should be an array; otherwise false.\r\n *\r\n * @returns The value trimmed down to just the actual selection value.\r\n */\r\n function modelValueToInternalValue(value: ListItemBag | ListItemBag[] | undefined | null, isMultiple: boolean): string | string[] {\r\n if (value === undefined || value === null) {\r\n if (isMultiple && !isRadioButtonListStyle?.value) {\r\n return [];\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n else if (Array.isArray(value)) {\r\n const valuesAsStrings = value.map(v => v.value ?? \"\");\r\n\r\n if (isMultiple && !isRadioButtonListStyle?.value) {\r\n return valuesAsStrings;\r\n }\r\n else {\r\n return valuesAsStrings[0] ?? \"\";\r\n }\r\n }\r\n else if (value.value) {\r\n return isMultiple ? [value.value] : value.value;\r\n }\r\n else {\r\n return isMultiple ? [] : \"\";\r\n }\r\n }\r\n\r\n const props = defineProps({\r\n modelValue: {\r\n type: Object as PropType<ListItemBag | ListItemBag[] | null>,\r\n required: false\r\n },\r\n\r\n disabled: {\r\n type: Boolean as PropType<boolean>,\r\n required: false,\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 items: {\r\n type: Object as PropType<ListItemBag[] | Promise<ListItemBag[]> | (() => ListItemBag[] | Promise<ListItemBag[]>) | null>,\r\n required: false\r\n },\r\n\r\n ...standardAsyncPickerProps\r\n });\r\n\r\n const emit = defineEmits<{\r\n (e: \"update:modelValue\", value: ListItemBag | ListItemBag[] | null): void;\r\n }>();\r\n\r\n // #region Values\r\n\r\n const internalValue = ref(modelValueToInternalValue(props.modelValue, props.multiple));\r\n const loadedItems = ref<ListItemBag[] | null>(null);\r\n const isLoading = ref(false);\r\n const hasLoadedItems = ref(false);\r\n const standardProps = useStandardRockFormFieldProps(props);\r\n\r\n // #endregion\r\n\r\n // #region Computed Values\r\n\r\n /**\r\n * Initial items is used to make sure that our currently selected value\r\n * is considered valid and not erased automatically before our real\r\n * list of items is available.\r\n */\r\n const initialItems = computed((): ListItemBag[] => {\r\n // Take the modelValue and force it to be an array. If we allow\r\n // multiple selection then just ensure its in an array format.\r\n // If we don't support multiple selection then also make sure\r\n // it doesn't contain more than one value.\r\n if (props.multiple) {\r\n if (Array.isArray(props.modelValue)) {\r\n return props.modelValue;\r\n }\r\n else if (props.modelValue) {\r\n return [props.modelValue];\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n else {\r\n if (Array.isArray(props.modelValue)) {\r\n return [props.modelValue[0]];\r\n }\r\n else if (props.modelValue) {\r\n return [props.modelValue];\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * The actual items that are available to the drop down. This is either\r\n * the loaded items or the initial items.\r\n */\r\n const actualItems = computed((): ListItemBag[] => {\r\n return loadedItems.value ?? initialItems.value;\r\n });\r\n\r\n const isDropDownListStyle = computed((): boolean => {\r\n return props.displayStyle === PickerDisplayStyle.Condensed || props.displayStyle === PickerDisplayStyle.Auto;\r\n });\r\n\r\n const isCheckBoxListStyle = computed((): boolean => {\r\n return props.displayStyle === PickerDisplayStyle.List && props.multiple;\r\n });\r\n\r\n const isRadioButtonListStyle = computed((): boolean => {\r\n return props.displayStyle === PickerDisplayStyle.List && !props.multiple;\r\n });\r\n\r\n const isHorizontal = computed((): boolean => {\r\n return props.columnCount != 1;\r\n });\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Loads the items from the propery and sets the loadedItems value. This\r\n * function handles the cases of items property being either a Promise or\r\n * a Function and all the necessary deconstruction.\r\n */\r\n async function loadItems(eagerLoading: boolean): Promise<void> {\r\n let items: ListItemBag[] | Promise<ListItemBag[]> | (() => ListItemBag[] | Promise<ListItemBag[]>) | null = props.items ?? null;\r\n\r\n if (items === null) {\r\n loadedItems.value = null;\r\n return;\r\n }\r\n\r\n if (typeof items === \"function\") {\r\n if (!eagerLoading) {\r\n return;\r\n }\r\n\r\n items = items();\r\n }\r\n\r\n if (isPromise(items)) {\r\n isLoading.value = true;\r\n items = await items;\r\n isLoading.value = false;\r\n }\r\n\r\n loadedItems.value = items;\r\n hasLoadedItems.value = true;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Event Handlers\r\n\r\n /**\r\n * Called any time the drop down opens. Check if we need to lazy load\r\n * our items.\r\n */\r\n function onOpen(): void {\r\n // If we haven't loaded our dynamic options yet then start loading.\r\n if (loadedItems.value === null && !isLoading.value) {\r\n loadItems(true);\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n watch(() => props.items, () => {\r\n // Only perform eager loading if we are not on-demand loading or\r\n // if we have already been loaded items previously.\r\n loadItems(props.lazyMode !== ControlLazyMode.OnDemand || hasLoadedItems.value);\r\n });\r\n\r\n watch(() => props.displayStyle, () => {\r\n if (hasLoadedItems.value) {\r\n return;\r\n }\r\n\r\n if (isCheckBoxListStyle.value || isRadioButtonListStyle.value) {\r\n loadItems(true);\r\n }\r\n });\r\n\r\n watch([() => props.modelValue, () => props.multiple], () => {\r\n updateRefValue(internalValue, modelValueToInternalValue(props.modelValue, props.multiple));\r\n });\r\n\r\n watch(internalValue, () => {\r\n if (Array.isArray(internalValue.value)) {\r\n const selectedValues = internalValue.value;\r\n const newValue = actualItems.value.filter(o => selectedValues.some(v => v === o.value));\r\n\r\n emit(\"update:modelValue\", newValue);\r\n }\r\n else {\r\n const selectedValue = internalValue.value;\r\n const newValue = actualItems.value.filter(o => selectedValue === o.value);\r\n\r\n emit(\"update:modelValue\", newValue.length > 0 ? newValue[0] : null);\r\n }\r\n });\r\n\r\n if (Array.isArray(props.items)) {\r\n // If we have an array of items, then just load it because there\r\n // won't be any delay.\r\n loadItems(true);\r\n }\r\n else if (props.lazyMode === ControlLazyMode.Eager || !isDropDownListStyle.value) {\r\n // A radio list or checkbox list both require eager loading.\r\n const suspense = useSuspense();\r\n\r\n if (suspense) {\r\n suspense.addOperation(loadItems(true));\r\n }\r\n else {\r\n loadItems(true);\r\n }\r\n }\r\n else if (props.lazyMode === ControlLazyMode.Lazy) {\r\n // Eager loading in this case means go ahead and load everything,\r\n // but we aren't going to wait around for it.\r\n loadItems(true);\r\n }\r\n</script>\r\n"],"names":["modelValueToInternalValue","value","isMultiple","undefined","isRadioButtonListStyle","Array","isArray","valuesAsStrings","map","v","_v$value","_valuesAsStrings$","internalValue","ref","props","modelValue","multiple","loadedItems","isLoading","hasLoadedItems","standardProps","useStandardRockFormFieldProps","initialItems","computed","actualItems","_loadedItems$value","isDropDownListStyle","displayStyle","PickerDisplayStyle","Condensed","Auto","isCheckBoxListStyle","List","isHorizontal","columnCount","loadItems","_x","_loadItems","apply","arguments","_asyncToGenerator","eagerLoading","_props$items","items","isPromise","onOpen","watch","lazyMode","ControlLazyMode","OnDemand","updateRefValue","selectedValues","newValue","filter","o","some","emit","selectedValue","length","Eager","suspense","useSuspense","addOperation","Lazy"],"mappings":"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"}