{"version":3,"file":"baseAsyncPicker.js","sources":["../../../Framework/Controls/baseAsyncPicker.ts"],"sourcesContent":["// \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// \r\n//\r\nimport { standardAsyncPickerProps, updateRefValue, useStandardRockFormFieldProps } from \"@Obsidian/Utility/component\";\r\nimport { isPromise } from \"@Obsidian/Utility/promiseUtils\";\r\nimport { useSuspense } from \"@Obsidian/Utility/suspense\";\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { ControlLazyMode } from \"@Obsidian/Enums/Controls/controlLazyMode\";\r\nimport { computed, defineComponent, PropType, ref, watch } from \"vue\";\r\nimport CheckBoxList from \"./checkBoxList\";\r\nimport DropDownList from \"./dropDownList\";\r\nimport RadioButtonList from \"./radioButtonList\";\r\nimport { 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\nfunction modelValueToInternalValue(value: ListItemBag | ListItemBag[] | undefined | null, isMultiple: boolean): string | string[] {\r\n if (value === undefined || value === null) {\r\n return isMultiple ? [] : \"\";\r\n }\r\n else if (Array.isArray(value)) {\r\n return value.map(v => v.value ?? \"\");\r\n }\r\n else {\r\n return value.value ?? \"\";\r\n }\r\n}\r\n\r\nexport default defineComponent({\r\n name: \"BaseAsyncPicker\",\r\n\r\n components: {\r\n CheckBoxList,\r\n DropDownList,\r\n RadioButtonList\r\n },\r\n\r\n props: {\r\n modelValue: {\r\n type: Object as PropType,\r\n required: false\r\n },\r\n\r\n disabled: {\r\n type: Boolean as PropType,\r\n required: false,\r\n default: false\r\n },\r\n\r\n grouped: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n items: {\r\n type: Object as PropType | (() => ListItemBag[] | Promise) | null>,\r\n required: false\r\n },\r\n\r\n ...standardAsyncPickerProps\r\n },\r\n\r\n emits: {\r\n \"update:modelValue\": (_value: ListItemBag | ListItemBag[] | null) => true\r\n },\r\n\r\n setup(props, { emit }) {\r\n // #region Values\r\n\r\n const internalValue = ref(modelValueToInternalValue(props.modelValue, props.multiple));\r\n const loadedItems = ref(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 const loadItems = async (eagerLoading: boolean): Promise => {\r\n let items: ListItemBag[] | Promise | (() => ListItemBag[] | Promise) | 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 const 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\r\n return {\r\n actualItems,\r\n internalValue,\r\n isCheckBoxListStyle,\r\n isDropDownListStyle,\r\n isHorizontal,\r\n isLoading,\r\n isRadioButtonListStyle,\r\n onOpen,\r\n standardProps\r\n };\r\n },\r\n\r\n template: `\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n\r\n`\r\n});\r\n"],"names":["modelValueToInternalValue","value","isMultiple","undefined","Array","isArray","map","v","_v$value","_value$value","defineComponent","name","components","CheckBoxList","DropDownList","RadioButtonList","props","_objectSpread","modelValue","type","Object","required","disabled","Boolean","default","grouped","items","standardAsyncPickerProps","emits","_value","setup","_ref","emit","internalValue","ref","multiple","loadedItems","isLoading","hasLoadedItems","standardProps","useStandardRockFormFieldProps","initialItems","computed","actualItems","_loadedItems$value","isDropDownListStyle","displayStyle","PickerDisplayStyle","Condensed","Auto","isCheckBoxListStyle","List","isRadioButtonListStyle","isHorizontal","columnCount","loadItems","_ref2","_asyncToGenerator","eagerLoading","_props$items","isPromise","_x","apply","arguments","onOpen","watch","lazyMode","ControlLazyMode","OnDemand","updateRefValue","selectedValues","newValue","filter","o","some","selectedValue","length","Eager","suspense","useSuspense","addOperation","Lazy","template"],"mappings":"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"}