blob: e2da1eb1847df730e31337aee4dd2d64bf4bc278 [file] [log] [blame]
Yoshie Muranakadc3d5412020-04-17 09:39:41 -07001<template>
2 <b-modal id="modal-role-group" ref="modal" @ok="onOk" @hidden="resetForm">
3 <template v-slot:modal-title>
4 <template v-if="roleGroup">
5 {{ $t('pageLdap.modal.editRoleGroup') }}
6 </template>
7 <template v-else>
8 {{ $t('pageLdap.modal.addNewRoleGroup') }}
9 </template>
10 </template>
11 <b-container>
12 <b-row>
13 <b-col sm="8">
14 <b-form id="role-group">
15 <!-- Edit role group -->
16 <template v-if="roleGroup !== null">
17 <dl class="mb-4">
18 <dt>{{ $t('pageLdap.modal.groupName') }}</dt>
19 <dd>{{ form.groupName }}</dd>
20 </dl>
21 </template>
22
23 <!-- Add new role group -->
24 <template v-else>
25 <b-form-group
26 :label="$t('pageLdap.modal.groupName')"
27 label-for="role-group-name"
28 >
29 <b-form-input
30 id="role-group-name"
31 v-model="form.groupName"
32 :state="getValidationState($v.form.groupName)"
33 @input="$v.form.groupName.$touch()"
34 />
35 <b-form-invalid-feedback role="alert">
36 {{ $t('global.form.fieldRequired') }}
37 </b-form-invalid-feedback>
38 </b-form-group>
39 </template>
40
41 <b-form-group
42 :label="$t('pageLdap.modal.groupPrivilege')"
43 label-for="privilege"
44 >
45 <b-form-select
46 id="privilege"
47 v-model="form.groupPrivilege"
48 :options="accountRoles"
49 :state="getValidationState($v.form.groupPrivilege)"
50 @input="$v.form.groupPrivilege.$touch()"
51 >
52 <template v-if="!roleGroup" v-slot:first>
53 <b-form-select-option :value="null" disabled>
54 {{ $t('global.form.selectAnOption') }}
55 </b-form-select-option>
56 </template>
57 </b-form-select>
58 <b-form-invalid-feedback role="alert">
59 {{ $t('global.form.fieldRequired') }}
60 </b-form-invalid-feedback>
61 </b-form-group>
62 </b-form>
63 </b-col>
64 </b-row>
65 </b-container>
66 <template v-slot:modal-footer="{ ok, cancel }">
67 <b-button variant="secondary" @click="cancel()">
68 {{ $t('global.action.cancel') }}
69 </b-button>
70 <b-button form="role-group" type="submit" variant="primary" @click="ok()">
71 <template v-if="roleGroup">
72 {{ $t('global.action.save') }}
73 </template>
74 <template v-else>
75 {{ $t('global.action.add') }}
76 </template>
77 </b-button>
78 </template>
79 </b-modal>
80</template>
81
82<script>
83import { required, requiredIf } from 'vuelidate/lib/validators';
84import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
85
86export default {
87 mixins: [VuelidateMixin],
88 props: {
89 roleGroup: {
90 type: Object,
91 default: null,
92 validator: prop => {
93 if (prop === null) return true;
94 return (
95 prop.hasOwnProperty('groupName') &&
96 prop.hasOwnProperty('groupPrivilege')
97 );
98 }
99 }
100 },
101 data() {
102 return {
103 form: {
104 groupName: null,
105 groupPrivilege: null
106 }
107 };
108 },
109 computed: {
110 accountRoles() {
111 return this.$store.getters['localUsers/accountRoles'];
112 }
113 },
114 watch: {
115 roleGroup: function(value) {
116 if (value === null) return;
117 this.form.groupName = value.groupName;
118 this.form.groupPrivilege = value.groupPrivilege;
119 }
120 },
121 validations() {
122 return {
123 form: {
124 groupName: {
125 required: requiredIf(function() {
126 return !this.roleGroup;
127 })
128 },
129 groupPrivilege: {
130 required
131 }
132 }
133 };
134 },
135 methods: {
136 handleSubmit() {
137 this.$v.$touch();
138 if (this.$v.$invalid) return;
139 this.$emit('ok', {
140 addNew: !this.roleGroup,
141 groupName: this.form.groupName,
142 groupPrivilege: this.form.groupPrivilege
143 });
144 this.closeModal();
145 },
146 closeModal() {
147 this.$nextTick(() => {
148 this.$refs.modal.hide();
149 });
150 },
151 resetForm() {
152 this.form.groupName = null;
153 this.form.groupPrivilege = null;
154 this.$v.$reset();
155 this.$emit('hidden');
156 },
157 onOk(bvModalEvt) {
158 // prevent modal close
159 bvModalEvt.preventDefault();
160 this.handleSubmit();
161 }
162 }
163};
164</script>