{"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\" :disabled=\"disabled\">\r\n <template #inputGroupAppend v-if=\"allowAdd\">\r\n <span class=\"input-group-btn\">\r\n <RockButton @click=\"showAddForm\" :disabled=\"!isAddAllowed\" :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\" :disabled=\"!isAddAllowed\" :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 { computed, PropType, ref, watch } from \"vue\";\r\n import BaseAsyncPicker from \"./baseAsyncPicker.obs\";\r\n import RockLabel from \"./rockLabel.obs\";\r\n import RockForm from \"./rockForm.obs\";\r\n import AttributeValuesContainer from \"./attributeValuesContainer.obs\";\r\n import TextBox from \"./textBox.obs\";\r\n import RockButton from \"./rockButton.obs\";\r\n import Loading from \"./loading.obs\";\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 import { emptyGuid, toGuidOrNull } from \"@Obsidian/Utility/guid\";\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 definedTypeGuid: {\r\n type: String as PropType<Guid | null | undefined>,\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: DefinedValuePickerGetDefinedValuesOptionsBag = {\r\n definedTypeGuid: toGuidOrNull(props.definedTypeGuid) ?? emptyGuid,\r\n securityGrantToken: securityGrantToken.value,\r\n includeInactive: false,\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 const isAddAllowed = computed<boolean>(() => {\r\n // Only allow adding if the defined type guid is valid.\r\n return props.allowAdd && !!toGuidOrNull(props.definedTypeGuid);\r\n });\r\n\r\n async function showAddForm(): Promise<void> {\r\n if (!isAddAllowed.value) 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: DefinedValuePickerGetAttributesOptionsBag = {\r\n definedTypeGuid: toGuidOrNull(props.definedTypeGuid) ?? emptyGuid,\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: DefinedValuePickerSaveNewValueOptionsBag = {\r\n definedTypeGuid: toGuidOrNull(props.definedTypeGuid) ?? emptyGuid,\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","_toGuidOrNull","options","definedTypeGuid","toGuidOrNull","emptyGuid","value","includeInactive","url","result","post","undefined","isSuccess","data","_result$errorMessage","console","error","errorMessage","fetchValues","watch","isShowingAddForm","isLoading","fetchError","saveError","isAddAllowed","computed","allowAdd","showAddForm","_showAddForm","attributes","_toGuidOrNull2","reduce","acc","val","key","hideAddForm","saveNewValue","_saveNewValue","_toGuidOrNull3","newValue","description","newDescription","attributeValues","multiple","Array","isArray","push"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAsFI,IAAMA,IAAI,GAAGC,OAAO,EAAE,CAAA;MAItB,IAAA,IAAMC,aAAa,GAAGC,2BAA2B,CAACC,KAAK,CAAC,CAAA;UACxD,IAAMC,kBAAkB,GAAGC,qBAAqB,EAAE,CAAA;UAClD,IAAMC,aAAa,GAAGC,oBAAoB,CAACJ,KAAK,EAAE,YAAY,EAAEK,IAAI,CAAC,CAAA;MACrE,IAAA,IAAMC,WAAW,GAAGC,GAAG,CAAwC,IAAI,CAAC,CAAA;MAAC,IAAA,SAEtDC,SAASA,GAAA;MAAA,MAAA,OAAAC,UAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAAF,UAAA,GAAA;YAAAA,UAAA,GAAAG,iBAAA,CAAxB,aAAmD;MAAA,QAAA,IAAAC,aAAA,CAAA;MAC/C,QAAA,IAAMC,OAAqD,GAAG;MAC1DC,UAAAA,eAAe,EAAAF,CAAAA,aAAA,GAAEG,YAAY,CAAChB,KAAK,CAACe,eAAe,CAAC,MAAAF,IAAAA,IAAAA,aAAA,KAAAA,KAAAA,CAAAA,GAAAA,aAAA,GAAII,SAAS;gBACjEhB,kBAAkB,EAAEA,kBAAkB,CAACiB,KAAK;MAC5CC,UAAAA,eAAe,EAAE,KAAA;eACpB,CAAA;cACD,IAAMC,GAAG,GAAG,qDAAqD,CAAA;cACjE,IAAMC,MAAM,GAASzB,MAAAA,IAAI,CAAC0B,IAAI,CAAgBF,GAAG,EAAEG,SAAS,EAAET,OAAO,CAAC,CAAA;MAEtE,QAAA,IAAIO,MAAM,CAACG,SAAS,IAAIH,MAAM,CAACI,IAAI,EAAE;gBACjC,OAAOJ,MAAM,CAACI,IAAI,CAAA;MACtB,SAAC,MACI;MAAA,UAAA,IAAAC,oBAAA,CAAA;MACDC,UAAAA,OAAO,CAACC,KAAK,CAAAF,CAAAA,oBAAA,GAACL,MAAM,CAACQ,YAAY,MAAA,IAAA,IAAAH,oBAAA,KAAA,KAAA,CAAA,GAAAA,oBAAA,GAAI,mCAAmC,CAAC,CAAA;MACzE,UAAA,OAAO,EAAE,CAAA;MACb,SAAA;aACH,CAAA,CAAA;MAAA,MAAA,OAAAjB,UAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UAED,SAASmB,WAAWA,GAAS;MACzBxB,MAAAA,WAAW,CAACY,KAAK,GAAG,MAAMV,SAAS,EAAE,CAAA;MACzC,KAAA;MAEAuB,IAAAA,KAAK,CAAC,MAAM/B,KAAK,CAACe,eAAe,EAAEe,WAAW,CAAC,CAAA;MAE/CA,IAAAA,WAAW,EAAE,CAAA;MAMb,IAAA,IAAME,gBAAgB,GAAGzB,GAAG,CAAC,KAAK,CAAC,CAAA;MACnC,IAAA,IAAM0B,SAAS,GAAG1B,GAAG,CAAC,KAAK,CAAC,CAAA;MAC5B,IAAA,IAAM2B,UAAU,GAAG3B,GAAG,CAAiB,KAAK,CAAC,CAAA;MAC7C,IAAA,IAAM4B,SAAS,GAAG5B,GAAG,CAAiB,KAAK,CAAC,CAAA;MAE5C,IAAA,IAAM6B,YAAY,GAAGC,QAAQ,CAAU,MAAM;YAEzC,OAAOrC,KAAK,CAACsC,QAAQ,IAAI,CAAC,CAACtB,YAAY,CAAChB,KAAK,CAACe,eAAe,CAAC,CAAA;MAClE,KAAC,CAAC,CAAA;MAAC,IAAA,SAEYwB,WAAWA,GAAA;MAAA,MAAA,OAAAC,YAAA,CAAA9B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAA6B,YAAA,GAAA;YAAAA,YAAA,GAAA5B,iBAAA,CAA1B,aAA4C;MACxC,QAAA,IAAI,CAACwB,YAAY,CAAClB,KAAK,EAAE,OAAA;cAEzBc,gBAAgB,CAACd,KAAK,GAAG,IAAI,CAAA;MAE7B,QAAA,IAAIuB,UAAU,CAACvB,KAAK,IAAI,IAAI,EAAE;MAAA,UAAA,IAAAwB,cAAA,CAAA;gBAC1BT,SAAS,CAACf,KAAK,GAAG,IAAI,CAAA;gBACtBgB,UAAU,CAAChB,KAAK,GAAG,KAAK,CAAA;gBACxBiB,SAAS,CAACjB,KAAK,GAAG,KAAK,CAAA;MAEvB,UAAA,IAAMJ,OAAkD,GAAG;MACvDC,YAAAA,eAAe,EAAA2B,CAAAA,cAAA,GAAE1B,YAAY,CAAChB,KAAK,CAACe,eAAe,CAAC,MAAA2B,IAAAA,IAAAA,cAAA,KAAAA,KAAAA,CAAAA,GAAAA,cAAA,GAAIzB,SAAS;kBACjEhB,kBAAkB,EAAEA,kBAAkB,CAACiB,KAAAA;iBAC1C,CAAA;gBACD,IAAME,GAAG,GAAG,kDAAkD,CAAA;gBAC9D,IAAMC,MAAM,GAASzB,MAAAA,IAAI,CAAC0B,IAAI,CAAuBF,GAAG,EAAEG,SAAS,EAAET,OAAO,CAAC,CAAA;MAE7E,UAAA,IAAIO,MAAM,CAACG,SAAS,IAAIH,MAAM,CAACI,IAAI,EAAE;MACjCgB,YAAAA,UAAU,CAACvB,KAAK,GAAGG,MAAM,CAACI,IAAI,CAACkB,MAAM,CAAC,UAAUC,GAAG,EAAEC,GAAG,EAAE;MACtDD,cAAAA,GAAG,CAACC,GAAG,CAACC,GAAG,CAAW,GAAGD,GAAG,CAAA;MAC5B,cAAA,OAAOD,GAAG,CAAA;mBACb,EAAE,EAAE,CAAC,CAAA;MACV,WAAC,MACI;kBACDH,UAAU,CAACvB,KAAK,GAAG,IAAI,CAAA;kBACvBgB,UAAU,CAAChB,KAAK,GAAG,iCAAiC,CAAA;MACxD,WAAA;gBAEAe,SAAS,CAACf,KAAK,GAAG,KAAK,CAAA;MAC3B,SAAA;aACH,CAAA,CAAA;MAAA,MAAA,OAAAsB,YAAA,CAAA9B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UAED,SAASoC,WAAWA,GAAS;YACzBf,gBAAgB,CAACd,KAAK,GAAG,KAAK,CAAA;YAC9BgB,UAAU,CAAChB,KAAK,GAAG,KAAK,CAAA;YACxBiB,SAAS,CAACjB,KAAK,GAAG,KAAK,CAAA;MAC3B,KAAA;MAAC,IAAA,SAEc8B,YAAYA,GAAA;MAAA,MAAA,OAAAC,aAAA,CAAAvC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAAsC,aAAA,GAAA;YAAAA,aAAA,GAAArC,iBAAA,CAA3B,aAA6C;MAAA,QAAA,IAAAsC,cAAA,CAAA;cACzCjB,SAAS,CAACf,KAAK,GAAG,IAAI,CAAA;cACtBiB,SAAS,CAACjB,KAAK,GAAG,KAAK,CAAA;MAEvB,QAAA,IAAMJ,OAAiD,GAAG;MACtDC,UAAAA,eAAe,EAAAmC,CAAAA,cAAA,GAAElC,YAAY,CAAChB,KAAK,CAACe,eAAe,CAAC,MAAAmC,IAAAA,IAAAA,cAAA,KAAAA,KAAAA,CAAAA,GAAAA,cAAA,GAAIjC,SAAS;gBACjEhB,kBAAkB,EAAEA,kBAAkB,CAACiB,KAAK;gBAC5CA,KAAK,EAAEiC,QAAQ,CAACjC,KAAK;gBACrBkC,WAAW,EAAEC,cAAc,CAACnC,KAAK;gBACjCoC,eAAe,EAAEA,eAAe,CAACpC,KAAAA;eACpC,CAAA;cACD,IAAME,GAAG,GAAG,iDAAiD,CAAA;cAC7D,IAAMC,MAAM,GAASzB,MAAAA,IAAI,CAAC0B,IAAI,CAAcF,GAAG,EAAEG,SAAS,EAAET,OAAO,CAAC,CAAA;MAEpE,QAAA,IAAIO,MAAM,CAACG,SAAS,IAAIH,MAAM,CAACI,IAAI,EAAE;MACjCK,UAAAA,WAAW,EAAE,CAAA;gBAEb,IAAI9B,KAAK,CAACuD,QAAQ,EAAE;kBAChB,IAAIC,KAAK,CAACC,OAAO,CAACtD,aAAa,CAACe,KAAK,CAAC,EAAE;oBACpCf,aAAa,CAACe,KAAK,CAACwC,IAAI,CAACrC,MAAM,CAACI,IAAI,CAAC,CAAA;MACzC,aAAC,MACI;MACDtB,cAAAA,aAAa,CAACe,KAAK,GAAG,CAACG,MAAM,CAACI,IAAI,CAAC,CAAA;MACvC,aAAA;MACJ,WAAC,MACI;MACDtB,YAAAA,aAAa,CAACe,KAAK,GAAGG,MAAM,CAACI,IAAI,CAAA;MACrC,WAAA;MAEAsB,UAAAA,WAAW,EAAE,CAAA;gBACbI,QAAQ,CAACjC,KAAK,GAAG,EAAE,CAAA;gBACnBmC,cAAc,CAACnC,KAAK,GAAG,EAAE,CAAA;MACzBoC,UAAAA,eAAe,CAACpC,KAAK,GAAG,EAAE,CAAA;MAC9B,SAAC,MACI;gBACDiB,SAAS,CAACjB,KAAK,GAAG,mCAAmC,CAAA;MACzD,SAAA;cAEAe,SAAS,CAACf,KAAK,GAAG,KAAK,CAAA;aAC1B,CAAA,CAAA;MAAA,MAAA,OAAA+B,aAAA,CAAAvC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAGD,IAAA,IAAM8B,UAAU,GAAGlC,GAAG,CAA4C,IAAI,CAAC,CAAA;MACvE,IAAA,IAAM+C,eAAe,GAAG/C,GAAG,CAAyB,EAAE,CAAC,CAAA;MACvD,IAAA,IAAM4C,QAAQ,GAAG5C,GAAG,CAAC,EAAE,CAAC,CAAA;MACxB,IAAA,IAAM8C,cAAc,GAAG9C,GAAG,CAAC,EAAE,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}