Skip to content
Main.vue 2.13 KiB
Newer Older
<template>
  <div>
Sonia Zorba's avatar
Sonia Zorba committed
    <b-card no-body>
      <b-tabs content-class="mt-3" card v-on:input="tabChanged">
        <GroupsPanel />
        <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-card>
  </div>
</template>

<script>
import GroupsBreadcrumb from './GroupsBreadcrumb.vue'
import GroupsPanel from './GroupsPanel.vue'
import MembersPanel from './MembersPanel.vue'
Sonia Zorba's avatar
Sonia Zorba committed
import PermissionsPanel from './PermissionsPanel.vue'
import NewGroupModal from './modals/NewGroupModal.vue'
import { mapState } from 'vuex';

export default {
  name: 'Main',
  components: {
    GroupsBreadcrumb,
    GroupsPanel,
Sonia Zorba's avatar
Sonia Zorba committed
    PermissionsPanel,
Sonia Zorba's avatar
Sonia Zorba committed
    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: {
Sonia Zorba's avatar
Sonia Zorba committed
    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');
      }
    },
Sonia Zorba's avatar
Sonia Zorba committed

<style scoped>
  .in-tabs-header-btn {
    position: absolute;
    right: 8px;
    top: 8px;
  }
</style>