blob: e2da1eb1847df730e31337aee4dd2d64bf4bc278 [file] [log] [blame]
<template>
<b-modal id="modal-role-group" ref="modal" @ok="onOk" @hidden="resetForm">
<template v-slot:modal-title>
<template v-if="roleGroup">
{{ $t('pageLdap.modal.editRoleGroup') }}
</template>
<template v-else>
{{ $t('pageLdap.modal.addNewRoleGroup') }}
</template>
</template>
<b-container>
<b-row>
<b-col sm="8">
<b-form id="role-group">
<!-- Edit role group -->
<template v-if="roleGroup !== null">
<dl class="mb-4">
<dt>{{ $t('pageLdap.modal.groupName') }}</dt>
<dd>{{ form.groupName }}</dd>
</dl>
</template>
<!-- Add new role group -->
<template v-else>
<b-form-group
:label="$t('pageLdap.modal.groupName')"
label-for="role-group-name"
>
<b-form-input
id="role-group-name"
v-model="form.groupName"
:state="getValidationState($v.form.groupName)"
@input="$v.form.groupName.$touch()"
/>
<b-form-invalid-feedback role="alert">
{{ $t('global.form.fieldRequired') }}
</b-form-invalid-feedback>
</b-form-group>
</template>
<b-form-group
:label="$t('pageLdap.modal.groupPrivilege')"
label-for="privilege"
>
<b-form-select
id="privilege"
v-model="form.groupPrivilege"
:options="accountRoles"
:state="getValidationState($v.form.groupPrivilege)"
@input="$v.form.groupPrivilege.$touch()"
>
<template v-if="!roleGroup" v-slot:first>
<b-form-select-option :value="null" disabled>
{{ $t('global.form.selectAnOption') }}
</b-form-select-option>
</template>
</b-form-select>
<b-form-invalid-feedback role="alert">
{{ $t('global.form.fieldRequired') }}
</b-form-invalid-feedback>
</b-form-group>
</b-form>
</b-col>
</b-row>
</b-container>
<template v-slot:modal-footer="{ ok, cancel }">
<b-button variant="secondary" @click="cancel()">
{{ $t('global.action.cancel') }}
</b-button>
<b-button form="role-group" type="submit" variant="primary" @click="ok()">
<template v-if="roleGroup">
{{ $t('global.action.save') }}
</template>
<template v-else>
{{ $t('global.action.add') }}
</template>
</b-button>
</template>
</b-modal>
</template>
<script>
import { required, requiredIf } from 'vuelidate/lib/validators';
import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
export default {
mixins: [VuelidateMixin],
props: {
roleGroup: {
type: Object,
default: null,
validator: prop => {
if (prop === null) return true;
return (
prop.hasOwnProperty('groupName') &&
prop.hasOwnProperty('groupPrivilege')
);
}
}
},
data() {
return {
form: {
groupName: null,
groupPrivilege: null
}
};
},
computed: {
accountRoles() {
return this.$store.getters['localUsers/accountRoles'];
}
},
watch: {
roleGroup: function(value) {
if (value === null) return;
this.form.groupName = value.groupName;
this.form.groupPrivilege = value.groupPrivilege;
}
},
validations() {
return {
form: {
groupName: {
required: requiredIf(function() {
return !this.roleGroup;
})
},
groupPrivilege: {
required
}
}
};
},
methods: {
handleSubmit() {
this.$v.$touch();
if (this.$v.$invalid) return;
this.$emit('ok', {
addNew: !this.roleGroup,
groupName: this.form.groupName,
groupPrivilege: this.form.groupPrivilege
});
this.closeModal();
},
closeModal() {
this.$nextTick(() => {
this.$refs.modal.hide();
});
},
resetForm() {
this.form.groupName = null;
this.form.groupPrivilege = null;
this.$v.$reset();
this.$emit('hidden');
},
onOk(bvModalEvt) {
// prevent modal close
bvModalEvt.preventDefault();
this.handleSubmit();
}
}
};
</script>