diff --git a/app/controllers/api/v1/accounts/conversations_controller.rb b/app/controllers/api/v1/accounts/conversations_controller.rb
index e2fe7a7ed..7642e94e3 100644
--- a/app/controllers/api/v1/accounts/conversations_controller.rb
+++ b/app/controllers/api/v1/accounts/conversations_controller.rb
@@ -32,6 +32,11 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
head :ok
end
+ def unmute
+ @conversation.unmute!
+ head :ok
+ end
+
def transcript
ConversationReplyMailer.conversation_transcript(@conversation, params[:email])&.deliver_later if params[:email].present?
head :ok
diff --git a/app/javascript/dashboard/api/inbox/conversation.js b/app/javascript/dashboard/api/inbox/conversation.js
index fa23fda66..6e5c72ca0 100644
--- a/app/javascript/dashboard/api/inbox/conversation.js
+++ b/app/javascript/dashboard/api/inbox/conversation.js
@@ -43,6 +43,10 @@ class ConversationApi extends ApiClient {
return axios.post(`${this.url}/${conversationId}/mute`);
}
+ unmute(conversationId) {
+ return axios.post(`${this.url}/${conversationId}/unmute`);
+ }
+
meta({ inboxId, status, assigneeType, labels }) {
return axios.get(`${this.url}/meta`, {
params: {
diff --git a/app/javascript/dashboard/api/specs/inbox/conversation.spec.js b/app/javascript/dashboard/api/specs/inbox/conversation.spec.js
index ddea6b874..31be5e87e 100644
--- a/app/javascript/dashboard/api/specs/inbox/conversation.spec.js
+++ b/app/javascript/dashboard/api/specs/inbox/conversation.spec.js
@@ -14,7 +14,32 @@ describe('#ConversationAPI', () => {
expect(conversationAPI).toHaveProperty('markMessageRead');
expect(conversationAPI).toHaveProperty('toggleTyping');
expect(conversationAPI).toHaveProperty('mute');
+ expect(conversationAPI).toHaveProperty('unmute');
expect(conversationAPI).toHaveProperty('meta');
expect(conversationAPI).toHaveProperty('sendEmailTranscript');
});
+
+ describe('API calls', () => {
+ let originalAxios = null;
+ let axiosMock = null;
+
+ beforeEach(() => {
+ originalAxios = window.axios;
+ axiosMock = { post: jest.fn(() => Promise.resolve()) };
+
+ window.axios = axiosMock;
+ });
+
+ afterEach(() => {
+ window.axios = originalAxios;
+ });
+
+ it('#unmute', () => {
+ conversationAPI.unmute(45);
+
+ expect(axiosMock.post).toHaveBeenCalledWith(
+ '/api/v1/conversations/45/unmute'
+ );
+ });
+ });
});
diff --git a/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue b/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue
index af7217d09..f091ab323 100644
--- a/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/MoreActions.vue
@@ -22,6 +22,15 @@
>
{{ $t('CONTACT_PANEL.MUTE_CONTACT') }}
+
+
+