{"version":3,"file":"Datasets.vue.mjs","sources":["../../lib/datasets/Datasets.vue"],"sourcesContent":["<template>\n  <div class=\"datasets-container d-flex flex-column p-0 bg-transparent\">\n    <datasets-top-controls\n        :facets=\"facets\"\n        :getPage=\"getPage\"\n        :getLimit=\"getLimit\"\n        class=\"datasets-top-controls\"\n    />\n    <div class=\"container-fluid datasets content\">\n      <slot name=\"title\">\n        <h1 class=\"row col-12 page-title catalog-title text-primary\" v-if=\"showCatalogDetails\">\n          {{ getTranslationFor(getCatalog.title, $route.query.locale, getCatalog.languages) }}</h1>\n        <h1 class=\"row col-12 page-title text-primary\" v-else>{{ $t('message.header.navigation.data.datasets') }}</h1>\n      </slot>\n      <slot\n          name=\"content\"\n          :datasets-count=\"getDatasetsCount\"\n          :datasets=\"getDatasets\"\n          :locale=\"$route.query.locale\"\n          :loading=\"getLoading\"\n          :use-dataset-facets=\"useDatasetFacets\"\n          :facets=\"getFacets\"\n          :available-facets=\"getAllAvailableFacets\"\n      >\n        <div class=\"row\">\n          <div class=\"col d-flex d-md-none justify-content-end flex-wrap\">\n            <button class=\"btn btn-primary mb-3 text-right text-white\" data-toggle=\"collapse\"\n                    data-target=\"#datasetFacets\" data-cy=\"btn-filter-toggle\"\n                    @click=\"filterCollapsed = !filterCollapsed\">\n              <i class=\"material-icons small-icon align-bottom\" v-if=\"filterCollapsed\">arrow_drop_up</i>\n              <i class=\"material-icons small-icon align-bottom\" v-else>arrow_drop_down</i>\n            </button>\n          </div>\n          <datasets-facets\n            v-if=\"useDatasetFacets\"\n            class=\"col-md-3 col-12 mb-3 mb-md-0 px-0 collapse\" id=\"datasetFacets\"\n            :dataScope=\"dataScope\"\n            :available-facets=\"getAllAvailableFacets\"\n          ></datasets-facets>\n<!--          <facets-->\n<!--              :facetsConfig=\"getAllAvailableFacets\"-->\n<!--              :facetsIds=\"$env.content.datasets.facets.defaultFacetOrder\"-->\n<!--              class=\"col-md-3 col-12 mb-3 mb-md-0 px-0 collapse\"-->\n<!--              id=\"datasetFacets\">-->\n<!--          </facets>-->\n          <section class=\"col-md-9 col-12\">\n            <slot name=\"datasets-filters\">\n              <datasets-filters/>\n            </slot>\n            <slot name=\"datasets-found\" :data=\"{\n              loading: getLoading,\n              datasetsCount: getDatasetsCount,\n              datasetsCountFormatted: getDatasetsCount.toLocaleString('fi'),\n              loadingMessage: $t('message.datasets.loadingMessage'),\n              countMessage: $t('message.datasets.countMessage'),\n            }\">\n              <div class=\"datasets-found alert alert-primary mt-3 d-flex flex-row\" role=\"status\"\n                   :class=\"{ 'alert-danger': getDatasetsCount <= 0 && !getLoading}\">\n                <div>\n                  {{\n                    getLoading ? $t('message.datasets.loadingMessage') : `${getDatasetsCount.toLocaleString('fi')}\n                  ${$t('message.datasets.countMessage')}`\n                  }}\n                </div>\n                <div class=\"loading-spinner ml-3\" v-if=\"getLoading\"></div>\n              </div>\n            </slot>\n            <div class=\"alert alert-warning mt-3 d-flex flex-row\" v-if=\"showScoreDisclaimer\">\n              <span>\n                {{ $t(\"message.datasets.scoreDisclaimer\") }}\n                <app-link path=\"/mqa\" :query=\"{ locale: $route.query.locale }\" target=\"_blank\">\n                  <span>{{ $t(\"message.metadata.methodologyPage\") }}</span>\n                </app-link>\n              </span>\n            </div>\n            <!--\n            <div class=\"alert alert-info mt-3\" v-if=\"getGeoBoundsById('modal-map')\">\n              {{`${$t('message.datasets.geoBoundsMessagePre')}`}}<strong>{{getGeoBoundsById('modal-map')}}</strong>{{`. ${$t('message.datasets.geoBoundsMessageRemove')}`}}\n              <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\" @click=\"resetGeoBounds('modal-map'); loadDatasets({})\">\n                <span aria-hidden=\"true\">&times;</span>\n              </button>\n            </div>\n            -->\n            <selectedFacetsOverview\n              v-if=\"getFacets\"\n              :selected-facets=\"getFacets\"\n              :available-facets=\"getAllAvailableFacets\"\n            >\n            </selectedFacetsOverview>\n            <template v-if=\"!getLoading\">\n              <dataset-list :datasets=\"getDatasets\" :locale=\"$route.query.locale || 'en'\"></dataset-list>\n            </template>\n            <div class=\"loading-spinner mx-auto mt-3 mb-3\" v-if=\"getLoading\"></div>\n          </section>\n        </div>\n      </slot>\n      <div class=\"row\">\n        <div class=\"column col-12 col-md-9 offset-md-3\">\n          <pagination class=\"mt-3\"\n                      :items-count=\"getDatasetsCount\"\n                      :items-per-page=\"getLimit\"\n                      :get-page=\"getPage\"\n                      :get-page-count=\"getPageCount\"\n                      @setPageLimit=\"setPageLimit\"></pagination>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\n  /* eslint-disable no-undef */\n  import { mapActions, mapGetters } from 'vuex';\n  import {\n    debounce,\n    has,\n    groupBy,\n    uniqBy,\n    toPairs,\n    isArray,\n    isNil,\n  } from 'lodash-es';\n  import $ from 'jquery';\n  import fileTypes from '../utils/fileTypes';\n  import Pagination from '../widgets/Pagination.vue';\n  import SelectedFacetsOverview from '../facets/SelectedFacetsOverview';\n  import AppLink from '../widgets/AppLink.vue';\n  import { getTranslationFor, truncate, getImg } from '../utils/helpers';\n  import DatasetsTopControls from \"../datasets/DatasetsTopControls.vue\";\n  import DatasetsFilters from \"../datasets/DatasetsFilters.vue\";\n  import DatasetList from './DatasetList.vue'\n  import { useDatasetsHead } from '../composables/head'\n  // import Facets from \"../facets_2.0/Facets.vue\"\n  import DatasetsFacets from './datasetsFacets/DatasetsFacets.vue';\nexport default {\n  name: 'Datasets',\n  components: {\n    DatasetsFilters,\n    DatasetsTopControls,\n    appLink: AppLink,\n    selectedFacetsOverview: SelectedFacetsOverview,\n    datasetsFacets: DatasetsFacets,\n    pagination: Pagination,\n    DatasetList,\n    // Facets\n  },\n  props: {\n    infiniteScrolling: {\n      type: Boolean,\n      default: false,\n    },\n    /**\n     * @description Sets the catalog filter to a fixed catalog id. Disables the catalog facet and hides the facet in the selected facets overview.\n     * @dev Use this prop if you want to use this component in a catalog page context where the catalog is already known (e.g., provider's page).\n     */\n    fixedCatalogFilter: {\n      type: String,\n      default: '',\n    }\n  },\n  data() {\n    return {\n      baseUrl: this.$env.api.baseUrl,\n      debouncedOnBottomScroll: debounce(this.onBottomScroll, 500),\n      facetFields: [],\n      lang: this.locale,\n      filterCollapsed: true,\n      catalogAllowed: false,\n      useDatasetFacets: this.$env.content.datasets.facets.useDatasetFacets\n    };\n  },\n  computed: {\n    ...mapGetters('catalogDetails', [\n      'getCatalog',\n    ]),\n    ...mapGetters('datasets', [\n      'getDatasets',\n      'getDatasetsCount',\n      'getLimit',\n      'getLoading',\n      'getOffset',\n      'getPage',\n      'getPageCount',\n      'getMinScoring',\n      'getMaxScoring'\n    ]),\n    ...mapGetters('datasets', {\n      // Rename getters to something different because we'll perform some modifications on them.\n      // These modifications involve removing catalog related information from facets for fixed catalog filter mode\n      getAllAvailableFacetsOriginal: 'getAllAvailableFacets',\n      getFacetsOriginal: 'getFacets',\n    }),\n    showCatalogDetails() {\n      return !isNil(this.$route.params.ctlg_id) || this.fixedCatalogFilter;\n    },\n    /**\n     * @description Returns the current page.\n     * @returns {Number}\n     *\n     * @deprecated use getPage from datasets store instead\n     */\n    page() {\n      return this.$route.query.page;\n    },\n    /**\n     * @description Returns the active facets according to the route parameters.\n     * @returns {Object}\n     */\n     facets() {\n      const facetFields = this.$env.content.datasets.facets.defaultFacetOrder;\n      const wantsToLoadCatalogByParamOrProp = this.showCatalogDetails;\n\n      const facetObj = facetFields.reduce((acc, field) => {\n        acc[field] = (wantsToLoadCatalogByParamOrProp && field === 'catalog' && !this.fixedCatalogFilter)\n          ? [this.$route.params.ctlg_id || undefined]\n          : this.getUrlFacetsOrDefault(field);\n\n        return acc;\n      }, {});\n\n      // if fixedCatalogFilter is set, then set it as superCatalog\n      // requirement by bayern\n      const facetObjWithMaybeDefaultSuperCatalog = this.fixedCatalogFilter\n        ? {\n          ...facetObj,\n          superCatalog: [this.fixedCatalogFilter],\n        }\n        : facetObj;\n\n        return facetObjWithMaybeDefaultSuperCatalog;\n    },\n\n    getAllAvailableFacets() {\n      return this.showCatalogDetails\n        ? this.getAllAvailableFacetsOriginal.filter(facet => facet.id !== 'catalog')\n        : this.getAllAvailableFacetsOriginal;\n    },\n\n    getFacets() {\n      // Returns a record of facets with the catalog facet removed if we're in fixed catalog filter mode\n      return this.showCatalogDetails\n        ? {\n          ...this.getFacetsOriginal,\n          catalog: []\n        }\n        : this.getFacetsOriginal;\n    },\n\n    currentSearchQuery() {\n      return this.$route.query.query;\n    },\n    showScoreDisclaimer() {\n      return this.getMinScoring > 0;\n    },\n    dataScope() {\n      if (!this.$route.query.dataScope) return null;\n      if (isArray(this.$route.query.dataScope) && this.$route.query.dataScope.length > 0) return this.$route.query.dataScope[0];\n      if (isArray(this.$route.query.dataScope) && this.$route.query.dataScope.length === 0) return null;\n      return this.$route.query.dataScope;\n    },\n  },\n  methods: {\n    isNil,\n    ...mapActions('datasets', [\n      'loadDatasets',\n      'loadAdditionalDatasets',\n      'setPage',\n      'setSort',\n      'addFacet',\n      'removeFacet',\n      'setFacets',\n      'setFacetOperator',\n      'setFacetGroupOperator',\n      'setDataServices',\n      'setPageCount',\n      'setLimit',\n      'setLoading',\n      'setDataScope',\n      'setMaxScoring'\n    ]),\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    getImg,\n    /**\n     * @description Handler-function for the scroll event.\n     */\n    onScroll() {\n      const items = this.$el.querySelectorAll('.dataset');\n      const lastItem = items[items.length - 1];\n      if (lastItem) {\n        const lastItemPos = lastItem.getBoundingClientRect();\n        if (lastItemPos.bottom - window.innerHeight <= 0) {\n          this.debouncedOnBottomScroll();\n        }\n      }\n    },\n    /**\n     * @description Handler-function when bottom of the page is reached.\n     */\n    onBottomScroll() {\n      this.$nextTick(() => {\n        this.$Progress.start();\n        this.loadAdditionalDatasets()\n            .then(() => {\n              this.$Progress.finish();\n            })\n            .catch(() => {\n              this.$Progress.fail();\n            });\n        });\n    },\n    initLimit() {\n      const limit = parseInt(this.$route.query.limit, 10);\n      if (limit > 0) this.setLimit(limit);\n    },\n    initMaxScoring() {\n  const maxScoring = parseInt(this.$route.query.maxScoring, 10);\n  if (maxScoring > 0) this.setMaxScoring(maxScoring);\n},\n    initSort() {\n      const sort = this.$route.query.sort;\n      if (sort) this.setSort(sort);\n    },\n    setPageLimit(value) {\n      this.setLimit(value);\n      this.initDatasets();\n    },\n    initDataScope() {\n      this.setDataScope(this.dataScope);\n    },\n    /**\n     * @description Determines the current page.\n     */\n    initPage() {\n      const page = parseInt(this.$route.query.page, 10);\n      if (page > 0) this.setPage(page);\n      else this.setPage(1);\n    },\n    /**\n     * @descritption Initialize the active facets by checking the route parameters\n     */\n     initFacets() {\n      const fields = this.$env.content.datasets.facets.defaultFacetOrder;\n      const facetsFromRouteParams = this.facets;\n\n      this.facetFields.push(...fields);\n\n      // Get fields that don't exist in the router query\n      const fieldsNotInRouterQuery = fields.filter(field => {\n        const fieldExists = facetsFromRouteParams[field] && facetsFromRouteParams[field].length > 0;\n        return !fieldExists && !this.$route.query[field];\n      });\n\n      // Construct route query parameters to be added\n      const routeQueryParamsToBeAdded = fieldsNotInRouterQuery.reduce((acc, field) => {\n        acc[field] = [];\n        return acc;\n      }, {});\n      // Add the route query params that are missing\n      if (Object.keys(routeQueryParamsToBeAdded) > 0) {\n        this.$router.push({query: {...this.$route.query, ...routeQueryParamsToBeAdded}});\n      }\n\n      this.setFacets(facetsFromRouteParams);\n    },\n\n\n    getUrlFacetsOrDefault(field) {\n      const urlFacets = this.$route.query[field];\n      return Array.isArray(urlFacets) ? urlFacets : (urlFacets ? [urlFacets] : []);\n    },\n\n    initFacetOperator() {\n      // Always set facet operator to AND when in catalog details mode\n      if (this.showCatalogDetails) this.setFacetOperator('AND');\n      else {\n        const op = this.$route.query.facetOperator;\n        if (op === 'AND' || op === 'OR') this.setFacetOperator(op);\n      }\n    },\n    initFacetGroupOperator() {\n      // The facetGroupOperator should be the same as the facetOperator\n      // Always set facet operator to AND when\n      // in catalog details mode\n      if (this.showCatalogDetails) this.setFacetGroupOperator('AND');\n      else {\n        const op = this.$route.query.facetOperator;\n        if (op === 'AND' || op === 'OR') this.setFacetGroupOperator(op);\n      }\n    },\n    /**\n     * @descritption Initialize the active data services facet by checking the route parameters\n     */\n    initDataServices() {\n      const ds = this.$route.query.dataServices;\n      if (ds === 'true' || ds === 'false') this.setDataServices(ds);\n      else {\n        this.setDataServices('false');\n      }\n    },\n    initDatasets() {\n      this.$nextTick(() => {\n        this.$nextTick(() => {\n          this.$Progress.start();\n          this.loadDatasets({locale: this.$route.query.locale})\n            .then(() => {\n              this.setPageCount(Math.ceil(this.getDatasetsCount / this.getLimit));\n              this.$Progress.finish();\n              $('[data-toggle=\"tooltip\"]').tooltip({\n                container: 'body',\n              });\n            })\n            .catch((error) => {\n              console.error(error)\n              this.$Progress.fail();\n            })\n            .finally(() => this.$root.$emit('contentLoaded'));\n        });\n      });\n    },\n    initInfiniteScrolling() {\n      if (this.infiniteScrolling) window.addEventListener('scroll', this.onScroll);\n    },\n    getFileTypeColor(format) {\n      return fileTypes.getFileTypeColor(format);\n    },\n  },\n  watch: {\n    // eslint-disable-next-line object-shorthand\n    page(pageStr) {\n      const page = parseInt(pageStr, 10);\n      if (page > 0) this.setPage(page);\n      else this.setPage(1);\n    },\n    dataScope: {\n      handler() {\n        this.initDataScope();\n      },\n      deep: true,\n    },\n  },\n  created() {\n    this.initDataScope();\n    this.initLimit();\n    this.initSort();\n    this.initPage();\n    this.initFacetOperator();\n    this.initFacetGroupOperator();\n    this.initDataServices();\n    this.initFacets();\n    this.initMaxScoring()\n    this.initDatasets();\n    this.initInfiniteScrolling();\n  },\n  mounted() {\n    // This is supposed to fix the browser issue (https://gitlab.fokus.fraunhofer.de/piveau/organisation/piveau-scrum-board/-/issues/2344)\n    if (this.$route.query.refresh === 'true') {\n      this.$nextTick(() => {\n        this.$nextTick(() => {\n          this.loadDatasets({locale: this.$route.query.locale})\n              .then(() => {\n                this.$router.push({query: {locale: this.$route.query.locale}});\n              })\n              .catch(() => {\n                this.$Progress.fail();\n              });\n        });\n      });\n    }\n  },\n  beforeUnmount() {\n    $('.tooltip').remove();\n    if (this.infiniteScrolling) window.removeEventListener('scroll', this.onScroll);\n  },\n  setup() {\n    useDatasetsHead();\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n\n.alert-primary {\n  color: #042648;\n  background-color: #cddbe8;\n  border-color: #baccdf;\n}\n\n.page-title {\n  // maybe we can change custom theme h1 to 3rem\n  font-size: 3rem;\n  margin-bottom: 15px;\n}\n\n.content {\n  padding: 30px 30px 0 30px;\n  margin-top: 15px;\n  margin-bottom: 15px;\n  background-color: white;\n}\n\n.router-link-active {\n  color: #175baf !important;\n  border: none !important;\n  border-bottom: 2px solid #175baf !important;\n}\n\n.router-link-inactive {\n  color: rgba(0, 0, 0, 0.7);\n  border: none !important;\n\n  &:hover {\n    color: #175baf;\n  }\n}\n\n.material-icons.small-icon {\n  font-size: 20px;\n}\n\n@media screen and (min-width: 768px) {\n  #datasetFacets {\n    display: block\n  }\n}\n</style>\n"],"names":["_sfc_main","DatasetsFilters","DatasetsTopControls","AppLink","SelectedFacetsOverview","DatasetsFacets","Pagination","DatasetList","debounce","mapGetters","isNil","facetFields","wantsToLoadCatalogByParamOrProp","facetObj","acc","field","facet","isArray","mapActions","has","truncate","getTranslationFor","getImg","items","lastItem","limit","maxScoring","sort","value","page","fields","facetsFromRouteParams","routeQueryParamsToBeAdded","urlFacets","op","ds","$","error","format","fileTypes","pageStr","useDatasetsHead","_hoisted_1","_hoisted_2","_hoisted_5","_hoisted_6","_hoisted_9","_hoisted_13","_hoisted_14","_openBlock","_createElementBlock","_createVNode","_component_datasets_top_controls","$options","_ctx","_createElementVNode","_renderSlot","_hoisted_3","_toDisplayString","_hoisted_4","$data","_cache","$event","_hoisted_7","_hoisted_8","_createBlock","_component_datasets_facets","_component_datasets_filters","_normalizeClass","_hoisted_10","_hoisted_11","_createTextVNode","_component_app_link","_component_selectedFacetsOverview","_component_dataset_list","_hoisted_12","_component_pagination"],"mappings":"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"}