summaryrefslogtreecommitdiff
path: root/src/views/AccessControl/LocalUserManagement/ModalUser.vue
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/AccessControl/LocalUserManagement/ModalUser.vue')
-rw-r--r--src/views/AccessControl/LocalUserManagement/ModalUser.vue269
1 files changed, 39 insertions, 230 deletions
diff --git a/src/views/AccessControl/LocalUserManagement/ModalUser.vue b/src/views/AccessControl/LocalUserManagement/ModalUser.vue
index 59e57062..d84fb6d5 100644
--- a/src/views/AccessControl/LocalUserManagement/ModalUser.vue
+++ b/src/views/AccessControl/LocalUserManagement/ModalUser.vue
@@ -1,5 +1,9 @@
<template>
- <b-modal id="modal-user" ref="modal" @ok="onOk" @hidden="resetForm">
+ <b-modal
+ id="modal-user"
+ @ok="$emit('ok', { newUser, form })"
+ @hidden="$emit('hidden')"
+ >
<template v-slot:modal-title>
<template v-if="newUser">
Add user
@@ -8,116 +12,27 @@
Edit user
</template>
</template>
- <b-form novalidate @submit="handleSubmit">
- <b-container>
- <b-row>
- <b-col>
- <b-form-group label="Account status">
- <b-form-radio
- v-model="form.status"
- name="user-status"
- :value="true"
- @input="$v.form.status.$touch()"
- >
- Enabled
- </b-form-radio>
- <b-form-radio
- v-model="form.status"
- name="user-status"
- :value="false"
- @input="$v.form.status.$touch()"
- >
- Disabled
- </b-form-radio>
- </b-form-group>
- <b-form-group label-for="Username">
- <b-form-text id="username-help-block">
- Cannot start with a number
- <br />
- No special characters except underscore
- </b-form-text>
- <b-form-input
- v-model="form.username"
- type="text"
- aria-describedby="username-help-block"
- :state="getValidationState('username')"
- :disabled="!newUser && originalUsername === 'root'"
- />
- <b-form-invalid-feedback role="alert">
- <template v-if="!$v.form.username.required">
- Field required
- </template>
- <template v-else-if="!$v.form.username.maxLength">
- Length must be between 1 – 16 characters
- </template>
- <template v-else-if="!$v.form.username.pattern">
- Invalid format
- </template>
- </b-form-invalid-feedback>
- </b-form-group>
- <b-form-group label-for="Privilege">
- <b-form-select
- v-model="form.privilege"
- required
- :options="privilegeTypes"
- :state="getValidationState('privilege')"
- @input="$v.form.privilege.$touch()"
- >
- </b-form-select>
- <b-form-invalid-feedback role="alert">
- <template v-if="!$v.form.privilege.required">
- Field required
- </template>
- </b-form-invalid-feedback>
- </b-form-group>
- </b-col>
- <b-col>
- <b-form-group label-for="User password">
- <b-form-text id="password-help-block" text-variant="black">
- <!-- TODO: Should be dynamic values -->
- Password must between 8 – 20 characters
- </b-form-text>
- <b-form-input
- v-model="form.password"
- type="password"
- aria-describedby="password-help-block"
- :state="getValidationState('password')"
- @input="$v.form.password.$touch()"
- />
- <b-form-invalid-feedback role="alert">
- <template v-if="!$v.form.password.required">
- Field required
- </template>
- <template
- v-if="
- !$v.form.password.minLength || !$v.form.password.maxLength
- "
- >
- Length must be between 8 – 20 characters
- </template>
- </b-form-invalid-feedback>
- </b-form-group>
- <b-form-group label-for="Confirm user password">
- <b-form-input
- v-model="form.passwordConfirmation"
- type="password"
- :state="getValidationState('passwordConfirmation')"
- @input="$v.form.passwordConfirmation.$touch()"
- />
- <b-form-invalid-feedback role="alert">
- <template v-if="!$v.form.passwordConfirmation.required">
- Field required
- </template>
- <template
- v-else-if="!$v.form.passwordConfirmation.sameAsPassword"
- >
- Passwords do not match
- </template>
- </b-form-invalid-feedback>
- </b-form-group>
- </b-col>
- </b-row>
- </b-container>
+ <b-form>
+ <b-form-group label="Account status">
+ <b-form-radio v-model="form.status" name="user-status" value="true"
+ >Enabled</b-form-radio
+ >
+ <b-form-radio v-model="form.status" name="user-status" value="false"
+ >Disabled</b-form-radio
+ >
+ </b-form-group>
+ <b-form-group label="Username">
+ <b-form-input v-model="form.username" type="text" />
+ </b-form-group>
+ <b-form-group label="Privilege">
+ <b-form-select
+ v-model="form.privilege"
+ :options="privilegeTypes"
+ ></b-form-select>
+ </b-form-group>
+ <b-form-group label="Password">
+ <b-form-input v-model="form.password" type="password" />
+ </b-form-group>
</b-form>
<template v-slot:modal-ok>
<template v-if="newUser">
@@ -131,15 +46,6 @@
</template>
<script>
-import {
- required,
- maxLength,
- minLength,
- sameAs,
- helpers,
- requiredIf
-} from 'vuelidate/lib/validators';
-
export default {
props: {
user: {
@@ -149,122 +55,25 @@ export default {
},
data() {
return {
- privilegeTypes: ['Administrator', 'Operator', 'ReadOnly', 'NoAccess'],
- originalUsername: '',
- form: {
- status: true,
- username: '',
- privilege: '',
- password: '',
- passwordConfirmation: ''
- }
+ privilegeTypes: ['Administrator', 'Operator', 'ReadOnly', 'NoAccess']
};
},
computed: {
newUser() {
return this.user ? false : true;
- }
- },
- watch: {
- user: function(value) {
- if (value === null) return;
- this.originalUsername = value.username;
- this.form.username = value.username;
- this.form.status = value.Enabled;
- this.form.privilege = value.privilege;
- }
- },
- validations: {
- form: {
- status: {
- required
- },
- username: {
- required,
- maxLength: maxLength(16),
- pattern: helpers.regex('pattern', /^([a-zA-Z_][a-zA-Z0-9_]*)/)
- },
- privilege: {
- required
- },
- password: {
- required: requiredIf(function() {
- return this.requirePassword();
- }),
- minLength: minLength(8),
- maxLength: maxLength(20)
- },
- passwordConfirmation: {
- required: requiredIf(function() {
- return this.requirePassword();
- }),
- sameAsPassword: sameAs('password')
- }
- }
- },
- methods: {
- handleSubmit() {
- let userData = {};
-
- if (this.newUser) {
- this.$v.$touch();
- if (this.$v.$invalid) return;
- userData.username = this.form.username;
- userData.status = this.form.status;
- userData.privilege = this.form.privilege;
- userData.password = this.form.password;
- } else {
- if (this.$v.$invalid) return;
- userData.originalUsername = this.originalUsername;
- if (this.$v.form.status.$dirty) {
- userData.status = this.form.status;
- }
- if (this.$v.form.username.$dirty) {
- userData.username = this.form.username;
- }
- if (this.$v.form.privilege.$dirty) {
- userData.privilege = this.form.privilege;
- }
- if (this.$v.form.password.$dirty) {
- userData.password = this.form.password;
- }
- if (Object.entries(userData).length === 1) {
- this.closeModal();
- return;
- }
- }
-
- this.$emit('ok', { isNewUser: this.newUser, userData });
- this.closeModal();
- },
- closeModal() {
- this.$nextTick(() => {
- this.$refs.modal.hide();
- });
- },
- resetForm() {
- this.form.originalUsername = '';
- this.form.status = true;
- this.form.username = '';
- this.form.privilege = '';
- this.form.password = '';
- this.form.passwordConfirmation = '';
- this.$v.$reset();
- },
- getValidationState(name) {
- const { $dirty, $error } = this.$v.form[name];
- return $dirty ? !$error : null;
- },
- requirePassword() {
- if (this.newUser) return true;
- if (this.$v.form.password.$dirty) return true;
- if (this.$v.form.passwordConfirmation.$dirty) return true;
- return false;
},
- onOk(bvModalEvt) {
- // prevent modal close
- bvModalEvt.preventDefault();
- this.handleSubmit();
+ form() {
+ return {
+ originalUsername: this.newUser ? null : this.user.username,
+ status: this.newUser
+ ? true
+ : this.user.status === 'Enabled'
+ ? true
+ : false,
+ username: this.newUser ? '' : this.user.username,
+ privilege: this.newUser ? '' : this.user.privilege,
+ password: ''
+ };
}
}
};