{"version":3,"file":"DataProviderInterface.vue.mjs","sources":["../../lib/data-provider-interface/DataProviderInterface.vue"],"sourcesContent":["<template>\n  <div class=\"d-flex flex-column bg-transparent container-fluid justify-content-between dpi position-relative w-100\" :key=\"property\">\n    <!-- CONTENT -->\n    <router-view v-if=\"isReady\" ref=\"view\" :key=\"key\">\n    </router-view>\n  </div>\n</template>\n\n<script lang=\"ts\">\n/* eslint-disable no-nested-ternary, no-lonely-if, no-param-reassign */\nimport { DpiContext, setupDpiContext } from './composables/useDpiContext';\nimport { computed, defineAsyncComponent, defineComponent, PropType , provide, ref, toRef, toRefs, toValue, watch, watchEffect} from 'vue';\nimport { mapActions, mapGetters, useStore } from 'vuex';\nimport dpiSpecs from './config/dpi-spec-config';\nimport { useRuntimeEnv } from '../composables/useRuntimeEnv';\nimport { useRoute } from 'vue-router';\nimport { useAsyncState, watchOnce } from '@vueuse/core';\nimport { useDpiEditMode } from './composables/useDpiEditMode';\nimport { AutocompleteInstance, autocompleteKey, defaultAutocompleteAdapter, useAutocomplete } from './composables/aucotomplete';\n\n\n\nexport default defineComponent({\n  name: 'DataProviderInterface',\n  components: {\n    InputPage: defineAsyncComponent(() => import('./views/InputPage.vue')),\n  },\n  props: {\n    name: {\n      type: String,\n      default: '',\n    },\n    dpiContext: {\n      type: Object as PropType<DpiContext>,\n      default: () => undefined,\n    },\n    autocomplete: {\n      type: Object as PropType<AutocompleteInstance>,\n      default: () => undefined,\n    }\n  },\n  metaInfo() {\n    return {\n      title: `${this.$t('message.metadata.upload')} | ${this.$t('message.header.navigation.data.datasets')}`,\n      meta: [\n        { name: 'description', vmid: 'description', content: `${this.$t('message.datasets.meta.description')}` },\n        { name: 'keywords', vmid: 'keywords', content: `${this.$env.metadata.keywords} ${this.$t('message.datasets.meta.description')}}` },\n        { name: 'robots', content: 'noindex, follow' },\n      ],\n    };\n  },\n  data() {\n    return {\n      property: this.$route.params.property,\n      id: this.$route.params.id,\n    };\n  },\n  computed: {\n    ...mapGetters('auth', [\n      'getIsEditMode',\n    ]),\n    mode() {\n      return this.property === 'catalogues'\n        ? this.getIsEditMode\n          ? this.$t('message.dataupload.menu.editCatalogue')\n          : this.$t('message.dataupload.createNewCatalogue')\n        : this.property === 'datasets'\n          ? this.getIsEditMode\n            ? this.$t('message.dataupload.menu.editDataset')\n            : this.$t('message.dataupload.createNewDataset')\n          : 'Edit Distribution';\n    },\n  },\n  methods: {\n    ...mapActions('dpiStore', [\n      'saveLocalstorageValues',\n    ]),\n    ...mapActions('auth', [\n      'populateDraftAndEdit',\n    ]),\n    getClearPath() {\n      return `${this.$env.content.dataProviderInterface.basePath}/${this.property}?locale=${this.$i18n.locale}&clear=true`;;\n    },\n    handleScroll() {\n      try {\n        if (document.getElementById(\"stepperAnchor\")?.offsetTop || 0 >= 35) {\n          document.getElementById(\"stepperAnchor\")?.classList.add(\"border-bottom-lightgray\");\n        }\n        else {\n          document.getElementById(\"stepperAnchor\")?.classList.remove(\"border-bottom-lightgray\");\n        }\n      } catch (error) {\n\n      }\n    }\n\n  },\n  created() {\n    window.addEventListener('scroll', this.handleScroll);\n    this.populateDraftAndEdit();\n  },\n  mounted() {\n    this.saveLocalstorageValues(this.property);\n  },\n  unmounted() {\n    window.removeEventListener('scroll', this.handleScroll);\n  },\n  setup(props) {\n    const route = useRoute()\n    const store = useStore()\n    const env = useRuntimeEnv()\n    const userSpec = env.content.dataProviderInterface.specification as 'dcatap' | 'dcatapde' | 'dcatapdeODB'\n    const fallbackSpec = dpiSpecs[userSpec]\n    const dpiContext = toRef(props, 'dpiContext')\n\n    const resolvedDpiContext = computed<DpiContext>(() => {\n      const _dpiContext = toValue(dpiContext)\n\n      return {\n        specification: fallbackSpec,\n        specificationName: userSpec,\n        edit: {\n          enabled: route.query.edit === 'true',\n          id: route.query.id as string || undefined,\n          catalog: route.query.catalog as string || undefined,\n          fromDraft: route.query.fromDraft === 'true',\n        },\n        ..._dpiContext\n      }\n    })\n\n    const specification = computed(() => {\n      return resolvedDpiContext.value.specification\n    })\n\n    const specificationName = computed(() => {\n      return resolvedDpiContext.value.specificationName\n    })\n\n    setupDpiContext(resolvedDpiContext)\n    const defaultAutocompleteInstance = defaultAutocompleteAdapter({\n      envs: env,\n      dpiContext: resolvedDpiContext\n    });\n    provide(autocompleteKey, props.autocomplete || defaultAutocompleteInstance.adapter);\n\n    watchEffect(() => {\n      store.dispatch('dpiStore/setSpecification', specification.value)\n      store.dispatch('dpiStore/setSpecificationname', specificationName.value)\n    })\n\n    const key = computed(() => {\n      return `${route.query.key}@${specificationName.value}`\n    })\n\n    const { isReady } = useDpiEditMode(resolvedDpiContext)\n\n    return {\n      resolvedDpiContext,\n      key,\n      isReady,\n    }\n\n  }\n});\n</script>\n\n<style lang=\"scss\">\n.border-bottom-lightgray {\n  border-bottom: 1px solid lightgray;\n}\n.stickyStepper {\n  position: sticky;\n  top: 0;\n  background: #ffffff;\n  z-index: 999;\n}\n\n.stickyStepper .SSfirstRow {\n  margin: 1vh 0;\n  display: flex;\n  align-items: center;\n}\n\n.stickyStepper .stickyNav {\n  border-left: 1px solid black;\n  margin-left: 1vh;\n  padding-left: 1vh;\n}\n\n#stepper {\n  width: 100% !important;\n}\n\n#input {\n  padding: 10px;\n}\n\n.small-headline {\n  font-size: 1.5rem;\n  min-width: max-content;\n}\n\n.property {\n  margin: 20px;\n  background-color: #ffffff;\n  border: solid 0.5px rgb(225, 225, 225);\n  margin-top: 30px;\n}\n\n.infoBox .material-icons {\n  font-size: 20px;\n  vertical-align: text-bottom;\n  margin-right: 5px;\n  margin-bottom: 1px;\n}\n\n.infoBox {\n  width: 100%;\n  height: 30%;\n  background-color: #f7f7f7;\n  padding: 5%;\n  border-radius: 0.25rem;\n  margin-top: 20px;\n\n  .input_subpage_nav {\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    padding: 15px;\n  }\n}\n\n.besides {\n  .formkit-input-group-repeatable {\n    display: flex;\n    flex-direction: row;\n    background-color: transparent;\n    padding: 0px;\n  }\n}\n\n.main {\n  width: 75%;\n  margin: 0 5px 0 5px;\n}\n\n.sub {\n  width: 20%;\n  margin: 0 5px 0 5px;\n}\n\n#subStepperBox {\n  position: sticky;\n  top: 154px;\n  z-index: 10;\n  width: 100%;\n  padding: 0 10%;\n\n  .step-progress__bar {\n    border-top: none !important;\n  }\n\n  .step-progress__step--active {\n    .step-progress__step-label {\n      background-color: lightsteelblue !important;\n    }\n\n  }\n}\n\n.step-progress__step span{\n\n    color:white !important;\n\n}\n// Stepper Customizing -------------\n\n// #stepper,\n// #subStepper {\n//   .step-progress__step {\n//     display: flex;\n//     align-items: center;\n//     justify-content: center;\n//     height: 70%;\n//     width: 20%;\n//     display: flex;\n//     align-items: center;\n//     z-index: 1;\n\n\n//     span {\n//       color: grey;\n//       font-size: 18px;\n//       display: none;\n//     }\n\n//     div {\n//       padding: 1rem;\n//       height: 100%;\n//       display: flex;\n//       align-items: center;\n//       color: white;\n//       font-weight: 300;\n\n//     }\n\n//     .step-progress__step-label {\n\n//       background: lightgrey;\n//       background-size: 400% 400%;\n//       background-position: 100% 0%;\n//       transition: all 300ms ease-in-out;\n//       border-right: 1px white solid;\n//       font-size: 14px;\n//       display: flex;\n//       align-items: center;\n//       justify-content: center;\n\n\n//     }\n\n\n//     .step-progress__step-label:hover {\n//       background-position: 65% 0%;\n//       color: black;\n\n//     }\n\n//   }\n\n//   .step-progress__step--active {\n\n//     z-index: 7 !important;\n\n\n//     span {\n//       color: black;\n//     }\n\n//     div {\n//       background: white;\n//     }\n\n//     .step-progress__step-label {\n//       background: rgb(236, 236, 236);\n//       background-position: 50% 0%;\n//       box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12) !important;\n//       transform: scale(1.1);\n//       z-index: 8;\n//       font-size: 16px;\n//     }\n\n//   }\n\n//   .step-progress__step--valid {\n//     div {\n//       color: white;\n\n//     }\n\n//     .step-progress__step-label {\n//       background: rgba(0, 235, 0, 0.2);\n//       color: lightslategrey;\n\n\n//     }\n\n//     .step-progress__step-label:hover {\n//       color: black;\n//     }\n//   }\n\n//   .step-progress__step--active .step-progress__step-label {\n//     color: rgb(31, 31, 31);\n//   }\n\n//   .step-progress__wrapper-after {\n//     display: none;\n//   }\n\n//   .step-progress__step-icon {\n//     display: none !important;\n//   }\n\n//   .step-progress__bar {\n//     margin: 0;\n//     height: 5rem;\n//     border-top: 1px solid lightslategray;\n\n//   }\n\n//   .step-progress__step-label {\n//     position: unset;\n//     transform: unset;\n//     flex-grow: 1;\n//   }\n\n//   .step-progress__step {}\n\n//   .step-progress__wrapper-before {\n//     display: none !important;\n//   }\n\n//   #stepper .step-progress__step::after {\n//     display: none !important;\n//   }\n// }\n#stepper .step-progress__step{\n  border: solid white 20px;\n}\n#stepper .step-progress__step-icon, #subStepper .step-progress__step-icon {\n    font-size: 25px;\n}\n.step-progress__step-label{\n  cursor: pointer;\n}\n// Input Form Margins & Borders ----\n\n.formkit-input[data-classification=group] [data-is-repeatable] {\n  border: none;\n  padding: 1em 1em 1em 0em;\n}\n\n.formkit-input[data-classification=group] [data-is-repeatable] .formkit-input-group-repeatable {\n  border-bottom: none;\n}\n\n.formkit-input-element--checkbox {\n  margin-right: 5px;\n}\n\n.formkit-input-wrapper {\n  font-family: \"Ubuntu\";\n}\n\n.formkit-input[data-classification=button] button[data-ghost] {\n  font-weight: 400;\n}\n\n.formkit-input-error {\n  color: #e13737 !important;\n  font-weight: 400 !important;\n}\n\n// General Formkit Styling ----\n\n.formkit {\n  &-input {\n    .formkit {\n      &-input {\n        &-element {\n          max-width: 100%;\n        }\n\n        &-error {\n          font-weight: bold;\n        }\n      }\n    }\n  }\n\n  .formkit-input-group-add-more {\n    display: flex;\n    justify-content: flex-end;\n\n    button {\n      border: black;\n    }\n  }\n\n  .formkit-input {\n    &[data-classification=\"text\"] .formkit-input-wrapper {\n      display: flex;\n      flex-direction: column;\n    }\n\n    &[data-classification=\"select\"] .formkit-input-wrapper {\n      display: flex;\n      flex-direction: column;\n    }\n  }\n\n  .formkit-input[data-classification=\"button\"] {\n    button {\n      &[data-ghost] {\n        color: white;\n        background-color: #001d85;\n        border-color: #001d85;\n        border-radius: 1.875rem;\n\n        &:hover {\n          background-color: #196fd2;\n          border-color: #196fd2;\n        }\n      }\n    }\n  }\n}\n\n.formkit-input.besides {\n  border-bottom: 1px solid lightgrey !important;\n}\n\n.formkit-input-label {\n  font-weight: 500 !important;\n}\n\n.formkit-input-element {\n\n  &--textarea {\n    width: 100%;\n  }\n}\n\n.formkit-input-element--group {\n  display: block !important;\n}\n\n.formkit-input.besides>.formkit-input-wrapper>.formkit-input-label {\n\n\n  text-decoration: underline !important;\n}\n\n// #stepper,\n// #subStepper {\n\n\n//   .step-progress__step::after {\n//     display: none;\n//   }\n\n//   .step-progress__step-label {\n//     cursor: pointer;\n//   }\n// }\n</style>\n"],"names":["_resolveComponent","property","_createElementBlock","isReady","_ctx","_openBlock","_createBlock","_component_router_view"],"mappings":";;;;;YACEA,EAIM,aAAA;SAJmHC,EAAQ,GAAAC,EAAA,OAAA;AAAA,IAAA,OAAA;AAAA,IAE5GC,KAAAA,EAAAA;AAAAA,EAAAA,GAAAA;AAAAA,IAASC,EAAA,WAAAC,KAAoBC,EAAAC,GAAA;AAAA,MAAA,KAAA;AAAA;;;;;"}