Class: DeliveryMethods::TurboStreamNotification

Inherits:
Noticed::DeliveryMethod
  • Object
show all
Defined in:
app/notifiers/delivery_methods/turbo_stream_notification.rb

Overview

Broadcasts a Turbo Stream to the recipient's personal notification stream
so that sidebar conversation items update in real time when they are on
any page that subscribes to turbo_stream_from "notifications:#{party_id}".

Renders the conversation_sidebar_item partial (not active, marked unread)
and replaces the existing DOM element identified by the conversation's dom_id.
If the user is not on the chat page the broadcast simply has no effect.

Instance Method Summary collapse

Instance Method Details

#delivervoid

This method returns an undefined value.

Renders the conversation sidebar item and broadcasts a Turbo Stream
replace to the recipient's notification stream.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/notifiers/delivery_methods/turbo_stream_notification.rb', line 15

def deliver
  return unless recipient.is_a?(Party)

  conversation = params[:conversation]
  return unless conversation

  renderer = build_renderer
  html = renderer.render(
    partial: 'crm/assistant_chat/conversation_sidebar_item',
    locals: { conv: conversation, is_active: false, is_unread: true }
  )

  Turbo::StreamsChannel.broadcast_replace_to(
    "notifications:#{recipient.id}",
    target: ActionView::RecordIdentifier.dom_id(conversation),
    html: html
  )
end