{"version":3,"file":"DPIMenu.vue.mjs","sources":["../../lib/data-provider-interface/DPIMenu.vue"],"sourcesContent":["<template>\n  <div id=\"wrapper\" data-cy=\"dpi-menu\">\n    <div v-if=\"visible && showWarningBanner\" class=\"warning-banner\">\n      <div class=\"warning-content\">\n        {{ $t(\"message.dataupload.menu.warningbanner\") }}\n      </div>\n    </div>\n    <nav v-if=\"visible\">\n      <div>\n        <h4 class=\"text-white\">{{ $t(\"message.dataupload.menu.dpi\") }}</h4>\n      </div>\n\n      <div style=\"margin-top: 1%\">\n        <!-- ADD env to hide \"old\" DPI -->\n        <dropup\n          v-if=\"!$env.content.dataProviderInterface.hideOldDPIFunctions\"\n          v-for=\"(group, index) in menuGroups\"\n          :key=\"`Group${index}`\"\n          :groupName=\"group.group\"\n          :groupItems=\"group.items\"\n          :show=\"$env.content.dataProviderInterface.buttons[group.group]\"\n          :isOperator=\"getUserData.roles.includes('operator')\"\n          :isCatalog=\"group.group === 'Catalogue' ? true : false\"\n        >\n        </dropup>\n        <ul>\n          <div class=\"btn-group dropup\">\n          <li v-for=\"(menuItem, index) in menuItems\" :key=\"`Menu${index}`\" >\n  <button\n    type=\"button\"\n    class=\"btn btn-default\"\n    @click=\"scrollToTop()\"\n  >\n    <!-- External links -->\n    <a\n      v-if=\"menuItem.external\"\n      :href=\"menuItem.href\"\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n    >\n      {{ menuItem.name }} \n      <span class=\"ml-2 external-link-icon\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"16\" fill=\"currentColor\" class=\"bi bi-box-arrow-up-right\" viewBox=\"0 0 16 16\">\n      <path fill-rule=\"evenodd\" d=\"M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5\"/>\n      <path fill-rule=\"evenodd\" d=\"M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z\"/>\n    </svg>\n    </span>\n    </a>\n    \n    <!-- Internal router links or handlers -->\n    <component\n      v-else\n      :is=\"menuItem.handler ? 'button' : 'router-link'\"\n      :class=\"{ disabled: menuItem.disabled }\"\n      :to=\"menuItem.to\"\n      @click.native=\"menuItem.handler ? menuItem.handler() : null\"\n    >\n      {{ menuItem.name }}\n    </component>\n  </button>\n</li>\n          </div>\n        </ul>\n      </div>\n\n      <div v-if=\"getUserData.userName\" class=\"logoutWrap\">\n        <slot name=\"right\" :get-user-data=\"getUserData\">\n          <small class=\"text-white\"\n            >{{ $t(\"message.dataupload.menu.loggedInAs\") }}\n            {{ getUserData.userName }}</small\n          >\n          <br />\n          <button type=\"button\" class=\"btn btn-default logout\">\n            <router-link :to=\"{ name: 'Logout' }\">{{\n              $t(\"message.dataupload.menu.logout\")\n            }}</router-link>\n          </button>\n        </slot>\n      </div>\n    </nav>\n\n    <app-confirmation-dialog\n      id=\"DPIMenuModal\"\n      :loading=\"modal.loading\"\n      :confirm=\"modal.confirm\"\n      @confirm=\"modal.confirmHandler\"\n    >\n      {{ modal.message }}\n    </app-confirmation-dialog>\n  </div>\n</template>\n\n<script>\nimport axios from \"axios\";\nimport $ from \"jquery\";\nimport { has, isEmpty } from \"lodash-es\";\nimport { mapGetters, mapActions } from \"vuex\";\nimport Dropup from \"./components/Dropup\";\nimport { useWindowScroll } from \"@vueuse/core\";\n\nexport default {\n  name: \"DPI-menu\",\n  components: {\n    Dropup,\n  },\n  props: {},\n  data() {\n    return {\n      showRatingService: this.$env.content.datasetDetails?.showRatingService,\n            rootUrl: this.$env.api.baseUrl?.split('.eu/')[0] + '.eu/' || 'https://ppe.data.europa.eu/',\n      visible: true,\n      modal: {\n        show: false,\n        loading: false,\n        error: null,\n        message: \"\",\n        confirm: \"Ok\",\n        confirmHandler: () => null,\n      },\n    };\n  },\n  setup() {\n    const scrollToTop = () => {\n      let { x, y } = useWindowScroll({ behavior: \"smooth\" });\n      y.value = 0;\n    };\n    return {\n      scrollToTop,\n    };\n  },\n  computed: {\n    ...mapGetters(\"datasetDetails\", [\n      \"getCatalog\",\n      \"getID\",\n      \"getLoading\",\n      \"getTitle\",\n      \"getDescription\",\n      'getAdmsIdentifiers',\n      'getIdentifiers',\n      'getOtherIdentifiers',\n    ]),\n  // Individual DOI checks for display\n  hasAnyDoi() {\n    const checkDoi = (value) => value && value.match(/^10\\.\\d{4,9}\\/[-._;()/:A-Z0-9]+$/i);\n\n    return (\n      checkDoi(this.getIdentifiers?.[0]) ||                  // Check Identifier\n      checkDoi(this.getAdmsIdentifiers?.[0]?.identifier) || // Check Adms\n      checkDoi(this.getOtherIdentifiers?.[0]?.identifier)   // Check Others\n    );\n  },\n    ...mapGetters(\"auth\", [\"getUserData\"]),\n    menuGroups() {\n      return [\n        {\n          group: \"Dataset\",\n          items: [\n            {\n              key: \"create-dataset\",\n              name: \"createDataset\",\n              to: {\n                name: \"DataProviderInterface-Input\",\n                query: { locale: this.$route.query.locale, edit: false }, // if edit is false -> reset is triggered\n                params: { property: \"datasets\" },\n              },\n            },\n            {\n              name: \"deleteDataset\",\n              disabled: !this.isLocatedOnAuthorizedDatasetPage || this.hasAnyDoi,\n              handler: () => {\n                this.modal = {\n                  ...this.modal,\n                  ...{\n                    message: this.$t(\n                      \"message.dataupload.menu.datasetDeletion.message\"\n                    ),\n                    confirm: this.$t(\n                      \"message.dataupload.menu.datasetDeletion.confirm\"\n                    ),\n                    confirmHandler: () =>\n                      this.handleDelete({\n                        id: this.getID,\n                        property: \"datasets\",\n                        catalog: this.getCatalog.id,\n                      }),\n                  },\n                };\n                $(\"#modal\").modal({ show: true });\n              },\n            },\n            {\n              key: \"edit-dataset\",\n              name: \"editDataset\",\n              onlyAuthorizedDatasetPage: true,\n              disabled: !this.isLocatedOnAuthorizedDatasetPage,\n              to: {\n                name: \"DataProviderInterface-Edit\",\n                params: {\n                  catalog: this.getCatalog.id || \"undefined\",\n                  property: \"datasets\",\n                  id: this.getID || \"undefined\",\n                },\n                query: {\n                  draft: false,\n                  locale: this.$route.query.locale,\n                },\n              },\n            },\n\n            {\n              key: \"draft-dataset\",\n              name: \"setToDraft\",\n              disabled: !this.isLocatedOnAuthorizedDatasetPage,\n              handler: () => {\n                this.modal = {\n                  ...this.modal,\n                  ...{\n                    message: this.$t(\n                      \"message.dataupload.menu.markAsDraft.message\"\n                    ),\n                    confirm: this.$t(\n                      \"message.dataupload.menu.markAsDraft.confirm\"\n                    ),\n                    confirmHandler: () =>\n                      this.handleMarkAsDraft({\n                        id: this.getID,\n                        catalog: this.getCatalog.id,\n                        title: this.getTitle,\n                        description: this.getDescription,\n                      }),\n                  },\n                };\n                $(\"#modal\").modal({ show: true });\n              },\n            },\n            {\n              key: \"register-dataset\",\n              name: \"registerDoi\",\n              disabled: !this.isLocatedOnAuthorizedDatasetPage,\n              handler: () => {\n                this.modal = {\n                  ...this.modal,\n                  ...{\n                    message: this.$t(\n                      \"message.dataupload.menu.registerADoi.message\"\n                    ),\n                    confirm: this.$t(\n                      \"message.dataupload.menu.registerADoi.confirm\"\n                    ),\n                    confirmHandler: () =>\n                      this.handleRegisterDoi({\n                        id: this.getID,\n                        catalog: this.getCatalog.id,\n                        type:\n                          this.$env.content.dataProviderInterface\n                            .doiRegistrationService.persistentIdentifierType ||\n                          \"mock\",\n                      }),\n                  },\n                };\n                $(\"#modal\").modal({ show: true });\n              },\n            },\n          ],\n        },\n        {\n          group: \"Catalogue\",\n          items: [\n            {\n              name: \"CreateCatalogue\",\n              to: {\n                name: \"DataProviderInterface-Input\",\n                query: { locale: this.$route.query.locale, edit: false },\n                params: { property: \"catalogues\" },\n              },\n            },\n            {\n              name: \"DeleteCatalogue\",\n              disabled: !this.isLocatedOnAuthorizedCatalogPage,\n              handler: () => {\n                this.modal = {\n                  ...this.modal,\n                  ...{\n                    message:\n                      \"Are you sure you want to delete this catalogue? This can not be reverted!\",\n                    confirm: \"Delete catlogue (irreversible)\",\n                    confirmHandler: () =>\n                      this.handleDelete({\n                        id: this.$route.params.ctlg_id,\n                        property: \"catalogues\",\n                        catalog: this.$route.params.ctlg_id,\n                      }),\n                  },\n                };\n                $(\"#modal\").modal({ show: true });\n              },\n            },\n            {\n              name: \"EditCatalog\",\n              onlyAuthorizedDatasetPage: true,\n              disabled: !this.isLocatedOnAuthorizedCatalogPage,\n              to: {\n                name: \"DataProviderInterface-Edit\",\n                params: {\n                  catalog: this.$route.params.ctlg_id\n                    ? this.$route.params.ctlg_id\n                    : \"undefined\",\n                  property: \"catalogues\",\n                  id: this.getID || \"undefined\",\n                },\n                query: {\n                  draft: false,\n                  locale: this.$route.query.locale,\n                },\n              },\n            },\n          ],\n        },\n      ];\n    },\n   menuItems() {\n  let items = [];\n      // Only show Draft Datasets if hideOldDPIFunctions is not true\n      if (!this.$env.content.dataProviderInterface.hideOldDPIFunctions) {\n        items.push({\n          name: this.$t(\"message.dataupload.menu.draftDatasets\"),\n          to: {\n            name: \"DataProviderInterface-Draft\",\n            query: { locale: this.$route.query.locale },\n          },\n        });\n      }\n      \n      if (this.$env.content.dataProviderInterface.hideOldDPIFunctions) {\n        items.push({\n          name: \"Data Management\",\n          href: `${this.rootUrl}/data-management/`,\n          external: true,\n        });\n      }\n      \n      items.push(\n        {\n          name: this.$t(\"message.dataupload.menu.myCatalogues\"),\n          to: {\n            name: \"DataProviderInterface-UserCatalogues\",\n            query: { locale: this.$route.query.locale },\n          },\n        },\n        {\n          name: this.$t(\"message.dataupload.menu.userProfile\"),\n          to: {\n            name: \"DataProviderInterface-UserProfile\",\n            query: { locale: this.$route.query.locale },\n          },\n        }\n      );\n      \n      if (this.showRatingService && this.isOperator) {\n        items.push({\n          name: \"Comment moderation\",\n          to: {\n            name: \"DataProviderInterface-CommentsModeration\",\n            query: { locale: this.$route.query.locale },\n          },\n        });\n      }\n      return items;\n    },\n    isLocatedOnAuthorizedDatasetPage() {\n      // Never return true while loading\n      if (this.getLoading) return false;\n\n      // Is the user located on the correct page?\n      const isOnDatasetDetailsPage =\n        this.$route.name === \"DatasetDetailsDataset\";\n      if (!isOnDatasetDetailsPage) return false;\n      const datasetId = isOnDatasetDetailsPage && this.$route.params.ds_id;\n\n      // Does user have permission on dataset (based on current datasetDetails state)?\n      const permissions = this.getUserData && this.getUserData.permissions;\n      const catalogId = this.getCatalog && this.getCatalog.id;\n      const hasPermission = permissions.find(\n        (permission) => permission.rsname === catalogId\n      );\n\n      if (this.isOperator) {\n        return true;\n      }\n\n      // Does the user have permission on the current dataset details page?\n      return (\n        hasPermission && isOnDatasetDetailsPage && datasetId === this.getID\n      );\n    },\n    isLocatedOnAuthorizedCatalogPage() {\n      // never return true while loading\n      if (this.getLoading) return false;\n\n      // is the user located on the correct page?\n      const onCatalogPage = this.$route.name === \"CatalogueDetails\";\n      if (!onCatalogPage) return false;\n      const catalogId = onCatalogPage && this.$route.params.ctlg_id;\n\n      // const permissions = this.getUserData && this.getUserData.permissions;\n      // const hasPermission = permissions.find(permission => permission.rsname === catalogId);\n      const hasPermission = true;\n      // does user have permission on current catalogue\n      return hasPermission && onCatalogPage;\n    },\n    isOperator() {\n      return this.getUserData.roles.includes(\"operator\");\n    },\n    showWarningBanner() {\n      return this.$env.content.dataProviderInterface?.showWarningBanner || false;\n    }\n  },\n  methods: {\n    checkDoi(doi = '') {\n    return doi && doi.match(/^10\\.\\d{4,9}\\/[-._;()/:A-Z0-9]+$/i);\n  },\n    ...mapActions(\"auth\", [\"updateUserData\"]),\n    ...mapActions(\"snackbar\", [\"showSnackbar\"]),\n    setupKeycloakWatcher() {\n      if (this.$keycloak && this.$keycloak.authenticated) {\n        // Set up watcher here since we this.$keycloak might not be available.\n        // If this.$keycloak is ensured, move this watcher out of this created hook.\n        this.$watch(\n          \"$keycloak.token\",\n          async (newToken) => {\n            if (!newToken) return;\n\n            let rtpToken = this.$keycloak.rtpToken;\n            if (!rtpToken) {\n              const rtpTokenFn = this.$keycloak.getRtpToken;\n              if (rtpTokenFn) {\n                const res = await rtpTokenFn({ autoRefresh: true });\n                rtpToken = res;\n              }\n            }\n\n            this.updateUserData({\n              authToken: newToken,\n              rtpToken: rtpToken,\n              hubUrl: this.$env.api.hubUrl,\n            });\n          },\n          { immediate: true }\n        );\n\n        this.$watch(\"$keycloak.rtpToken\", (newRtpToken) => {\n          if (!newRtpToken) return;\n\n          this.updateUserData({\n            authToken: this.$keycloak.token,\n            rtpToken: newRtpToken,\n            hubUrl: this.$env.api.hubUrl,\n          });\n        });\n      }\n    },\n    async handleConfirm(action, argsObj, { successMessage, errorMessage }) {\n      this.modal.loading = true;\n      try {\n        // Sleep for 250ms for better UX\n        this.$Progress.start();\n        await new Promise((resolve) => setTimeout(resolve, 250));\n\n        this.$Progress.set(25);\n        await this.$store.dispatch(action, argsObj);\n\n        // Successful DOI registration\n        this.showSnackbar({\n          message: successMessage,\n          variant: \"success\",\n        });\n        await new Promise((resolve) => setTimeout(resolve, 250));\n\n        this.$Progress.finish();\n      } catch (ex) {\n        this.$Progress.fail();\n        // eslint-disable-next-line no-console\n        console.error(ex);\n\n        const maybeErrorStatusMsg =\n          ex.response && ex.response.data && ex.response.data.message;\n\n        this.modal = {\n          ...this.modal,\n          ...{\n            // Need to translate this\n            message:\n              \"DOI registration is not possible, the following error occured: \" +\n              ex.response.data,\n            confirm: \"Okay\",\n            confirmHandler: () => $(\"#modal\").modal(\"hide\"),\n          },\n        };\n\n        console.log(ex.response.data);\n        let customErrorMessage =\n          typeof errorMessage === \"string\" && errorMessage;\n        customErrorMessage =\n          typeof errorMessage === \"function\" && errorMessage(ex);\n        // customErrorMessage = typeof errorMessage === 'object' && errorMessage.prefix && `${errorMessage.prefix}${maybeErrorStatusMsg && ` — ${maybeErrorStatusMsg}`}`;\n        customErrorMessage =\n          typeof errorMessage === \"object\" &&\n          errorMessage.prefix + \" - \" + ex.response.data;\n\n        console.log(errorMessage);\n        const errorMsg =\n          customErrorMessage ||\n          maybeErrorStatusMsg ||\n          ex.message ||\n          \"An error occurred\";\n        // show snackbar\n        this.showSnackbar({\n          message: errorMsg,\n          variant: \"error\",\n        });\n      } finally {\n        this.modal.loading = false;\n        $(\"#modal\").modal(\"hide\");\n      }\n    },\n    async handleRegisterDoi({ id, catalog, type = \"eu-ra-doi\" }) {\n      await this.handleConfirm(\n        \"auth/createPersistentIdentifier\",\n        { id, catalog, type },\n        {\n          successMessage: this.$te(\"message.snackbar.doiRegistration.success\")\n            ? this.$t(\"message.snackbar.doiRegistration.success\")\n            : \"Successfully registered DOI\",\n          errorMessage: {\n            prefix: this.$te(\"message.snackbar.doiRegistration.error\")\n              ? this.$t(\"message.snackbar.doiRegistration.error\")\n              : \"DOI registration failed\",\n          },\n        }\n      );\n    },\n    async handleMarkAsDraft({ id, catalog, title, description }) {\n      await this.handleConfirm(\n        \"auth/putDatasetToDraft\",\n        {\n          id,\n          catalog,\n          title,\n          description,\n        },\n        {\n          successMessage: this.$te(\"message.snackbar.markAsDraft.success\")\n            ? this.$t(\"message.snackbar.markAsDraft.success\")\n            : \"Dataset successfully marked as draft\",\n          errorMessage: {\n            prefix: this.$te(\"message.snackbar.markAsDraft.error\")\n              ? this.$t(\"message.snackbar.markAsDraft.error\")\n              : \"Failed to mark dataset as draft\",\n          },\n        }\n      );\n\n      this.$router\n        .push({\n          name: \"DataProviderInterface-Draft\",\n          query: { locale: this.$route.query.locale },\n        })\n        .catch(() => {});\n    },\n    async handleDelete({ id, property, catalog }) {\n      // todo: create user dataset api (and maybe integrate to store)\n      // For now, do request manually using axios\n\n      this.modal.loading = true;\n      this.$Progress.start();\n      try {\n        let endpoint;\n\n        if (property === \"datasets\") {\n          endpoint = `${this.$env.api.hubUrl}datasets/${id}?useNormalizedId=true&catalogue=${catalog}`;\n        } else if (property === \"catalogues\") {\n          endpoint = `${this.$env.api.hubUrl}catalogues/${id}`;\n        }\n\n        await axios.delete(endpoint, {\n          headers: {\n            \"Content-Type\": \"text/turtle\",\n            Authorization: `Bearer ${this.getUserData.rtpToken}`,\n          },\n        });\n\n        let successMessage;\n        if (property === \"datasets\") {\n          successMessage = this.$te(\"message.snackbar.deleteDataset.success\")\n            ? this.$t(\"message.snackbar.deleteDataset.success\")\n            : \"Dataset successfully deleted\";\n        } else if (property === \"catalogues\") {\n          successMessage = this.$te(\"message.snackbar.deleteCatalog.success\")\n            ? this.$t(\"message.snackbar.deleteCatalog.success\")\n            : \"Catalog successfully deleted\";\n        }\n\n        this.showSnackbar({\n          message: successMessage,\n          variant: \"success\",\n        });\n        this.$Progress.finish();\n\n        // Redirect to Home\n        this.$router\n          .push({\n            name: \"Datasets\",\n            query: { locale: this.$route.query.locale, refresh: true },\n          })\n          .catch(() => {});\n      } catch (ex) {\n        this.$Progress.fail();\n\n        let errorMessage;\n\n        if (property === \"datasets\") {\n          errorMessage = this.$te(\"message.snackbar.deleteDataset.error\")\n            ? this.$t(\"message.snackbar.deleteDataset.error\")\n            : \"Failed to delete dataset\";\n        } else if (property === \"catalogues\") {\n          errorMessage = this.$te(\"message.snackbar.deleteCatalog.error\")\n            ? this.$t(\"message.snackbar.deleteCatalog.error\")\n            : \"Failed to delete catalog\";\n        }\n\n        this.showSnackbar({\n          message: `${errorMessage}${\n            ex.response?.data ? ` — ${ex.response?.data}` : ex.message\n          }`,\n          variant: \"error\",\n        });\n      } finally {\n        this.modal.loading = false;\n        $(\"#modal\").modal(\"hide\");\n      }\n    },\n  },\n  created() {\n    this.setupKeycloakWatcher();\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n#wrapper {\n  background: linear-gradient(90deg, #082b7a, #0e47cb);\n  width: 100%;\n  position: sticky;\n  bottom: 0;\n  z-index: 999;\n}\n\nnav {\n  max-width: 1400px;\n  display: flex;\n  flex-direction: row;\n  margin: 0 auto;\n  justify-content: space-between;\n  font-size: 1rem;\n  align-items: center;\n}\n\nul {\n  float: right;\n\n  li {\n    display: inline;\n\n    a {\n      color: white;\n    }\n  }\n}\n\nbutton a {\n  color: white;\n}\n\n.logout {\n  display: block;\n  margin: 0 auto;\n  border: 1px solid white;\n  padding: 0.1rem 1.5rem;\n}\n\n.logoutWrap {\n  width: 14rem;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.warning-banner {\n  background-color: #ffc107;\n  color: #000;\n  padding: 0.75rem 1rem;\n  text-align: center;\n  width: 100%;\n}\n\n.warning-content {\n  max-width: 1400px;\n  margin: 0 auto;\n}\n\n.external-link-icon svg {\n  vertical-align: text-top !important;\n}\n</style>\n"],"names":["_sfc_main","Dropup","_a","_b","x","y","useWindowScroll","mapGetters","checkDoi","value","_c","_e","_d","$","items","isOnDatasetDetailsPage","datasetId","permissions","catalogId","hasPermission","permission","onCatalogPage","doi","mapActions","newToken","rtpToken","rtpTokenFn","newRtpToken","action","argsObj","successMessage","errorMessage","resolve","ex","maybeErrorStatusMsg","customErrorMessage","errorMsg","id","catalog","type","title","description","property","endpoint","axios","_hoisted_3","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_10","_openBlock","_createElementBlock","_hoisted_1","$data","$options","_hoisted_2","_createElementVNode","_toDisplayString","_ctx","_hoisted_4","_Fragment","_renderList","group","index","_createBlock","_component_dropup","menuItem","$setup","_resolveDynamicComponent","_normalizeClass","_createTextVNode","_hoisted_9","_renderSlot","_hoisted_11","_createVNode","_component_router_link","_component_app_confirmation_dialog"],"mappings":"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"}