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

FE: Added permissions panel

parent b3638abf
No related branches found
No related tags found
No related merge requests found
<template> <template>
<div> <div>
<GroupsBreadcrumb /> <GroupsBreadcrumb />
<div class=""> <b-card no-body>
<button type="button" class="btn btn-primary float-right" v-if="model.permissions.includes('ADMIN')">Add member</button> <b-tabs content-class="mt-3" card v-on:input="tabChanged">
<b-button variant="primary" class="float-right" v-if="model.permissions.includes('ADMIN')" v-b-modal.new-group-modal>Add group</b-button>
<button type="button" class="btn btn-primary float-right" v-if="model.permissions.includes('MANAGE_MEMBERS')">Add collaborator</button>
</div>
<b-tabs content-class="mt-3">
<GroupsPanel /> <GroupsPanel />
<MembersPanel /> <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="showAddMemberBtn">Add member</b-button>
<b-button variant="primary" class="in-tabs-header-btn" v-if="showAddCollaboratorBtn">Add collaborator</b-button>
</template>
</b-tabs> </b-tabs>
</b-card>
<NewGroupModal /> <NewGroupModal />
</div> </div>
</template> </template>
...@@ -18,6 +21,7 @@ ...@@ -18,6 +21,7 @@
import GroupsBreadcrumb from './GroupsBreadcrumb.vue' import GroupsBreadcrumb from './GroupsBreadcrumb.vue'
import GroupsPanel from './GroupsPanel.vue' import GroupsPanel from './GroupsPanel.vue'
import MembersPanel from './MembersPanel.vue' import MembersPanel from './MembersPanel.vue'
import PermissionsPanel from './PermissionsPanel.vue'
import NewGroupModal from './modals/NewGroupModal.vue' import NewGroupModal from './modals/NewGroupModal.vue'
import { mapState } from 'vuex'; import { mapState } from 'vuex';
...@@ -27,15 +31,45 @@ export default { ...@@ -27,15 +31,45 @@ export default {
GroupsBreadcrumb, GroupsBreadcrumb,
GroupsPanel, GroupsPanel,
MembersPanel, MembersPanel,
PermissionsPanel,
NewGroupModal NewGroupModal
}, },
computed: mapState({ computed: mapState({
model: state => state.model 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'
}), }),
methods: { methods: {
tabChanged: function(tabIndex) {
let tab;
switch(tabIndex) {
case 0:
tab = 'groups';
break;
case 1:
tab = 'members';
break;
case 2:
tab = 'permissions';
break;
}
if(this.$store.state.input.selectedTab !== tab) {
this.$store.state.input.selectedTab = tab;
this.$store.commit('fetchGroupsModel');
}
},
addMember: function() { addMember: function() {
} }
} }
} }
</script> </script>
<style scoped>
.in-tabs-header-btn {
position: absolute;
right: 8px;
top: 8px;
}
</style>
<template> <template>
<b-tab title="Members" v-if="model.membersPanel !== null"> <b-tab title="Members">
<b-list-group v-for="member in model.membersPanel.members" id="members-list"> <div v-if="model.membersPanel !== null">
<b-list-group v-for="member in model.membersPanel.items" id="members-list">
<b-list-group-item href="#"> <b-list-group-item href="#">
{{member.label}} {{member.label}}
<span v-if="model.permission === 'ADMIN'"> <span v-if="model.permission === 'ADMIN'">
...@@ -13,7 +14,8 @@ ...@@ -13,7 +14,8 @@
</span> </span>
</b-list-group-item> </b-list-group-item>
</b-list-group> </b-list-group>
<div class="text-center"> </div>
<div class="text-center" v-if="model.membersPanel !== null">
<b-pagination <b-pagination
v-model="model.membersPanel.paginator.page" v-model="model.membersPanel.paginator.page"
:total-rows="model.membersPanel.paginator.totalItems" :total-rows="model.membersPanel.paginator.totalItems"
...@@ -32,7 +34,7 @@ import { mapState } from 'vuex'; ...@@ -32,7 +34,7 @@ import { mapState } from 'vuex';
export default { export default {
name: 'MembersPanel', name: 'MembersPanel',
computed: mapState({ computed: mapState({
model: state => state.model model: state => state.model,
}), }),
methods: { methods: {
deleteMember: function(member) { deleteMember: function(member) {
......
<template>
<b-tab title="Permissions">
<div v-if="model.permissionsPanel !== null">
<table class="table b-table table-striped table-hover">
<thead>
<tr>
<th>User</th>
<th>Permission</th>
<th></th>
</tr>
</thead>
<tbody>
<tr v-for="up in model.permissionsPanel.items">
<td>
<User v-bind:user="up.user" />
</td>
<td>{{up.permission}}</td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div class="text-center" v-if="model.permissionsPanel !== null">
<b-pagination
v-model="model.permissionsPanel.currentPage"
:total-rows="model.permissionsPanel.totalItems"
:per-page="model.permissionsPanel.pageSize"
aria-controls="permissions-list"
align="center"
v-on:change="setPage"
></b-pagination>
</div>
</b-tab>
</template>
<script>
import User from './User.vue'
import { mapState } from 'vuex';
export default {
name: 'PermissionsPanel',
components: {
User
},
computed: mapState({
model: state => state.model,
}),
methods: {
deletePermission: function(userPermission) {
},
setPage: function(page) {
console.log('setPage ', page);
}
}
}
</script>
<template>
<div :id="'user-name-' + user.id">
<span>{{user.displayName}}</span>
<b-tooltip ref="user-tooltip" :target="'user-name-' + user.id" placement="bottom">
<div class="text-left">
<p><strong>User id</strong>: {{user.id}}</p>
<p><strong>Identities</strong>:</p>
<ul>
<li v-for="identity in user.identities">
{{identity.email}} ({{identity.type}})
</li>
</ul>
</div>
</b-tooltip>
</div>
</template>
<script>
export default {
name: 'User',
props: {
user: Object
}
}
</script>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment