Skip to main content
Sign in
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • Issue/3261-bugInUIForFolders
  • dev
  • Issue/3260-depsUpdate
  • Test/xxxx-shaclForm
  • Issue/3242-UserDeletionOnProfile
  • Issue/3187-VersionStorage
  • Issue/3257-showCorrectInfoWhenCreatingProject
  • Issue/3212-AddEmailforexpiredToken
  • Issue/3267-redirectToPid
  • main
  • Issue/3263-S3CredentialsVisibleforMembers
  • Issue/3240-changeMetadataUpdateButton
  • Issue/3245-maintenanceAPIUpdate
  • Hotfix/xxxx-podmanComposeFix
  • Issue/3135-newUiUnitTests
  • Issue/3179-sortDataPublicationServiceList
  • Issue/3193-processingOfPersonalDataConsent
  • Hotfix/2486-ImprovedGitLabTokenHandling
  • Issue/2486-ImprovedGitLabTokenHandling
  • Issue/2511-moveResourceInfoToModalView
  • Issue/2450-AdminPage
  • Issue/3222-FairDOFeedbackChanges
  • Issue/1560-VisibilityAndOrder
  • Issue/3082-visualizeFDOs
  • Issue/3203-brokenCoscineSurfacePage
  • Issue/3192-gitlabTokenUpdateNotPossible
  • Issue/3175-uiQuotaSettingAndDisplayBug
  • Issue/3090-tosProblems
  • Issue/3178-iconColorBug
  • Issue/3176-addNewNFDI4INGLogo
  • Issue/3141-rdsNoLonga
  • Issue/3180-fixMetadataNotLoading
  • Issue/3177-resourceTypeDescriptionTexts
  • Issue/3160-deactivateDownloadForFolders
  • Issue/3111-fixLoadingGitLabResource
  • Issue/3133-subProjectsChanges
  • Issue/3139-dsnrw
  • Issue/3167-changeTextAndAddLink
  • Issue/3070-newIconsForResourceTypes
  • Issue/3145-redesignLoginPage
  • Issue/3093-moreInformationInTheDeletionEmails
  • Issue/3040-closeTokenWindowWithXButton
  • Issue/3152-fixResourceStore
  • Issue/xxxx-DuckDBTest
  • Issue/3152-fixUpdateRequestPayload
  • Issue/2489-addNotificationManagement
  • Issue/3138-tooltipForDisabledCreateActions
  • Issue/3136-orderResourcesInAlphabeticalOrder
  • Issue/3119-respOrg-vol2
  • Issue/3119-respOrg
  • Issue/3129-improvmentsResourceCreation
  • Issue/3068-metadataProfileTitleLanguage
  • Issue/3108-fixChangingOfGitLabToken
  • Issue/3124-confusingInfoMessageForArchivedResource
  • Issue/3098-Fix0Quota
  • Issue/3052-folderUpload
  • Issue/3085-useNewApiClient
  • Issue/3088-fixMissingMetadataForSpecificResources
  • Issue/3043-DataStorageNrwResource
  • Issue/3086-fixProjectCreation
  • Issue/3084-textChangesDataPublication
  • Issue/2969-AddUrlLinkToGitLabRepo
  • Issue/3011-maintenanceMode
  • Issue/3049-quotaDisplayIncorrect
  • Issue/2572-addQuotaInputField
  • Issue/3061-emailVerification
  • Issue/3032-disciplines
  • Issue/3034-quotaPercent
  • Issue/3020-changeRegAppLoginButton
  • Issue/3025-addMissionStatement
  • Issue/2893-rcvDownloadButtonName
  • Issue/3019-changeAccessibilityStatementLink
  • Issue/3026-banner
  • Issue/3027-enablePencilButton
  • Issue/2582-restoreProjectFormData
  • Issue/2995-datastoreInfrastructure
  • Issue/3018-disableMultiFileDownload
  • Issue/3017-admin
  • Issue/2998-fixMetadataProfileSorting
  • Issue/3008-signIn
  • Issue/2446-addingResponsibleOrganization
  • Issue/2992-smallChangesDataPublicationRequest
  • Issue/2999-orgs
  • Hotfix/2989-cookieLength
  • Issue/2960-infiniteLoop
  • test/lo
  • removeInstitutesFromUserTests
  • Issue/2900-removeInsituteField
  • test-test
  • Issue/2991-fixSaveButtonValidationLogic
  • Issue/2983-displayingWrongProjectEnd
  • Issue/2987-updateLogosLoginPage
  • revert-fccd0fd0
  • Issue/2870-adjustInfoGitLabResource
  • Issue/2981-dataPubInDb
  • Issue/2975-reactivateDataPubFeature
  • Issue/5678-smallChangesRenamingApplicationProfile
  • Issue/2881-messageController
  • Issue/2978-renameApplicationProfiletoMetadataProfile
  • Hotfix/2971-fixTextInDataPub
  • 1.28.0-pilot
  • v1.0.0
  • v1.1.0
  • v1.10.0
  • v1.10.1
  • v1.10.2
  • v1.10.3
  • v1.11.0
  • v1.11.1
  • v1.11.2
  • v1.11.3
  • v1.11.4
  • v1.11.5
  • v1.11.6
  • v1.11.7
  • v1.12.0
  • v1.13.0
  • v1.14.0
  • v1.14.1
  • v1.14.2
  • v1.14.3
  • v1.15.0
  • v1.15.1
  • v1.16.0
  • v1.16.1
  • v1.16.2
  • v1.16.3
  • v1.17.0
  • v1.17.1
  • v1.17.2
  • v1.18.0
  • v1.18.1
  • v1.19.0
  • v1.2.0
  • v1.20.0
  • v1.20.1
  • v1.20.2
  • v1.20.3
  • v1.20.4
  • v1.20.5
  • v1.21.0
  • v1.22.0
  • v1.22.1
  • v1.22.2
  • v1.23.0
  • v1.23.1
  • v1.23.2
  • v1.23.3
  • v1.23.4
  • v1.23.5
  • v1.23.6
  • v1.23.6-patch-2417-2427
  • v1.24.0
  • v1.24.1
  • v1.25.0
  • v1.25.1
  • v1.26.0
  • v1.26.1
  • v1.27.0
  • v1.27.1
  • v1.27.1-pilot
  • v1.28.0
  • v1.29.0
  • v1.29.1
  • v1.29.2
  • v1.3.0
  • v1.30.0
  • v1.30.1
  • v1.30.2
  • v1.31.0
  • v1.32.0
  • v1.4.0
  • v1.4.1
  • v1.5.0
  • v1.6.0
  • v1.6.1
  • v1.6.2
  • v1.7.0
  • v1.8.0
  • v1.8.1
  • v1.8.2
  • v1.9.0
  • v2.0.0
  • v2.1.0
  • v2.10.0
  • v2.10.1
  • v2.11.0
  • v2.12.0
  • v2.12.1
  • v2.12.2
  • v2.12.3
  • v2.12.4
  • v2.12.5
  • v2.13.0
  • v2.13.1
  • v2.13.2
  • v2.13.3
  • v2.13.4
  • v2.14.0
  • v2.15.0
200 results

Target

Select target project
  • Coscine / frontend / apps / UI
