Chatwoot/app/javascript/dashboard/routes/dashboard/settings/agents/AddAgent.vue
Pranav Raj S 2ce7438c79 [Refactor] Cleanup agent store and actions (#373)
* Cleanup agent store and actions

* Move set/create/update/destroy to helpers

* Update mutation specs

* Add specs for API helper

* Fix edit/delete action visibility

* Add actions specs

* Remove unused API helpers

* Remove duplicates

* Remove duplicates

* Fix duplicate
2019-12-21 22:54:35 +05:30

136 lines
3.7 KiB
Vue

<template>
<woot-modal :show.sync="show" :on-close="onClose">
<div class="column content-box">
<woot-modal-header
:header-image="headerImage"
:header-title="$t('AGENT_MGMT.ADD.TITLE')"
:header-content="$t('AGENT_MGMT.ADD.DESC')"
/>
<form class="row" @submit.prevent="addAgent()">
<div class="medium-12 columns">
<label :class="{ error: $v.agentName.$error }">
{{ $t('AGENT_MGMT.ADD.FORM.NAME.LABEL') }}
<input
v-model.trim="agentName"
type="text"
:placeholder="$t('AGENT_MGMT.ADD.FORM.NAME.PLACEHOLDER')"
@input="$v.agentName.$touch"
/>
</label>
</div>
<div class="medium-12 columns">
<label :class="{ error: $v.agentType.$error }">
{{ $t('AGENT_MGMT.ADD.FORM.AGENT_TYPE.LABEL') }}
<multiselect
v-model="agentType"
:options="agentTypeList"
:searchable="false"
label="label"
:placeholder="$t('AGENT_MGMT.ADD.FORM.AGENT_TYPE.PLACEHOLDER')"
:allow-empty="true"
:close-on-select="true"
@select="setPageName"
/>
<span v-if="$v.agentType.$error" class="message">
{{ $t('AGENT_MGMT.ADD.FORM.AGENT_TYPE.ERROR') }}
</span>
</label>
</div>
<div class="medium-12 columns">
<label :class="{ error: $v.agentEmail.$error }">
{{ $t('AGENT_MGMT.ADD.FORM.EMAIL.LABEL') }}
<input
v-model.trim="agentEmail"
type="text"
:placeholder="$t('AGENT_MGMT.ADD.FORM.EMAIL.PLACEHOLDER')"
@input="$v.agentEmail.$touch"
/>
</label>
</div>
<div class="modal-footer">
<div class="medium-12 columns">
<woot-submit-button
:disabled="
$v.agentEmail.$invalid ||
$v.agentName.$invalid ||
uiFlags.isCreating
"
:button-text="$t('AGENT_MGMT.ADD.FORM.SUBMIT')"
:loading="uiFlags.isCreating"
/>
<a @click="onClose">Cancel</a>
</div>
</div>
</form>
</div>
</woot-modal>
</template>
<script>
/* global bus */
/* eslint no-console: 0 */
import { required, minLength, email } from 'vuelidate/lib/validators';
import { mapGetters } from 'vuex';
const agentImg = require('assets/images/agent.svg');
export default {
props: ['onClose'],
data() {
return {
agentName: '',
agentEmail: '',
agentType: this.$t('AGENT_MGMT.AGENT_TYPES')[1],
vertical: 'bottom',
horizontal: 'center',
agentTypeList: this.$t('AGENT_MGMT.AGENT_TYPES'),
show: true,
};
},
computed: {
headerImage() {
return agentImg;
},
...mapGetters({
uiFlags: 'agents/getUIFlags',
}),
},
validations: {
agentName: {
required,
minLength: minLength(4),
},
agentEmail: {
required,
email,
},
agentType: {
required,
},
},
methods: {
setPageName({ name }) {
this.$v.agentType.$touch();
this.agentType = name;
},
showAlert(message) {
bus.$emit('newToastMessage', message);
},
async addAgent() {
try {
await this.$store.dispatch('agents/create', {
name: this.agentName,
email: this.agentEmail,
role: this.agentType.name.toLowerCase(),
});
this.showAlert(this.$t('AGENT_MGMT.ADD.API.SUCCESS_MESSAGE'));
this.onClose();
} catch (error) {
this.showAlert(this.$t('AGENT_MGMT.ADD.API.ERROR_MESSAGE'));
}
},
},
};
</script>