{"version":3,"file":"SimpleSelect.vue.mjs","sources":["../../../lib/data-provider-interface/components/SimpleSelect.vue"],"sourcesContent":["<template>\n  <div class=\"formkitProperty\">\n    <h4>{{ props.context.label }}</h4>\n    <div class=\"position-relative formkitCmpWrap\">\n\n      <div v-if=\"isReady\">\n\n        <!-- Hidden input that contains the actual catalog id. We rely on that to pass the catalog id to backend later -->\n        <FormKit v-show=\"false\" v-model=\"selectedCatalogId\" :name=\"`${props.context.node.name}`\" :id=\"`${props.context.node.id || props.context.node.name}`\" type=\"text\" />\n\n        <!-- User-facing input that displays the name of the selected catalog -->\n        <FormKit\n          class=\"autocompleteInputfield\"\n          v-model=\"selectedCatalogTitle\"\n          :placeholder=\"props.context.attrs.placeholder\"\n          type=\"text\" \n          validation=\"required\"\n          mandatory=\"true\"\n          :validation-messages=\"{\n            required: props.context.attrs.placeholder,\n          }\" :name=\"`${props.context.node.name}__displayedValue`\"\n          :disabled=\"isDisabled\"\n          @click=\"showList = !showList\"\n        />\n        <ul ref=\"dropdownList\" v-show=\"showList\" class=\"autocompleteResultList selectListFK catSelectList\">\n          <li v-for=\"match in authorizedCatalogs\" :key=\"match\" @click=\"setvalue(match)\"\n            class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{\n              match.name }}\n          </li>\n          <li v-if=\"authorizedCatalogs.length === 0\" v-for=\"idMatch in userCats\" :key=\"idMatch\" @click=\"setvalue(idMatch)\"\n            class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{\n              idMatch }}\n          </li>\n        </ul>\n      </div>\n    </div>\n  </div>\n\n</template>\n<script setup>\nimport { ref, computed, onMounted, watch, nextTick } from 'vue';\nimport { useStore } from 'vuex';\nimport { getNode } from '@formkit/core'\nimport { onClickOutside } from '@vueuse/core'\nimport axios from 'axios'\nimport { useRuntimeEnv } from \"../../composables/useRuntimeEnv.ts\";\nimport { useI18n } from 'vue-i18n';\nimport { useAsyncState } from '@vueuse/core';\nimport { FormKit } from '@formkit/vue';\nimport { useDpiContext } from '../composables/useDpiContext';\n\nconst props = defineProps({\n  context: Object\n})\n\nconst dpiContext = useDpiContext()\nconst { locale, fallbackLocale } = useI18n({ useScope: 'global' })\n\nconst userCats = computed(() => store.getters['auth/getUserCatalogIds']);\nconst showList = ref(false)\nconst store = useStore()\nconst dropdownList = ref(null)\nconst env = useRuntimeEnv()\nconst selectedCatalogTitle = ref('')\nconst selectedCatalogId = ref('')\nconst hasMounted = ref(false)\n\nonClickOutside(dropdownList, event => showList.value = false)\n\nconst setvalue = async (e) => {\n  if (e.id) {\n    selectedCatalogId.value = e.id\n    selectedCatalogTitle.value = e?.name || e.id\n  } else {\n    selectedCatalogId.value = e\n    selectedCatalogTitle.value = e\n  }\n\n  showList.value = false\n}\n\nconst { execute: filterCatList, state: catalogListData, isReady: isQueryReady, error } = useAsyncState(async () => {\n  const catalogListData = await axios.get(env.api.baseUrl + 'search?filter=catalogue&limit=1000')\n  return catalogListData\n}, { data: { result: { results: [] } } }, { immediate: false })\n\n// Wait until everything mounted and loaded tu ensure that the catalog list is available and selected catalog from edit mode is available\nconst isReady = computed(() => hasMounted.value && !!catalogListData.value && isQueryReady.value)\n\nwatch(error, () => {\n  console.error(error.value)\n})\n\nconst hasResults = computed(() => {\n  return catalogListData?.value?.data?.result?.results?.length > 0\n})\n\nconst hasOneResultOnly = computed(() => {\n  return hasResults && catalogListData?.value?.data?.result?.results?.length === 1\n})\n\n/**\n * Computes list of users' authorized catalogs in { id: string; name: string } format\n */\nconst authorizedCatalogs = computed(() => {\n  if (!hasResults.value || !isQueryReady.value) return []\n\n  const allCatalogs = catalogListData.value?.data?.result?.results || []\n  const authorizedCatalogs = allCatalogs.filter(catalog => userCats.value?.includes(catalog.id))\n\n  // map to { id: string; name: string } pairs\n  const authorizedCatalogsDataModel = authorizedCatalogs.map((catalog) => {\n    const id = catalog?.id || ''\n    let title = ''\n\n    if (!catalog?.title) title = id\n    else if (typeof catalog?.title === 'string') title = catalog?.title\n    else if (typeof catalog?.title === 'object') title =\n      catalog?.title[locale.value]\n      || catalog?.title[fallbackLocale.value]\n      || Object.values(catalog?.title)?.[0]\n      || id\n\n    return { id, name: title || id }\n  });\n  return authorizedCatalogsDataModel\n})\n\nwatch(hasOneResultOnly, (yes) => {\n  if (yes) {\n    const result = catalogListData.value.data.result.results[0]\n    setvalue({ id: result.id, name: result.name })\n  }\n}, { immediate: true })\n\nonMounted(async () => {\n  // When editing, we can restore the selected catalog id immediately, but we rely on fetching from hub-search for its catalog title.\n  // So we need to wait until everything is fetched before proceeding further.\n  await filterCatList()\n  await nextTick()\n  const catalogIdToLoadForEdit =\n    dpiContext.value.edit?.catalog\n    || getNode?.('catalog')?.value\n    || getNode?.('dcat:catalog')?.value\n    || getNode?.('dct:catalog')?.value\n    || undefined\n  const maybeFoundCatalogFromQuery = authorizedCatalogs.value?.find(item => item.id === catalogIdToLoadForEdit)\n  if (maybeFoundCatalogFromQuery) {\n    setvalue({ id: maybeFoundCatalogFromQuery.id, name: maybeFoundCatalogFromQuery.name })\n  }\n  await nextTick()\n  hasMounted.value = true\n});\n\n// Disable select option if in edit mode\n// Note: Decision is made due to a backend limitation that causes dataset duplicates to occur when changing a catalog\nconst isDisabled = computed(() => {\n  const isInEditMode = dpiContext.value.edit?.enabled\n\n  // If duplicate, do not disable select option so that they can duplicate datasets into different catalogs\n  // todo: code debt due to code replication; usage of localStorage kind of weird here -> see DraftsPage for more on this.\n  // We use localStorage to track if the intent is to duplicate or not\n  const isDuplicate = localStorage?.getItem('dpi_duplicate')\n\n  return isInEditMode && !isDuplicate\n})\n\n</script>\n<style>\n.catSelectList {\n  width: 97.3% !important;\n  margin: 0 1rem;\n}\n\n.selectListFK {\n\n  max-height: 20rem;\n  overflow: overlay;\n  overflow-x: hidden;\n}\n</style>\n"],"names":["props","__props","dpiContext","useDpiContext","locale","fallbackLocale","useI18n","userCats","computed","store","showList","ref","useStore","dropdownList","env","useRuntimeEnv","selectedCatalogTitle","selectedCatalogId","hasMounted","onClickOutside","event","setvalue","e","filterCatList","catalogListData","isQueryReady","error","useAsyncState","axios","isReady","watch","hasResults","_d","_c","_b","_a","hasOneResultOnly","authorizedCatalogs","catalog","id","title","yes","result","onMounted","nextTick","catalogIdToLoadForEdit","getNode","_e","_g","_f","maybeFoundCatalogFromQuery","_h","item","isDisabled","isInEditMode","isDuplicate","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_toDisplayString","_hoisted_2","_hoisted_3","_createVNode","_unref","FormKit","$event","_cache","_Fragment","_renderList","match","_hoisted_4","idMatch","_hoisted_5"],"mappings":"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"}