1 result
Select Git revision
  • Issue/3261-bugInUIForFolders
  • dev
  • Issue/3260-depsUpdate
  • Test/xxxx-shaclForm
  • Issue/3242-UserDeletionOnProfile
  • Issue/3187-VersionStorage
  • Issue/3257-showCorrectInfoWhenCreatingProject
  • Issue/3212-AddEmailforexpiredToken
  • Issue/3267-redirectToPid
  • main
  • Issue/3263-S3CredentialsVisibleforMembers
  • Issue/3240-changeMetadataUpdateButton
  • Issue/3245-maintenanceAPIUpdate
  • Hotfix/xxxx-podmanComposeFix
  • Issue/3135-newUiUnitTests
  • Issue/3179-sortDataPublicationServiceList
  • Issue/3193-processingOfPersonalDataConsent
  • Hotfix/2486-ImprovedGitLabTokenHandling
  • Issue/2486-ImprovedGitLabTokenHandling
  • Issue/2511-moveResourceInfoToModalView
  • Issue/2450-AdminPage
  • Issue/3222-FairDOFeedbackChanges
  • Issue/1560-VisibilityAndOrder
  • Issue/3082-visualizeFDOs
  • Issue/3203-brokenCoscineSurfacePage
  • Issue/3192-gitlabTokenUpdateNotPossible
  • Issue/3175-uiQuotaSettingAndDisplayBug
  • Issue/3090-tosProblems
  • Issue/3178-iconColorBug
  • Issue/3176-addNewNFDI4INGLogo
  • Issue/3141-rdsNoLonga
  • Issue/3180-fixMetadataNotLoading
  • Issue/3177-resourceTypeDescriptionTexts
  • Issue/3160-deactivateDownloadForFolders
  • Issue/3111-fixLoadingGitLabResource
  • Issue/3133-subProjectsChanges
  • Issue/3139-dsnrw
  • Issue/3167-changeTextAndAddLink
  • Issue/3070-newIconsForResourceTypes
  • Issue/3145-redesignLoginPage
  • Issue/3093-moreInformationInTheDeletionEmails
  • Issue/3040-closeTokenWindowWithXButton
  • Issue/3152-fixResourceStore
  • Issue/xxxx-DuckDBTest
  • Issue/3152-fixUpdateRequestPayload
  • Issue/2489-addNotificationManagement
  • Issue/3138-tooltipForDisabledCreateActions
  • Issue/3136-orderResourcesInAlphabeticalOrder
  • Issue/3119-respOrg-vol2
  • Issue/3119-respOrg
  • Issue/3129-improvmentsResourceCreation
  • Issue/3068-metadataProfileTitleLanguage
  • Issue/3108-fixChangingOfGitLabToken
  • Issue/3124-confusingInfoMessageForArchivedResource
  • Issue/3098-Fix0Quota
  • Issue/3052-folderUpload
  • Issue/3085-useNewApiClient
  • Issue/3088-fixMissingMetadataForSpecificResources
  • Issue/3043-DataStorageNrwResource
  • Issue/3086-fixProjectCreation
  • Issue/3084-textChangesDataPublication
  • Issue/2969-AddUrlLinkToGitLabRepo
  • Issue/3011-maintenanceMode
  • Issue/3049-quotaDisplayIncorrect
  • Issue/2572-addQuotaInputField
  • Issue/3061-emailVerification
  • Issue/3032-disciplines
  • Issue/3034-quotaPercent
  • Issue/3020-changeRegAppLoginButton
  • Issue/3025-addMissionStatement
  • Issue/2893-rcvDownloadButtonName
  • Issue/3019-changeAccessibilityStatementLink
  • Issue/3026-banner
  • Issue/3027-enablePencilButton
  • Issue/2582-restoreProjectFormData
  • Issue/2995-datastoreInfrastructure
  • Issue/3018-disableMultiFileDownload
  • Issue/3017-admin
  • Issue/2998-fixMetadataProfileSorting
  • Issue/3008-signIn
  • Issue/2446-addingResponsibleOrganization
  • Issue/2992-smallChangesDataPublicationRequest
  • Issue/2999-orgs
  • Hotfix/2989-cookieLength
  • Issue/2960-infiniteLoop
  • test/lo
  • removeInstitutesFromUserTests
  • Issue/2900-removeInsituteField
  • test-test
  • Issue/2991-fixSaveButtonValidationLogic
  • Issue/2983-displayingWrongProjectEnd
  • Issue/2987-updateLogosLoginPage
  • revert-fccd0fd0
  • Issue/2870-adjustInfoGitLabResource
  • Issue/2981-dataPubInDb
  • Issue/2975-reactivateDataPubFeature
  • Issue/5678-smallChangesRenamingApplicationProfile
  • Issue/2881-messageController
  • Issue/2978-renameApplicationProfiletoMetadataProfile
  • Hotfix/2971-fixTextInDataPub
  • 1.28.0-pilot
  • v1.0.0
  • v1.1.0
  • v1.10.0
  • v1.10.1
  • v1.10.2
  • v1.10.3
  • v1.11.0
  • v1.11.1
  • v1.11.2
  • v1.11.3
  • v1.11.4
  • v1.11.5
  • v1.11.6
  • v1.11.7
  • v1.12.0
  • v1.13.0
  • v1.14.0
  • v1.14.1
  • v1.14.2
  • v1.14.3
  • v1.15.0
  • v1.15.1
  • v1.16.0
  • v1.16.1
  • v1.16.2
  • v1.16.3
  • v1.17.0
  • v1.17.1
  • v1.17.2
  • v1.18.0
  • v1.18.1
  • v1.19.0
  • v1.2.0
  • v1.20.0
  • v1.20.1
  • v1.20.2
  • v1.20.3
  • v1.20.4
  • v1.20.5
  • v1.21.0
  • v1.22.0
  • v1.22.1
  • v1.22.2
  • v1.23.0
  • v1.23.1
  • v1.23.2
  • v1.23.3
  • v1.23.4
  • v1.23.5
  • v1.23.6
  • v1.23.6-patch-2417-2427
  • v1.24.0
  • v1.24.1
  • v1.25.0
  • v1.25.1
  • v1.26.0
  • v1.26.1
  • v1.27.0
  • v1.27.1
  • v1.27.1-pilot
  • v1.28.0
  • v1.29.0
  • v1.29.1
  • v1.29.2
  • v1.3.0
  • v1.30.0
  • v1.30.1
  • v1.30.2
  • v1.31.0
  • v1.32.0
  • v1.4.0
  • v1.4.1
  • v1.5.0
  • v1.6.0
  • v1.6.1
  • v1.6.2
  • v1.7.0
  • v1.8.0
  • v1.8.1
  • v1.8.2
  • v1.9.0
  • v2.0.0
  • v2.1.0
  • v2.10.0
  • v2.10.1
  • v2.11.0
  • v2.12.0
  • v2.12.1
  • v2.12.2
  • v2.12.3
  • v2.12.4
  • v2.12.5
  • v2.13.0
  • v2.13.1
  • v2.13.2
  • v2.13.3
  • v2.13.4
  • v2.14.0
  • v2.15.0
200 results
Show changes
84 files
+ 2461
1406
Compare changes
  • Side-by-side
  • Inline

Files

+893 −0

File changed and moved.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -41,4 +41,4 @@ packageExtensions:
    dependencies:
      vue: ^2.7.15

