diff --git a/app/javascript/dashboard/components/widgets/conversation/Message.vue b/app/javascript/dashboard/components/widgets/conversation/Message.vue
index 23db44ac7..a0fce569b 100644
--- a/app/javascript/dashboard/components/widgets/conversation/Message.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/Message.vue
@@ -124,6 +124,7 @@
:message="data"
@open="openContextMenu"
@close="closeContextMenu"
+ @reply-to="handleReplyTo"
/>
@@ -188,6 +189,10 @@ export default {
type: Boolean,
default: false,
},
+ inboxSupportsReply: {
+ type: Boolean,
+ default: false,
+ },
},
data() {
return {
@@ -269,6 +274,8 @@ export default {
copy: this.hasText,
delete: this.hasText || this.hasAttachments,
cannedResponse: this.isOutgoing && this.hasText,
+ replyTo:
+ this.isIncoming && !this.data.private && this.inboxSupportsReply,
};
},
contentAttributes() {
diff --git a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
index 38cba722a..1857a9e3b 100644
--- a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
@@ -42,6 +42,7 @@
:is-a-whatsapp-channel="isAWhatsAppChannel"
:has-instagram-story="hasInstagramStory"
:is-web-widget-inbox="isAWebWidgetInbox"
+ :inbox-supports-reply="inboxSupportsReply"
/>
@@ -110,7 +111,7 @@ import { mapGetters } from 'vuex';
import conversationMixin, {
filterDuplicateSourceMessages,
} from '../../../mixins/conversations';
-import inboxMixin from 'shared/mixins/inboxMixin';
+import inboxMixin, { INBOX_FEATURES } from 'shared/mixins/inboxMixin';
import configMixin from 'shared/mixins/configMixin';
import eventListenerMixins from 'shared/mixins/eventListenerMixins';
import aiMixin from 'dashboard/mixins/aiMixin';
@@ -316,6 +317,9 @@ export default {
unreadMessageCount() {
return this.currentChat.unread_count || 0;
},
+ inboxSupportsReply() {
+ return this.inboxHasFeature(INBOX_FEATURES.REPLY_TO);
+ },
},
watch: {
diff --git a/app/javascript/shared/mixins/inboxMixin.js b/app/javascript/shared/mixins/inboxMixin.js
index a8aa00aa4..2c559454f 100644
--- a/app/javascript/shared/mixins/inboxMixin.js
+++ b/app/javascript/shared/mixins/inboxMixin.js
@@ -11,6 +11,22 @@ export const INBOX_TYPES = {
SMS: 'Channel::Sms',
};
+export const INBOX_FEATURES = {
+ REPLY_TO: 'replyTo',
+};
+
+export const INBOX_FEATURE_MAP = {
+ [INBOX_FEATURES.REPLY_TO]: [
+ INBOX_TYPES.WEB,
+ INBOX_TYPES.FB,
+ INBOX_TYPES.TWITTER,
+ INBOX_TYPES.WHATSAPP,
+ INBOX_TYPES.LINE,
+ INBOX_TYPES.TELEGRAM,
+ INBOX_TYPES.API,
+ ],
+};
+
export default {
computed: {
channelType() {
@@ -102,4 +118,9 @@ export default {
);
},
},
+ methods: {
+ inboxHasFeature(feature) {
+ return INBOX_FEATURE_MAP[feature]?.includes(this.channelType);
+ },
+ },
};