diff --git a/app/javascript/dashboard/i18n/locale/en/contact.json b/app/javascript/dashboard/i18n/locale/en/contact.json index 803cd66cb..9234071d1 100644 --- a/app/javascript/dashboard/i18n/locale/en/contact.json +++ b/app/javascript/dashboard/i18n/locale/en/contact.json @@ -20,6 +20,7 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" }, diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue index 3899d1ddf..36c4a7b41 100644 --- a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue @@ -52,6 +52,8 @@ export default { return { showEditModal: false, showDeleteModal: false, + isEditingName: false, + editName: '', }; }, computed: { @@ -173,6 +175,38 @@ export default { openMergeModal() { this.$refs.mergeModal?.open(); }, + startEditingName() { + this.editName = this.contact.name || ''; + this.isEditingName = true; + this.$nextTick(() => { + this.$refs.nameInput?.focus(); + }); + }, + saveNameEdit() { + if (!this.isEditingName) return; + this.isEditingName = false; + const trimmed = this.editName.trim(); + if (trimmed && trimmed !== this.contact.name) { + this.updateContactField({ name: trimmed }); + } + }, + cancelNameEdit() { + this.isEditingName = false; + }, + onFieldUpdate(field, value) { + this.updateContactField({ [field]: value }); + }, + async updateContactField(attrs) { + try { + await this.$store.dispatch('contacts/update', { + id: this.contact.id, + ...attrs, + }); + useAlert(this.$t('CONTACT_FORM.SUCCESS_MESSAGE')); + } catch (error) { + useAlert(error.message || this.$t('CONTACT_FORM.ERROR_MESSAGE')); + } + }, }, }; @@ -194,10 +228,26 @@ export default {