Skip to content
Snippets Groups Projects
Commit 417a88f5 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

FE: added permission modal

parent 0c7fdc60
No related branches found
No related tags found
No related merge requests found
...@@ -95,5 +95,18 @@ export default { ...@@ -95,5 +95,18 @@ export default {
'Accept': 'application/json', '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',
}
});
} }
}; };
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<b-form-input placeholder="Search group" v-model="groupFilter" v-on:input="filterGroups"></b-form-input> <b-form-input placeholder="Search group" v-model="groupFilter" v-on:input="filterGroups"></b-form-input>
</b-col> </b-col>
</b-row> </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 v-for="group in model.groupsPanel.items">
<b-list-group-item href="#" v-on:click="openGroup(group)"> <b-list-group-item href="#" v-on:click="openGroup(group)">
<span class="float-left">{{group.groupName}}</span> <span class="float-left">{{group.groupName}}</span>
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</b-list-group-item> </b-list-group-item>
</b-list-group> </b-list-group>
</div> </div>
<div class="row"> <div class="row" v-if="model.groupsPanel !== null">
<div class="col-md-9"> <div class="col-md-9">
<b-pagination <b-pagination
v-model="model.groupsPanel.currentPage" v-model="model.groupsPanel.currentPage"
......
...@@ -7,13 +7,15 @@ ...@@ -7,13 +7,15 @@
<MembersPanel /> <MembersPanel />
<PermissionsPanel /> <PermissionsPanel />
<template slot="tabs-end"> <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="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="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> </template>
</b-tabs> </b-tabs>
</b-card> </b-card>
<NewGroupModal /> <NewGroupModal />
<AddPermissionModal />
</div> </div>
</template> </template>
...@@ -23,6 +25,7 @@ import GroupsPanel from './GroupsPanel.vue' ...@@ -23,6 +25,7 @@ import GroupsPanel from './GroupsPanel.vue'
import MembersPanel from './MembersPanel.vue' import MembersPanel from './MembersPanel.vue'
import PermissionsPanel from './PermissionsPanel.vue' import PermissionsPanel from './PermissionsPanel.vue'
import NewGroupModal from './modals/NewGroupModal.vue' import NewGroupModal from './modals/NewGroupModal.vue'
import AddPermissionModal from './modals/AddPermissionModal.vue'
import { mapState } from 'vuex'; import { mapState } from 'vuex';
export default { export default {
...@@ -32,13 +35,15 @@ export default { ...@@ -32,13 +35,15 @@ export default {
GroupsPanel, GroupsPanel,
MembersPanel, MembersPanel,
PermissionsPanel, PermissionsPanel,
NewGroupModal NewGroupModal,
AddPermissionModal
}, },
computed: mapState({ computed: mapState({
model: state => state.model, model: state => state.model,
showAddMemberBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'members', showAddMemberBtn: state => state.model.permissions.includes('ADMIN') && state.input.selectedTab === 'members',
showAddCollaboratorBtn: state => state.model.permissions.includes('MANAGE_MEMBERS') && 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: { methods: {
tabChanged: function(tabIndex) { tabChanged: function(tabIndex) {
...@@ -59,8 +64,14 @@ export default { ...@@ -59,8 +64,14 @@ export default {
this.$store.commit('fetchGroupsModel'); this.$store.commit('fetchGroupsModel');
} }
}, },
addMember: function() { openAddGroupModal: function() {
this.$bvModal.show('new-group-modal');
},
openAddMemberModal: function() {
},
openAddPermissionModal: function() {
this.$bvModal.show('add-permission-modal');
} }
} }
} }
......
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
</div> </div>
<div class="text-center" v-if="model.membersPanel !== null"> <div class="text-center" v-if="model.membersPanel !== null">
<b-pagination <b-pagination
v-model="model.membersPanel.paginator.page" v-model="model.membersPanel.page"
:total-rows="model.membersPanel.paginator.totalItems" :total-rows="model.membersPanel.totalItems"
:per-page="model.membersPanel.paginator.pageSize" :per-page="model.membersPanel.pageSize"
aria-controls="members-list" aria-controls="members-list"
align="center" align="center"
v-on:change="setPage" v-on:change="setPage"
......
<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>
<template> <template>
<b-modal id="confirm-delete-group-modal" title="Confirm action" ok-title="Delete" @ok="deleteGroup" ok-variant="danger"> <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> <p v-if="groupToDelete">Are you sure that you want to delete the group <strong>{{groupToDelete.groupName}}</strong>?</p>
</b-form>
</b-modal> </b-modal>
</template> </template>
......
<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>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment