diff --git a/src/components/elements/SidebarMenu.vue b/src/components/elements/SidebarMenu.vue index e29384935687dca5e5d783e12c9a98b1b1eff65f..06d9c1a5097ef42be4cd10e1d4fd003517d3d634 100644 --- a/src/components/elements/SidebarMenu.vue +++ b/src/components/elements/SidebarMenu.vue @@ -51,7 +51,7 @@ import type { Vue.use(VueSidebarMenu); -// TODO: Waiting for role implementation (is owner for showing e.g. settings) +// TODO: Waiting for role implementation (is owner for showing e.g. configuration & metadata) export default defineComponent({ setup() { @@ -208,15 +208,15 @@ export default defineComponent({ icon: "bi bi-gear", child: [ { - title: this.$t("sidebar.projectSettings").toString(), + title: this.$t("sidebar.configurationMetadata").toString(), href: { - name: "project-settings", + name: "project-config-metadata", params: { slug: this.project.slug }, }, icon: "bi bi-pencil", }, { - title: this.$t("sidebar.manageUsers").toString(), + title: this.$t("sidebar.users").toString(), href: { name: "project-members", params: { slug: this.project.slug }, @@ -224,7 +224,7 @@ export default defineComponent({ icon: "bi bi-people", }, { - title: this.$t("sidebar.manageQuota").toString(), + title: this.$t("sidebar.quota").toString(), href: { name: "project-quota", params: { slug: this.project.slug }, diff --git a/src/i18n/de.ts b/src/i18n/de.ts index bd3956eef9c867c8d347ee05d5848428adc0e94c..2ac59f9f8f2d750f171a864d36eec0ac54acce39 100644 --- a/src/i18n/de.ts +++ b/src/i18n/de.ts @@ -39,9 +39,9 @@ export default { archived: "Archiviert", - projectSettings: "Projekteinstellungen", - manageUsers: "Benutzerverwaltung", - manageQuota: "Quota verwalten", + configurationMetadata: "Konfiguration & Metadaten", + users: "Mitglieder", + quota: "Quota", } as VueI18n.LocaleMessageObject, buttons: { @@ -153,9 +153,9 @@ export default { project: { page: "{projectName}", create: "Projekt erstellen", - settings: "Projekt bearbeiten", - quota: "Quota Management", - members: "Benutzerverwaltung", + configMetadata: "Projektkonfiguration & -metadaten", + quota: "Projektquota", + members: "Projektmitglieder", }, resource: { page: "{resourceName}", diff --git a/src/i18n/en.ts b/src/i18n/en.ts index b3411e70967bf78751258b002fe04e4d59858a15..a47eb4eccb87bec0fd09e248d99b6206ea33135e 100644 --- a/src/i18n/en.ts +++ b/src/i18n/en.ts @@ -37,9 +37,9 @@ export default { subProject: "Sub-Project | Sub-Projects", settings: "Settings", - projectSettings: "Project Settings", - manageUsers: "Manage Users", - manageQuota: "Manage Quota", + configurationMetadata: "Configuration & Metadata", + users: "Members", + quota: "Quota", } as VueI18n.LocaleMessageObject, buttons: { @@ -151,9 +151,9 @@ export default { project: { page: "{projectName}", create: "Create Project", - settings: "Project Settings", - quota: "Quota Management", - members: "User Management", + configMetadata: "Project Configuration & Metadata", + quota: "Project Quota", + members: "Project Members", }, resource: { page: "{resourceName}", diff --git a/src/modules/project/i18n/de.ts b/src/modules/project/i18n/de.ts index f8b5b3f79c5d783b53e1d37a0ec9ed6b579ae624..88d752c11d0996c418bebe33663d263c639c0877 100644 --- a/src/modules/project/i18n/de.ts +++ b/src/modules/project/i18n/de.ts @@ -27,7 +27,7 @@ export default { // Members.vue members: { - title: "Benutzerverwaltung", + title: "Projektmitglieder", membersTabTitle: "Projektmitglieder", externalUsersTabTitle: "Eingeladene Benutzer", pendingStatus: "Wartet", @@ -115,7 +115,7 @@ export default { // Quota.vue quota: { - headline: "Quota Management", + headline: "Projektquota", resources: "Ressourcen", rangeText: "{allocated} GB zugeteilt", gb: "{number} GB", @@ -170,9 +170,9 @@ export default { "Beim Ändern der Quota ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut. Wenn der Fehler weiter auftritt, wenden Sie sich bitte an Ihre Organization.", }, - // Settings.vue - settings: { - // page title is fetched from `sidebar.projectSettings` + // ConfigurationMetadata.vue + configMetadata: { + headline: "Projektkonfiguration & -metadaten", modal: { deleteModalHeadline: "Projekt wirklich entfernen?", @@ -210,9 +210,6 @@ export default { projectSlugLabel: "@:(form.project.projectSlug)@:(form.project.labelSymbol)", - projectId: "Projekt Id", - projectIdLabel: "@:(form.project.projectId)@:(form.project.labelSymbol)", - projectPersistentId: "Persistent Identifier (PID)", projectPersistentIdLabel: "@:(form.project.projectPersistentId)@:(form.project.labelSymbol)", diff --git a/src/modules/project/i18n/en.ts b/src/modules/project/i18n/en.ts index 360800b192f17d4709abb54931ca64816efb3d48..3a6c7724b670537026857a5c2dc4a2b27599b704 100644 --- a/src/modules/project/i18n/en.ts +++ b/src/modules/project/i18n/en.ts @@ -25,7 +25,7 @@ export default { // Members.vue members: { - title: "User Management", + title: "Project Members", membersTabTitle: "Project Members", externalUsersTabTitle: "Invited Users", pendingStatus: "Pending", @@ -110,7 +110,7 @@ export default { // Quota.vue quota: { - headline: "Quota Management", + headline: "Project Quota", resources: "Resources", rangeText: "{allocated} GB allocated", gb: "{number} GB", @@ -166,9 +166,9 @@ export default { "An error occurred while extending the quota. Please try again. If the error persists, contact your organization.", }, - // Settings.vue - settings: { - // page title is fetched from `sidebar.projectSettings` + // ConfigurationMetadata.vue + configMetadata: { + headline: "Project Configuration & Metadata", modal: { deleteModalHeadline: "Do you really want to delete this project?", @@ -205,9 +205,6 @@ export default { projectSlugLabel: "@:(form.project.projectSlug)@:(form.project.labelSymbol)", - projectId: "Project Id", - projectIdLabel: "@:(form.project.projectId)@:(form.project.labelSymbol)", - projectPersistentId: "Persistent Identifier (PID)", projectPersistentIdLabel: "@:(form.project.projectPersistentId)@:(form.project.labelSymbol)", diff --git a/src/modules/project/pages/Settings.spec.ts b/src/modules/project/pages/ConfigurationMetadata.spec.ts similarity index 91% rename from src/modules/project/pages/Settings.spec.ts rename to src/modules/project/pages/ConfigurationMetadata.spec.ts index 2291b04a5c56d84e38e542c63d0444d0b57a8bd2..fc7e70ef2896615dbf036eed06ba9da976ce9251 100644 --- a/src/modules/project/pages/Settings.spec.ts +++ b/src/modules/project/pages/ConfigurationMetadata.spec.ts @@ -16,7 +16,7 @@ import { PiniaVuePlugin } from "pinia"; /* Additional Dependencies */ /* Tested Component */ -import Settings from "./Settings.vue"; +import ConfigurationMetadata from "./ConfigurationMetadata.vue"; import type Vue from "vue"; /* Import of relevant mockup data */ @@ -27,7 +27,7 @@ import { testUserState } from "@/data/mockup/testUser"; const localVue = createLocalVue(); localVue.use(PiniaVuePlugin); -describe("Settings.vue", () => { +describe("ConfigurationMetadata.vue", () => { /* Describe Pre-initialization steps */ /* Description of the test */ @@ -35,7 +35,7 @@ describe("Settings.vue", () => { /* Test Pre-initialization steps */ /* Mount the Component */ - const wrapper = mount(Settings as unknown as typeof Vue, { + const wrapper = mount(ConfigurationMetadata as unknown as typeof Vue, { pinia: createTestingPinia({ createSpy: vitest.fn, initialState: { diff --git a/src/modules/project/pages/Settings.vue b/src/modules/project/pages/ConfigurationMetadata.vue similarity index 98% rename from src/modules/project/pages/Settings.vue rename to src/modules/project/pages/ConfigurationMetadata.vue index ef3c3b3b5f9e245cfce09582647da7ef15d776bf..553fff03719d0a08c81568885a625a335890d1ed 100644 --- a/src/modules/project/pages/Settings.vue +++ b/src/modules/project/pages/ConfigurationMetadata.vue @@ -1,6 +1,6 @@ <template> <div id="project"> - <CoscineHeadline :headline="$t('sidebar.projectSettings')" /> + <CoscineHeadline :headline="$t('page.configMetadata.headline')" /> <b-row> <div class="col-sm-2" /> <div class="col-sm-8"> @@ -18,8 +18,6 @@ :is-loading="isLoading" /> - <div class="h-divider" /> - <FormMetadata v-model="projectForm" :disabled="!isOwner" diff --git a/src/modules/project/pages/CreateProject.vue b/src/modules/project/pages/CreateProject.vue index 49a78d8e1d64020490eb9d73a1956d906ad86925..d4ca9e940427925f4bea96392ebd8dfd1222d233 100644 --- a/src/modules/project/pages/CreateProject.vue +++ b/src/modules/project/pages/CreateProject.vue @@ -23,8 +23,6 @@ @validation="formValidations.naming = $event" /><!-- TODO: Fix @validation assignment and typing --> - <div class="h-divider" /> - <FormMetadata v-model="projectForm" :is-loading="isLoading" diff --git a/src/modules/project/pages/components/FormMetadata.vue b/src/modules/project/pages/components/FormMetadata.vue index 44b9402b398ae0817f7c36c492e818f4f98e1cea..0f76e00a26653b6090d31055fffa4f16d631a4b3 100644 --- a/src/modules/project/pages/components/FormMetadata.vue +++ b/src/modules/project/pages/components/FormMetadata.vue @@ -1,8 +1,5 @@ <template> <div> - <!-- Project Metadata Section --> - <CoscineHeadline :headline="$t('form.project.activatedImportFromParent')" /> - <!-- Copy Metadata --> <CoscineFormGroup v-if="parentProject" diff --git a/src/modules/project/pages/components/FormReadonlyData.vue b/src/modules/project/pages/components/FormReadonlyData.vue index 73dc334360f22c61259c6c43dbda9f37012f30d0..193ef4caeb8b8af90eeb207bed29a4fe5b2a2389 100644 --- a/src/modules/project/pages/components/FormReadonlyData.vue +++ b/src/modules/project/pages/components/FormReadonlyData.vue @@ -15,21 +15,6 @@ /> </CoscineFormGroup> - <!-- Project Id --> - <CoscineFormGroup - label-for="Id" - :label="$t('form.project.projectIdLabel')" - :is-loading="isLoading" - type="input" - > - <b-form-input - id="ProjectId" - v-model="projectForm.id" - :readonly="readonly" - required - /> - </CoscineFormGroup> - <!-- Project Persistent Identifier --> <CoscineFormGroup label-for="ProjectPersistentId" diff --git a/src/modules/project/pages/components/modals/DeleteProjectModal.vue b/src/modules/project/pages/components/modals/DeleteProjectModal.vue index 8d5f320bf2ba57bf96a2da333ca22d18e6126903..30799c37a1c4a8174fd1982593e384424420c18c 100644 --- a/src/modules/project/pages/components/modals/DeleteProjectModal.vue +++ b/src/modules/project/pages/components/modals/DeleteProjectModal.vue @@ -32,7 +32,7 @@ @keyup.enter.prevent="clickDelete" ></b-form-input> <div class="invalid-tooltip"> - {{ $t("page.settings.modal.deleteModalHelp") }} + {{ $t("page.configMetadata.modal.deleteModalHelp") }} </div> </b-form-group> @@ -55,11 +55,11 @@ import { defineComponent, type PropType } from "vue"; export default defineComponent({ props: { descriptionKey: { - default: "page.settings.modal.deleteModalDescription", + default: "page.configMetadata.modal.deleteModalDescription", type: String, }, titleKey: { - default: "page.settings.modal.deleteModalHeadline", + default: "page.configMetadata.modal.deleteModalHeadline", type: String, }, open: { diff --git a/src/modules/project/routes.ts b/src/modules/project/routes.ts index 80dd7a2e22c25cb051d6708269657439a738edb2..60794525e7a07af072d8d2ee7805b8bba79d483c 100644 --- a/src/modules/project/routes.ts +++ b/src/modules/project/routes.ts @@ -7,7 +7,7 @@ const ListProjects = () => import("./pages/ListProjects.vue"); const ProjectPage = () => import("./pages/ProjectPage.vue"); const Quota = () => import("./pages/Quota.vue"); const Members = () => import("./pages/Members.vue"); -const Settings = () => import("./pages/Settings.vue"); +const ConfigurationMetadata = () => import("./pages/ConfigurationMetadata.vue"); import { ResourceRoutes } from "@/modules/resource/routes"; import { ProjectI18nMessages } from "@/modules/project/i18n/index"; @@ -68,12 +68,12 @@ export const ProjectRoutes: RouteConfig[] = [ }, }, { - path: "settings", - name: "project-settings", - component: Settings, + path: "config-metadata", + name: "project-config-metadata", + component: ConfigurationMetadata, meta: { requiresAuth: true, - breadCrumb: "project.settings", + breadCrumb: "project.configMetadata", }, }, { diff --git a/src/modules/project/store.ts b/src/modules/project/store.ts index c9be530180a846e2057321959cf4fffac9ac0353..c340289cd32e4ff6e699e22dd35b5422c26b7c0c 100644 --- a/src/modules/project/store.ts +++ b/src/modules/project/store.ts @@ -482,7 +482,17 @@ export const useProjectStore = defineStore({ const notificationStore = useNotificationStore(); try { const apiResponse = await LicenseApi.licenseIndex(); - this.licenses = apiResponse.data; + const sortedLicenses = apiResponse.data; + sortedLicenses.sort((a, b) => { + if (a.displayName && b.displayName) { + const valueA = a.displayName.toUpperCase(); + const valueB = b.displayName.toUpperCase(); + return valueA < valueB ? -1 : valueA > valueB ? 1 : 0; + } else { + return 0; + } + }); + this.licenses = sortedLicenses; } catch (error) { // Handle other Status Codes notificationStore.postApiErrorNotification(error as AxiosError);