yarnPath: .yarn/releases/yarn-4.0.0.cjs
yarnPath: .yarn/releases/yarn-4.0.2.cjs
+30 −31
Original line number Diff line number Diff line
{
  "name": "ui",
  "version": "2.5.1",
  "version": "2.5.2",
  "private": true,
  "scripts": {
    "dev": "vite",
@@ -13,9 +13,9 @@
    "coverage": "vitest run --coverage"
  },
  "dependencies": {
    "@coscine/api-client": "^3.3.0",
    "@coscine/form-generator": "^3.5.1",
    "@dynamic-mapper/mapper": "^1.10.2",
    "@coscine/api-client": "^3.3.1",
    "@coscine/form-generator": "^3.5.3",
    "@dynamic-mapper/mapper": "^1.10.4",
    "@pinia/testing": "^0.1.3",
    "@rdfjs-elements/formats-pretty": "^0.6.4",
    "@rdfjs/data-model": "^2.0.1",
@@ -24,20 +24,20 @@
    "@rdfjs/types": "^1.1.0",
    "@vuelidate/core": "^2.0.3",
    "@vuelidate/validators": "^2.0.4",
    "@vueuse/core": "^10.5.0",
    "axios": "^1.5.1",
    "@vueuse/core": "^10.6.1",
    "axios": "^1.6.2",
    "bootstrap": "4.6.1",
    "bootstrap-icons": "^1.11.1",
    "bootstrap-vue": "^2.23.1",
    "buffer": "^6.0.3",
    "file-saver": "^2.0.5",
    "http-status-codes": "^2.3.0",
    "jose": "^4.15.4",
    "jose": "^5.1.1",
    "jquery": "^3.7.1",
    "lodash": "^4.17.21",
    "moment": "^2.29.4",
    "pinia": "^2.1.7",
    "rdf-canonize": "^3.4.0",
    "rdf-canonize": "^4.0.1",
    "rdf-ext": "^2.4.0",
    "rdf-parse": "^2.3.2",
    "rdf-validate-shacl": "^0.4.5",
@@ -59,43 +59,42 @@
    "@semantic-release/gitlab": "^12.0.6",
    "@semantic-release/npm": "^10.0.6",
    "@semantic-release/release-notes-generator": "^11.0.7",
    "@types/file-saver": "^2.0.6",
    "@types/lodash": "^4.14.200",
    "@types/rdf-ext": "^2.2.4",
    "@types/rdf-validate-shacl": "^0.4.5",
    "@types/uuid": "^9.0.6",
    "@types/vue-select": "^3.16.6",
    "@typescript-eslint/eslint-plugin": "^5.62.0",
    "@typescript-eslint/parser": "^5.62.0",
    "@vitejs/plugin-vue2": "^2.2.0",
    "@vitest/coverage-c8": "^0.32.4",
    "@vue/eslint-config-prettier": "^7.1.0",
    "@vue/eslint-config-typescript": "^11.0.3",
    "@vue/runtime-dom": "^3.3.7",
    "@types/file-saver": "^2.0.7",
    "@types/lodash": "^4.14.201",
    "@types/rdf-ext": "^2.2.5",
    "@types/rdf-validate-shacl": "^0.4.6",
    "@types/uuid": "^9.0.7",
    "@types/vue-select": "^3.16.7",
    "@typescript-eslint/eslint-plugin": "^6.11.0",
    "@typescript-eslint/parser": "^6.11.0",
    "@vitejs/plugin-vue2": "^2.3.1",
    "@vitest/coverage-c8": "^0.33.0",
    "@vue/eslint-config-prettier": "^8.0.0",
    "@vue/eslint-config-typescript": "^12.0.0",
    "@vue/runtime-dom": "^3.3.8",
    "@vue/test-utils": "^1.3.6",
    "conventional-changelog-eslint": "^4.0.0",
    "eslint": "^8.52.0",
    "eslint-config-prettier": "^8.10.0",
    "eslint": "^8.54.0",
    "eslint-config-prettier": "^9.0.0",
    "eslint-import-resolver-node": "^0.3.9",
    "eslint-plugin-eslint-comments": "^3.2.0",
    "eslint-plugin-functional": "^5.0.8",
    "eslint-plugin-functional": "^6.0.0",
    "eslint-plugin-import": "^2.29.0",
    "eslint-plugin-prettier": "^4.2.1",
    "eslint-plugin-vue": "^9.18.0",
    "eslint-plugin-prettier": "^5.0.1",
    "eslint-plugin-vue": "^9.18.1",
    "jsdom": "^22.1.0",
    "jsdom-global": "^3.0.2",
    "lint-staged": "^13.3.0",
    "prettier": "^2.8.8",
    "lint-staged": "^15.1.0",
    "prettier": "^3.1.0",
    "semantic-release": "^21.1.2",
    "typescript": "^5.2.2",
    "unplugin-vue-components": "^0.25.2",
    "vite": "^4.5.0",
    "vite": "^5.0.0",
    "vite-aliases": "^0.11.3",
    "vite-plugin-node-polyfills": "^0.9.0",
    "vite-plugin-rewrite-all": "^1.0.1",
    "vite-plugin-windicss": "^1.9.1",
    "vitest": "^0.34.6",
    "vue-template-compiler": "^2.7.15"
  },
  "packageManager": "yarn@4.0.0"
  "packageManager": "yarn@4.0.2"
}
+4 −2
Original line number Diff line number Diff line
@@ -160,7 +160,8 @@ a[target="_blank"]:after {
  font-weight: normal;
  color: unset;
  font-family: "bootstrap-icons";
  src: url("bootstrap-icons.woff2?856008caa5eb66df68595e734e59580d")
  src:
    url("bootstrap-icons.woff2?856008caa5eb66df68595e734e59580d")
      format("woff2"),
    url("bootstrap-icons.woff?856008caa5eb66df68595e734e59580d") format("woff");
}
@@ -173,7 +174,8 @@ a[target="_blank"]:after {
  font-weight: normal;
  color: unset;
  font-family: "bootstrap-icons";
  src: url("bootstrap-icons.woff2?856008caa5eb66df68595e734e59580d")
  src:
    url("bootstrap-icons.woff2?856008caa5eb66df68595e734e59580d")
      format("woff2"),
    url("bootstrap-icons.woff?856008caa5eb66df68595e734e59580d") format("woff");
}
+3 −3
Original line number Diff line number Diff line
@@ -77,19 +77,19 @@ export default defineComponent({
            return this.$t("banner.maintenance.type.disturbance").toString();
          case "Teilstörung":
            return this.$t(
              "banner.maintenance.type.partialDisturbance"
              "banner.maintenance.type.partialDisturbance",
            ).toString();
          case "Unterbrechung":
            return this.$t("banner.maintenance.type.interruption").toString();
          case "eingeschränkt betriebsfähig":
            return this.$t(
              "banner.maintenance.type.limitedOperation"
              "banner.maintenance.type.limitedOperation",
            ).toString();
          case "Wartung":
            return this.$t("banner.maintenance.type.maintenance").toString();
          case "Teilwartung":
            return this.$t(
              "banner.maintenance.type.partialMaintenance"
              "banner.maintenance.type.partialMaintenance",
            ).toString();
          default:
            return this.$t("banner.maintenance.type.maintenance").toString();
+4 −4
Original line number Diff line number Diff line
@@ -87,9 +87,9 @@ export default defineComponent({
      ) {
        title = title.replace(
          `${this.$t(
            "resourceTypes." + this.resource.type.specificType + ".displayName"
            "resourceTypes." + this.resource.type.specificType + ".displayName",
          )}: `,
          ""
          "",
        );
      }
      this.setDocumentTitle(title);
@@ -126,7 +126,7 @@ export default defineComponent({
          path.trim() !== "" &&
          path.trim() !== "p" &&
          path.trim() !== "r" &&
          path.trim() !== "-"
          path.trim() !== "-",
      );
    },

@@ -190,7 +190,7 @@ export default defineComponent({
        if (this.resource.type?.specificType) {
          // e.g. "RWTH-RDS-S3: My Resource Name"
          return `${this.$t(
            "resourceTypes." + this.resource.type.specificType + ".displayName"
            "resourceTypes." + this.resource.type.specificType + ".displayName",
          )}: ${this.resource.displayName}`;
        }
        return this.resource.displayName;
+5 −5
Original line number Diff line number Diff line
@@ -158,7 +158,7 @@ export default defineComponent({
                    ? `${this.$t(
                        "resourceTypes." +
                          resource.type.specificType +
                          ".displayName"
                          ".displayName",
                      )}: `
                    : "") + resource.displayName,
                href: {
@@ -176,7 +176,7 @@ export default defineComponent({
                      ? `${this.$t(
                          "resourceTypes." +
                            resource.type.specificType +
                            ".displayName"
                            ".displayName",
                        )}: `
                      : "") + resource.displayName,
                },
@@ -274,17 +274,17 @@ export default defineComponent({
    widthActive(): string {
      if (this.sidebarActive) {
        return getComputedStyle(document.documentElement).getPropertyValue(
          "--sidebar-width-active"
          "--sidebar-width-active",
        );
      } else {
        return getComputedStyle(document.documentElement).getPropertyValue(
          "--sidebar-default-width"
          "--sidebar-default-width",
        );
      }
    },
    widthCollapsed(): string {
      return getComputedStyle(document.documentElement).getPropertyValue(
        "--sidebar-width-collapsed"
        "--sidebar-width-collapsed",
      );
    },
  },
+1 −1
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ export default defineComponent({
      ) {
        this.tokenExpiredInterval = this.setInterval(
          this.notifyTokenExpired,
          this.mainStore.getCurrentTokenExpirationDuration()
          this.mainStore.getCurrentTokenExpirationDuration(),
        );
      }
    },
+2 −2
Original line number Diff line number Diff line
@@ -63,12 +63,12 @@ export default defineComponent({
            return h("template", { slot: place }, [
              h(value.el, { class: value.class }, value.value),
            ]);
          }
          },
        );
        toastBody = h(
          "i18n",
          { props: { path: options.path, tag: options.tag } },
          childNodes
          childNodes,
        );
      }
      // Build the toast body from a string
+3 −3
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ import * as jose from "jose";
import { ref } from "vue";

const secret = jose.base64url.decode(
  "zH4NRP1HMALxxCFnRZABFA7GOJtzU_gIj02alfL1lvI"
  "zH4NRP1HMALxxCFnRZABFA7GOJtzU_gIj02alfL1lvI",
);

export const getTestMainState: () => Promise<MainState> = async () => {
@@ -19,7 +19,7 @@ export const getTestMainState: () => Promise<MainState> = async () => {
            .setIssuer("coscine")
            .setAudience("coscine")
            .setExpirationTime("2h")
            .encrypt(secret)
            .encrypt(secret),
        ),
      },
      clientcorrelation: {
@@ -33,7 +33,7 @@ export const getTestMainState: () => Promise<MainState> = async () => {
        maintenance: {},
        maintenanceVisibility: useLocalStorage(
          "coscine.banner.maintenanceVisibility",
          ""
          "",
        ),
        dateString: useLocalStorage("coscine.banner.dateString", ""),
      },
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ export const getTestResource: () => Promise<VisitedResourceObject> =
    const ap = await parseRDFDefinition(
      baseApplicationProfile,
      baseApplicationProfileFormat,
      apUrl
      apUrl,
    );
    const resourceObject: VisitedResourceObject = {
      applicationProfile: { uri: apUrl },
+3 −3
Original line number Diff line number Diff line
@@ -28,17 +28,17 @@ const configuration = new MapperConfiguration((cfg) => {
    disciplines: (opt) =>
      opt.mapFromUsing(
        (e) => e.disciplines,
        DisciplineDto2DisciplineForProjectManipulationDto
        DisciplineDto2DisciplineForProjectManipulationDto,
      ),
    visibility: (opt) =>
      opt.mapFromUsing(
        (e) => e.visibility,
        VisibilityDto2VisibilityForProjectManipulationDto
        VisibilityDto2VisibilityForProjectManipulationDto,
      ),
    organizations: (opt) =>
      opt.mapFromUsing(
        (e) => e.organizations,
        OrganizationDto2OrganizationForProjectManipulationDto
        OrganizationDto2OrganizationForProjectManipulationDto,
      ),
  });
  // Other maps
+20 −20
Original line number Diff line number Diff line
@@ -76,22 +76,22 @@ const configuration = new MapperConfiguration((cfg) => {
        .preCondition((e) => e.license?.id !== undefined)
        .mapFromUsing(
          (e) => e.license,
          LicenseDto2LicenseForResourceManipulationDto
          LicenseDto2LicenseForResourceManipulationDto,
        ),
    visibility: (opt) =>
      opt.mapFromUsing(
        (e) => e.visibility,
        VisibilityDto2VisibilityForResourceManipulationDto
        VisibilityDto2VisibilityForResourceManipulationDto,
      ),
    disciplines: (opt) =>
      opt.mapFromUsing(
        (e) => e.disciplines,
        DisciplineDto2DisciplineForResourceManipulationDto
        DisciplineDto2DisciplineForResourceManipulationDto,
      ),
    resourceTypeOptions: (opt) =>
      opt.mapFromUsing(
        (e) => e.type?.options,
        ResourceTypeOptionsDto2ResourceTypeOptionsForUpdateDto
        ResourceTypeOptionsDto2ResourceTypeOptionsForUpdateDto,
      ),
  });

@@ -102,28 +102,28 @@ const configuration = new MapperConfiguration((cfg) => {
      opt
        .mapFromUsing(
          (e) => e.gitLab,
          GitLabOptionsDto2GitlabResourceTypeOptionsForUpdateDto
          GitLabOptionsDto2GitlabResourceTypeOptionsForUpdateDto,
        )
        .condition((con) => con.gitLab !== undefined),
    rdsResourceTypeOptions: (opt) =>
      opt
        .mapFromUsing(
          (e) => e.rds,
          RdsOptionsDto2RdsResourceTypeOptionsForManipulationDto
          RdsOptionsDto2RdsResourceTypeOptionsForManipulationDto,
        )
        .condition((con) => con.rds !== undefined),
    rdsS3ResourceTypeOptions: (opt) =>
      opt
        .mapFromUsing(
          (e) => e.rdsS3,
          RdsS3OptionsDto2RdsS3ResourceTypeOptionsForManipulationDto
          RdsS3OptionsDto2RdsS3ResourceTypeOptionsForManipulationDto,
        )
        .condition((con) => con.rdsS3 !== undefined),
    rdsS3WormResourceTypeOptions: (opt) =>
      opt
        .mapFromUsing(
          (e) => e.rdsS3Worm,
          RdsS3WormOptionsDto2RdsS3WormResourceTypeOptionsForManipulationDto
          RdsS3WormOptionsDto2RdsS3WormResourceTypeOptionsForManipulationDto,
        )
        .condition((con) => con.rdsS3Worm !== undefined),
  });
@@ -131,50 +131,50 @@ const configuration = new MapperConfiguration((cfg) => {
    linkedResourceTypeOptions: (opt) =>
      opt
        .preCondition(
          (rti) => rti.generalType === CoscineResourceTypes.LinkedData.General
          (rti) => rti.generalType === CoscineResourceTypes.LinkedData.General,
        )
        .mapFrom((rti) =>
          rti.generalType === CoscineResourceTypes.LinkedData.General
            ? {}
            : undefined
            : undefined,
        ),
    gitlabResourceTypeOptions: (opt) =>
      opt
        .preCondition(
          (rti) => rti.generalType === CoscineResourceTypes.Gitlab.General
          (rti) => rti.generalType === CoscineResourceTypes.Gitlab.General,
        )
        .mapFrom((rti) =>
          rti.generalType === CoscineResourceTypes.Gitlab.General
            ? ({} as GitlabResourceTypeOptionsForCreationDto)
            : undefined
            : undefined,
        ),
    rdsResourceTypeOptions: (opt) =>
      opt
        .preCondition(
          (rti) => rti.generalType === CoscineResourceTypes.Rds.General
          (rti) => rti.generalType === CoscineResourceTypes.Rds.General,
        )
        .mapFrom((rti) =>
          rti.generalType === CoscineResourceTypes.Rds.General ? {} : undefined
          rti.generalType === CoscineResourceTypes.Rds.General ? {} : undefined,
        ),
    rdsS3ResourceTypeOptions: (opt) =>
      opt
        .preCondition(
          (rti) => rti.generalType === CoscineResourceTypes.RdsS3.General
          (rti) => rti.generalType === CoscineResourceTypes.RdsS3.General,
        )
        .mapFrom((rti) =>
          rti.generalType === CoscineResourceTypes.RdsS3.General
            ? {}
            : undefined
            : undefined,
        ),
    rdsS3WormResourceTypeOptions: (opt) =>
      opt
        .preCondition(
          (rti) => rti.generalType === CoscineResourceTypes.RdsS3Worm.General
          (rti) => rti.generalType === CoscineResourceTypes.RdsS3Worm.General,
        )
        .mapFrom((rti) =>
          rti.generalType === CoscineResourceTypes.RdsS3Worm.General
            ? {}
            : undefined
            : undefined,
        ),
  });
  cfg.createAutoMap(GitLabOptionsDto2GitlabResourceTypeOptionsForUpdateDto, {});
@@ -187,14 +187,14 @@ const configuration = new MapperConfiguration((cfg) => {
    {
      quota: (opt) =>
        opt.mapFromUsing((e) => e.size, QuotaDto2QuotaForManipulationDto),
    }
    },
  );
  cfg.createAutoMap(
    RdsS3WormOptionsDto2RdsS3WormResourceTypeOptionsForManipulationDto,
    {
      quota: (opt) =>
        opt.mapFromUsing((e) => e.size, QuotaDto2QuotaForManipulationDto),
    }
    },
  );

  // Other maps
+4 −4
Original line number Diff line number Diff line
@@ -41,20 +41,20 @@ const configuration = new MapperConfiguration((cfg) => {
    disciplines: (opt) =>
      opt.mapFromUsing(
        (dto) => dto.disciplines,
        DisciplineDto2DisciplineForUserManipulationDto
        DisciplineDto2DisciplineForUserManipulationDto,
      ),
    language: (opt) =>
      opt.mapFromUsing(
        (dto) => dto.language,
        LanguageDto2LanguageForUserManipulationDto
        LanguageDto2LanguageForUserManipulationDto,
      ),
    institute: (opt) =>
      opt.mapFrom((dto) =>
        dto.institutes?.length ? dto.institutes[0].displayName : ""
        dto.institutes?.length ? dto.institutes[0].displayName : "",
      ),
    organization: (opt) =>
      opt.mapFrom((dto) =>
        dto.organizations?.length ? dto.organizations[0].displayName : null
        dto.organizations?.length ? dto.organizations[0].displayName : null,
      ),
  });
  cfg.createAutoMap(TitleDto2TitleForUserManipulationDto, {});
+5 −5
Original line number Diff line number Diff line
@@ -215,14 +215,14 @@ export default defineComponent({
      return projectQuotas.map((entry) => {
        // Find corresponding entry
        const resourceType = this.resourceTypes?.find(
          (q) => q.specificType === entry.resourceType?.specificType
          (q) => q.specificType === entry.resourceType?.specificType,
        );

        // Populate the extended project quota object
        const extended = {
          ...entry,
          iDisplayName: this.$t(
            `resourceTypes.${entry.resourceType?.specificType}.displayName`
            `resourceTypes.${entry.resourceType?.specificType}.displayName`,
          ).toString(),
          isEnabled: resourceType?.isEnabled,
          isQuotaAvailable: resourceType?.isQuotaAvailable,
@@ -323,7 +323,7 @@ export default defineComponent({
  methods: {
    async saveNewQuota(
      project: ProjectDto | null | undefined,
      resourceQuota: ExtendedProjectQuotaDto
      resourceQuota: ExtendedProjectQuotaDto,
    ) {
      if (
        project &&
@@ -340,7 +340,7 @@ export default defineComponent({
          const success = await this.adminStore.updateProjectQuota(
            project.id,
            resourceQuota.resourceType.id,
            quota
            quota,
          );
          if (success) {
            // On Success
@@ -395,7 +395,7 @@ export default defineComponent({
    },
    formatUsed(quota: QuotaDto): string {
      return FileUtil.formatBytes(
        FileUtil.convertCapacityUnits(quota, QuotaUnit.Byte)
        FileUtil.convertCapacityUnits(quota, QuotaUnit.Byte),
      );
    },
  },
+6 −6
Original line number Diff line number Diff line
@@ -69,8 +69,8 @@ describe("Admin", () => {
    // Resource types that are "active" are displayed and their count is equal to the count in the store
    expect(rowsOfEnabledOnlyResTypes.length).toEqual(
      wrapper.vm.$pinia.state.value.resource.resourceTypes.filter(
        (e: { isEnabled: boolean }) => e.isEnabled
      ).length
        (e: { isEnabled: boolean }) => e.isEnabled,
      ).length,
    );

    quotaTable.vm.$data.showOnlyEnabledResources = false;
@@ -80,7 +80,7 @@ describe("Admin", () => {
      .findAll("tr");
    // Resource types both "active" and "hidden" are displayed and their count is equal to the count in the store
    expect(rowsOfEnabledAndHiddenResTypes.length).toBeGreaterThanOrEqual(
      wrapper.vm.$pinia.state.value.resource.resourceTypes.length
      wrapper.vm.$pinia.state.value.resource.resourceTypes.length,
    );

    // Ensure that input fields and buttons are rendered only on entries where isQuotaAvailable === true.
@@ -107,7 +107,7 @@ describe("Admin", () => {
        // If a button is present, it should be disabled when the input is empty
        if (isButtonPresent) {
          expect(
            (buttons.at(0)?.element as HTMLButtonElement).disabled
            (buttons.at(0)?.element as HTMLButtonElement).disabled,
          ).toBeTruthy();
        }

@@ -138,13 +138,13 @@ describe("Admin", () => {

          // Check that only one input field has the value "5"
          const inputWithValueFive = inputs.filter(
            (input) => (input.element as HTMLInputElement).value === "5"
            (input) => (input.element as HTMLInputElement).value === "5",
          );
          expect(inputWithValueFive.length).toBe(1);

          // Check that only one button is enabled
          const enabledButtons = buttons.filter(
            (button) => !(button.element as HTMLButtonElement).disabled
            (button) => !(button.element as HTMLButtonElement).disabled,
          );
          expect(enabledButtons.length).toBe(1);
        }
+4 −4
Original line number Diff line number Diff line
@@ -52,10 +52,10 @@ export const useAdminStore = defineStore({
      try {
        const apiProjectResponse = await ProjectApi.getProject(
          projectString,
          false
          false,
        );
        const projectQuotas = await wrapListRequest((pageNumber: number) =>
          ProjectQuotaApi.getProjectQuotas(projectString, pageNumber, 150)
          ProjectQuotaApi.getProjectQuotas(projectString, pageNumber, 150),
        );
        this.project = apiProjectResponse.data.data;
        this.projectQuotas = projectQuotas;
@@ -67,7 +67,7 @@ export const useAdminStore = defineStore({
    async updateProjectQuota(
      projectId: string,
      resourceTypeId: string,
      quota: QuotaDto
      quota: QuotaDto,
    ): Promise<boolean> {
      const notificationStore = useNotificationStore();
      try {
@@ -78,7 +78,7 @@ export const useAdminStore = defineStore({
        await ProjectQuotaApi.updateProjectQuota(
          projectId,
          resourceTypeId,
          projectQuotaForUpdateDto
          projectQuotaForUpdateDto,
        );
        return true;
      } catch (error) {
+2 −2
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ export default defineComponent({
          ? 1
          : b.displayName > a.displayName
            ? -1
          : 0
            : 0,
      );
      return options;
    },
+6 −6
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ describe("ToS.vue", () => {

    // initial state, Confirm Button is disabled
    expect(wrapper.get("#confirmBtn").attributes()["disabled"]).toBe(
      "disabled"
      "disabled",
    );

    // check TosAccepted and PpAccepted
@@ -50,7 +50,7 @@ describe("ToS.vue", () => {

    // Confirm button should be active
    expect(wrapper.get("#confirmBtn").attributes()["disabled"]).not.toBe(
      "disabled"
      "disabled",
    );
  });

@@ -70,7 +70,7 @@ describe("ToS.vue", () => {

    // initial state, Confirm Button is disabled
    expect(wrapper.get("#confirmBtn").attributes()["disabled"]).toBe(
      "disabled"
      "disabled",
    );

    // check TosAccepted
@@ -79,7 +79,7 @@ describe("ToS.vue", () => {

    // Confirm button should be disabled, since PP not accepted
    expect(wrapper.get("#confirmBtn").attributes()["disabled"]).toBe(
      "disabled"
      "disabled",
    );
  });

@@ -99,7 +99,7 @@ describe("ToS.vue", () => {

    // initial state, Confirm Button is disabled
    expect(wrapper.get("#confirmBtn").attributes()["disabled"]).toBe(
      "disabled"
      "disabled",
    );

    // check PpAccepted
@@ -108,7 +108,7 @@ describe("ToS.vue", () => {

    // Confirm button should be disabled, since PP not accepted
    expect(wrapper.get("#confirmBtn").attributes()["disabled"]).toBe(
      "disabled"
      "disabled",
    );
  });
});
+3 −3
Original line number Diff line number Diff line
@@ -24,11 +24,11 @@ describe("Login Store", () => {
    /* Fill the local storage */
    localStorage.setItem(
      "coscine.clientcorrelation.id",
      "f7aef8bc-77f4-4679-9f5d-5724fbdf4513"
      "f7aef8bc-77f4-4679-9f5d-5724fbdf4513",
    );
    localStorage.setItem(
      "coscine.authorization.bearer",
      "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
      "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    );
    localStorage.setItem("coscine.locale", "en");
    localStorage.setItem("coscine.banner.maintenanceVisibility", "");
@@ -44,7 +44,7 @@ describe("Login Store", () => {
    expect(localStorage.getItem("coscine.authorization.bearer")).toBeNull();
    expect(sessionStorage.length).toBe(0);
    expect(window.location.href).toBe(
      "/coscine/api/Coscine.Api.STS/account/logout"
      "/coscine/api/Coscine.Api.STS/account/logout",
    );
  });
});
+1 −1
Original line number Diff line number Diff line
@@ -120,7 +120,7 @@ export const useLoginStore = defineStore({
            `https://orcid.org/userStatus.json${
              logUserOut ? "?logUserOut=true" : ""
            }`,
            { withCredentials: true }
            { withCredentials: true },
          )
          .then((result) => {
            return result.data["loggedIn"] as boolean;
+1 −1
Original line number Diff line number Diff line
@@ -231,7 +231,7 @@ export default defineComponent({
          const success = await this.pidStore.contactPidOwner(
            prefix,
            id,
            this.form
            this.form,
          );

          if (success) {
+2 −2
Original line number Diff line number Diff line
@@ -70,14 +70,14 @@ export const usePidStore = defineStore({
    async contactPidOwner(
      prefix: string,
      id: string,
      pidRequestDto: PidRequestDto
      pidRequestDto: PidRequestDto,
    ): Promise<boolean | null> {
      const notificationStore = useNotificationStore();
      try {
        const apiResponse = await PidApi.sendRequestToOwner(
          prefix,
          id,
          pidRequestDto
          pidRequestDto,
        );
        // Note: Beware that only 204 (No Content) is considered a success in this implementation.
        return apiResponse.status === StatusCodes.NO_CONTENT ? true : false;
+1 −1
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ export default defineComponent({
      }
      // Load list of Available Resource Types for the project if not present
      await this.resourceStore.retrieveAvailableResourceTypesInformationForProject(
        this.project
        this.project,
      );
    },
  },
+4 −4
Original line number Diff line number Diff line
@@ -49,10 +49,10 @@ describe("ConfigurationMetadata.vue", () => {

    // Check initial state of buttons
    expect(
      (wrapper.get("#DeleteProjectBtn").element as HTMLButtonElement).disabled
      (wrapper.get("#DeleteProjectBtn").element as HTMLButtonElement).disabled,
    ).toBeFalsy(); // Delete button - active
    expect(
      (wrapper.get("#SubmitProjectBtn").element as HTMLButtonElement).disabled
      (wrapper.get("#SubmitProjectBtn").element as HTMLButtonElement).disabled,
    ).toBeTruthy(); // Submit button - disabled

    await wrapper.vm.$nextTick();
@@ -67,10 +67,10 @@ describe("ConfigurationMetadata.vue", () => {

    // Buttons should be enabled
    expect(
      (wrapper.get("#DeleteProjectBtn").element as HTMLButtonElement).disabled
      (wrapper.get("#DeleteProjectBtn").element as HTMLButtonElement).disabled,
    ).toBeFalsy(); // Delete button - active
    expect(
      (wrapper.get("#SubmitProjectBtn").element as HTMLButtonElement).disabled
      (wrapper.get("#SubmitProjectBtn").element as HTMLButtonElement).disabled,
    ).toBeFalsy(); // Submit button - active
  });
});
+2 −2
Original line number Diff line number Diff line
@@ -194,7 +194,7 @@ export default defineComponent({
        // Fill the form. Note that regular assignment breaks reactivity!
        const mapped = projectMapper.map(
          ProjectDto2ProjectForUpdateDto,
          this.project
          this.project,
        );
        Object.assign(this.projectForUpdate, mapped); // Use this to only copy the properties
        this.isLoading = false;
@@ -249,7 +249,7 @@ export default defineComponent({

      const success = await this.projectStore.updateProject(
        this.project.id,
        this.projectForUpdate
        this.projectForUpdate,
      );

      this.isWaitingForResponse = false;
+2 −2
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ export default defineComponent({
      const memberships = this.userStore.user?.organizations;
      if (memberships) {
        return memberships.some(
          (membership) => membership.uri === "https://ror.org/04xfq0f34"
          (membership) => membership.uri === "https://ror.org/04xfq0f34",
        );
      }
      return false;
@@ -175,7 +175,7 @@ export default defineComponent({
      // Trigger API call to create a new project
      this.isWaitingForResponse = true;
      const createdProject = await this.projectStore.storeProject(
        this.projectForCreation
        this.projectForCreation,
      );
      if (createdProject) {
        // On Success
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ export default defineComponent({
        this.$router.push(to);
      } else {
        console.error(
          `Slug for ${project.displayName} is possibly undefined...`
          `Slug for ${project.displayName} is possibly undefined...`,
        );
      }
    },
+7 −7
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ export default defineComponent({
    memberRole(): RoleDto | null | undefined {
      if (this.roles) {
        return this.roles.find(
          (role) => role.displayName === this.roleStrings.member
          (role) => role.displayName === this.roleStrings.member,
        );
      }
      return null;
@@ -194,7 +194,7 @@ export default defineComponent({
    ownerRole(): RoleDto | null | undefined {
      if (this.roles) {
        return this.roles.find(
          (role) => role.displayName === this.roleStrings.owner
          (role) => role.displayName === this.roleStrings.owner,
        );
      }
      return null;
@@ -202,7 +202,7 @@ export default defineComponent({
    ownerCount(): number {
      if (this.projectRoles && this.ownerRole) {
        return this.projectRoles.filter(
          (projectRole) => projectRole.role?.id === this.ownerRole?.id
          (projectRole) => projectRole.role?.id === this.ownerRole?.id,
        ).length;
      }
      return 0;
@@ -290,7 +290,7 @@ export default defineComponent({
      projectId: string,
      value: ProjectInvitationForProjectManipulationDto,
      toastText: string,
      errorText: string
      errorText: string,
    ) {
      try {
        await this.projectStore.storeInvitation(projectId, value);
@@ -327,7 +327,7 @@ export default defineComponent({
        this.project?.id ?? "",
        invitation,
        text,
        errorText
        errorText,
      );
    },

@@ -344,7 +344,7 @@ export default defineComponent({
          project: this.projectName,
        }).toString();
        const worked = await this.projectStore.deleteInvitation(
          this.selectedInvitation
          this.selectedInvitation,
        );
        if (worked) {
          await this.projectStore.retrieveInvitations(this.project);
@@ -405,7 +405,7 @@ export default defineComponent({
          projectRole.id,
          {
            roleId: projectRole.role?.id,
          } as ProjectRoleForProjectManipulationDto
          } as ProjectRoleForProjectManipulationDto,
        );
        await this.getProjectRoles();
        this.notificationStore.postNotification({
+3 −3
Original line number Diff line number Diff line
@@ -202,7 +202,7 @@ export default defineComponent({
        this.$router.push(to);
      } else {
        console.error(
          `Slug for ${project.displayName} is possibly undefined...`
          `Slug for ${project.displayName} is possibly undefined...`,
        );
      }
    },
@@ -213,7 +213,7 @@ export default defineComponent({
        this.$router.push(to);
      } else {
        console.error(
          `ID for ${resource.displayName} is possibly undefined...`
          `ID for ${resource.displayName} is possibly undefined...`,
        );
      }
    },
@@ -224,7 +224,7 @@ export default defineComponent({
        this.$router.push(to);
      } else {
        console.error(
          `ID for ${resource.displayName} is possibly undefined...`
          `ID for ${resource.displayName} is possibly undefined...`,
        );
      }
    },
+16 −16
Original line number Diff line number Diff line
@@ -332,7 +332,7 @@ export default defineComponent({
    },
    resources(): ResourceDto[] | null | undefined {
      return this.project?.resources?.filter(
        (r) => r.type?.id === this.selectedResourceTypeId
        (r) => r.type?.id === this.selectedResourceTypeId,
      );
    },
    resourceTypesQuotas(): ProjectQuotaDto[] | null {
@@ -347,7 +347,7 @@ export default defineComponent({
          if (r.isQuotaAvailable && r.isEnabled) {
            const labeledResourceType: ExtendedResourceTypeInformationDto = {
              iDisplayName: this.$t(
                "resourceTypes." + r.specificType + ".displayName"
                "resourceTypes." + r.specificType + ".displayName",
              ).toString(),
            };
            Object.assign(labeledResourceType, r);
@@ -367,7 +367,7 @@ export default defineComponent({
      | ExtendedResourceTypeInformationDto
      | undefined {
      return this.resourceTypesInformation?.find(
        (rt) => rt.id === this.selectedResourceTypeId
        (rt) => rt.id === this.selectedResourceTypeId,
      );
    },
  },
@@ -427,7 +427,7 @@ export default defineComponent({
        const success = await this.projectStore.updateResourceTypeProjectQuota(
          this.project,
          this.selectedResourceTypeInformation,
          projectQuotaForUpdate
          projectQuotaForUpdate,
        );
        if (success) {
          // On Success
@@ -435,7 +435,7 @@ export default defineComponent({
          await this.projectStore.retrieveResourceTypeQuotas(this.project);
          this.notificationStore.postNotification({
            title: this.$t(
              "page.quota.resourceTypeQuotaChangedSuccessTitle"
              "page.quota.resourceTypeQuotaChangedSuccessTitle",
            ).toString(),
            body: this.$t("page.quota.resourceTypeQuotaChangedSuccessBody", {
              ProjectName: this.project.displayName,
@@ -446,10 +446,10 @@ export default defineComponent({
          // On Failure
          this.notificationStore.postNotification({
            title: this.$t(
              "page.quota.resourceTypeQuotaChangedFailureTitle"
              "page.quota.resourceTypeQuotaChangedFailureTitle",
            ).toString(),
            body: this.$t(
              "page.quota.resourceTypeQuotaChangedFailureBody"
              "page.quota.resourceTypeQuotaChangedFailureBody",
            ).toString(),
            variant: "warning",
          });
@@ -464,7 +464,7 @@ export default defineComponent({
     * @returns {Promise<void>} - A promise that resolves once the quota is updated.
     */
    async updateResourceQuota(
      resourceQuotaDto: ResourceQuotaDto
      resourceQuotaDto: ResourceQuotaDto,
    ): Promise<void> {
      if (
        this.project?.id &&
@@ -482,7 +482,7 @@ export default defineComponent({
        const success = await this.projectStore.updateResourceQuota(
          this.project.id,
          resourceQuotaDto?.resource.id,
          desiredReservedResourceQuota
          desiredReservedResourceQuota,
        );

        if (success) {
@@ -491,11 +491,11 @@ export default defineComponent({
          await this.projectStore.retrieveResourceTypeQuotas(this.project);
          this.notificationStore.postNotification({
            title: this.$t(
              "page.quota.resourceQuotaChangedSuccessTitle"
              "page.quota.resourceQuotaChangedSuccessTitle",
            ).toString(),
            body: this.$t("page.quota.resourceQuotaChangedSuccessBody", {
              ResourceName: this.resources?.find(
                (r) => r.id === resourceQuotaDto.resource?.id
                (r) => r.id === resourceQuotaDto.resource?.id,
              )?.displayName,
              AmountInGB: this.toGiB(resourceQuotaDto.reserved),
            }).toString(),
@@ -504,10 +504,10 @@ export default defineComponent({
          // On Failure
          this.notificationStore.postNotification({
            title: this.$t(
              "page.quota.resourceQuotaChangedFailureTitle"
              "page.quota.resourceQuotaChangedFailureTitle",
            ).toString(),
            body: this.$t(
              "page.quota.resourceQuotaChangedFailureBody"
              "page.quota.resourceQuotaChangedFailureBody",
            ).toString(),
            variant: "warning",
          });
@@ -549,7 +549,7 @@ export default defineComponent({
     */
    formatUsed(quota: QuotaDto): string {
      return FileUtil.formatBytes(
        FileUtil.convertCapacityUnits(quota, QuotaUnit.Byte)
        FileUtil.convertCapacityUnits(quota, QuotaUnit.Byte),
      );
    },

@@ -601,8 +601,8 @@ export default defineComponent({
    cloneSelectedQuotas() {
      this.selectedQuotas = _.cloneDeep(
        this.resourceTypesQuotas?.find(
          (rtq) => rtq.resourceType?.id === this.selectedResourceTypeId
        )
          (rtq) => rtq.resourceType?.id === this.selectedResourceTypeId,
        ),
      );
    },

+8 −8
Original line number Diff line number Diff line
@@ -244,7 +244,7 @@
        <b-link
          :href="
            $t(
              'form.project.projectMetadataVisibilityLabelPopoverUrl'
              'form.project.projectMetadataVisibilityLabelPopoverUrl',
            ).toString()
          "
          target="_blank"
@@ -348,7 +348,7 @@ export default defineComponent({
  },
  emits: {
    validation: (
      _: BaseValidation<ProjectForCreationDto | ProjectForUpdateDto>
      _: BaseValidation<ProjectForCreationDto | ProjectForUpdateDto>,
    ) => true,
  },

@@ -522,20 +522,20 @@ export default defineComponent({
        project.disciplines?.map((discipline) =>
          projectMapper.map(
            DisciplineDto2DisciplineForProjectManipulationDto,
            discipline
          )
            discipline,
          ),
        ) ?? [];
      this.projectForManipulation.organizations =
        project.organizations?.map((organization) =>
          projectMapper.map(
            OrganizationDto2OrganizationForProjectManipulationDto,
            organization
          )
            organization,
          ),
        ) ?? [];
      this.projectForManipulation.keywords = project.keywords;
      this.projectForManipulation.visibility = projectMapper.map(
        VisibilityDto2VisibilityForProjectManipulationDto,
        project.visibility
        project.visibility,
      );
      this.projectForManipulation.grantId = project.grantId;

@@ -564,7 +564,7 @@ export default defineComponent({
    setDefaultVisibility() {
      if (this.visibilities) {
        const visibility = this.visibilities.find(
          (entry) => entry.displayName === "Project Members"
          (entry) => entry.displayName === "Project Members",
        );

        if (visibility?.id) {
+1 −1
Original line number Diff line number Diff line
@@ -122,7 +122,7 @@ export default defineComponent({
  },
  emits: {
    validation: (
      _: BaseValidation<ProjectForCreationDto | ProjectForUpdateDto>
      _: BaseValidation<ProjectForCreationDto | ProjectForUpdateDto>,
    ) => true,
  },

+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ export default defineComponent({
    copyPid() {
      if (this.projectForm) {
        navigator.clipboard.writeText(
          "http://hdl.handle.net/" + this.projectForm.pid
          "http://hdl.handle.net/" + this.projectForm.pid,
        );
        this.$root.$emit("bv::show::tooltip", "copyPidTooltip");
      }
+3 −3
Original line number Diff line number Diff line
@@ -165,7 +165,7 @@ export default defineComponent({
      return this.projectRoles?.find(
        (r) =>
          r.user?.id === this.currentUser?.id &&
          r.project?.id === this.project?.id
          r.project?.id === this.project?.id,
      );
    },
    isOwner(): boolean | undefined {
@@ -177,7 +177,7 @@ export default defineComponent({
        return currentRoles.filter(
          (projectRole) =>
            projectRole.role &&
            projectRole.role.displayName === this.ownerString
            projectRole.role.displayName === this.ownerString,
        ).length;
      }
      return undefined;
@@ -189,7 +189,7 @@ export default defineComponent({
      if (this.project) {
        this.projectStore.deleteProjectAssociation(
          this.project,
          this.currentUserProjectRole
          this.currentUserProjectRole,
        );
      }
    },
+3 −3
Original line number Diff line number Diff line
@@ -284,7 +284,7 @@ export default defineComponent({
      }
      this.queryTimer = window.setTimeout(
        () => this.fetchUserOptions(search, loading),
        1000
        1000,
      );
    },
    async fetchUserOptions(search: string, loading: (value: boolean) => void) {
+3 −3
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ export default defineComponent({
      if (this.projects && this.project) {
        const currentProject = this.project;
        return this.projects.filter(
          (project) => project.id !== currentProject.id
          (project) => project.id !== currentProject.id,
        );
      }
      return null;
@@ -140,8 +140,8 @@ export default defineComponent({
        (projectRole) =>
          !this.projectRoles?.some(
            (currentProjectRole) =>
              projectRole.user?.id === currentProjectRole.user?.id
          )
              projectRole.user?.id === currentProjectRole.user?.id,
          ),
      );
      this.additionalMembers.forEach((additionalMember) => {
        if (this.memberRole) {
+2 −2
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ export default defineComponent({
  },
  methods: {
    getRoleNameFromId(
      roleId: string | null | undefined
      roleId: string | null | undefined,
    ): string | null | undefined {
      if (this.roles && roleId) {
        for (const role of this.roles) {
@@ -110,7 +110,7 @@ export default defineComponent({
        this.candidateForInvitation.projectId,
        this.candidateForInvitation,
        text,
        errorText
        errorText,
      );
      this.$bvModal.hide("inviteUserModal");
    },
+38 −38
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ export const useProjectStore = defineStore({
          currentParentProjectId !== "00000000-0000-0000-0000-000000000000"
        ) {
          const parentProject = this.allProjects.find(
            (project) => project.id === currentParentProjectId
            (project) => project.id === currentParentProjectId,
          );
          if (parentProject) {
            if (parentProjects.includes(parentProject)) {
@@ -181,7 +181,7 @@ export const useProjectStore = defineStore({
      if (currentRoles && currentUser) {
        const userProjectRole = currentRoles.find(
          (projectRole) =>
            projectRole.user && projectRole.user.id === currentUser.id
            projectRole.user && projectRole.user.id === currentUser.id,
        );
        return userProjectRole ? userProjectRole.role : null;
      } else {
@@ -228,7 +228,7 @@ export const useProjectStore = defineStore({
      const notificationStore = useNotificationStore();
      try {
        this.allProjects = await wrapListRequest((pageNumber: number) =>
          ProjectApi.getProjects(false, pageNumber, 150)
          ProjectApi.getProjects(false, pageNumber, 150),
        );
      } catch (error) {
        // Handle other Status Codes
@@ -240,7 +240,7 @@ export const useProjectStore = defineStore({
      const notificationStore = useNotificationStore();
      try {
        this.topLevelProjects = await wrapListRequest((pageNumber: number) =>
          ProjectApi.getProjects(true, pageNumber, 150)
          ProjectApi.getProjects(true, pageNumber, 150),
        );
      } catch (error) {
        // Handle other Status Codes
@@ -265,7 +265,7 @@ export const useProjectStore = defineStore({
      try {
        if (project?.id && project?.slug) {
          const apiResponse = await ProjectInvitationApi.getProjectInvitations(
            project.id
            project.id,
          );
          this.visitedProjects[project.slug].invitations =
            apiResponse.data.data ?? null;
@@ -290,7 +290,7 @@ export const useProjectStore = defineStore({
      project: ProjectDto | null,
      pageNumber?: number,
      pageSize?: number,
      orderBy?: string
      orderBy?: string,
    ): Promise<ResourceDtoPagedResponse> {
      const notificationStore = useNotificationStore();
      try {
@@ -299,7 +299,7 @@ export const useProjectStore = defineStore({
            project.id,
            pageNumber,
            pageSize,
            orderBy
            orderBy,
          );
          return apiResponse.data;
        } else {
@@ -344,7 +344,7 @@ export const useProjectStore = defineStore({
            // Retrieve the next page
            resources = await this.getPagedResourcesForProject(
              project,
              nextPage
              nextPage,
            );
            if (resources.data) {
              // Extend the data with the newly fetched data
@@ -366,14 +366,14 @@ export const useProjectStore = defineStore({
     * @returns {Promise<void>} - A promise that resolves once the resource type quotas are retrieved.
     */
    async retrieveResourceTypeQuotas(
      project: ProjectDto | null
      project: ProjectDto | null,
    ): Promise<void> {
      const notificationStore = useNotificationStore();
      try {
        if (project?.id && project?.slug) {
          const projectId = project.id;
          const projectQuotas = await wrapListRequest((pageNumber: number) =>
            ProjectQuotaApi.getProjectQuotas(projectId, pageNumber)
            ProjectQuotaApi.getProjectQuotas(projectId, pageNumber),
          );
          this.visitedProjects[project.slug].quotas = projectQuotas ?? [];
        } else {
@@ -403,7 +403,7 @@ export const useProjectStore = defineStore({
    async updateResourceTypeProjectQuota(
      project: ProjectDto,
      resourceType: ResourceTypeInformationDto,
      quota: ProjectQuotaForUpdateDto
      quota: ProjectQuotaForUpdateDto,
    ): Promise<boolean> {
      const notificationStore = useNotificationStore();
      try {
@@ -411,12 +411,12 @@ export const useProjectStore = defineStore({
          await ProjectQuotaApi.updateProjectQuota(
            project.id,
            resourceType.id,
            quota
            quota,
          );
          return true;
        } else {
          console.error(
            "Selected project's or the selected resource type's ID is undefined."
            "Selected project's or the selected resource type's ID is undefined.",
          );
          return false;
        }
@@ -437,21 +437,21 @@ export const useProjectStore = defineStore({
    async updateResourceQuota(
      projectId: string,
      resourceId: string,
      desiredReservedQuota: QuotaForManipulationDto
      desiredReservedQuota: QuotaForManipulationDto,
    ): Promise<boolean> {
      const notificationStore = useNotificationStore();
      try {
        const resource = this.currentProject?.resources?.find(
          (r) => resourceId === r.id
          (r) => resourceId === r.id,
        );
        if (!resource)
          throw new Error(
            `Resource with id: ${resourceId} not found in the current project`
            `Resource with id: ${resourceId} not found in the current project`,
          );

        const resourceForUpdate = resourceMapper.map(
          ResourceDto2ResourceForUpdateDto,
          resource
          resource,
        );

        /**
@@ -491,7 +491,7 @@ export const useProjectStore = defineStore({
        await ProjectResourceApi.updateResourceForProject(
          projectId,
          resourceId,
          resourceForUpdate
          resourceForUpdate,
        );
        return true;
      } catch (error) {
@@ -502,7 +502,7 @@ export const useProjectStore = defineStore({
    },

    async getOrganizationByURL(
      url: string
      url: string,
    ): Promise<OrganizationDto | undefined | null> {
      const notificationStore = useNotificationStore();
      try {
@@ -519,7 +519,7 @@ export const useProjectStore = defineStore({
      const notificationStore = useNotificationStore();
      try {
        const organizationDtos = await wrapListRequest((pageNumber: number) =>
          OrganizationApi.getOrganizations(filter, pageNumber, 150)
          OrganizationApi.getOrganizations(filter, pageNumber, 150),
        );
        this.organizations = organizationDtos;
      } catch (error) {
@@ -545,7 +545,7 @@ export const useProjectStore = defineStore({
        const apiResponse = await LicenseApi.getLicenses(
          undefined,
          undefined,
          "displayname asc"
          "displayname asc",
        );
        this.licenses = apiResponse.data.data ?? null;
      } catch (error) {
@@ -558,7 +558,7 @@ export const useProjectStore = defineStore({
      const notificationStore = useNotificationStore();
      try {
        const disciplineDtos = await wrapListRequest((pageNumber: number) =>
          DisciplineApi.getDisciplines(pageNumber, 150, "displayNameDe asc")
          DisciplineApi.getDisciplines(pageNumber, 150, "displayNameDe asc"),
        );
        this.disciplines = disciplineDtos ?? null;
      } catch (error) {
@@ -595,7 +595,7 @@ export const useProjectStore = defineStore({
          this.refreshProjectInformation();
          removeQueryParameterFromUrl(
            this.router.currentRoute,
            invitationTokenQueryParameter
            invitationTokenQueryParameter,
          );
        }
      } catch (error) {
@@ -603,7 +603,7 @@ export const useProjectStore = defineStore({
        notificationStore.postApiErrorNotification(error as AxiosError);
        removeQueryParameterFromUrl(
          this.router.currentRoute,
          invitationTokenQueryParameter
          invitationTokenQueryParameter,
        );
      }
    },
@@ -628,7 +628,7 @@ export const useProjectStore = defineStore({
    },

    async storeProject(
      project: ProjectForCreationDto
      project: ProjectForCreationDto,
    ): Promise<ProjectDto | null> {
      const notificationStore = useNotificationStore();
      try {
@@ -643,7 +643,7 @@ export const useProjectStore = defineStore({

    async updateProject(
      projectId: string,
      project: ProjectForUpdateDto
      project: ProjectForUpdateDto,
    ): Promise<boolean> {
      const notificationStore = useNotificationStore();
      try {
@@ -730,8 +730,8 @@ export const useProjectStore = defineStore({
            ProjectMemberApi.getMemberships(
              project.id as string,
              pageNumber,
              50
            )
              50,
            ),
          );
          this.visitedProjects[project.slug].roles = projectRoles ?? [];
        } else {
@@ -757,7 +757,7 @@ export const useProjectStore = defineStore({
        if (projectRole.id && projectRole.project?.id) {
          await ProjectMemberApi.deleteMembership(
            projectRole.project.id,
            projectRole.id
            projectRole.id,
          );
          return true;
        } else {
@@ -778,13 +778,13 @@ export const useProjectStore = defineStore({

    async addMembershipToProject(
      projectId: string,
      projectRoleForProjectCreationDto: ProjectRoleForProjectCreationDto
      projectRoleForProjectCreationDto: ProjectRoleForProjectCreationDto,
    ) {
      const notificationStore = useNotificationStore();
      try {
        await ProjectMemberApi.addMembership(
          projectId,
          projectRoleForProjectCreationDto
          projectRoleForProjectCreationDto,
        );
      } catch (error) {
        // Handle other Status Codes
@@ -795,14 +795,14 @@ export const useProjectStore = defineStore({
    async updateMembershipOfProject(
      projectId: string,
      membershipId: string,
      projectRoleForProjectManipulationDto: ProjectRoleForProjectManipulationDto
      projectRoleForProjectManipulationDto: ProjectRoleForProjectManipulationDto,
    ) {
      const notificationStore = useNotificationStore();
      try {
        await ProjectMemberApi.updateMembership(
          projectId,
          membershipId,
          projectRoleForProjectManipulationDto
          projectRoleForProjectManipulationDto,
        );
      } catch (error) {
        // Handle other Status Codes
@@ -816,7 +816,7 @@ export const useProjectStore = defineStore({
        if (projectInvitation.project?.id && projectInvitation.id) {
          await ProjectInvitationApi.deleteProjectInvitation(
            projectInvitation.project.id,
            projectInvitation.id
            projectInvitation.id,
          );
          return true;
        } else {
@@ -836,13 +836,13 @@ export const useProjectStore = defineStore({

    async storeInvitation(
      projectId: string,
      invitation: ProjectInvitationForProjectManipulationDto
      invitation: ProjectInvitationForProjectManipulationDto,
    ) {
      const notificationStore = useNotificationStore();
      try {
        await ProjectInvitationApi.createProjectInvitation(
          projectId,
          invitation
          invitation,
        );
      } catch (error) {
        // Handle other Status Codes
@@ -852,14 +852,14 @@ export const useProjectStore = defineStore({

    async deleteProjectAssociation(
      project: ProjectDto,
      projectRole: ProjectRoleDto | null | undefined
      projectRole: ProjectRoleDto | null | undefined,
    ) {
      const notificationStore = useNotificationStore();
      try {
        if (project?.slug && projectRole?.project?.id && projectRole?.id) {
          await ProjectMemberApi.deleteMembership(
            projectRole.project.id,
            projectRole.id
            projectRole.id,
          );
          this.visitedProjects[project.slug].roles = null;
          this.refreshProjectInformation();
+4 −4
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ export default defineComponent({
    },
    resourceTypeInformation(): ResourceTypeInformationDto | undefined {
      return this.resourceStore.enabledResourceTypes?.find(
        (resourceType) => resourceType.id === this.resource?.type?.id
        (resourceType) => resourceType.id === this.resource?.type?.id,
      );
    },
    moduleIsReady(): boolean {
@@ -86,7 +86,7 @@ export default defineComponent({
        await this.resourceStore.retrieveUnsetResource(
          this.project.id,
          this.resource,
          route
          route,
        );
        if (this.resource) {
          if (!this.resourceStore.currentFullApplicationProfile) {
@@ -117,7 +117,7 @@ export default defineComponent({
            ] as VueI18n.LocaleMessageObject;
            this.$i18n.mergeLocaleMessage(
              "de",
              cloneDeep(resourceTypeDefinition)
              cloneDeep(resourceTypeDefinition),
            );
          }
        }
@@ -134,7 +134,7 @@ export default defineComponent({
            ] as VueI18n.LocaleMessageObject;
            this.$i18n.mergeLocaleMessage(
              "en",
              cloneDeep(resourceTypeDefinition)
              cloneDeep(resourceTypeDefinition),
            );
          }
        }
+5 −5
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
        <b-link
          :href="
            $t(
              'page.createResource.applicationProfile.applicationProfilePopoverUrl'
              'page.createResource.applicationProfile.applicationProfilePopoverUrl',
            ).toString()
          "
          target="_blank"
@@ -43,7 +43,7 @@
          :show-labels="false"
          :placeholder="
            $t(
              'page.createResource.applicationProfile.selectApplicationProfile'
              'page.createResource.applicationProfile.selectApplicationProfile',
            )
          "
          select-label=""
@@ -232,7 +232,7 @@ export default defineComponent({
      // An application profile has been selected. Set selection in dropdown.
      if (this.resourceForCreation.applicationProfile) {
        this.selectedApplicationProfile = this.applicationProfiles.find(
          (ap) => ap.uri === this.resourceForCreation.applicationProfile.uri
          (ap) => ap.uri === this.resourceForCreation.applicationProfile.uri,
        );
      }
    },
@@ -265,7 +265,7 @@ export default defineComponent({
     * @returns {GroupedApplicationProfile[]} An array of GroupedApplicationProfile objects representing the grouped application profiles.
     */
    groupApplicationProfiles(
      applicationProfiles: ApplicationProfileDto[]
      applicationProfiles: ApplicationProfileDto[],
    ): GroupedApplicationProfile[] {
      const groupedProfiles: GroupedApplicationProfile[] = [];

@@ -282,7 +282,7 @@ export default defineComponent({
          const groupName = text.substring(0, indexOfSlash).toUpperCase();

          const groupEntry = groupedProfiles.find(
            (element) => element.uri === groupName
            (element) => element.uri === groupName,
          );

          if (groupEntry && groupEntry.profiles) {
+8 −8
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
          <b-link
            :href="
              $t(
                'page.createResource.configuration.labels.resourceTypePopoverUrl'
                'page.createResource.configuration.labels.resourceTypePopoverUrl',
              ).toString()
            "
            target="_blank"
@@ -98,7 +98,7 @@
        :label="`${$t(
          'resourceTypes.' +
            selectedResourceTypeInformation.specificType +
            '.fullName'
            '.fullName',
        )}:`"
      >
        <p>
@@ -106,7 +106,7 @@
            $t(
              "resourceTypes." +
                selectedResourceTypeInformation.specificType +
                ".description"
                ".description",
            )
          }}
        </p>
@@ -143,7 +143,7 @@
        <b-link
          :href="
            $t(
              'page.createResource.configuration.disclaimerAPHelpUrl'
              'page.createResource.configuration.disclaimerAPHelpUrl',
            ).toString()
          "
          target="_blank"
@@ -309,7 +309,7 @@ export default defineComponent({
        resourceTypes.forEach((r) => {
          const labeledResourceType: ExtendedResourceTypeInformationDto = {
            iDisplayName: this.$t(
              "resourceTypes." + r.specificType + ".displayName"
              "resourceTypes." + r.specificType + ".displayName",
            ).toString(),
          };
          Object.assign(labeledResourceType, r);
@@ -375,7 +375,7 @@ export default defineComponent({
      if (this.resourceTypes) {
        // A resource type has been selected, but the dropdown is empty. Set selection in dropdown.
        const selection = this.resourceTypes.find(
          (r) => r.id === this.resourceForCreation.resourceTypeId
          (r) => r.id === this.resourceForCreation.resourceTypeId,
        );
        if (selection) {
          this.selectedResourceTypeInformation = selection;
@@ -399,7 +399,7 @@ export default defineComponent({
     * @param {ResourceTypeInformationDto | null} resourceTypeInformation - The information about the selected resource type.
     */
    setSelectedResourceTypeInformation(
      resourceTypeInformation: ResourceTypeInformationDto | null
      resourceTypeInformation: ResourceTypeInformationDto | null,
    ) {
      this.resourceForCreation.resourceTypeId =
        resourceTypeInformation?.id ?? "";
@@ -407,7 +407,7 @@ export default defineComponent({
      if (resourceTypeInformation) {
        this.resourceForCreation.resourceTypeOptions = resourceMapper.map(
          ResourceTypeInformationDto2ResourceTypeOptionsForCreationDto,
          resourceTypeInformation
          resourceTypeInformation,
        );
      } else {
        this.resourceForCreation.resourceTypeOptions = {};
Loading