{"version":3,"file":"CatalogPage.vue.mjs","sources":["../../lib/catalogues/CatalogPage.vue"],"sourcesContent":["<template>\n  <div class=\"catalog-page-container\">\n    <div v-if=\"showArray(getCatalog.catalogueBackground)\" class=\"catalog-page-background\" ref=\"catBackground\">\n      <img class=\"catalog-page-background-image\" :src=\"getCatalog.catalogueBackground\" alt=\"\">\n    </div>\n    <div v-else class=\"catalog-page-background-default\"></div>\n    <div class=\"catalog-box\">\n\n      <slot name=\"header\">\n        <div class=\"catalog-header-container mx-auto d-flex justify-content-between align-items-center\" ref=\"catHeader\">\n          <div class=\"catalog-header-info d-flex\">\n            <img v-if=\"showArray(getCatalog.catalogueFavIcon)\" class=\"catalog-header-title-icon\"\n                 :src=\"getCatalog.catalogueFavIcon\" alt=\"\">\n            <div class=\"catalog-header-title-text\">\n              <h1 class=\"catalog-header-title-title\" aria-label=\"Katalogtitel\">\n                {{ getTranslationFor(getCatalog.title, $route.query.locale, getCatalog.languages) }}\n              </h1>\n              <h5 class=\"catalog-header-title-subtitle\" aria-label=\"Homepage\">\n                <app-link :to=\"getCatalog.homepage\">\n                  {{ getCatalog.homepage }}\n                </app-link>\n              </h5>\n            </div>\n          </div>\n          <img v-if=\"showArray(getCatalog.catalogueLogo)\" class=\"catalog-header-logo d-none d-sm-block\"\n               :src=\"getCatalog.catalogueLogo\" alt=\"\" aria-label=\"logo\">\n        </div>\n      </slot>\n\n      <div class=\"catalog-card card\">\n        <div class=\"card-header\" role=\"navigation\">\n          <!-- CARD NAV -->\n          <ul class=\"nav nav-tabs card-header-tabs\" role=\"tablist\" aria-label=\"Navigationsleiste\">\n            <li v-for=\"tab in cardNavTabs\" :key=\"tab.id\" role=\"tab\" :aria-controls=\"tab.id\"\n                :aria-selected=\"activeTabName === tab.id\" :aria-label=\"tab.displayName\">\n              <a @click.prevent=\"setActiveTabName(tab.id)\" class=\"catalog-nav-link nav-link\"\n                 :class=\"{active: tab.id === activeTabName}\" :href=\"`#${tab.id}`\" role=\"tab\">\n                {{ tab.displayName }}\n              </a>\n            </li>\n          </ul>\n        </div>\n        <!-- CARD CONTENT -->\n        <div class=\"card-body my-5\">\n\n          <!-- \"ÜBER DIESEN KATALOG\" -->\n          <div v-if=\"activeTabName === 'about'\"\n               class=\"tab-pane active catalog-about-tab d-flex align-items-start justify-content-between\" id=\"about\"\n               role=\"tabpanel\">\n            <div>\n              <div class=\"tab-content d-flex\">\n                <app-markdown-content class=\"card-text\" tag=\"div\"\n                                      :text=\"getTranslationFor(catalog.description, $route.query.locale, catalog.languages)\"/>\n              </div>\n            </div>\n            <img v-if=\"showArray(getCatalog.catalogueProfile)\" class=\"catalog-hero-pic img-fluid\"\n                 :src=\"getCatalog.catalogueProfile\" alt=\"\">\n          </div>\n\n          <!-- \"INTERESSANTE DATENSÄTZE\" -->\n          <div v-show=\"activeTabName === 'dataset-selections'\" class=\"tab-pane active\" id=\"dataset-selections\"\n               role=\"tabpanel\" aria-labelledby=\"dataset-selections-tab\">\n            <div v-if=\"showArray(getDatasets)\" class=\"tab-content d-flex flex-column align-items-center mt-3\">\n              <div class=\"d-flex flex-wrap justify-content-center mb-5\">\n\n                <DatasetCard\n                    v-for=\"dataset in (interestingDatasets.length > 0) ? interestingDatasets.slice(0, 3) : getDatasets.slice(0, 3)\"\n                    :key=\"dataset.id\"\n                    :to=\"`/datasets/${dataset.id}`\"\n                    :datasetTitle=\"getTranslationFor(dataset.title, $route.query.locale, dataset.languages) || dataset.id\"\n                    :datasetDescription=\"getTranslationFor(dataset.description, $route.query.locale, dataset.languages)\"\n                    :datasetCatalog=\"getTranslationFor(dataset.catalog.title, $route.query.locale, [])\"\n                    :descriptionMaxLength=\"175\"\n                    :data-cy=\"`dataset@${dataset.id}`\"\n                    class=\"mt-3\"\n                />\n              </div>\n\n              <button @click.prevent=\"setActiveTabName('dataset-page')\" class=\"primary-button\" role=\"button\">\n                Mehr Daten entdecken\n              </button>\n            </div>\n\n            <span v-else>\n              Es sind keine Datensätze verfügbar.\n            </span>\n          </div>\n\n          <!-- \"ALLE DATENSÄTZE\" -->\n          <div v-show=\"activeTabName === 'dataset-page'\" class=\"tab-pane active\" id=\"dataset-page\" role=\"tabpanel\"\n               aria-labelledby=\"dataset-page-tab\">\n            <slot name=\"card-datasets\">\n              <div class=\"tab-content mt-3\">\n                <Datasets/>\n              </div>\n            </slot>\n          </div>\n\n          <!-- \"KONTAKT\" -->\n          <div v-show=\"activeTabName === 'contact'\" class=\"tab-pane active\" id=\"contact\" role=\"tabpanel\"\n               aria-labelledby=\"contact-tab\">\n            <div class=\"tab-content\">\n              <dl v-if=\"has(getCatalog, 'publisher') && showObject(getCatalog.publisher) && (showString(getCatalog.publisher.email) || showString(getCatalog.publisher.homepage) || showObject(getCatalog.publisher.address))\">\n                <h4 class=\"catalog-contact-header\">Fragen zu dieser Open Data Präsenz?</h4>\n                <!-- publisher name -->\n                <dt v-if=\"has(getCatalog, 'publisher.name')  && showString(getCatalog.publisher.name)\">\n                  {{ getCatalog.publisher.name }}\n                </dt>\n                <!-- address -->\n                <dd v-if=\"has(getCatalog, 'publisher.address') && showObject(getCatalog.publisher.address)\">\n                  <!-- E-Mail:  -->\n                  <span\n                      v-if=\"has(getCatalog, 'publisher.address.street') && showString(getCatalog.publisher.address.street)\">{{\n                      getCatalog.publisher.address.street\n                    }}</span>\n                </dd>\n                <dd v-if=\"has(getCatalog, 'publisher.address') && showObject(getCatalog.publisher.address)\">\n                  <!-- E-Mail:  -->\n                  <span\n                      v-if=\"has(getCatalog, 'publisher.address.postalCode') && showString(getCatalog.publisher.address.locality) && has(getCatalog, 'publisher.address.locality') && showString(getCatalog.publisher.address.postalCode)\">{{\n                      getCatalog.publisher.address.postalCode\n                    }} {{ getCatalog.publisher.address.locality }}</span>\n                </dd>\n                <!-- email -->\n                <dd>\n                  <!-- E-Mail:  -->\n                  <app-link v-if=\"has(getCatalog, 'publisher.email') && showString(getCatalog.publisher.email)\"\n                            :to=\"getCatalog.publisher.email\">\n                    {{\n                      getCatalog.publisher.email.startsWith(\"mailto:\") ? getCatalog.publisher.email.slice(7) : getCatalog.publisher.email\n                    }}\n                  </app-link>\n                </dd>\n                <!-- homepage -->\n                <dd>\n                  <!-- Website:  -->\n                  <app-link v-if=\"has(getCatalog, 'publisher.homepage') && showString(getCatalog.publisher.homepage)\"\n                            :to=\"getCatalog.publisher.homepage\">\n                    {{ getCatalog.publisher.homepage }}\n                  </app-link>\n                </dd>\n              </dl>\n              <span v-else>\n                Es sind keine Kontaktinformationen verfügbar.\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport Datasets from \"../datasets/Datasets.vue\"\nimport {mapGetters, mapActions} from 'vuex';\nimport AppLink from \"../widgets/AppLink\";\nimport DatasetCard from \"./CatalogPageDatasetCard.vue\"\nimport AppMarkdownContent from \"../datasetDetails/AppMarkdownContent.vue\"\nimport {\n  has,\n  isArray,\n  isNil,\n  isObject,\n  isString\n} from 'lodash-es';\nimport {getTranslationFor, truncate} from '../utils/helpers';\nimport datasetService from \"../services/datasetService\";\n\nimport Axios from 'axios';\n\nexport default {\n  name: \"CatalogPage\",\n  components: {\n    Datasets,\n    DatasetCard,\n    AppLink,\n    AppMarkdownContent,\n  },\n  data() {\n    return {\n      interestingDatasets: [],\n      interestingDatasetsFallback: [],\n      activeTabName: 'about',\n      cardNavTabs: [\n        {\n          id: 'about',\n          displayName: 'Über diese Seite',\n        },\n        {\n          id: 'dataset-selections',\n          displayName: 'Interessante Datensätze',\n        },\n        {\n          id: 'dataset-page',\n          displayName: 'Alle Datensätze',\n        },\n        {\n          id: 'contact',\n          displayName: 'Kontakt',\n        },\n      ],\n      datasetService: null,\n    };\n  },\n  computed: {\n    ...mapGetters('catalogDetails', [\n      'getCatalog',\n    ]),\n    ...mapGetters('datasets', [\n      'getDatasets',\n      'getDatasetsCount',\n      'getLoading',\n      'getOffset',\n    ]),\n    catalog() {\n      return this.getCatalog;\n    },\n  },\n  methods: {\n    isNil,\n    // The imported Lodash has function. Must be defined in Methods so we can use it in template\n    has,\n    isArray,\n    truncate,\n    getTranslationFor,\n    ...mapActions('catalogDetails', [\n      'loadCatalog',\n    ]),\n    ...mapActions('datasets', [\n      'loadDatasets',\n      'loadSingleDataset',\n    ]),\n    setActiveTabName(name) {\n      this.activeTabName = name;\n    },\n    showObject(object) {\n      return !isNil(object) && isObject(object) && !Object.values(object).reduce((keyUndefined, currentValue) => keyUndefined && currentValue === undefined, true);\n    },\n    showArrayOfStrings(stringArray) {\n      return this.showArray(stringArray) && stringArray.every(currentString => this.showString(currentString));\n    },\n    showString(string) {\n      return !isNil(string) && isString(string);\n    },\n    showArray(array) {\n      return !isNil(array) && isArray(array) && array.length > 0;\n    },\n    showObjectArray(objectArray) {\n      return this.showArray(objectArray) && !objectArray.reduce((objectUndefined, currentObject) => objectUndefined && Object.values(currentObject).reduce((keyUndefined, currentValue) => keyUndefined && currentValue === undefined, true), true);\n    },\n    loadCatalogInterestingDatasets(catalog) {\n      for (let id of this.catalog.catalogueInterestingDatasets) {\n        this.loadSingleDataset(id)\n          .then(response => {\n            this.interestingDatasets.push(response);\n          })\n          .catch(error => {\n            console.log('error: ', error)\n          });\n      }\n    },\n    loadCatalogInterestingDatasetsFallback(catalog) {\n      for (let id of this.catalog.catalogueInterestingDatasets) {\n        this.datasetService.getSingle(id)\n            .then(response => {\n              this.interestingDatasetsFallback.push(response);\n            })\n            .catch(error => console.log('error: ', error));\n      }\n    }\n  },\n  mounted() {\n    if (sessionStorage.activeTabName) {\n      this.activeTabName = sessionStorage.activeTabName;\n    }\n  },\n  watch: {\n    activeTabName(activeTab) {\n      sessionStorage.activeTabName = activeTab;\n    },\n  },\n  created() {\n    this.$Progress.start()\n\n    // Hack: define fresh instance of datasetService to avoid going through store.\n    // When going through store, it will cause mutations that will affect datasetDetails page.\n    this.datasetService = new datasetService(\n      this.$env.api.baseUrl,\n      this.$env.api.hubUrl,\n      this.$env.api.qualityBaseUrl,\n      this.$env.api.similarityBaseUrl,\n      this.$env.api.similarityServiceName,\n      this.$env.content.datasets.facets.scoringFacets.defaultScoringFacets,\n    );\n\n    let catalogId = this.$route.params.ctlg_id;\n    if (catalogId === undefined || catalogId === null) {\n      const host = window.location.host;\n      const parts = host.split('.');\n      if (parts.length > 1) {\n        catalogId = parts[0];\n\n      }\n    }\n\n\n    Promise.all([\n      this.loadCatalog(catalogId)\n        .then(result => {\n          this.loadCatalogInterestingDatasets(result)\n        }\n      ),\n      // TODO: This is a temporary workaround.\n      // We should refactor this code to use the store instead of making\n      // a dedicated HTTP request for dataset search.\n      // This will ensure that the most relevant datasets for the catalog are always displayed,\n      // even if the search page has filtered datasets.\n      Axios.get(`${this.$env.api.baseUrl}search`, {\n        params: {\n          q: '',\n          filter: 'dataset',\n          limit: 3,\n          page: 0,\n          sort: 'relevance+desc,+modified+desc,+title.de+asc',\n          facetOperator: 'AND',\n          facetGroupOperator: 'AND',\n          dataServices: false,\n          includes: 'id,title.de,description.de,languages,modified,issued,catalog.id,catalog.title,catalog.country.id,distributions.id,distributions.format.label,distributions.format.id,distributions.license,categories.label,publisher',\n          facets: JSON.stringify({\n            license: [],\n            format: [],\n            categories: [],\n            catalog: [catalogId],\n            publisher: [],\n            country: [],\n          }),\n        },\n      }).then(response => {\n        const interestingDatasets = response.data?.result?.results || [];\n        this.loadCatalogInterestingDatasetsFallback(interestingDatasets)\n      }).catch(error => {\n        console.error(error)\n      }),\n      // ...this.activeTabName === 'dataset-page' ? [this.loadDatasets({locale: this.$route.query.locale})] : [],\n    ]).then(results => {\n      this.$Progress.finish()\n    }).catch(error => {\n      console.error(error)\n      this.$Progress.fail()\n    })\n  }\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.catalog-page-container {\n  margin-top: 0 !important;\n  padding: 0 !important;\n}\n\n.catalog-page-background-image,\n.catalog-page-background-default {\n  position: absolute;\n  height: 360px;\n  width: 100%;\n}\n\n.catalog-page-background-default {\n  background-color: #F4F8FA;\n}\n\n.catalog-page-background-image {\n  overflow: hidden;\n  object-fit: cover;\n}\n\n.catalog-box {\n  display: flex;\n  flex-direction: column;\n  margin-bottom: 95px;\n}\n\n.flag-img {\n  width: 150px;\n  height: auto;\n}\n\n.catalog-header-container {\n  flex: 1 1 100%;\n  width: 100%;\n  max-width: 1040px;\n  min-height: 180px;\n  padding-left: 32px;\n  padding-right: 32px;\n  z-index: 1;\n}\n\n.catalog-header-title-subtitle {\n  font-size: 14px;\n}\n\n.catalog-header-title-icon {\n  height: 48px;\n  width: 48px;\n  padding: 5px;\n  margin-right: 16px;\n  border: 1px solid transparent;\n  border-radius: 50%;\n  background-color: white;\n  box-shadow: 0px 0px 6px 0px #0000001F;\n  object-fit: contain;\n}\n\n.catalog-header-logo {\n  max-height: 80px;\n  max-width: 192px;\n  height: auto;\n  width: auto;\n}\n\n.catalog-card {\n  flex: 1 1 100%;\n  padding: 32px;\n  width: 100%;\n  max-width: 1040px;\n  border: none;\n}\n\n.catalog-about-tab {\n  flex-direction: column;\n  flex-wrap: wrap;\n}\n\n.card-header {\n  background-color: transparent;\n  padding: 0;\n}\n\n.card-header-tabs {\n  margin-right: 0;\n  margin-left: 0;\n  margin-bottom: 0;\n  flex-wrap: nowrap;\n  white-space: nowrap;\n  overflow-x: scroll;\n  overflow-y: hidden;\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n}\n\n.card-header-tabs li {\n  padding-right: 48px;\n}\n\n.card-header-tabs li:last-child {\n  padding-right: 0;\n}\n\n.card-body {\n  padding: 0;\n}\n\n.catalog-nav-link.nav-link {\n  color: rgba(0, 0, 0, 0.7);\n  padding-left: 0;\n  padding-right: 0;\n  margin-bottom: 0;\n  background-color: transparent;\n  border: 0;\n  border-left: 0;\n  border-right: 0;\n  border-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom: 2px solid transparent !important;\n\n  &:hover,\n  &.active {\n    color: #175baf !important;\n  }\n\n  &.active {\n    border-bottom: 2px solid #175baf !important;\n  }\n}\n\n.catalog-hero-pic {\n  max-width: 250px !important;\n  width: 100%;\n  height: auto;\n  margin-top: calc(48px - 1rem);\n}\n\n.catalog-contact-header {\n  font-size: 18px;\n  margin-bottom: 34px;\n}\n\n.tab-content dt {\n  margin-bottom: 8px;\n}\n\n.tab-content dd {\n  margin-bottom: 0;\n}\n\n@media screen and (min-width: 768px) {\n  .catalog-header-container {\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .catalog-box {\n    padding-left: 32px;\n    padding-right: 32px;\n  }\n\n  .catalog-card {\n    border: none;\n    box-shadow: 0px 2px 12px 0px #00000012;\n    margin-left: auto;\n    margin-right: auto;\n    padding-left: 48px;\n    padding-right: 48px;\n  }\n\n  .catalog-about-tab {\n    flex-wrap: nowrap;\n    flex-direction: row;\n  }\n\n  .catalog-hero-pic {\n    margin-top: 0;\n    margin-left: 1.5rem;\n  }\n}\n</style>\n"],"names":["_sfc_main","Datasets","DatasetCard","AppLink","AppMarkdownContent","mapGetters","isNil","has","isArray","truncate","getTranslationFor","mapActions","name","object","isObject","keyUndefined","currentValue","stringArray","currentString","string","isString","array","objectArray","objectUndefined","currentObject","catalog","id","response","error","activeTab","datasetService","catalogId","parts","result","Axios","interestingDatasets","_b","_a","results","_hoisted_1","_hoisted_5","_hoisted_7","_hoisted_9","_hoisted_13","_hoisted_18","_hoisted_20","_hoisted_24","_hoisted_27","_hoisted_29","_openBlock","_createElementBlock","$options","_ctx","_hoisted_2","_createElementVNode","_hoisted_4","_renderSlot","_hoisted_6","_hoisted_10","_toDisplayString","_hoisted_11","_createVNode","_component_app_link","_createTextVNode","_hoisted_14","_hoisted_15","_Fragment","_renderList","$data","tab","_withModifiers","$event","_hoisted_17","_hoisted_19","_component_app_markdown_content","_withDirectives","_hoisted_22","_hoisted_23","dataset","_createBlock","_component_DatasetCard","_hoisted_26","_component_Datasets","_hoisted_28","_hoisted_30","_cache","_hoisted_31","_hoisted_32","_hoisted_34"],"mappings":"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"}