From 417a88f5384ef93a9b7614c83177e164dae52509 Mon Sep 17 00:00:00 2001 From: Sonia Zorba <sonia.zorba@inaf.it> Date: Tue, 6 Aug 2019 10:18:46 +0200 Subject: [PATCH] FE: added permission modal --- gms-ui/src/api/server/index.js | 13 ++++ gms-ui/src/components/GroupsPanel.vue | 4 +- gms-ui/src/components/Main.vue | 19 ++++-- gms-ui/src/components/MembersPanel.vue | 6 +- .../components/modals/AddPermissionModal.vue | 27 +++++++++ .../modals/ConfirmDeleteGroupModal.vue | 4 +- gms-ui/src/components/modals/SearchUser.vue | 59 +++++++++++++++++++ 7 files changed, 120 insertions(+), 12 deletions(-) create mode 100644 gms-ui/src/components/modals/AddPermissionModal.vue create mode 100644 gms-ui/src/components/modals/SearchUser.vue diff --git a/gms-ui/src/api/server/index.js b/gms-ui/src/api/server/index.js index 00c8879..b5f321a 100644 --- a/gms-ui/src/api/server/index.js +++ b/gms-ui/src/api/server/index.js @@ -95,5 +95,18 @@ export default { 'Accept': 'application/json', } }); + }, + searchUser (searchInput) { + let url = BASE_API_URL + 'users?search=' + searchInput; + + return apiRequest(url, { + method: 'GET', + cache: 'no-cache', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + } + }); } }; diff --git a/gms-ui/src/components/GroupsPanel.vue b/gms-ui/src/components/GroupsPanel.vue index bc37ed9..ad0ee16 100644 --- a/gms-ui/src/components/GroupsPanel.vue +++ b/gms-ui/src/components/GroupsPanel.vue @@ -5,7 +5,7 @@ <b-form-input placeholder="Search group" v-model="groupFilter" v-on:input="filterGroups"></b-form-input> </b-col> </b-row> - <div id="groups-list"> + <div id="groups-list" v-if="model.groupsPanel !== null"> <b-list-group v-for="group in model.groupsPanel.items"> <b-list-group-item href="#" v-on:click="openGroup(group)"> <span class="float-left">{{group.groupName}}</span> @@ -21,7 +21,7 @@ </b-list-group-item> </b-list-group> </div> - <div class="row"> + <div class="row" v-if="model.groupsPanel !== null"> <div class="col-md-9"> <b-pagination v-model="model.groupsPanel.currentPage" diff --git a/gms-ui/src/components/Main.vue b/gms-ui/src/components/Main.vue index aa04da6..f7b8791 100644 --- a/gms-ui/src/components/Main.vue +++ b/gms-ui/src/components/Main.vue @@ -7,13 +7,15 @@ <MembersPanel /> <PermissionsPanel /> <template slot="tabs-end"> - <b-button variant="primary" class="in-tabs-header-btn" v-b-modal.new-group-modal v-if="showAddGroupBtn">Add group</b-button> + <b-button variant="primary" class="in-tabs-header-btn" v-if="showAddGroupBtn" v-on:click="openAddGroupModal">Add group</b-button> <b-button variant="primary" class="in-tabs-header-btn" v-if="showAddMemberBtn">Add member</b-button> <b-button variant="primary" class="in-tabs-header-btn" v-if="showAddCollaboratorBtn">Add collaborator</b-button> + <b-button variant="primary" class="in-tabs-header-btn" v-if="showAddPermissionBtn" v-on:click="openAddPermissionModal">Add permission</b-button> </template> </b-tabs> </b-card> <NewGroupModal /> + <AddPermissionModal /> </div> </template> @@ -23,6 +25,7 @@ import GroupsPanel from './GroupsPanel.vue' import MembersPanel from './MembersPanel.vue' import PermissionsPanel from './PermissionsPanel.vue' import NewGroupModal from './modals/NewGroupModal.vue' +import AddPermissionModal from './modals/AddPermissionModal.vue' import { mapState } from 'vuex'; export default { @@ -32,13 +35,15 @@ export default { GroupsPanel, MembersPanel, PermissionsPanel, - NewGroupModal + NewGroupModal, + AddPermissionModal }, computed: mapState({ model: state => state.model, showAddMemberBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'members', showAddCollaboratorBtn: state => state.model.permissions.includes('MANAGE_MEMBERS') && state.input.selectedTab === 'members', - showAddGroupBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'groups' + showAddGroupBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'groups', + showAddPermissionBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'permissions' }), methods: { tabChanged: function(tabIndex) { @@ -59,8 +64,14 @@ export default { this.$store.commit('fetchGroupsModel'); } }, - addMember: function() { + openAddGroupModal: function() { + this.$bvModal.show('new-group-modal'); + }, + openAddMemberModal: function() { + }, + openAddPermissionModal: function() { + this.$bvModal.show('add-permission-modal'); } } } diff --git a/gms-ui/src/components/MembersPanel.vue b/gms-ui/src/components/MembersPanel.vue index 1b83ea7..3e28e93 100644 --- a/gms-ui/src/components/MembersPanel.vue +++ b/gms-ui/src/components/MembersPanel.vue @@ -17,9 +17,9 @@ </div> <div class="text-center" v-if="model.membersPanel !== null"> <b-pagination - v-model="model.membersPanel.paginator.page" - :total-rows="model.membersPanel.paginator.totalItems" - :per-page="model.membersPanel.paginator.pageSize" + v-model="model.membersPanel.page" + :total-rows="model.membersPanel.totalItems" + :per-page="model.membersPanel.pageSize" aria-controls="members-list" align="center" v-on:change="setPage" diff --git a/gms-ui/src/components/modals/AddPermissionModal.vue b/gms-ui/src/components/modals/AddPermissionModal.vue new file mode 100644 index 0000000..7fccb7e --- /dev/null +++ b/gms-ui/src/components/modals/AddPermissionModal.vue @@ -0,0 +1,27 @@ +<template> + <b-modal id="add-permission-modal" title="Add permission" ok-title="Add" @ok="addPermission"> + <SearchUser /> + </b-modal> +</template> + +<script> +import client from 'api-client'; +import SearchUser from './SearchUser.vue' + +export default { + name: 'AddPermissionModal', + components: { + SearchUser + }, + data: function() { + return { + + } + }, + methods: { + addPermission: function() { + + } + } +}; +</script> diff --git a/gms-ui/src/components/modals/ConfirmDeleteGroupModal.vue b/gms-ui/src/components/modals/ConfirmDeleteGroupModal.vue index 05d2183..e563c53 100644 --- a/gms-ui/src/components/modals/ConfirmDeleteGroupModal.vue +++ b/gms-ui/src/components/modals/ConfirmDeleteGroupModal.vue @@ -1,8 +1,6 @@ <template> <b-modal id="confirm-delete-group-modal" title="Confirm action" ok-title="Delete" @ok="deleteGroup" ok-variant="danger"> - <b-form inline> - <p v-if="groupToDelete">Are you sure that you want to delete the group <strong>{{groupToDelete.groupName}}</strong>?</p> - </b-form> + <p v-if="groupToDelete">Are you sure that you want to delete the group <strong>{{groupToDelete.groupName}}</strong>?</p> </b-modal> </template> diff --git a/gms-ui/src/components/modals/SearchUser.vue b/gms-ui/src/components/modals/SearchUser.vue new file mode 100644 index 0000000..391a54b --- /dev/null +++ b/gms-ui/src/components/modals/SearchUser.vue @@ -0,0 +1,59 @@ +<template> + <b-form inline> + <label class="w-25" for="user-input">Search:</label> + <b-form-input v-model="searchInput" + id="user-input" + class="w-75 mb-2" + aria-describedby="user-input-feedback" + v-on:input="searchUser" + placeholder="User"> + </b-form-input> + <label class="w-25" for="user-input" v-if="users.length > 0">Selected user:</label> + <b-form-select v-model="selectedUser" :options="users" class="w-75" v-if="users.length > 0"></b-form-select> + <div class="w-25"></div> + <b-form-group label="Permissions:" v-if="users.length > 0" class="w-75 mt-3"> + <b-form-radio-group + id="permissions-radio-group" + v-model="permission"> + <b-form-radio value="ADMIN">Admin</b-form-radio> + <b-form-radio value="MANAGE_MEMBERS">Manage members</b-form-radio> + </b-form-radio-group> + </b-form-group> + </b-form> +</template> + +<script> +import client from 'api-client'; + +export default { + name: 'SearchUser', + data: function() { + return { + searchInput: null, + users: [], + selectedUser: null, + permission: null + } + }, + methods: { + searchUser: function() { + client.searchUser(this.searchInput) + .then(res => { + // empty users array + this.users.splice(0, this.users.length); + // fill users array + for (let i = 0; i < res.length; i++) { + let user = res[i]; + this.users.push({ + value: user.id, + text: user.displayName + }); + } + if (this.users.length > 0) { + this.selectedUser = this.users[0].value; + } + }); + } + } +}; +</script> -- GitLab