{"version":3,"file":"AutocompleteInput.vue.mjs","sources":["../../../lib/data-provider-interface/components/AutocompleteInput.vue"],"sourcesContent":["<template>\n  <div class=\"formkitProperty\">\n\n    <!-- need to make a condition for the licence property of the distribution - otherwise the dropdown doesnt work-->\n\n    <h4 class=\"formkitHeader\" v-if=\"inDis\">\n      {{ $t('message.dataupload.distributions.' + props.context.attrs.identifier + '.label') }}\n    </h4>\n    <h4 v-if=\"props.context.attrs.identifier != 'licence' && !inDis\" v-html=\"$t('message.dataupload.datasets.' + props.context.attrs.identifier + '.label')\">\n      </h4>\n\n    <div class=\"formkitCmpWrap\">\n\n      <div class=\"formkit-outer\">\n        <div class=\"d-flex formkit-inner\" v-if=\"!props.context.attrs.multiple && props.context.value.name\">\n          <!-- <div class=\"infoI\">\n            <div class=\"tooltipFormkit\">{{ props.context.attrs.info }}</div>\n          </div> -->\n          <a class=\"autocompleteInputSingleValue \">{{ props.context.value.name }}</a>\n          <div class=\"removeX\" @click=\"removeProperty\"></div>\n        </div>\n        <div v-else>\n          <div class=\"d-flex align-items-center justify-content-center formkit-inner mb-2\">\n            <!-- <div class=\"infoI\">\n              <div class=\"tooltipFormkit\">{{ props.context.attrs.info }}</div>\n            </div> -->\n\n            <input ref=\"acInput\" class=\"autocompleteInputfield\" :placeholder=\"resolvedPlaceholder\" v-model=\"inputText\"\n              type=\"text\" v-on:keyup=\"getAutocompleteSuggestions($event)\" @click=\"activeList = !activeList\">\n          </div>\n\n          <ul ref=\"dropdownList\" v-show=\"activeList\" class=\"autocompleteResultList\">\n            <li v-for=\"match in matches\" :key=\"match\" @click=\"setValue(match); activeList = !activeList\"\n              class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{ match.name }}\n            </li>\n          </ul>\n          <div v-if=\"instance.content.dataProviderInterface.annifIntegration && props.context.attrs.annifTheme\"\n            class=\"d-flex flex-wrap\">\n            <div v-for=\"item in listOfValues\" :key=\"item\">\n              <div class=\"activeResultsAutocompleteWrapper\">\n                <div class=\"d-flex\" @click=\"item.activeValue = !item.activeValue;\">\n                  <span>{{ item.name }}</span>\n                  <div class=\"removeX\" @click=\"removeMultipleProperty(item)\"></div>\n                </div>\n              </div>\n            </div>\n            <div class=\"w-100 mt-4\">\n              <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n                <h3>{{ $t('message.dataupload.info.suggestions') }}</h3>\n                <span>{{ $t('message.dataupload.info.suggestionText') }}</span>\n                <button class=\"navlikeButton\" type=\"button\"\n                  @click=\"fillAnnifsuggestions(); annifTrigger.value = true\">{{ $t('message.dataupload.info.tryIt')\n                  }}</button>\n              </div>\n              <div class=\"annifresultContainer\" v-if=\"annifTrigger.value\">\n                <div v-for=\"item in annifSelectionList\" :key=\"item\" class=\"d-flex \">\n                  <div class=\"activeResultsAutocompleteWrapper annifResults\"\n                    :class=\"{ loadMore: item.resource === 'invalid' }\"\n                    @click=\"item.activeValue = !item.activeValue; updateAnnifselection(item)\">\n                    <div class=\"d-flex\">\n                      <span>{{ item.name }}</span>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n          </div>\n          <div v-else class=\"d-flex flex-wrap\">\n            <div class=\"activeResultsAutocompleteWrapper\" v-for=\"item in props.context.value\" :key=\"item\">\n              <span>{{ item.name }}</span>\n              <div class=\"removeX\" @click=\"removeMultipleProperty(item)\"></div>\n            </div>\n          </div>\n\n\n          <!-- <div class=\"formkit-wrapper mb-3\">\n            <div v-html=\"$t('message.dataupload.distributions.licence.vocabulary.help')\" class=\"formkit-help\"> \n            </div> \n          </div> -->\n\n          <div v-html=\"props.context.attrs.info\" class=\"formkit-help\"></div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n<script setup>\nimport { ref, watch, computed, onMounted, watchEffect } from 'vue';\nimport { useStore } from 'vuex';\nimport { getTranslationFor } from \"../../utils/helpers\";\nimport { getCurrentInstance } from \"vue\";\nimport { getNode } from '@formkit/core'\nimport { onClickOutside } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n';\n\nimport qs from 'qs';\nimport axios from 'axios';\nimport { useAutocomplete } from '../composables/aucotomplete';\n\nlet instance = getCurrentInstance().appContext.app.config.globalProperties.$env\n\nconst { requestAutocompleteSuggestions, requestResourceName } = useAutocomplete()\n\nconst props = defineProps({\n  context: Object\n})\nconst store = useStore();\nconst { t, te, locale } = useI18n();\n\nlet listOfValues = computed(() => {\n  return props.context.value;\n})\n\nlet selection;\nlet voc = props.context.attrs.voc;\n\nlet matchesSearchstring = computed(() => {\n  return t('message.dataupload.info.searchVocabulary')\n})\nlet matchesNothingFound = computed(() => {\n  return t('message.dataupload.info.matchesNothingFound')\n})\nlet matches = ref({\n  value: { name: matchesSearchstring }\n})\nlet activeList = ref()\nlet dropdownList = ref(null)\nlet acInput = ref(null)\nlet inputText = ref({})\nlet cacheList = [];\nlet annifList = [];\nlet annifTrigger = ref({\n  value: false\n});\nlet initialValues = ref();\nlet annifSelectionList = ref({})\n\nonMounted(async () => {\n  inputText.value = \"\"\n});\nlet inDis = computed(() => {\n  try {\n    if (props.context.attrs.class.includes(\"inDistribution\")) {\n      return true\n    }\n  } catch (error) {\n\n  }\n\n\n});\nwatch(matches, async () => { })\nwatch(annifSelectionList, async () => { })\n\nconst requestURIname = async (res) => {\n\n  if (res != undefined) {\n    let vocMatch =\n      voc === \"iana-media-types\" ||\n      voc === \"spdx-checksum-algorithm\";\n\n    let name;\n\n    await requestResourceName({ voc: voc, uri: res, envs: instance }).then(\n      (response) => {\n        if (props.context.attrs.property === 'dcatde:politicalGeocodingURI') {\n          if (response != undefined) {\n            let result = vocMatch\n              ? response.data.result.results\n                .filter((dataset) => dataset.resource === res)\n                .map((dataset) => dataset.alt_label)[0].en\n              : getTranslationFor(response.data.result.alt_label, locale.value, []);\n            name = result;\n          }\n        } else {\n\n          if (response != undefined) {\n            let result = vocMatch\n              ? response.data.result.results\n                .filter((dataset) => dataset.resource === res)\n                .map((dataset) => dataset.pref_label)[0].en\n              : getTranslationFor(response.data.result.pref_label, locale.value, []);\n            name = result;\n\n          }\n        }\n      }\n    );\n    return name\n  }\n\n}\n\nwatchEffect(async () => {\n  const values = listOfValues.value;\n\n  // single URI's\n  if (values.hasOwnProperty('name')) {\n    if (values.name === values.resource) {\n      let uriName;\n      if (!props.context.attrs.multiple) {\n        uriName = requestURIname(values.resource)\n        props.context.node.input({ name: await uriName, resource: values.resource })\n\n      }\n    }\n  }\n  // multiple URI's\n  if (values.length >= 1) {\n    let uriNameList = [];\n    for (let index = 0; index < values.length; index++) {\n      if (values[index].name === values[index].resource) {\n        uriNameList.push({ name: await requestURIname(values[index].resource), resource: values[index].resource })\n        props.context.node.input(uriNameList)\n      }\n    }\n  }\n});\nfunction findPropertyToUpdate(trigger) {\n\n  let finalPath = { step: '', prop: props.context.node.name }\n  let pathToLocalStorage = JSON.parse(localStorage.getItem('dpi_datasets'));\n\n  for (let index = 0; index < Object.keys(pathToLocalStorage).length; index++) {\n    for (let innerIndex = 0; innerIndex < Object.keys(pathToLocalStorage)[index].length; innerIndex++) {\n      let ntry = Object.entries((pathToLocalStorage))\n      try {\n        Object.keys(ntry[index][innerIndex]).filter(e => {\n          if (e === props.context.node.name) {\n            finalPath.step = ntry[index][0]\n\n            if (trigger === 'erase') {\n\n              selection = {}\n              pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n            }\n            if (typeof selection === 'object') {\n\n              pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n            }\n            else pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n            localStorage.setItem('dpi_datasets', JSON.stringify(pathToLocalStorage))\n          }\n        });\n      } catch (error) {\n      }\n    }\n  }\n\n  window.removeEventListener(\"click\", onClickOutside);\n}\nonClickOutside(dropdownList, event => activeList.value = false)\nonClickOutside(acInput, event => inputText.value = \"\")\n\nlet annifHandlerTheme = async (input, limit) => {\n\n  let finalLimit = 10;\n  if (limit != undefined) {\n    finalLimit = finalLimit + 10\n  }\n\n  let query = qs.stringify({\n    'text': input,\n    'limit': finalLimit\n  });\n\n\n  var config = {\n    method: 'post',\n    url: voc == \"eurovoc\"\n      ? instance.content.dataProviderInterface.annifLinkSubject\n      : instance.content.dataProviderInterface.annifLinkTheme,\n    headers: {\n      'Content-Type': 'application/x-www-form-urlencoded',\n      'Accept': 'application/json'\n    },\n    data: query\n  };\n\n  let list = []\n\n  axios(config)\n    .then(async (response) => {\n\n      for (let i = 0; i < response.data.results.length; i++) {\n\n\n        annifList[i] = { \"name\": response.data.results[i].label, \"resource\": response.data.results[i].uri, \"activeValue\": false }\n      }\n      let annifCacheList = []\n      if (listOfValues.value.length > 0) {\n        listOfValues.value.forEach(element => {\n          annifCacheList.push({ \"name\": element.name, \"resource\": element.resource, \"activeValue\": true })\n        });\n      }\n      if (response.data.results.length > 9) {\n        annifList[annifList.length + 1] = { \"name\": \"...\", \"resource\": \"invalid\", \"activeValue\": false }\n      }\n\n      annifSelectionList.value = eraseDuplicates(annifCacheList, annifList)\n\n    })\n    .catch(function (error) {\n      console.log(error);\n    });\n}\nasync function updateAnnifselection(item) {\n\n  if (item.resource === 'invalid') {\n    fillAnnifsuggestions(5);\n  }\n  else {\n    setValue({ name: item.name, resource: item.resource })\n    fillAnnifsuggestions()\n  }\n}\nfunction eraseDuplicates(array1, array2) {\n\n  let mergedArray = array1.concat(array2);\n  let filteredArray = [];\n  let resourceSet = new Set();\n\n  mergedArray.forEach(obj => {\n    if (!resourceSet.has(obj.resource)) {\n      resourceSet.add(obj.resource);\n      if (!obj.activeValue) {\n        filteredArray.push(obj);\n      }\n    }\n  });\n\n\n  return filteredArray;\n}\nconst fillAnnifsuggestions = async (limitChange) => {\n\n  let arr = getNode('Mandatory').value['dct:description']\n  for (let i = 0; i < arr.length; i++) {\n    if (arr[i]['@language'] === 'en') {\n      if (limitChange != undefined) {\n        await annifHandlerTheme(arr[i]['@value'], 5)\n      }\n      else await annifHandlerTheme(arr[i]['@value'])\n    }\n  }\n\n}\n\n// For Publisher Payload Message\n// Use child-specific i18n key if it exists, else fall back to parent-provided placeholder\nconst resolvedPlaceholder = computed(() => {\n  const id = props?.context?.attrs?.identifier\n  const childKey = id\n    ? `message.dataupload.datasets.${id}.placeholder_autocomplete`\n    : null\n  if (childKey && te(childKey)) return t(childKey)\n  return props?.context?.attrs?.placeholder || ''\n})\n\n// Need to append the classes to the formkit-outer element\nprops.context.classes.outer += ' autocompleteInput ' + props.context.attrs.identifier\n\nconst setValue = async (e) => {\n  inputText.value = \"\"\n  if (Object.keys(e).length === 1) {\n    return\n  }\n  if (listOfValues.value.length > 0) {\n\n    cacheList = listOfValues.value\n  }\n\n  // when its a multi input\n  if (props.context.attrs.multiple) {\n    // check for doubled values\n    if (cacheList.length != 0) {\n      let filteredProperty = { name: e.name, resource: e.resource };\n      let filteredList = cacheList.filter((element) => element.name != e.name);\n      filteredList.push(filteredProperty)\n      selection = filteredList;\n      await props.context.node.input(selection);\n\n    }\n    else {\n      cacheList.push({ name: e.name, resource: e.resource })\n      selection = cacheList\n      await props.context.node.input(selection);\n    }\n\n  }\n  else if (e.resource === \"invalid\") return\n  else if (e === \"erase\") { await props.context.node.input({}); findPropertyToUpdate(e) }\n  else {\n    selection = { name: e.name, resource: e.resource };\n    await props.context.node.input(selection);\n  }\n  findPropertyToUpdate();\n}\n\nconst getAutocompleteSuggestions = async (e) => {\n  let innerText = e.target.value\n  await requestAutocompleteSuggestions({ voc, text: innerText, base: instance.api.baseUrl }).then((response) => {\n    // filter OP_DATPRO\n    const updatedArray = response.data.result.results.filter(obj => obj.id !== 'OP_DATPRO');\n\n    const results = updatedArray.map((r) => ({\n      name: getTranslationFor(r.pref_label, locale.value, []) + \" (\" + r.id + \")\",\n      resource: r.resource,\n    }));\n    if (results.length === 0) {\n      matches.value = { value: { name: matchesNothingFound } }\n    }\n    else matches.value = results;\n  });\n}\n\nfunction removeProperty(e) {\n  props.context.node.input({})\n  setValue('erase');\n}\nfunction removeMultipleProperty(e) {\n\n  if (instance.content.dataProviderInterface.annifIntegration) {\n    fillAnnifsuggestions()\n  }\n  if (listOfValues.value.length > 0) {\n    cacheList = listOfValues.value\n  }\n  // Get Index in the array where all values of the Span are stored and cut it out of the list of Values\n  cacheList.splice(cacheList.findIndex((element) => element.name == e.name), 1)\n  selection = cacheList;\n  props.context.node.input(selection);\n  findPropertyToUpdate();\n}\n</script>\n"],"names":["instance","getCurrentInstance","requestAutocompleteSuggestions","requestResourceName","useAutocomplete","props","__props","useStore","t","te","locale","useI18n","listOfValues","computed","selection","voc","matchesSearchstring","matchesNothingFound","matches","ref","activeList","dropdownList","acInput","inputText","cacheList","annifList","annifTrigger","annifSelectionList","onMounted","inDis","watch","requestURIname","res","vocMatch","name","response","dataset","getTranslationFor","watchEffect","values","uriName","uriNameList","index","findPropertyToUpdate","trigger","finalPath","pathToLocalStorage","innerIndex","ntry","e","onClickOutside","event","annifHandlerTheme","input","limit","finalLimit","query","qs","config","axios","i","annifCacheList","element","eraseDuplicates","error","updateAnnifselection","item","fillAnnifsuggestions","setValue","array1","array2","mergedArray","filteredArray","resourceSet","obj","limitChange","arr","getNode","resolvedPlaceholder","id","_b","_a","childKey","_d","_c","filteredProperty","filteredList","getAutocompleteSuggestions","innerText","results","r","removeProperty","removeMultipleProperty","_openBlock","_createElementBlock","_hoisted_1","_unref","_hoisted_2","_toDisplayString","$t","_createElementVNode","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","$event","_cache","_isRef","_Fragment","_renderList","match","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_16","_hoisted_17","_hoisted_18","_normalizeClass","_hoisted_20","_hoisted_21"],"mappings":"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"}