blob: e86a2ecd3b133455949e1ad5469ef2e565c7b01e [file] [log] [blame]
Yoshie Muranaka463a5702019-12-04 09:09:36 -08001<template>
jason westoverd36ac8a2025-11-03 20:58:59 -06002 <b-modal id="modal-user" ref="modal" :title="modalTitle" @hidden="resetForm">
Yoshie Muranaka9a9092d2020-05-04 08:24:21 -07003 <b-form id="form-user" novalidate @submit.prevent="handleSubmit">
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -08004 <b-container>
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -07005 <!-- Manual unlock form control -->
6 <b-row v-if="!newUser && manualUnlockPolicy && user.Locked">
7 <b-col sm="9">
8 <alert :show="true" variant="warning" small>
Surya Vde23ea22024-07-11 15:19:46 +05309 <template v-if="!v$.form.manualUnlock.$dirty">
jason westoverd36ac8a2025-11-03 20:58:59 -060010 {{ i18n.t('pageUserManagement.modal.accountLocked') }}
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -070011 </template>
12 <template v-else>
jason westoverd36ac8a2025-11-03 20:58:59 -060013 {{
14 i18n.t('pageUserManagement.modal.clickSaveToUnlockAccount')
15 }}
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -070016 </template>
17 </alert>
18 </b-col>
19 <b-col sm="3">
Dixsie Wolmersfe1e6582020-07-15 11:18:12 -050020 <input
21 v-model="form.manualUnlock"
Sandeepa Singhb4406162021-07-26 15:05:39 +053022 data-test-id="userManagement-input-manualUnlock"
Dixsie Wolmersfe1e6582020-07-15 11:18:12 -050023 type="hidden"
Dixsie Wolmersfe1e6582020-07-15 11:18:12 -050024 />
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -070025 <b-button
26 variant="primary"
Surya Vde23ea22024-07-11 15:19:46 +053027 :disabled="v$.form.manualUnlock.$dirty"
Sandeepa Singhb4406162021-07-26 15:05:39 +053028 data-test-id="userManagement-button-manualUnlock"
Surya Vde23ea22024-07-11 15:19:46 +053029 @click="v$.form.manualUnlock.$touch()"
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -070030 >
jason westoverd36ac8a2025-11-03 20:58:59 -060031 {{ i18n.t('pageUserManagement.modal.unlock') }}
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -070032 </b-button>
33 </b-col>
34 </b-row>
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080035 <b-row>
36 <b-col>
jason westoverd36ac8a2025-11-03 20:58:59 -060037 <b-form-group
38 :label="i18n.t('pageUserManagement.modal.accountStatus')"
39 >
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080040 <b-form-radio
41 v-model="form.status"
42 name="user-status"
43 :value="true"
Sandeepa Singhb4406162021-07-26 15:05:39 +053044 data-test-id="userManagement-radioButton-statusEnabled"
Surya Vde23ea22024-07-11 15:19:46 +053045 @input="v$.form.status.$touch()"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080046 >
jason westoverd36ac8a2025-11-03 20:58:59 -060047 {{ i18n.t('global.status.enabled') }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080048 </b-form-radio>
49 <b-form-radio
50 v-model="form.status"
51 name="user-status"
Sandeepa Singhb4406162021-07-26 15:05:39 +053052 data-test-id="userManagement-radioButton-statusDisabled"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080053 :value="false"
Sivaprabu Ganesan28974472023-01-05 18:52:51 +053054 :disabled="!newUser && originalUsername === disabled"
Surya Vde23ea22024-07-11 15:19:46 +053055 @input="v$.form.status.$touch()"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080056 >
jason westoverd36ac8a2025-11-03 20:58:59 -060057 {{ i18n.t('global.status.disabled') }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080058 </b-form-radio>
59 </b-form-group>
Yoshie Muranakaeaa04802020-02-28 13:21:27 -080060 <b-form-group
jason westoverd36ac8a2025-11-03 20:58:59 -060061 :label="i18n.t('pageUserManagement.modal.username')"
Yoshie Muranakaeaa04802020-02-28 13:21:27 -080062 label-for="username"
63 >
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080064 <b-form-text id="username-help-block">
jason westoverd36ac8a2025-11-03 20:58:59 -060065 {{ i18n.t('pageUserManagement.modal.cannotStartWithANumber') }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080066 <br />
Yoshie Muranakaeaa04802020-02-28 13:21:27 -080067 {{
jason westoverd36ac8a2025-11-03 20:58:59 -060068 i18n.t(
Ed Tanous81323992024-02-27 11:26:24 -080069 'pageUserManagement.modal.noSpecialCharactersExceptUnderscore',
Yoshie Muranakaeaa04802020-02-28 13:21:27 -080070 )
71 }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080072 </b-form-text>
73 <b-form-input
Derick Montague09e45cd2020-01-23 15:45:57 -060074 id="username"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080075 v-model="form.username"
76 type="text"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080077 aria-describedby="username-help-block"
Sandeepa Singhb4406162021-07-26 15:05:39 +053078 data-test-id="userManagement-input-username"
Surya Vde23ea22024-07-11 15:19:46 +053079 :state="getValidationState(v$.form.username)"
Sivaprabu Ganesan28974472023-01-05 18:52:51 +053080 :disabled="!newUser && originalUsername === disabled"
Surya Vde23ea22024-07-11 15:19:46 +053081 @input="v$.form.username.$touch()"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080082 />
83 <b-form-invalid-feedback role="alert">
Surya Venkatesan90300e92024-08-01 12:40:20 +053084 <template v-if="v$.form.username.required.$invalid">
jason westoverd36ac8a2025-11-03 20:58:59 -060085 {{ i18n.t('global.form.fieldRequired') }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080086 </template>
Surya Venkatesan90300e92024-08-01 12:40:20 +053087 <template v-else-if="v$.form.username.maxLength.$invalid">
Yoshie Muranakaeaa04802020-02-28 13:21:27 -080088 {{
jason westoverd36ac8a2025-11-03 20:58:59 -060089 i18n.t('global.form.lengthMustBeBetween', {
90 min: 1,
91 max: 16,
92 })
Yoshie Muranakaeaa04802020-02-28 13:21:27 -080093 }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080094 </template>
Surya Venkatesan90300e92024-08-01 12:40:20 +053095 <template v-else-if="v$.form.username.pattern.$invalid">
jason westoverd36ac8a2025-11-03 20:58:59 -060096 {{ i18n.t('global.form.invalidFormat') }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -080097 </template>
98 </b-form-invalid-feedback>
99 </b-form-group>
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800100 <b-form-group
jason westoverd36ac8a2025-11-03 20:58:59 -0600101 :label="i18n.t('pageUserManagement.modal.privilege')"
Yoshie Muranakaa4b9e402020-03-06 14:59:46 -0800102 label-for="privilege"
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800103 >
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800104 <b-form-select
Yoshie Muranakaa4b9e402020-03-06 14:59:46 -0800105 id="privilege"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800106 v-model="form.privilege"
107 :options="privilegeTypes"
Sandeepa Singhb4406162021-07-26 15:05:39 +0530108 data-test-id="userManagement-select-privilege"
Surya Vde23ea22024-07-11 15:19:46 +0530109 :state="getValidationState(v$.form.privilege)"
aravinths12b021032024-05-22 21:29:50 +0530110 :disabled="!newUser && originalUsername === 'root'"
Surya Vde23ea22024-07-11 15:19:46 +0530111 @input="v$.form.privilege.$touch()"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800112 >
Yoshie Muranakabc0d61b2020-11-02 14:36:27 -0800113 <template #first>
114 <b-form-select-option :value="null" disabled>
jason westoverd36ac8a2025-11-03 20:58:59 -0600115 {{ i18n.t('global.form.selectAnOption') }}
Yoshie Muranakabc0d61b2020-11-02 14:36:27 -0800116 </b-form-select-option>
117 </template>
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800118 </b-form-select>
119 <b-form-invalid-feedback role="alert">
Surya Venkatesan90300e92024-08-01 12:40:20 +0530120 <template v-if="v$.form.privilege.required.$invalid">
jason westoverd36ac8a2025-11-03 20:58:59 -0600121 {{ i18n.t('global.form.fieldRequired') }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800122 </template>
123 </b-form-invalid-feedback>
124 </b-form-group>
125 </b-col>
126 <b-col>
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800127 <b-form-group
jason westoverd36ac8a2025-11-03 20:58:59 -0600128 :label="i18n.t('pageUserManagement.modal.userPassword')"
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800129 label-for="password"
130 >
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800131 <b-form-text id="password-help-block">
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800132 {{
jason westoverd36ac8a2025-11-03 20:58:59 -0600133 i18n.t('pageUserManagement.modal.passwordMustBeBetween', {
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800134 min: passwordRequirements.minLength,
Derick Montague602e98a2020-10-21 16:20:00 -0500135 max: passwordRequirements.maxLength,
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800136 })
137 }}
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800138 </b-form-text>
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800139 <input-password-toggle>
140 <b-form-input
141 id="password"
142 v-model="form.password"
143 type="password"
jason westoverd36ac8a2025-11-03 20:58:59 -0600144 autocomplete="new-password"
Sandeepa Singhb4406162021-07-26 15:05:39 +0530145 data-test-id="userManagement-input-password"
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800146 aria-describedby="password-help-block"
Surya Vde23ea22024-07-11 15:19:46 +0530147 :state="getValidationState(v$.form.password)"
Dixsie Wolmers5ea16782020-07-27 17:50:43 -0500148 class="form-control-with-button"
Surya Vde23ea22024-07-11 15:19:46 +0530149 @input="v$.form.password.$touch()"
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800150 />
151 <b-form-invalid-feedback role="alert">
Surya Venkatesan90300e92024-08-01 12:40:20 +0530152 <template v-if="v$.form.password.required.$invalid">
jason westoverd36ac8a2025-11-03 20:58:59 -0600153 {{ i18n.t('global.form.fieldRequired') }}
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800154 </template>
155 <template
156 v-if="
Surya Venkatesan90300e92024-08-01 12:40:20 +0530157 v$.form.password.minLength.$invalid ||
158 v$.form.password.maxLength.$invalid
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800159 "
160 >
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800161 {{
jason westoverd36ac8a2025-11-03 20:58:59 -0600162 i18n.t('pageUserManagement.modal.passwordMustBeBetween', {
Sandeepa Singhb4406162021-07-26 15:05:39 +0530163 min: passwordRequirements.minLength,
164 max: passwordRequirements.maxLength,
165 })
Yoshie Muranakaeaa04802020-02-28 13:21:27 -0800166 }}
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800167 </template>
168 </b-form-invalid-feedback>
169 </input-password-toggle>
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800170 </b-form-group>
171 <b-form-group
jason westoverd36ac8a2025-11-03 20:58:59 -0600172 :label="i18n.t('pageUserManagement.modal.confirmUserPassword')"
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800173 label-for="password-confirmation"
174 >
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800175 <input-password-toggle>
176 <b-form-input
177 id="password-confirmation"
178 v-model="form.passwordConfirmation"
Sandeepa Singhb4406162021-07-26 15:05:39 +0530179 data-test-id="userManagement-input-passwordConfirmation"
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800180 type="password"
jason westoverd36ac8a2025-11-03 20:58:59 -0600181 autocomplete="new-password"
Surya Vde23ea22024-07-11 15:19:46 +0530182 :state="getValidationState(v$.form.passwordConfirmation)"
Dixsie Wolmers5ea16782020-07-27 17:50:43 -0500183 class="form-control-with-button"
Surya Vde23ea22024-07-11 15:19:46 +0530184 @input="v$.form.passwordConfirmation.$touch()"
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800185 />
186 <b-form-invalid-feedback role="alert">
Surya Venkatesan90300e92024-08-01 12:40:20 +0530187 <template
188 v-if="v$.form.passwordConfirmation.required.$invalid"
189 >
jason westoverd36ac8a2025-11-03 20:58:59 -0600190 {{ i18n.t('global.form.fieldRequired') }}
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800191 </template>
192 <template
Surya Venkatesan90300e92024-08-01 12:40:20 +0530193 v-else-if="
194 v$.form.passwordConfirmation.sameAsPassword.$invalid
195 "
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800196 >
jason westoverd36ac8a2025-11-03 20:58:59 -0600197 {{ i18n.t('pageUserManagement.modal.passwordsDoNotMatch') }}
Yoshie Muranaka4ee8d292020-02-20 07:29:58 -0800198 </template>
199 </b-form-invalid-feedback>
200 </input-password-toggle>
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800201 </b-form-group>
202 </b-col>
203 </b-row>
204 </b-container>
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800205 </b-form>
jason westoverd36ac8a2025-11-03 20:58:59 -0600206 <template #footer="{ cancel }">
Dixsie Wolmersfe1e6582020-07-15 11:18:12 -0500207 <b-button
208 variant="secondary"
Sandeepa Singhb4406162021-07-26 15:05:39 +0530209 data-test-id="userManagement-button-cancel"
Dixsie Wolmersfe1e6582020-07-15 11:18:12 -0500210 @click="cancel()"
211 >
jason westoverd36ac8a2025-11-03 20:58:59 -0600212 {{ i18n.t('global.action.cancel') }}
Yoshie Muranaka9a9092d2020-05-04 08:24:21 -0700213 </b-button>
Dixsie Wolmersfe1e6582020-07-15 11:18:12 -0500214 <b-button
215 form="form-user"
Sandeepa Singhb4406162021-07-26 15:05:39 +0530216 data-test-id="userManagement-button-submit"
Dixsie Wolmersfe1e6582020-07-15 11:18:12 -0500217 type="submit"
218 variant="primary"
219 @click="onOk"
220 >
Yoshie Muranaka9a9092d2020-05-04 08:24:21 -0700221 <template v-if="newUser">
jason westoverd36ac8a2025-11-03 20:58:59 -0600222 {{ i18n.t('pageUserManagement.addUser') }}
Yoshie Muranaka9a9092d2020-05-04 08:24:21 -0700223 </template>
224 <template v-else>
jason westoverd36ac8a2025-11-03 20:58:59 -0600225 {{ i18n.t('global.action.save') }}
Yoshie Muranaka9a9092d2020-05-04 08:24:21 -0700226 </template>
227 </b-button>
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800228 </template>
229 </b-modal>
230</template>
231
232<script>
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800233import {
234 required,
235 maxLength,
236 minLength,
Derick Montague602e98a2020-10-21 16:20:00 -0500237 requiredIf,
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700238} from '@vuelidate/validators';
Surya Venkatesan90300e92024-08-01 12:40:20 +0530239import { helpers, sameAs } from 'vuelidate/lib/validators';
SurenNeware61859092020-10-01 09:37:32 +0530240import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700241import { useVuelidate } from '@vuelidate/core';
242
SurenNeware61859092020-10-01 09:37:32 +0530243import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
244import Alert from '@/components/Global/Alert';
Surya Vde23ea22024-07-11 15:19:46 +0530245import { useI18n } from 'vue-i18n';
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800246
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800247export default {
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -0700248 components: { Alert, InputPasswordToggle },
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800249 mixins: [VuelidateMixin],
Derick Montague09e45cd2020-01-23 15:45:57 -0600250 props: {
251 user: {
252 type: Object,
Derick Montague602e98a2020-10-21 16:20:00 -0500253 default: null,
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800254 },
255 passwordRequirements: {
256 type: Object,
Derick Montague602e98a2020-10-21 16:20:00 -0500257 required: true,
258 },
Derick Montague09e45cd2020-01-23 15:45:57 -0600259 },
Hariharan Rangasamyc5d60f52025-10-31 12:58:56 +0530260 emits: ['ok', 'hidden'],
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700261 setup() {
jason westoverd36ac8a2025-11-03 20:58:59 -0600262 const i18n = useI18n();
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700263 return {
264 v$: useVuelidate(),
jason westoverd36ac8a2025-11-03 20:58:59 -0600265 i18n,
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700266 };
267 },
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800268 data() {
269 return {
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800270 originalUsername: '',
271 form: {
272 status: true,
273 username: '',
Yoshie Muranakabc0d61b2020-11-02 14:36:27 -0800274 privilege: null,
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800275 password: '',
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -0700276 passwordConfirmation: '',
Derick Montague602e98a2020-10-21 16:20:00 -0500277 manualUnlock: false,
278 },
Sivaprabu Ganesan28974472023-01-05 18:52:51 +0530279 disabled: this.$store.getters['global/username'],
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800280 };
281 },
282 computed: {
jason westoverd36ac8a2025-11-03 20:58:59 -0600283 modalTitle() {
284 return this.newUser
285 ? this.i18n.t('pageUserManagement.addUser')
286 : this.i18n.t('pageUserManagement.editUser');
287 },
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800288 newUser() {
289 return this.user ? false : true;
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -0700290 },
291 accountSettings() {
Sandeepa Singhb4406162021-07-26 15:05:39 +0530292 return this.$store.getters['userManagement/accountSettings'];
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -0700293 },
294 manualUnlockPolicy() {
295 return !this.accountSettings.accountLockoutDuration;
Yoshie Muranaka038a9da2020-04-17 11:22:56 -0700296 },
297 privilegeTypes() {
Sandeepa Singhb4406162021-07-26 15:05:39 +0530298 return this.$store.getters['userManagement/accountRoles'];
Derick Montague602e98a2020-10-21 16:20:00 -0500299 },
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800300 },
301 watch: {
Derick Montague602e98a2020-10-21 16:20:00 -0500302 user: function (value) {
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800303 if (value === null) return;
304 this.originalUsername = value.username;
305 this.form.username = value.username;
306 this.form.status = value.Enabled;
307 this.form.privilege = value.privilege;
Derick Montague602e98a2020-10-21 16:20:00 -0500308 },
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800309 },
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800310 validations() {
311 return {
312 form: {
313 status: {
Derick Montague602e98a2020-10-21 16:20:00 -0500314 required,
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800315 },
316 username: {
317 required,
318 maxLength: maxLength(16),
Derick Montague602e98a2020-10-21 16:20:00 -0500319 pattern: helpers.regex('pattern', /^([a-zA-Z_][a-zA-Z0-9_]*)/),
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800320 },
321 privilege: {
Derick Montague602e98a2020-10-21 16:20:00 -0500322 required,
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800323 },
324 password: {
Derick Montague602e98a2020-10-21 16:20:00 -0500325 required: requiredIf(function () {
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800326 return this.requirePassword();
327 }),
328 minLength: minLength(this.passwordRequirements.minLength),
Derick Montague602e98a2020-10-21 16:20:00 -0500329 maxLength: maxLength(this.passwordRequirements.maxLength),
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800330 },
331 passwordConfirmation: {
Derick Montague602e98a2020-10-21 16:20:00 -0500332 required: requiredIf(function () {
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800333 return this.requirePassword();
334 }),
Derick Montague602e98a2020-10-21 16:20:00 -0500335 sameAsPassword: sameAs('password'),
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -0700336 },
Derick Montague602e98a2020-10-21 16:20:00 -0500337 manualUnlock: {},
338 },
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800339 };
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800340 },
341 methods: {
342 handleSubmit() {
343 let userData = {};
344
345 if (this.newUser) {
Surya Vde23ea22024-07-11 15:19:46 +0530346 this.v$.$touch();
347 if (this.v$.$invalid) return;
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800348 userData.username = this.form.username;
349 userData.status = this.form.status;
350 userData.privilege = this.form.privilege;
351 userData.password = this.form.password;
352 } else {
Surya Vde23ea22024-07-11 15:19:46 +0530353 if (this.v$.$invalid) return;
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800354 userData.originalUsername = this.originalUsername;
Surya Vde23ea22024-07-11 15:19:46 +0530355 if (this.v$.form.status.$dirty) {
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800356 userData.status = this.form.status;
357 }
Surya Vde23ea22024-07-11 15:19:46 +0530358 if (this.v$.form.username.$dirty) {
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800359 userData.username = this.form.username;
360 }
Surya Vde23ea22024-07-11 15:19:46 +0530361 if (this.v$.form.privilege.$dirty) {
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800362 userData.privilege = this.form.privilege;
363 }
Surya Vde23ea22024-07-11 15:19:46 +0530364 if (this.v$.form.password.$dirty) {
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800365 userData.password = this.form.password;
366 }
Surya Vde23ea22024-07-11 15:19:46 +0530367 if (this.v$.form.manualUnlock.$dirty) {
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -0700368 // If form manualUnlock control $dirty then
369 // set user Locked property to false
370 userData.locked = false;
371 }
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800372 if (Object.entries(userData).length === 1) {
373 this.closeModal();
374 return;
375 }
376 }
377
378 this.$emit('ok', { isNewUser: this.newUser, userData });
379 this.closeModal();
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800380 },
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800381 closeModal() {
382 this.$nextTick(() => {
383 this.$refs.modal.hide();
384 });
385 },
386 resetForm() {
387 this.form.originalUsername = '';
388 this.form.status = true;
389 this.form.username = '';
Yoshie Muranakabc0d61b2020-11-02 14:36:27 -0800390 this.form.privilege = null;
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800391 this.form.password = '';
392 this.form.passwordConfirmation = '';
Surya Vde23ea22024-07-11 15:19:46 +0530393 this.v$.$reset();
Yoshie Muranaka791622b2020-04-17 13:55:16 -0700394 this.$emit('hidden');
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800395 },
396 requirePassword() {
397 if (this.newUser) return true;
Surya Vde23ea22024-07-11 15:19:46 +0530398 if (this.v$.form.password.$dirty) return true;
399 if (this.v$.form.passwordConfirmation.$dirty) return true;
Yoshie Muranaka4b0fc1d2020-01-06 07:36:16 -0800400 return false;
401 },
402 onOk(bvModalEvt) {
403 // prevent modal close
404 bvModalEvt.preventDefault();
405 this.handleSubmit();
Derick Montague602e98a2020-10-21 16:20:00 -0500406 },
407 },
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800408};
409</script>