{"version":3,"file":"DatasetsFacets.vue.mjs","sources":["../../../lib/datasets/datasetsFacets/DatasetsFacets.vue"],"sourcesContent":["<template>\n  <div class=\"container dataset-facets\">\n    <div class=\"row mx-3 mr-md-0\">\n      <slot :facets=\"getSortedFacets\" name=\"content\">\n        <div class=\"col\">\n          <datasets-map-facet :showCatalogDetails=\"showCatalogDetails\" />\n          <catalog-details-facet class=\"catalog-details\" v-if=\"showCatalogDetails\" :catalog=\"catalog\"\n            :catalogLanguageIds=\"catalogLanguageIds\" />\n          <span v-if=\"showFacetsTitle\" class=\"row h5 font-weight-bold mt-4 mb-3\">Filter by</span>\n          <settings-facet class=\"row facet-field mb-3\" />\n          <div class=\"row facet-field mb-3\" v-for=\"(field, index) in getSortedFacets\" :key=\"`facet@${field.id}`\"\n            :class=\"{ 'mt-3': (index > 0) }\">\n            <slot\n              name=\"facet\"\n              :field=\"field\"\n              :index=\"index\"\n              :facetTitle=\"facetTitle\"\n              :sortByCount=\"sortByCount\"\n              :getFacetTranslationWrapper=\"getFacetTranslationWrapper\"\n              :tooltip=\"tooltip\"\n              :facetIsSelected=\"facetIsSelected\"\n              :facetClicked=\"facetClicked\"\n              :isMultiSelect=\"isMultiSelect\"\n            >\n              <radio-facet v-if=\"(field.id === 'dataServices')\" :title=\"dataServices.title\"\n                :property=\"dataServices.property\" :toolTipTitle=\"dataServices.toolTipTitle\" :optionIds=\"['true', 'false']\"\n                :optionLabels=\"[dataServices.yes, dataServices.no]\" :initialOption=\"getDataServices\"\n                :change=\"changeDataServices\" />\n              <radio-facet v-if=\"(field.id === 'superCatalog')\" :title=\"erpd.title\" :property=\"erpd.property\"\n                :toolTipTitle=\"erpd.toolTipTitle\" :optionIds=\"['true', 'false']\" :optionLabels=\"[erpd.yes, erpd.no]\"\n                :initialOption=\"isErdp\" :change=\"changeErpd\" />\n              <select-facet v-if=\"(field.id !== 'superCatalog' && field.id !== 'dataServices')\" :fieldId=\"field.id\"\n                :header=\"facetTitle(field.id)\" :items=\"sortByCount(field.items, field.id)\" :toolTipTitle=\"tooltip(field.id)\"\n                :getFacetTranslationWrapper=\"getFacetTranslationWrapper\" :facetIsSelected=\"facetIsSelected\"\n                :facetClicked=\"facetClicked\" :multiSelect=\"isMultiSelect(field.id)\" class=\"col pr-0\" />\n            </slot>\n          </div>\n          <div>\n            <pv-show-more v-if=\"showMoreFacetsShown\"\n              :label=\"cutoff >= 0 ? $t('message.datasetFacets.moreFilters') : $t('message.datasetFacets.lessFilters')\"\n              :upArrow=\"cutoff === -1\" :action=\"toggleCutoff\" class=\"p-0 row facets-show-more\" />\n          </div>\n          <pv-button v-if=\"showClearButton\" label=\"Clear filters\" class=\"row mt-5 facets-clear\" :action=\"clearFacets\" />\n        </div>\n      </slot>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex';\nimport {\n  isObject,\n  isArray,\n  isString,\n  has,\n  isNil,\n  isNumber,\n} from 'lodash-es';\nimport DatasetsFacetsItem from './DatasetsFacetsItem.vue';\nimport { getTranslationFor, getFacetTranslation } from '../../utils/helpers';\nimport DatasetsMapFacet from \"../../datasets/datasetsFacets/DatasetsMapFacet.vue\";\nimport CatalogDetailsFacet from \"../../facets/CatalogDetailsFacet.vue\";\nimport SettingsFacet from \"../../datasets/datasetsFacets/SettingsFacet.vue\";\nimport { useDatasetsFacetsHead } from '../../composables/head';\n\nexport default {\n  name: 'datasetsFacets',\n  components: {\n    SettingsFacet,\n    CatalogDetailsFacet,\n    DatasetsMapFacet,\n    DatasetsFacetsItem\n  },\n  props: {\n    dataScope: {\n      type: String,\n      default: null,\n    },\n    availableFacets: {\n      type: Array,\n      default: null,\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      cutoff: this.$env.content.datasets.facets.cutoff,\n      showClearButton: this.$env.content.datasets.facets.showClearButton,\n      showFacetsTitle: this.$env.content.datasets.facets.showFacetsTitle,\n      defaultFacetOrder: this.$env.content.datasets.facets.defaultFacetOrder,\n      useScoringFacets: this.$env.content.datasets.facets.scoringFacets.useScoringFacets,\n      useDataScopeFacets: isNil(this.$route.params.ctlg_id),\n      showCatalogDetails: false,\n      catalog: {},\n      MIN_FACET_LIMIT: this.$env.content.datasets.facets.MIN_FACET_LIMIT,\n      MAX_FACET_LIMIT: this.$env.content.datasets.facets.MAX_FACET_LIMIT,\n      FACET_OPERATORS: this.$env.content.datasets.facets.FACET_OPERATORS,\n      FACET_GROUP_OPERATORS: this.$env.content.datasets.facets.FACET_GROUP_OPERATORS,\n      dataServices: {\n        yes: this.i18n.global.t('message.metadata.yes'),\n        no: this.i18n.global.t('message.metadata.no'),\n        property: this.i18n.global.t('message.datasetFacets.facets.dataServices.dataServicesOnly'),\n        title: this.i18n.global.t('message.metadata.dataServices'),\n        toolTipTitle: this.i18n.global.t('message.helpIcon.dataServices'),\n      },\n      erpd: {\n        yes: this.i18n.global.t('message.metadata.yes'),\n        no: this.i18n.global.t('message.metadata.no'),\n        property: this.i18n.global.t('message.datasetFacets.facets.erpdOnly'),\n        title: this.i18n.global.t('message.metadata.erpd'),\n        // toolTipTitle: \"TOOLTIP\",//this.i18n.global.t('message.helpIcon.dataServices'),\n      }\n    };\n  },\n  computed: {\n    ...mapGetters('catalogDetails', [\n      'getCatalog',\n    ]),\n    ...mapGetters('datasets', [\n      'getAllAvailableFacets',\n      'getDatasetsCount',\n      'getFacets',\n      'getFacetOperator',\n      'getFacetGroupOperator',\n      'getDataServices',\n      'getLimit',\n      'getMinScoring',\n      'getPage',\n      'getDatasetGeoBounds',\n      'getScoringFacets',\n    ]),\n    resolvedAvailableFacets() {\n      /** this.availableFacets is a prop, currently not used\n       * this.getAllAvailableFacets takes the facet status from the store.\n       * The facet store status is set in Datasets.vue::created. It uses the config array\n       * content.datasets.facets.defaultFacetOrder */\n      return this.availableFacets || this.getAllAvailableFacets;\n    },\n    datasetBoundsWatcher() {\n      return this.getDatasetGeoBounds;\n    },\n    facetGroupOperatorWatcher() {\n      return this.getFacetGroupOperator;\n    },\n    // dataServicesWatcher() {\n    //   return this.getDataServices;\n    // },\n    // catalogWatcher() {\n    //   return this.getCatalog;\n    // },\n    // showCatalogDetailsWatcher() {\n    //   return !isNil(this.$route.params.ctlg_id);\n    // },\n    useCatalogFacets() {\n      return !this.showCatalogDetails;\n    },\n    currentSearchQuery() {\n      return this.$route.query.query;\n    },\n    showMoreFacetsShown() {\n      return this.$env.content.datasets.facets.cutoff > 0 && this.$env.content.datasets.facets.cutoff < this.getAllVisibleFacets.length;\n    },\n    getAllVisibleFacets() {\n      return this.resolvedAvailableFacets.filter(facet => facet.items.length > 0);\n    },\n    getSortedFacets() {\n      const availableFacets = this.resolvedAvailableFacets;\n      const activeFacets = [];\n      const inactiveFacets = [];\n      let activeFields = Object.keys(this.getFacets).filter(key => this.getFacets[key].length > 0);\n      this.defaultFacetOrder.forEach((facet) => {\n        availableFacets.forEach((field) => {\n          // if (facet === field.id && field.items.length > 0\n          //   && (field.id !== 'country' || this.dataScope || this.$route.path === '/catalogues/erpd' || this.$route.query.superCatalog === 'erpd')\n          //   && (field.id !== 'catalog' || this.useCatalogFacets)\n          //   && (field.id !== 'scoring' || this.useScoringFacets)\n          //   && (field.id !== 'dataScope' || this.useDataScopeFacets)) {\n          //     if(activeFields.includes(field.id))\n          //       activeFacets.push(field);\n          //     else\n          //       inactiveFacets.push(field);\n          //   }\n          if (facet === field.id && field.items.length > 0) {\n            if (activeFields.includes(field.id))\n              activeFacets.push(field);\n            else\n              inactiveFacets.push(field);\n          }\n        });\n      });\n      const sortedFacets = activeFacets.concat(inactiveFacets);\n      if (this.cutoff > 0) {\n        if (this.cutoff < activeFacets.length) this.cutoff = activeFacets.length;\n        return sortedFacets.slice(0, this.cutoff);\n      } else {\n        return sortedFacets;\n      }\n    },\n    // Returns the current catalog's available language ids\n    // example: ['en', 'de', 'sv']\n    catalogLanguageIds() {\n      const languages = this.getCatalog && this.getCatalog.languages;\n      if (!isArray(languages)) return [];\n      return languages\n        .map(lang => lang && lang.id)\n        .filter(lang => lang);\n    },\n    isErdp() {\n      if (this.$route.path === '/catalogues/erpd') {\n        return 'true';\n      } else {\n        // if (this.$route.path.startsWith('/datasets')) {\n        const superCatalogs = this.getFacets.superCatalog;\n        return (superCatalogs && superCatalogs[0] === 'erpd') ? 'true' : 'false'\n      }\n      // return 'false';\n    }\n  },\n  methods: {\n    isObject,\n    isArray,\n    isString,\n    has,\n    isNil,\n    isNumber,\n    getTranslationFor,\n    getFacetTranslation,\n    ...mapActions('catalogDetails', [\n      'loadCatalog',\n    ]),\n    ...mapActions('datasets', [\n      'addFacet',\n      'removeFacet',\n      'setFacetGroupOperator',\n      'setDataServices',\n      'setSuperCatalogue_DEPRECATED', // !!!!! Project specific (Bayern). Should be removed as soon as possible !!!!\n      'setPage',\n      'setPageCount',\n      'setMinScoring',\n    ]),\n    toggleCutoff() {\n      this.cutoff = this.cutoff >= 0 ? -1 : this.$env.content.datasets.facets.cutoff;\n    },\n    facetTitle(fieldId) {\n\n      // if(fieldId==='scoring'){\n      //   return Vue.i18n.t('message.header.navigation.data.metadataquality')\n      // }else if(fieldId==='subject'){\n      //  return 'EuroVoc keywords'\n      // }else{\n      //   return Vue.i18n.t(`message.datasetFacets.facets.${fieldId.toLowerCase()}`)\n      // }\n\n      return fieldId === 'scoring' ?\n      this.i18n.global.t('message.header.navigation.data.metadataquality')\n        : this.i18n.global.t(`message.datasetFacets.facets.${fieldId.toLowerCase()}`);\n    },\n    tooltip(fieldId) {\n      return fieldId === 'dataScope' ? this.i18n.global.t('message.helpIcon.dataScope') : this.i18n.global.t(`message.helpIcon.${fieldId.toLowerCase()}`);\n    },\n    getFacetTranslationWrapper(fieldId, facetId, userLocale, fallback) {\n      return fieldId === 'scoring'\n        ? this.$t(`message.datasetFacets.facets.scoring.${facetId}`)\n        : this.getFacetTranslation(fieldId, facetId, userLocale, fallback);\n    },\n    sortByCount(items, fieldId) {\n      if (fieldId === 'scoring' || fieldId === 'dataScope') return items;\n      return items.slice().sort((a, b) => {\n        const n = b.count - a.count;\n        if (n !== 0) return b.count - a.count;\n        if (a.name < b.name) return -1;\n        return 1;\n      });\n    },\n    setRouteQuery(query, mode) {\n      if (mode === \"replace\") {\n        return this.$router.replace(\n          { query: Object.assign({}, this.$route.query, query) }\n        ).catch(\n          error => { console.error(error); }\n        );\n      } else {\n        return this.$router.push(\n          { query: Object.assign({}, this.$route.query, query) }\n        ).catch(\n          error => { console.error(error); }\n        );\n      }\n    },\n    facetIsSelected(fieldId, item) {\n      const facet = item.id;\n      if (fieldId === 'scoring') {\n        const qMinScoring = parseInt(this.getMinScoring, 10);\n        const qMaxScoring = this.getMaxScoring;\n        const minScoringIsSelected = this.$route.query[fieldId];\n        if (!minScoringIsSelected || !qMinScoring) return item.minScoring === 0;\n        return minScoringIsSelected && qMinScoring === item.minScoring && \n           qMaxScoring === item.maxScoring;;\n      }\n      if (!Object.prototype.hasOwnProperty.call(this.$route.query, fieldId)) {\n        return false;\n      }\n      if (fieldId === 'dataScope') return this.$route.query.dataScope === facet;\n      let qField = this.$route.query[fieldId];\n      if (!Array.isArray(qField)) qField = [qField];\n      if (fieldId === 'categories') {\n        // Ignore Case for categories\n        facet.toUpperCase();\n        qField = qField.map(f => f.toUpperCase());\n      }\n\n      return qField.indexOf(facet) > -1;\n    },\n    facetClicked(field, item) {\n      \n      const facet = item.id;\n      if (field === \"dataScope\") {\n        this.dataScopeFacetClicked(facet);\n      } else {\n        if (field === 'scoring') this.scoringFacetClicked(item);\n\n        //filtering dataScope when provenance is selected\n        if (field === 'country') {\n          if (facet === 'eu') {\n            this.$route.query.dataScope = 'eu'\n          } else if (facet === 'io') {\n            this.$route.query.dataScope = 'io'\n          } else {\n            this.$route.query.dataScope = 'countryData'\n          }\n        }\n        this.toggleFacet(field, facet);\n      }\n    },\n    \n    toggleFacet(field, facet) {\n    \n      if (!Object.prototype.hasOwnProperty.call(this.$route.query, [field])) {\n        this.setRouteQuery({ [field]: [], page: 1 });\n      }\n      let facets = this.$route.query?.[field]?.slice();\n      if (!facets) facets = [];\n      if (!Array.isArray(facets)) facets = [facets];\n      if (field === 'categories') {\n        // Ignore Case for categories\n        facet.toUpperCase();\n        facets = facets.map(f => f.toUpperCase());\n      }\n      if (field === 'scoring') {\n        // Empty facets as scoring facets are disjoint\n        facets = (facet === 'badScoring') ? [] : [facet];\n      } else {\n         \n        const index = facets.indexOf(facet);\n        if (index > -1) {\n          facets.splice(index, 1);\n        } else {\n          facets.push(facet);\n        }\n      }\n     \n      return this.setRouteQuery({ [field]: facets, page: 1 });\n      \n    },\n    clearFacets() {\n      if (Object.keys(this.$route.query).some(key => (key !== 'locale' && key !== 'page') && this.$route.query[key].length)) {\n        this.setMinScoring(0);\n        this.$router.push({ query: { locale: this.$i18n.locale, page: \"1\" } })\n          .catch(error => { console.error(error); });\n      }\n      sessionStorage.clear();\n    },\n    dataScopeFacetClicked(dataScope) {\n      if (this.$route.query.dataScope === dataScope) {\n        this.setRouteQuery({ dataScope: [], country: [], page: 1 });\n      } else {\n        const country = [];\n        country.push(dataScope);\n        this.setRouteQuery({ dataScope, country, page: 1 });\n      }\n    },\n    scoringFacetClicked(item) {\n      let newScoring = item.minScoring;\n      if (newScoring === this.getMinScoring) newScoring = 0;\n      this.setMinScoring(newScoring);\n      this.resetPage();\n      window.scrollTo(0, 0);\n    },\n    toggleFacetGroupOperator() {\n      let op = this.getFacetGroupOperator;\n      op = op === this.FACET_GROUP_OPERATORS.and ? this.FACET_GROUP_OPERATORS.or : this.FACET_GROUP_OPERATORS.and;\n      this.setFacetGroupOperator(op);\n    },\n    changeDataServices(dataServices) {\n      this.setDataServices(dataServices);\n      // this.setRouteQuery({ dataServices: (dataServices ? 'true' : undefined), page: 1 });\n      const query = Object.assign({}, this.$route.query, { dataServices, page: 1 });\n      if (dataServices === 'false') {\n        delete query.dataServices;\n      }\n      this.$router.replace({ query });\n    },\n    changeErpd(erpd) {\n      if (this.$route.path === '/catalogues/erpd') {\n        const query = Object.assign({}, this.$route.query, { page: 1 });\n        this.$router.replace({\n          path: '/datasets',\n          query\n        });\n      } else {\n        const superCatalog = erpd === 'true' ? 'erpd' : 'false';\n        const query = Object.assign({}, this.$route.query, { superCatalog, page: 1 });\n        if (superCatalog === 'false') {\n          delete query.superCatalog;\n        }\n        this.$router.replace({ query });\n      }\n    },\n    resetPage() {\n      this.setRouteQuery({ page: 1 }, \"replace\");\n    },\n    getFacetCount(field, facet) {\n      if (field.id === 'scoring') return '';\n      return facet.count;\n    },\n    initShowCatalogDetails() {\n      const showCatalogDetails = !isNil(this.$route.params.ctlg_id);\n      if (showCatalogDetails === true) {\n        this.showCatalogDetails = true;\n        this.loadCatalog(this.$route.params.ctlg_id);\n      } else this.showCatalogDetails = false;\n    },\n    initMinScoring() {\n      let currentScoring = this.$route.query.scoring;\n      currentScoring = isArray(currentScoring) && currentScoring.length > 0\n        ? currentScoring[0]\n        : isArray(currentScoring) && currentScoring.length === 0\n          ? ''\n          : currentScoring;\n      if (currentScoring) {\n        let scoringFacets = this.$env.content.datasets.facets.scoringFacets.defaultScoringFacets;\n        Object.keys(scoringFacets).forEach(score => {\n          if (score === currentScoring) {\n            this.setMinScoring(scoringFacets[score].minScoring);\n          }\n        });\n      } else {\n        this.setMinScoring(0);\n      }\n    },\n    isMultiSelect(fieldID) {\n      return fieldID !== 'scoring';\n    }\n  },\n  watch: {\n    facetGroupOperatorWatcher: {\n      handler(facetGroupOperator) {\n        this.setRouteQuery({ facetGroupOperator }, \"replace\");\n      },\n    },\n    // getDataServices(dataServices) {\n    //   this.$router.replace(\n    //     { query: Object.assign({}, this.$route.query, { dataServices }) }\n    //   ).catch(\n    //     error => { console.error(error); }\n    //   );\n    // },\n    '$route.params.ctlg_id'(showCatalogDetails) {\n      this.showCatalogDetails = showCatalogDetails;\n    },\n    getDatasetGeoBounds(bounds) {\n      this.bounds = bounds\n    },\n    getCatalog(catalog) {\n      this.catalog = catalog;\n    },\n  },\n  created() {\n    this.initShowCatalogDetails();\n    this.initMinScoring();\n    for (var i in sessionStorage) {\n      if (sessionStorage.length > 0 && i == \"Filter\") this.toggleCutoff();\n    }\n  },\n  setup() {\n    useDatasetsFacetsHead();\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.facet:hover {\n  cursor: pointer;\n}\n\n.custom-control {\n  padding-left: 1.5rem;\n  margin-right: 1rem;\n}\n\n.custom-control-label {\n  &::before {\n    left: -1.5rem !important;\n  }\n\n  &::after {\n    left: -1.5rem !important;\n  }\n}\n\n.custom-control-input:checked~.custom-control-label::before {\n  border-color: var(--primary);\n  background-color: var(--primary);\n}\n\n.active {\n  background-color: var(--primary);\n  border-color: var(--primary);\n}\n\n.io {\n  border: 0 !important;\n  margin-bottom: 3px;\n  opacity: 0.8;\n}\n\n.dropdown-menu.show {\n  transform: translate3d(0px, 15px, 0px) !important;\n  width: max-content;\n  display: block;\n\n}\n</style>\n"],"names":["_sfc_main","SettingsFacet","CatalogDetailsFacet","DatasetsMapFacet","DatasetsFacetsItem","isNil","mapGetters","facet","availableFacets","activeFacets","inactiveFacets","activeFields","key","field","sortedFacets","languages","isArray","lang","superCatalogs","isObject","isString","has","isNumber","getTranslationFor","getFacetTranslation","mapActions","fieldId","facetId","userLocale","fallback","items","b","query","mode","error","item","qMinScoring","qMaxScoring","minScoringIsSelected","qField","f","facets","_b","_a","index","dataScope","country","newScoring","op","dataServices","erpd","superCatalog","currentScoring","scoringFacets","score","fieldID","facetGroupOperator","showCatalogDetails","bounds","catalog","i","useDatasetsFacetsHead","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_createElementVNode","_renderSlot","_ctx","$options","_createVNode","_component_datasets_map_facet","$data","_createBlock","_component_catalog_details_facet","_hoisted_4","_component_settings_facet","_Fragment","_renderList","_normalizeClass","_component_radio_facet","_component_select_facet","_component_pv_show_more","_component_pv_button"],"mappings":"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"}