Module: Sileo::Helper

Defined in:
lib/sileo/helper.rb

Instance Method Summary collapse

Instance Method Details

#sileo_render_notifications(notifications = nil) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/sileo/helper.rb', line 30

def sileo_render_notifications(notifications = nil)
  notifications = Array(notifications || flash[:sileo_notifications])
  flash[:sileo_notifications] = []
  return "".html_safe if notifications.empty?

  javascript_tag do
    <<~JS
      (function() {
        var notifications = #{JSON.generate(notifications)};
        if (!window.Sileo) {
          window.addEventListener("sileo:ready", function() {
            notifications.forEach(function(notification) { window.Sileo.show(notification); });
          }, { once: true });
          return;
        }
        notifications.forEach(function(notification) { window.Sileo.show(notification); });
      })();
    JS
  end
end

#sileo_toaster(position: nil, offset: nil, options: {}, **data_options) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/sileo/helper.rb', line 7

def sileo_toaster(position: nil, offset: nil, options: {}, **data_options)
  config = Sileo.configuration
  resolved_position = normalize_sileo_position(position || config.default_position)
  resolved_offset = normalize_sileo_offset(offset || config.default_offset)
  initial_toasts = Array(flash[:sileo_notifications])

  flash[:sileo_notifications] = []

  (
    :div,
    nil,
    data: {
      controller: "sileo--toaster",
      "sileo--toaster-position-value": resolved_position,
      "sileo--toaster-offset-value": JSON.generate(resolved_offset),
      "sileo--toaster-initial-value": JSON.generate(initial_toasts),
      "sileo--toaster-options-value": JSON.generate(options),
      **data_options.transform_keys { |key| "sileo--toaster-#{key.to_s.tr('_', '-')}" }
    },
    aria: { live: "polite", atomic: "true" }
  )
end