add group delete modal and mutation

This commit is contained in:
Axolotle 2020-08-02 15:34:38 +02:00
parent 013485b4b0
commit b3db28291f
2 changed files with 34 additions and 2 deletions

View file

@ -53,6 +53,10 @@ export default {
} }
}, },
'DEL_GROUPS' (state, groupname) {
Vue.delete(state.groups, groupname)
},
'SET_PERMISSIONS' (state, permissions) { 'SET_PERMISSIONS' (state, permissions) {
state.permissions = permissions state.permissions = permissions
} }
@ -107,7 +111,7 @@ export default {
}) })
}, },
'DELETE' ({ state, commit }, { uri, param, data, storeKey = uri }) { 'DELETE' ({ state, commit }, { uri, param, data = {}, storeKey = uri }) {
return api.delete(param ? `${uri}/${param}` : uri, data).then(() => { return api.delete(param ? `${uri}/${param}` : uri, data).then(() => {
commit('DEL_' + storeKey.toUpperCase(), param) commit('DEL_' + storeKey.toUpperCase(), param)
}) })

View file

@ -34,6 +34,7 @@
<b-button <b-button
v-if="!group.isSpecial" v-b-modal.delete-modal v-if="!group.isSpecial" v-b-modal.delete-modal
variant="danger" class="ml-2" size="sm" variant="danger" class="ml-2" size="sm"
@click="groupToDelete = name"
> >
<icon :title="$t('delete')" iname="trash-o" /> <span class="sr-only">{{ $t('delete') }}</span> <icon :title="$t('delete')" iname="trash-o" /> <span class="sr-only">{{ $t('delete') }}</span>
</b-button> </b-button>
@ -131,21 +132,33 @@
</b-card-body> </b-card-body>
</b-collapse> </b-collapse>
</b-card> </b-card>
<!-- DELETE GROUP MODAL -->
<b-modal
v-if="groupToDelete" id="delete-modal" centered
body-bg-variant="danger" body-text-variant="light"
@ok="deleteGroup" hide-header
>
{{ $t('confirm_delete', {name: groupToDelete }) }}
</b-modal>
</div> </div>
</template> </template>
<script> <script>
import Vue from 'vue'
import ZoneSelectize from '@/components/ZoneSelectize' import ZoneSelectize from '@/components/ZoneSelectize'
import BaseSelectize from '@/components/BaseSelectize' import BaseSelectize from '@/components/BaseSelectize'
// TODO add global search with type (search by: group, user, permission) // TODO add global search with type (search by: group, user, permission)
// TODO add vuex store update on inputs
export default { export default {
name: 'GroupList', name: 'GroupList',
data: () => ({ data: () => ({
search: '', search: '',
primaryGroups: undefined, primaryGroups: undefined,
userGroups: undefined userGroups: undefined,
groupToDelete: undefined
}), }),
computed: { computed: {
@ -219,6 +232,16 @@ export default {
return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase() return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase()
}) })
} }
},
deleteGroup () {
const groupname = this.groupToDelete
this.$store.dispatch('DELETE',
{ uri: 'users/groups', param: groupname, storeKey: 'groups' }
).then(() => {
Vue.delete(this.primaryGroups, groupname)
})
this.groupToDelete = undefined
} }
}, },
@ -303,4 +326,9 @@ export default {
.row > div:first-child { .row > div:first-child {
margin-bottom: 1rem; margin-bottom: 1rem;
} }
// delete modal
#delete-modal .modal-body {
display: none;
}
</style> </style>