mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 12:37:56 +00:00
feat: Handle notification.deleted action cable event (#8501)
This commit is contained in:
@@ -23,6 +23,7 @@ class ActionCableConnector extends BaseActionCableConnector {
|
|||||||
'contact.updated': this.onContactUpdate,
|
'contact.updated': this.onContactUpdate,
|
||||||
'conversation.mentioned': this.onConversationMentioned,
|
'conversation.mentioned': this.onConversationMentioned,
|
||||||
'notification.created': this.onNotificationCreated,
|
'notification.created': this.onNotificationCreated,
|
||||||
|
'notification.deleted': this.onNotificationDeleted,
|
||||||
'first.reply.created': this.onFirstReplyCreated,
|
'first.reply.created': this.onFirstReplyCreated,
|
||||||
'conversation.read': this.onConversationRead,
|
'conversation.read': this.onConversationRead,
|
||||||
'conversation.updated': this.onConversationUpdated,
|
'conversation.updated': this.onConversationUpdated,
|
||||||
@@ -195,6 +196,10 @@ class ActionCableConnector extends BaseActionCableConnector {
|
|||||||
this.app.$store.dispatch('notifications/addNotification', data);
|
this.app.$store.dispatch('notifications/addNotification', data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
onNotificationDeleted = data => {
|
||||||
|
this.app.$store.dispatch('notifications/deleteNotification', data);
|
||||||
|
};
|
||||||
|
|
||||||
// eslint-disable-next-line class-methods-use-this
|
// eslint-disable-next-line class-methods-use-this
|
||||||
onFirstReplyCreated = () => {
|
onFirstReplyCreated = () => {
|
||||||
bus.$emit('fetch_overview_reports');
|
bus.$emit('fetch_overview_reports');
|
||||||
|
|||||||
@@ -56,4 +56,7 @@ export const actions = {
|
|||||||
addNotification({ commit }, data) {
|
addNotification({ commit }, data) {
|
||||||
commit(types.ADD_NOTIFICATION, data);
|
commit(types.ADD_NOTIFICATION, data);
|
||||||
},
|
},
|
||||||
|
deleteNotification({ commit }, data) {
|
||||||
|
commit(types.DELETE_NOTIFICATION, data);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -55,4 +55,10 @@ export const mutations = {
|
|||||||
Vue.set($state.meta, 'unreadCount', unreadCount);
|
Vue.set($state.meta, 'unreadCount', unreadCount);
|
||||||
Vue.set($state.meta, 'count', count);
|
Vue.set($state.meta, 'count', count);
|
||||||
},
|
},
|
||||||
|
[types.DELETE_NOTIFICATION]($state, data) {
|
||||||
|
const { notification, unread_count: unreadCount, count } = data;
|
||||||
|
Vue.delete($state.records, notification.id);
|
||||||
|
Vue.set($state.meta, 'unreadCount', unreadCount);
|
||||||
|
Vue.set($state.meta, 'count', count);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -98,4 +98,13 @@ describe('#actions', () => {
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('#deleteNotification', () => {
|
||||||
|
it('sends correct actions', async () => {
|
||||||
|
await actions.deleteNotification({ commit }, { data: 1 });
|
||||||
|
expect(commit.mock.calls).toEqual([
|
||||||
|
[types.DELETE_NOTIFICATION, { data: 1 }],
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -118,4 +118,27 @@ describe('#mutations', () => {
|
|||||||
expect(state.meta.count).toEqual(232);
|
expect(state.meta.count).toEqual(232);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('#DELETE_NOTIFICATION', () => {
|
||||||
|
it('delete notification', () => {
|
||||||
|
const state = {
|
||||||
|
meta: { unreadCount: 4, count: 231 },
|
||||||
|
records: {
|
||||||
|
1: { id: 1, primary_actor_id: 1 },
|
||||||
|
2: { id: 2, primary_actor_id: 2 },
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const data = {
|
||||||
|
notification: { id: 1, primary_actor_id: 1 },
|
||||||
|
unread_count: 5,
|
||||||
|
count: 232,
|
||||||
|
};
|
||||||
|
mutations[types.DELETE_NOTIFICATION](state, data);
|
||||||
|
expect(state.records).toEqual({
|
||||||
|
2: { id: 2, primary_actor_id: 2 },
|
||||||
|
});
|
||||||
|
expect(state.meta.unreadCount).toEqual(5);
|
||||||
|
expect(state.meta.count).toEqual(232);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ export default {
|
|||||||
SET_NOTIFICATIONS_UI_FLAG: 'SET_NOTIFICATIONS_UI_FLAG',
|
SET_NOTIFICATIONS_UI_FLAG: 'SET_NOTIFICATIONS_UI_FLAG',
|
||||||
UPDATE_NOTIFICATION: 'UPDATE_NOTIFICATION',
|
UPDATE_NOTIFICATION: 'UPDATE_NOTIFICATION',
|
||||||
ADD_NOTIFICATION: 'ADD_NOTIFICATION',
|
ADD_NOTIFICATION: 'ADD_NOTIFICATION',
|
||||||
|
DELETE_NOTIFICATION: 'DELETE_NOTIFICATION',
|
||||||
UPDATE_ALL_NOTIFICATIONS: 'UPDATE_ALL_NOTIFICATIONS',
|
UPDATE_ALL_NOTIFICATIONS: 'UPDATE_ALL_NOTIFICATIONS',
|
||||||
SET_NOTIFICATIONS_ITEM: 'SET_NOTIFICATIONS_ITEM',
|
SET_NOTIFICATIONS_ITEM: 'SET_NOTIFICATIONS_ITEM',
|
||||||
SET_NOTIFICATIONS: 'SET_NOTIFICATIONS',
|
SET_NOTIFICATIONS: 'SET_NOTIFICATIONS',
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
class AgentNotifications::ConversationNotificationsMailer < ApplicationMailer
|
class AgentNotifications::ConversationNotificationsMailer < ApplicationMailer
|
||||||
def conversation_creation(conversation, agent)
|
def conversation_creation(conversation, agent, _user)
|
||||||
return unless smtp_config_set_or_development?
|
return unless smtp_config_set_or_development?
|
||||||
|
|
||||||
@agent = agent
|
@agent = agent
|
||||||
@@ -9,7 +9,7 @@ class AgentNotifications::ConversationNotificationsMailer < ApplicationMailer
|
|||||||
send_mail_with_liquid(to: @agent.email, subject: subject) and return
|
send_mail_with_liquid(to: @agent.email, subject: subject) and return
|
||||||
end
|
end
|
||||||
|
|
||||||
def conversation_assignment(conversation, agent)
|
def conversation_assignment(conversation, agent, _user)
|
||||||
return unless smtp_config_set_or_development?
|
return unless smtp_config_set_or_development?
|
||||||
|
|
||||||
@agent = agent
|
@agent = agent
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ RSpec.describe AgentNotifications::ConversationNotificationsMailer do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe 'conversation_creation' do
|
describe 'conversation_creation' do
|
||||||
let(:mail) { described_class.with(account: account).conversation_creation(conversation, agent).deliver_now }
|
let(:mail) { described_class.with(account: account).conversation_creation(conversation, agent, nil).deliver_now }
|
||||||
|
|
||||||
it 'renders the subject' do
|
it 'renders the subject' do
|
||||||
expect(mail.subject).to eq("#{agent.available_name}, A new conversation [ID - #{conversation
|
expect(mail.subject).to eq("#{agent.available_name}, A new conversation [ID - #{conversation
|
||||||
@@ -27,7 +27,7 @@ RSpec.describe AgentNotifications::ConversationNotificationsMailer do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe 'conversation_assignment' do
|
describe 'conversation_assignment' do
|
||||||
let(:mail) { described_class.with(account: account).conversation_assignment(conversation, agent).deliver_now }
|
let(:mail) { described_class.with(account: account).conversation_assignment(conversation, agent, nil).deliver_now }
|
||||||
|
|
||||||
it 'renders the subject' do
|
it 'renders the subject' do
|
||||||
expect(mail.subject).to eq("#{agent.available_name}, A new conversation [ID - #{conversation.display_id}] has been assigned to you.")
|
expect(mail.subject).to eq("#{agent.available_name}, A new conversation [ID - #{conversation.display_id}] has been assigned to you.")
|
||||||
|
|||||||
Reference in New Issue
Block a user