From 2f5c8d0e64add68d4fac4285281b0b792fec5cb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Hanna=20F=C3=BChr?= <fuehr@itc.rwth-aachen.de>
Date: Thu, 6 Apr 2023 09:28:19 +0200
Subject: [PATCH] Update: Renaming sidebar and URLs and ordering Licenses
 alphabetically

---
 src/components/elements/SidebarMenu.vue           | 10 +++++-----
 src/i18n/de.ts                                    | 12 ++++++------
 src/i18n/en.ts                                    | 12 ++++++------
 src/modules/project/i18n/de.ts                    | 13 +++++--------
 src/modules/project/i18n/en.ts                    | 13 +++++--------
 ...ings.spec.ts => ConfigurationMetadata.spec.ts} |  6 +++---
 .../{Settings.vue => ConfigurationMetadata.vue}   |  4 +---
 src/modules/project/pages/CreateProject.vue       |  2 --
 .../project/pages/components/FormMetadata.vue     |  3 ---
 .../project/pages/components/FormReadonlyData.vue | 15 ---------------
 .../components/modals/DeleteProjectModal.vue      |  6 +++---
 src/modules/project/routes.ts                     | 10 +++++-----
 src/modules/project/store.ts                      | 12 +++++++++++-
 13 files changed, 50 insertions(+), 68 deletions(-)
 rename src/modules/project/pages/{Settings.spec.ts => ConfigurationMetadata.spec.ts} (91%)
 rename src/modules/project/pages/{Settings.vue => ConfigurationMetadata.vue} (98%)

diff --git a/src/components/elements/SidebarMenu.vue b/src/components/elements/SidebarMenu.vue
index e2938493..06d9c1a5 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 bd3956ee..2ac59f9f 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 b3411e70..a47eb4ec 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 f8b5b3f7..88d752c1 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 360800b1..3a6c7724 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 2291b04a..fc7e70ef 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 ef3c3b3b..553fff03 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 49a78d8e..d4ca9e94 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 44b9402b..0f76e00a 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 73dc3343..193ef4ca 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 8d5f320b..30799c37 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 80dd7a2e..60794525 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 c9be5301..c340289c 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);
-- 
GitLab