From 640aca6c09de9ab1b3b2930562e18b12a583a1e6 Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Tue, 29 Oct 2019 15:50:26 +0100
Subject: [PATCH] Fixed search FE issue + updated mock data and minor
 improvements

---
 .../api/mock/data/openUserSearchResult.json   | 12 ++++------
 gms-ui/src/api/mock/data/search.json          | 24 ++++++++++---------
 gms-ui/src/store.js                           |  4 ++--
 .../inaf/ia2/gms/service/SearchService.java   | 18 ++++++++++++--
 4 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/gms-ui/src/api/mock/data/openUserSearchResult.json b/gms-ui/src/api/mock/data/openUserSearchResult.json
index 65d38ea..b7389bb 100644
--- a/gms-ui/src/api/mock/data/openUserSearchResult.json
+++ b/gms-ui/src/api/mock/data/openUserSearchResult.json
@@ -1,13 +1,11 @@
 {
   "groups": [{
-    "id": "744e38e8f6d04e4e9418ae5f131c9b6b",
-    "name": "LBT",
-    "path": "744e38e8f6d04e4e9418ae5f131c9b6b"
+    "groupId": "f747bb7af22b4b2f85abef8a3e54dcc7",
+    "groupCompleteName": ["LBT", "INAF", "P1"]
   }],
   "permissions": [{
-    "userId": "4",
-    "groupId": "744e38e8f6d04e4e9418ae5f131c9b6b",
-    "permission": "VIEW_MEMBERS",
-    "groupPath": "744e38e8f6d04e4e9418ae5f131c9b6b"
+    "groupId": "ROOT",
+    "groupCompleteName": ["Root"],
+    "permission": "ADMIN"
   }]
 }
diff --git a/gms-ui/src/api/mock/data/search.json b/gms-ui/src/api/mock/data/search.json
index d81df04..7987da4 100644
--- a/gms-ui/src/api/mock/data/search.json
+++ b/gms-ui/src/api/mock/data/search.json
@@ -1,18 +1,20 @@
 {
   "items": [{
-      "id": "4",
-      "type": "USER",
-      "label": "Name Surname"
-    },
-    {
-      "id": "group_id",
-      "type": "GROUP",
-      "label": "Group 1"
-    }
-  ],
+    "type": "USER",
+    "label": "Sonia Zorba (Google)",
+    "id": "4"
+  }, {
+    "type": "GROUP",
+    "label": "TNG / test2",
+    "id": "64f6795862944325b093c974b768dd39"
+  }, {
+    "type": "GROUP",
+    "label": "test",
+    "id": "024fb0999cac4e74a4e4ee2af4d3800c"
+  }],
   "currentPage": 1,
   "links": [1],
-  "totalItems": 2,
+  "totalItems": 3,
   "pageSize": 20,
   "totalPages": 1,
   "hasPreviousPages": false,
diff --git a/gms-ui/src/store.js b/gms-ui/src/store.js
index a6d1c91..00e3cd7 100644
--- a/gms-ui/src/store.js
+++ b/gms-ui/src/store.js
@@ -50,12 +50,12 @@ export default new Vuex.Store({
     openGroup(state, groupId) {
       let input = this.state.input;
       input.selectedGroupId = groupId;
-      input.searchFilter = null;
+      input.searchFilter = '';
       client.fetchGroupsTab(input)
         .then(model => {
+          this.commit('updateGroups', model);
           if (model.groupsPanel.items.length > 0) {
             this.commit('setTabIndex', 0);
-            this.commit('updateGroups', model);
           } else {
             // If there are no subgroups show the members panel
             this.commit('setTabIndex', 1);
diff --git a/gms/src/main/java/it/inaf/ia2/gms/service/SearchService.java b/gms/src/main/java/it/inaf/ia2/gms/service/SearchService.java
index 0bfe396..90e6ccb 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/service/SearchService.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/service/SearchService.java
@@ -109,8 +109,14 @@ public class SearchService {
         List<PermissionEntity> actorPermissions = permissionsDAO.findUserPermissions(actorUserId);
 
         UserSearchResponse response = new UserSearchResponse();
-        response.setGroups(getUserGroups(targetUserId, actorPermissions));
-        response.setPermissions(getUserPermission(targetUserId, actorPermissions));
+
+        List<UserGroup> groups = getUserGroups(targetUserId, actorPermissions);
+        sortByGroupCompleteName(groups);
+        response.setGroups(groups);
+
+        List<UserPermission> permissions = getUserPermission(targetUserId, actorPermissions);
+        sortByGroupCompleteName(permissions);
+        response.setPermissions(permissions);
 
         return response;
     }
@@ -167,4 +173,12 @@ public class SearchService {
 
         return permissions;
     }
+
+    private void sortByGroupCompleteName(List<? extends UserGroup> items) {
+        items.sort((i1, i2) -> {
+            String completeName1 = String.join(" / ", i1.getGroupCompleteName());
+            String completeName2 = String.join(" / ", i2.getGroupCompleteName());
+            return completeName1.compareTo(completeName2);
+        });
+    }
 }
-- 
GitLab