{"version":3,"file":"definedValuePicker.obs.js","sources":["../../../Framework/Controls/definedValuePicker.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <template v-if=\"allowAdd && isShowingAddForm\">\r\n        <RockLabel :help=\"help\">{{ label }}</RockLabel>\r\n        <Loading :isLoading=\"isLoading\" class=\"well\">\r\n            <NotificationBox v-if=\"fetchError\" alertType=\"danger\">Error: {{ fetchError }}</NotificationBox>\r\n            <NotificationBox v-else-if=\"saveError\" alertType=\"danger\">Error: {{ saveError }}</NotificationBox>\r\n\r\n            <RockForm v-else @submit=\"saveNewValue\">\r\n                <TextBox label=\"Value\" v-model=\"newValue\" rules=\"required\" />\r\n                <TextBox label=\"Description\" v-model=\"newDescription\" textMode=\"multiline\" />\r\n                <AttributeValuesContainer v-if=\"attributes != null\" v-model=\"attributeValues\" :attributes=\"attributes\" isEditMode :showCategoryLabel=\"false\" />\r\n                <RockButton type=\"submit\" :btnType=\"BtnType.Primary\" :btnSize=\"BtnSize.ExtraSmall\">Add</RockButton>\r\n                <RockButton :btnType=\"BtnType.Link\" :btnSize=\"BtnSize.ExtraSmall\" @click=\"hideAddForm\">Cancel</RockButton>\r\n            </RockForm>\r\n\r\n            <RockButton v-if=\"fetchError || saveError\" :btnType=\"BtnType.Link\" :btnSize=\"BtnSize.ExtraSmall\" @click=\"hideAddForm\">Cancel</RockButton>\r\n        </Loading>\r\n    </template>\r\n\r\n    <template v-else>\r\n        <BaseAsyncPicker v-model=\"internalValue\" v-bind=\"standardProps\" :items=\"itemsSource\">\r\n            <template #inputGroupAppend v-if=\"allowAdd\">\r\n                <span class=\"input-group-btn\">\r\n                    <RockButton @click=\"showAddForm\" :btnType=\"BtnType.Default\" aria-label=\"Add Item\"><i class=\"fa fa-plus\" aria-hidden></i></RockButton>\r\n                </span>\r\n            </template>\r\n            <template #append=\"{ isInputGroupSupported }\" v-if=\"allowAdd\">\r\n                <RockButton v-if=\"!isInputGroupSupported\" @click=\"showAddForm\" :btnType=\"BtnType.Link\">Add Item</RockButton>\r\n            </template>\r\n        </BaseAsyncPicker>\r\n    </template>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { Guid } from \"@Obsidian/Types\";\r\n    import { useSecurityGrantToken } from \"@Obsidian/Utility/block\";\r\n    import { standardAsyncPickerProps, useStandardAsyncPickerProps, useVModelPassthrough } from \"@Obsidian/Utility/component\";\r\n    import { useHttp } from \"@Obsidian/Utility/http\";\r\n    import { DefinedValuePickerGetDefinedValuesOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/definedValuePickerGetDefinedValuesOptionsBag\";\r\n    import { DefinedValuePickerSaveNewValueOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/definedValuePickerSaveNewValueOptionsBag\";\r\n    import { DefinedValuePickerGetAttributesOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/definedValuePickerGetAttributesOptionsBag\";\r\n    import { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n    import { PropType, ref, watch } from \"vue\";\r\n    import BaseAsyncPicker from \"./baseAsyncPicker\";\r\n    import RockLabel from \"./rockLabel\";\r\n    import RockForm from \"./rockForm\";\r\n    import AttributeValuesContainer from \"./attributeValuesContainer\";\r\n    import TextBox from \"./textBox\";\r\n    import RockButton from \"./rockButton\";\r\n    import Loading from \"./loading\";\r\n    import NotificationBox from \"./notificationBox.obs\";\r\n    import { BtnType } from \"@Obsidian/Enums/Controls/btnType\";\r\n    import { BtnSize } from \"@Obsidian/Enums/Controls/btnSize\";\r\n    import { PublicAttributeBag } from \"@Obsidian/ViewModels/Utility/publicAttributeBag\";\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        definedTypeGuid: {\r\n            type: String as PropType<Guid>,\r\n            required: false\r\n        },\r\n\r\n        allowAdd: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: 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    const http = useHttp();\r\n\r\n    // #region Picker\r\n\r\n    const standardProps = useStandardAsyncPickerProps(props);\r\n    const securityGrantToken = useSecurityGrantToken();\r\n    const internalValue = useVModelPassthrough(props, \"modelValue\", emit);\r\n    const itemsSource = ref<(() => Promise<ListItemBag[]>) | null>(null);\r\n\r\n    async function loadItems(): Promise<ListItemBag[]> {\r\n        const options: Partial<DefinedValuePickerGetDefinedValuesOptionsBag> = {\r\n            definedTypeGuid: props.definedTypeGuid,\r\n            securityGrantToken: securityGrantToken.value\r\n        };\r\n        const url = \"/api/v2/Controls/DefinedValuePickerGetDefinedValues\";\r\n        const result = await http.post<ListItemBag[]>(url, undefined, options);\r\n\r\n        if (result.isSuccess && result.data) {\r\n            return result.data;\r\n        }\r\n        else {\r\n            console.error(result.errorMessage ?? \"Unknown error while loading data.\");\r\n            return [];\r\n        }\r\n    }\r\n\r\n    function fetchValues(): void {\r\n        itemsSource.value = () => loadItems();\r\n    }\r\n\r\n    watch(() => props.definedTypeGuid, fetchValues);\r\n\r\n    fetchValues();\r\n\r\n    // #endregion\r\n\r\n    // #region Add Value\r\n\r\n    const isShowingAddForm = ref(false);\r\n    const isLoading = ref(false);\r\n    const fetchError = ref<false | string>(false);\r\n    const saveError = ref<false | string>(false);\r\n\r\n    async function showAddForm(): Promise<void> {\r\n        if (!props.allowAdd) return;\r\n\r\n        isShowingAddForm.value = true;\r\n\r\n        if (attributes.value == null) {\r\n            isLoading.value = true;\r\n            fetchError.value = false;\r\n            saveError.value = false;\r\n\r\n            const options: Partial<DefinedValuePickerGetAttributesOptionsBag> = {\r\n                definedTypeGuid: props.definedTypeGuid,\r\n                securityGrantToken: securityGrantToken.value\r\n            };\r\n            const url = \"/api/v2/Controls/DefinedValuePickerGetAttributes\";\r\n            const result = await http.post<PublicAttributeBag[]>(url, undefined, options);\r\n\r\n            if (result.isSuccess && result.data) {\r\n                attributes.value = result.data.reduce(function (acc, val) {\r\n                    acc[val.key as string] = val;\r\n                    return acc;\r\n                }, {});\r\n            }\r\n            else {\r\n                attributes.value = null;\r\n                fetchError.value = \"Unable to fetch attribute data.\";\r\n            }\r\n\r\n            isLoading.value = false;\r\n        }\r\n    }\r\n\r\n    function hideAddForm(): void {\r\n        isShowingAddForm.value = false;\r\n        fetchError.value = false;\r\n        saveError.value = false;\r\n    }\r\n\r\n    async function saveNewValue(): Promise<void> {\r\n        isLoading.value = true;\r\n        saveError.value = false;\r\n\r\n        const options: Partial<DefinedValuePickerSaveNewValueOptionsBag> = {\r\n            definedTypeGuid: props.definedTypeGuid,\r\n            securityGrantToken: securityGrantToken.value,\r\n            value: newValue.value,\r\n            description: newDescription.value,\r\n            attributeValues: attributeValues.value\r\n        };\r\n        const url = \"/api/v2/Controls/DefinedValuePickerSaveNewValue\";\r\n        const result = await http.post<ListItemBag>(url, undefined, options);\r\n\r\n        if (result.isSuccess && result.data) {\r\n            fetchValues();\r\n\r\n            if (props.multiple) {\r\n                if (Array.isArray(internalValue.value)) {\r\n                    internalValue.value.push(result.data);\r\n                }\r\n                else {\r\n                    internalValue.value = [result.data];\r\n                }\r\n            }\r\n            else {\r\n                internalValue.value = result.data;\r\n            }\r\n\r\n            hideAddForm();\r\n            newValue.value = \"\";\r\n            newDescription.value = \"\";\r\n            attributeValues.value = {};\r\n        }\r\n        else {\r\n            saveError.value = \"Unable to save new Defined Value.\";\r\n        }\r\n\r\n        isLoading.value = false;\r\n    }\r\n\r\n\r\n    const attributes = ref<Record<string, PublicAttributeBag> | null>(null);\r\n    const attributeValues = ref<Record<string, string>>({});\r\n    const newValue = ref(\"\");\r\n    const newDescription = ref(\"\");\r\n\r\n    // #endregion\r\n</script>\r\n"],"names":["http","useHttp","standardProps","useStandardAsyncPickerProps","props","securityGrantToken","useSecurityGrantToken","internalValue","useVModelPassthrough","emit","itemsSource","ref","loadItems","_loadItems","apply","arguments","_asyncToGenerator","options","definedTypeGuid","value","url","result","post","undefined","isSuccess","data","_result$errorMessage","console","error","errorMessage","fetchValues","watch","isShowingAddForm","isLoading","fetchError","saveError","showAddForm","_showAddForm","allowAdd","attributes","reduce","acc","val","key","hideAddForm","saveNewValue","_saveNewValue","newValue","description","newDescription","attributeValues","multiple","Array","isArray","push"],"mappings":"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"}