mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	feat: Notification action cable event (#4154)
This commit is contained in:
		| @@ -16,6 +16,7 @@ Metrics/ClassLength: | |||||||
|     - 'app/models/message.rb' |     - 'app/models/message.rb' | ||||||
|     - 'app/builders/messages/facebook/message_builder.rb' |     - 'app/builders/messages/facebook/message_builder.rb' | ||||||
|     - 'app/controllers/api/v1/accounts/contacts_controller.rb' |     - 'app/controllers/api/v1/accounts/contacts_controller.rb' | ||||||
|  |     - 'app/listeners/action_cable_listener.rb' | ||||||
| RSpec/ExampleLength: | RSpec/ExampleLength: | ||||||
|   Max: 25 |   Max: 25 | ||||||
| Style/Documentation: | Style/Documentation: | ||||||
|   | |||||||
| @@ -1,6 +1,12 @@ | |||||||
| class ActionCableListener < BaseListener | class ActionCableListener < BaseListener | ||||||
|   include Events::Types |   include Events::Types | ||||||
|  |  | ||||||
|  |   def notification_created(event) | ||||||
|  |     notification, account = extract_notification_and_account(event) | ||||||
|  |     tokens = [event.data[:notification].user.pubsub_token] | ||||||
|  |     broadcast(account, tokens, NOTIFICATION_CREATED, notification.push_event_data) | ||||||
|  |   end | ||||||
|  |  | ||||||
|   def message_created(event) |   def message_created(event) | ||||||
|     message, account = extract_message_and_account(event) |     message, account = extract_message_and_account(event) | ||||||
|     conversation = message.conversation |     conversation = message.conversation | ||||||
|   | |||||||
| @@ -6,6 +6,11 @@ class BaseListener | |||||||
|     [conversation, conversation.account] |     [conversation, conversation.account] | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def extract_notification_and_account(event) | ||||||
|  |     notification = event.data[:notification] | ||||||
|  |     [notification, notification.account] | ||||||
|  |   end | ||||||
|  |  | ||||||
|   def extract_message_and_account(event) |   def extract_message_and_account(event) | ||||||
|     message = event.data[:message] |     message = event.data[:message] | ||||||
|     [message, message.account] |     [message, message.account] | ||||||
|   | |||||||
| @@ -39,7 +39,8 @@ class Notification < ApplicationRecord | |||||||
|  |  | ||||||
|   enum notification_type: NOTIFICATION_TYPES |   enum notification_type: NOTIFICATION_TYPES | ||||||
|  |  | ||||||
|   after_create_commit :process_notification_delivery |   after_create_commit :process_notification_delivery, :dispatch_create_event | ||||||
|  |  | ||||||
|   default_scope { order(id: :desc) } |   default_scope { order(id: :desc) } | ||||||
|  |  | ||||||
|   PRIMARY_ACTORS = ['Conversation'].freeze |   PRIMARY_ACTORS = ['Conversation'].freeze | ||||||
| @@ -108,4 +109,8 @@ class Notification < ApplicationRecord | |||||||
|     # when push enabled and then check in email job whether notification has been read already. |     # when push enabled and then check in email job whether notification has been read already. | ||||||
|     Notification::EmailNotificationJob.perform_later(self) |     Notification::EmailNotificationJob.perform_later(self) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def dispatch_create_event | ||||||
|  |     Rails.configuration.dispatcher.dispatch(NOTIFICATION_CREATED, Time.zone.now, notification: self) | ||||||
|  |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -39,6 +39,9 @@ module Events::Types | |||||||
|   CONTACT_MERGED = 'contact.merged' |   CONTACT_MERGED = 'contact.merged' | ||||||
|   CONTACT_DELETED = 'contact.deleted' |   CONTACT_DELETED = 'contact.deleted' | ||||||
|  |  | ||||||
|  |   # notification events | ||||||
|  |   NOTIFICATION_CREATED = 'notification.created' | ||||||
|  |  | ||||||
|   # agent events |   # agent events | ||||||
|   AGENT_ADDED = 'agent.added' |   AGENT_ADDED = 'agent.added' | ||||||
|   AGENT_REMOVED = 'agent.removed' |   AGENT_REMOVED = 'agent.removed' | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Muhsin Keloth
					Muhsin Keloth