Removes all the old vuelidate syntax and replaced it with the new `useValidate` composable and the `v$` helper. | Component | Path | Migrated | Tested | |------------------------------------|--------------------------------------------------------------|-----------------------------------------------|--------| | Login page | app/javascript/v3/views/login/Index.vue | ✅ | ✅ | | Custom Attributes settings page | app/javascript/dashboard/components/CustomAttribute.vue | ✅ | ✅ | | Account settings page | app/javascript/dashboard/routes/dashboard/settings/account/Index.vue | ✅ | ✅ | | Add Account Modal | app/javascript/dashboard/components/layout/sidebarComponents/AddAccountModal.vue | ✅ | ✅ | | AICTA Modal | app/javascript/dashboard/components/widgets/AICTAModal.vue | ✅ | ✅ | | Conversation Advanced Filters | app/javascript/dashboard/components/widgets/conversation/ConversationAdvancedFilter.vue | deprecated `$each` prop in validations object | | | Email Transript Modal | app/javascript/dashboard/components/widgets/conversation/EmailTranscriptModal.vue | ✅ | ✅ | | Linear Create Issue | app/javascript/dashboard/components/widgets/conversation/linear/CreateIssue.vue | ✅ | ✅ | | Template Parser | app/javascript/dashboard/components/widgets/conversation/WhatsappTemplates/TemplateParser.vue | ✅ | | | Delete Confirmation Modal | app/javascript/dashboard/components/widgets/modal/ConfirmDeleteModal.vue | ✅ | ✅ | | Add Custom Attribute | app/javascript/dashboard/modules/contact/components/AddCustomAttribute.vue | ✅ | ✅ | | Merge Contacts | app/javascript/dashboard/modules/contact/components/MergeContact.vue | ✅ | ✅ | | Contacts Advanced Filters | app/javascript/dashboard/routes/dashboard/contacts/components/ContactsAdvancedFilters.vue | deprecated `$each` prop in validations object | | | Contact Form | app/javascript/dashboard/routes/dashboard/conversation/contact/ContactForm.vue | ✅ | ✅ | | Conversation Form | app/javascript/dashboard/routes/dashboard/conversation/contact/ConversationForm.vue | ✅ | ✅ | | Add Custom Views | app/javascript/dashboard/routes/dashboard/customviews/AddCustomViews.vue | ✅ | ✅ | | Add Locale | app/javascript/dashboard/routes/dashboard/helpcenter/components/AddLocale.vue | ✅ | ✅ | | Portal Settings Basic Form | /app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSettingsBasicForm.vue | ✅ | ✅ | | Portal Settings Customization Form | /app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSettingsCustomizationForm.vue | ✅ | ✅ | | Add Category | app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/AddCategory.vue | ✅ | ✅ | | Edit Category | app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/EditCategory.vue | ✅ | ✅ | | CSML Bot Editor | app/javascript/dashboard/routes/dashboard/settings/agentBots/components/CSMLBotEditor.vue | ✅ | ✅ | | Add Agent | app/javascript/dashboard/routes/dashboard/settings/agents/AddAgent.vue | ✅ | ✅ | | Edit Agent | app/javascript/dashboard/routes/dashboard/settings/agents/EditAgent.vue | ✅ | ✅ | | Add Attribute | app/javascript/dashboard/routes/dashboard/settings/attributes/AddAttribute.vue | ✅ | ✅ | | Edit Attribute | app/javascript/dashboard/routes/dashboard/settings/attributes/EditAttribute.vue | ✅ | ✅ | | Add Campaign | app/javascript/dashboard/routes/dashboard/settings/campaigns/AddCampaign.vue | ✅ | ✅ | | Edit Campaign | app/javascript/dashboard/routes/dashboard/settings/campaigns/EditCampaign.vue | ✅ | ✅ | | Add Canned | app/javascript/dashboard/routes/dashboard/settings/canned/AddCanned.vue | ✅ | ✅ | | Edit Canned | app/javascript/dashboard/routes/dashboard/settings/canned/EditCanned.vue | ✅ | ✅ | | IMAP Settings | app/javascript/dashboard/routes/dashboard/settings/inbox/ImapSettings.vue | ✅ | ✅ | | SMTP Settings | app/javascript/dashboard/routes/dashboard/settings/inbox/SmtpSettings.vue | ✅ | ✅ | | Widget Builder | app/javascript/dashboard/routes/dashboard/settings/inbox/WidgetBuilder.vue | ✅ | ✅ | | 360 Dialog Whatsapp | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/360DialogWhatsapp.vue | ✅ | ✅ | | Inbox API settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Api.vue | ✅ | ✅ | | SMS Bandwidth settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/BandwidthSms.vue | ✅ | ✅ | | Cloud Whatsapp Settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/CloudWhatsapp.vue | ✅ | ✅ | | Facebook Settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Facebook.vue | ✅ | ✅ | | Line Settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Line.vue | ✅ | ✅ | | Telegram Settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Telegram.vue | ✅ | ✅ | | Twillio Settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Twilio.vue | ✅ | ✅ | | Forward To option settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/emailChannels/ForwardToOption.vue | ✅ | ✅ | | Microsoft settings | app/javascript/dashboard/routes/dashboard/settings/inbox/channels/emailChannels/Microsoft.vue | ✅ | ✅ | | Collaborators page | app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/CollaboratorsPage.vue | ✅ | ✅ | | Configuration Page | app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue | ✅ | ✅ | | Dashboard App Modal Settings | app/javascript/dashboard/routes/dashboard/settings/integrations/DashboardApps/DashboardAppModal.vue | ✅ | ✅ | | Settings - Webhook Form | app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookForm.vue | ✅ | ✅ | | Macro Form | app/javascript/dashboard/routes/dashboard/settings/macros/MacroForm.vue | deprecated `$each` prop in validations object | | | Change Password | app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue | ✅ | ✅ | | settings - User Basic Details | app/javascript/dashboard/routes/dashboard/settings/profile/UserBasicDetails.vue | ✅ | ✅ | | Password Edit | app/javascript/v3/views/auth/password/Edit.vue | ✅ | ✅ | | Password Reset form | app/javascript/v3/views/auth/reset/password/Index.vue | ✅ | ✅ | | Signup form | app/javascript/v3/views/auth/signup/components/Signup/Form.vue | ✅ | ✅ | | Login form | app/javascript/v3/views/login/Index.vue | ✅ | ✅ | | Custom Attributes | app/javascript/dashboard/components/CustomAttribute.vue | ✅ | ✅ | | Reply Email Head | app/javascript/dashboard/components/widgets/conversation/ReplyEmailHead.vue | ✅ | ✅ | | Methods Mixin | app/javascript/dashboard/mixins/automations/methodsMixin.js | ✅ | ✅ | | Validations mixin | app/javascript/dashboard/routes/dashboard/settings/labels/validationMixin.js | ✅ | ✅ | | SLA Form | app/javascript/dashboard/routes/dashboard/settings/sla/SlaForm.vue | ✅ | ✅ | | SLA Time Input | app/javascript/dashboard/routes/dashboard/settings/sla/SlaTimeInput.vue | ✅ | ✅ | | SLA Validation Mixin | app/javascript/dashboard/routes/dashboard/settings/sla/validationMixin.js | ✅ | ✅ | | Team Form | app/javascript/dashboard/routes/dashboard/settings/teams/TeamForm.vue | ✅ | ✅ | | Add Agents | app/javascript/dashboard/routes/dashboard/settings/teams/Create/AddAgents.vue | ✅ | ✅ | | Edit Agents | app/javascript/dashboard/routes/dashboard/settings/teams/Edit/EditAgents.vue | ✅ | ✅ | --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Shivam Mishra <scm.mymail@gmail.com> Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: Pranav <pranav@chatwoot.com>
174 lines
4.9 KiB
Vue
174 lines
4.9 KiB
Vue
<template>
|
|
<div>
|
|
<div v-if="toEmails">
|
|
<div class="input-group small" :class="{ error: v$.toEmailsVal.$error }">
|
|
<label class="input-group-label">
|
|
{{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.TO') }}
|
|
</label>
|
|
<div class="rounded-none flex-1 min-w-0 m-0 whitespace-nowrap">
|
|
<woot-input
|
|
v-model.trim="v$.toEmailsVal.$model"
|
|
type="text"
|
|
class="[&>input]:!mb-0 [&>input]:border-transparent [&>input]:h-8 [&>input]:text-sm [&>input]:!border-0 [&>input]:border-none"
|
|
:class="{ error: v$.toEmailsVal.$error }"
|
|
:placeholder="$t('CONVERSATION.REPLYBOX.EMAIL_HEAD.CC.PLACEHOLDER')"
|
|
@blur="onBlur"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="input-group-wrap">
|
|
<div class="input-group small" :class="{ error: v$.ccEmailsVal.$error }">
|
|
<label class="input-group-label">
|
|
{{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.CC.LABEL') }}
|
|
</label>
|
|
<div class="rounded-none flex-1 min-w-0 m-0 whitespace-nowrap">
|
|
<woot-input
|
|
v-model.trim="v$.ccEmailsVal.$model"
|
|
class="[&>input]:!mb-0 [&>input]:border-transparent [&>input]:h-8 [&>input]:text-sm [&>input]:!border-0 [&>input]:border-none"
|
|
type="text"
|
|
:class="{ error: v$.ccEmailsVal.$error }"
|
|
:placeholder="$t('CONVERSATION.REPLYBOX.EMAIL_HEAD.CC.PLACEHOLDER')"
|
|
@blur="onBlur"
|
|
/>
|
|
</div>
|
|
<woot-button
|
|
v-if="!showBcc"
|
|
variant="clear"
|
|
size="small"
|
|
@click="handleAddBcc"
|
|
>
|
|
{{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.ADD_BCC') }}
|
|
</woot-button>
|
|
</div>
|
|
<span v-if="v$.ccEmailsVal.$error" class="message">
|
|
{{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.CC.ERROR') }}
|
|
</span>
|
|
</div>
|
|
<div v-if="showBcc" class="input-group-wrap">
|
|
<div class="input-group small" :class="{ error: v$.bccEmailsVal.$error }">
|
|
<label class="input-group-label">
|
|
{{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.BCC.LABEL') }}
|
|
</label>
|
|
<div class="rounded-none flex-1 min-w-0 m-0 whitespace-nowrap">
|
|
<woot-input
|
|
v-model.trim="v$.bccEmailsVal.$model"
|
|
type="text"
|
|
class="[&>input]:!mb-0 [&>input]:border-transparent [&>input]:h-8 [&>input]:text-sm [&>input]:!border-0 [&>input]:border-none"
|
|
:class="{ error: v$.bccEmailsVal.$error }"
|
|
:placeholder="
|
|
$t('CONVERSATION.REPLYBOX.EMAIL_HEAD.BCC.PLACEHOLDER')
|
|
"
|
|
@blur="onBlur"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<span v-if="v$.bccEmailsVal.$error" class="message">
|
|
{{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.BCC.ERROR') }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { validEmailsByComma } from './helpers/emailHeadHelper';
|
|
import { useVuelidate } from '@vuelidate/core';
|
|
|
|
export default {
|
|
props: {
|
|
ccEmails: {
|
|
type: String,
|
|
default: '',
|
|
},
|
|
bccEmails: {
|
|
type: String,
|
|
default: '',
|
|
},
|
|
toEmails: {
|
|
type: String,
|
|
default: '',
|
|
},
|
|
},
|
|
setup() {
|
|
return { v$: useVuelidate() };
|
|
},
|
|
data() {
|
|
return {
|
|
showBcc: false,
|
|
ccEmailsVal: '',
|
|
bccEmailsVal: '',
|
|
toEmailsVal: '',
|
|
};
|
|
},
|
|
watch: {
|
|
bccEmails(newVal) {
|
|
if (newVal !== this.bccEmailsVal) {
|
|
this.bccEmailsVal = newVal;
|
|
}
|
|
},
|
|
ccEmails(newVal) {
|
|
if (newVal !== this.ccEmailsVal) {
|
|
this.ccEmailsVal = newVal;
|
|
}
|
|
},
|
|
toEmails(newVal) {
|
|
if (newVal !== this.toEmailsVal) {
|
|
this.toEmailsVal = newVal;
|
|
}
|
|
},
|
|
},
|
|
mounted() {
|
|
this.ccEmailsVal = this.ccEmails;
|
|
this.bccEmailsVal = this.bccEmails;
|
|
this.toEmailsVal = this.toEmails;
|
|
},
|
|
validations: {
|
|
ccEmailsVal: {
|
|
hasValidEmails(value) {
|
|
return validEmailsByComma(value);
|
|
},
|
|
},
|
|
bccEmailsVal: {
|
|
hasValidEmails(value) {
|
|
return validEmailsByComma(value);
|
|
},
|
|
},
|
|
toEmailsVal: {
|
|
hasValidEmails(value) {
|
|
return validEmailsByComma(value);
|
|
},
|
|
},
|
|
},
|
|
methods: {
|
|
handleAddBcc() {
|
|
this.showBcc = true;
|
|
},
|
|
onBlur() {
|
|
this.v$.$touch();
|
|
this.$emit('update:bccEmails', this.bccEmailsVal);
|
|
this.$emit('update:ccEmails', this.ccEmailsVal);
|
|
this.$emit('update:toEmails', this.toEmailsVal);
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.input-group-wrap .message {
|
|
@apply text-sm text-red-500 dark:text-red-500;
|
|
}
|
|
.input-group {
|
|
@apply border-b border-solid border-slate-75 dark:border-slate-700 my-1 flex items-center gap-2;
|
|
|
|
.input-group-label {
|
|
@apply border-transparent bg-transparent text-xs font-semibold pl-0;
|
|
}
|
|
}
|
|
|
|
.input-group.error {
|
|
@apply border-b-red-500 dark:border-b-red-500;
|
|
.input-group-label {
|
|
@apply text-red-500 dark:text-red-500;
|
|
}
|
|
}
|
|
</style>
|