{"version":3,"file":"LinkedDataViewer.vue.mjs","sources":["../../../lib/data-provider-interface/views/LinkedDataViewer.vue"],"sourcesContent":["<template>\n  <div class=\"d-flex flex-column bg-transparent container-fluid justify-content-between content\">\n    <div class=\"loading-spinner ml-3\" v-if=\"isLoading\"></div>\n    <div v-else>\n      <div class=\"d-flex justify-content-between\">\n        <h1 class=\"d-inline\">{{ this.name }}</h1>\n        <div>\n          <button type=\"button\" class=\"btn btn-secondary\" @click=\"handleCopy(linkedData)\">\n            Copy\n          </button>\n          <button type=\"button\" class=\"btn btn-primary\" @click=\"handleDownload(linkedData)\">Download</button>\n        </div>\n      </div>\n      <textarea v-model=\"linkedData\"></textarea>\n    </div>\n  </div>\n</template>\n\n<script>\n/* eslint-disable no-extra-boolean-cast, no-plusplus */\nimport { mapActions, mapGetters } from 'vuex';\nimport axios from 'axios';\n\nexport default {\n  props: {\n    name: {\n      type: String,\n    },\n    format: {\n      type: String,\n    },\n  },\n  data() {\n    return {\n      loading: true,\n      linkedData: '',\n    };\n  },\n  computed: {\n    ...mapGetters('auth', [\n      'getUserData',\n    ]),\n    isLoading() {\n      return this.loading;\n    },\n    url() {\n      return `${this.$env.api.hubUrl}drafts/datasets/${this.name}.${this.format}?useNormalizedId=true&locale=${this.$route.query.locale}&catalogue=${this.$route.query.catalogue}`;\n    },\n  },\n  methods: {\n    ...mapActions('snackbar', [\n      'showSnackbar',\n    ]),\n    setupLinkedDataViewer() {\n      if (!!this.url) {\n        this.loadLinkedData()\n          .then((res) => {\n            this.loading = false;\n            this.linkedData = this.format === 'jsonld'\n              ? JSON.stringify(res.data, null, 2)\n              : res.data;\n\n            this.$nextTick(() => {\n              // Resize textarea to fit text\n              const tx = document.getElementsByTagName('textarea');\n              for (let i = 0; i < tx.length; i++) tx[i].setAttribute('style', `height:${tx[i].scrollHeight}px;overflow-y:hidden;`);\n            });\n          });\n      }\n    },\n    loadLinkedData() {\n      return new Promise((resolve, reject) => {\n        const req = this.url;\n        axios.get(req, {\n          headers: {\n            Authorization: `Bearer ${this.getUserData.rtpToken}`,\n          },\n        })\n          .then((res) => {\n            resolve(res);\n          })\n          .catch((err) => {\n            reject(err);\n          });\n      });\n    },\n    handleCopy(text) {\n      navigator.clipboard.writeText(text);\n      this.showSnackbar({\n        message: 'Text successfully copied',\n        variant: 'success',\n      });\n    },\n    handleDownload(text) {\n      const element = document.createElement('A');\n      element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(text)}`);\n      element.setAttribute('download', `${this.name}.${this.format}`);\n      element.style.display = 'none';\n      document.body.appendChild(element);\n      element.click();\n      document.body.removeChild(element);\n    },\n  },\n  created() {\n    this.setupLinkedDataViewer();\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\ntextarea {\n  width: 100%;\n}\n</style>\n"],"names":["_sfc_main","mapGetters","mapActions","res","tx","i","resolve","reject","req","axios","err","text","element","_hoisted_1","_hoisted_4","_hoisted_5","_openBlock","_createElementBlock","$options","_hoisted_2","_hoisted_3","_createElementVNode","_toDisplayString","_cache","$event","$data"],"mappings":";;;;;AAuBA,MAAKA,IAAU;AAAA,EACb,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,IACD,QAAQ;AAAA,MACN,MAAM;AAAA,IACP;AAAA,EACF;AAAA,EACD,OAAO;AACL,WAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA;EAEf;AAAA,EACD,UAAU;AAAA,IACR,GAAGC,EAAW,QAAQ;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,IACD,YAAY;AACV,aAAO,KAAK;AAAA,IACb;AAAA,IACD,MAAM;AACJ,aAAO,GAAG,KAAK,KAAK,IAAI,MAAM,mBAAmB,KAAK,IAAI,IAAI,KAAK,MAAM,gCAAgC,KAAK,OAAO,MAAM,MAAM,cAAc,KAAK,OAAO,MAAM,SAAS;AAAA,IAC3K;AAAA,EACF;AAAA,EACD,SAAS;AAAA,IACP,GAAGC,EAAW,YAAY;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,IACD,wBAAwB;AACtB,MAAM,KAAK,OACT,KAAK,eAAe,EACjB,KAAK,CAACC,MAAQ;AACb,aAAK,UAAU,IACf,KAAK,aAAa,KAAK,WAAW,WAC9B,KAAK,UAAUA,EAAI,MAAM,MAAM,CAAC,IAChCA,EAAI,MAER,KAAK,UAAU,MAAM;AAEnB,gBAAMC,IAAK,SAAS,qBAAqB,UAAU;AACnD,mBAASC,IAAI,GAAGA,IAAID,EAAG,QAAQC;AAAK,YAAAD,EAAGC,CAAC,EAAE,aAAa,SAAS,UAAUD,EAAGC,CAAC,EAAE,YAAY,uBAAuB;AAAA,QACrH,CAAC;AAAA,MACH,CAAC;AAAA,IAEN;AAAA,IACD,iBAAiB;AACf,aAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,cAAMC,IAAM,KAAK;AACjB,QAAAC,EAAM,IAAID,GAAK;AAAA,UACb,SAAS;AAAA,YACP,eAAe,UAAU,KAAK,YAAY,QAAQ;AAAA,UACnD;AAAA,SACF,EACE,KAAK,CAACL,MAAQ;AACb,UAAAG,EAAQH,CAAG;AAAA,SACZ,EACA,MAAM,CAACO,MAAQ;AACd,UAAAH,EAAOG,CAAG;AAAA,QACZ,CAAC;AAAA,MACL,CAAC;AAAA,IACF;AAAA,IACD,WAAWC,GAAM;AACf,gBAAU,UAAU,UAAUA,CAAI,GAClC,KAAK,aAAa;AAAA,QAChB,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACF;AAAA,IACD,eAAeA,GAAM;AACnB,YAAMC,IAAU,SAAS,cAAc,GAAG;AAC1C,MAAAA,EAAQ,aAAa,QAAQ,iCAAiC,mBAAmBD,CAAI,CAAC,EAAE,GACxFC,EAAQ,aAAa,YAAY,GAAG,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE,GAC9DA,EAAQ,MAAM,UAAU,QACxB,SAAS,KAAK,YAAYA,CAAO,GACjCA,EAAQ,MAAK,GACb,SAAS,KAAK,YAAYA,CAAO;AAAA,IAClC;AAAA,EACF;AAAA,EACD,UAAU;AACR,SAAK,sBAAqB;AAAA,EAC3B;AACH,GAzGOC,IAAA,EAAA,OAAM,oFAAmF;;EACvF,OAAM;mBAEJC,IAAA,EAAA,OAAM,iCAAgC,GACrCC,IAAA,EAAA,OAAM,WAAU;;AAJ1B,SAAAC,EAAA,GAAAC,EAcM,OAdNJ,GAcM;AAAA,IAboCK,EAAS,aAAjDF,KAAAC,EAAyD,OAAzDE,CAAyD,WACzDF,EAWM,OAAAG,GAAA;AAAA,MAVJC,EAQM,OARNP,GAQM;AAAA,QAPJO,EAAyC,MAAzCN,GAAyCO,EAAA,KAAZ,IAAI,GAAA,CAAA;AAAA;QACjCD,EAKM,OAAA,MAAA;AAAA,UAJJA,EAES,UAAA;AAAA,YAFD,MAAK;AAAA,YAAS,OAAM;AAAA,YAAqB,SAAKE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEN,EAAU,WAACO,EAAU,UAAA;AAAA,aAAG;AAAA;AAAA,WAEhF;AAAA;UACAJ,EAAmG,UAAA;AAAA,YAA3F,MAAK;AAAA,YAAS,OAAM;AAAA,YAAmB,SAAKE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEN,EAAc,eAACO,EAAU,UAAA;AAAA,aAAG,UAAQ;AAAA;;;QAG9FJ,EAA0C,YAAA;AAAA,sDAAvBI,EAAU,aAAAD;AAAA;YAAVC,EAAU,UAAA;AAAA;;;;;"}