Module: ReactEmailRails::ActionMailer

Extended by:
ActiveSupport::Concern
Defined in:
lib/react_email_rails/action_mailer.rb

Constant Summary collapse

SHARED_FILTER_OPTIONS =

‘react_email_share` kwargs reserved for `before_action` filtering, not prop data.

[:if, :unless, :only, :except].freeze

Instance Method Summary collapse

Instance Method Details

#mail(headers = {}, &block) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/react_email_rails/action_mailer.rb', line 33

def mail(headers = {}, &block)
  return super unless headers.is_a?(Hash) && headers.key?(:react)

  headers = headers.dup
  react = headers.delete(:react)
  props = headers.delete(:props) if headers.key?(:props)
  deep_merge = headers.delete(:deep_merge) if headers.key?(:deep_merge)

  component, resolved_props = ReactEmailRails::PropsResolver.new(self).resolve(react, props)
  resolved_props = ReactEmailRails::SharedProps.new(self).merge_into(
    resolved_props,
    deep_merge: react_email_deep_merge?(deep_merge),
  )
  render_options = ReactEmailRails.configuration.resolve_render_options(self)
  rendered = ReactEmailRails.render(component:, props: resolved_props, render_options:)

  super(headers) do |format|
    format.html { rendered.html }
    format.text { rendered.text } if rendered.text.present?
    yield(format) if block
  end
end

#react_email_share(hash = nil, **props, &block) ⇒ Object

Share props from within an action, e.g. conditionally before calling ‘mail`.



29
30
31
# File 'lib/react_email_rails/action_mailer.rb', line 29

def react_email_share(hash = nil, **props, &block)
  react_email_append_shared(hash || props, block)
end