Skip to content

Commit c6a8db7

Browse files
committed
Add new Flash module to handle sending flashes from components, and receiving them in LiveViews
1 parent dbe9621 commit c6a8db7

4 files changed

Lines changed: 24 additions & 2 deletions

File tree

lib/phoenix_liveview_flash_components_example_web.ex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ defmodule PhoenixLiveviewFlashComponentsExampleWeb do
5454
use Phoenix.LiveView,
5555
layout: {PhoenixLiveviewFlashComponentsExampleWeb.Layouts, :app}
5656

57+
on_mount PhoenixLiveviewFlashComponentsExampleWeb.Flash
58+
5759
unquote(html_helpers())
5860
end
5961
end
@@ -62,6 +64,8 @@ defmodule PhoenixLiveviewFlashComponentsExampleWeb do
6264
quote do
6365
use Phoenix.LiveComponent
6466

67+
import PhoenixLiveviewFlashComponentsExampleWeb.Flash, only: [put_flash!: 3]
68+
6569
unquote(html_helpers())
6670
end
6771
end

lib/phoenix_liveview_flash_components_example_web/components/first_component.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ defmodule PhoenixLiveviewFlashComponentsExampleWeb.FirstComponent do
2121
end
2222

2323
def handle_event("click", _params, socket) do
24-
{:noreply, put_flash(socket, :info, "First-level component button clicked!")}
24+
{:noreply, put_flash!(socket, :info, "First-level component button clicked!")}
2525
end
2626
end

lib/phoenix_liveview_flash_components_example_web/components/second_component.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ defmodule PhoenixLiveviewFlashComponentsExampleWeb.SecondComponent do
1717
end
1818

1919
def handle_event("click", _params, socket) do
20-
{:noreply, put_flash(socket, :info, "Second-level component button clicked!")}
20+
{:noreply, put_flash!(socket, :info, "Second-level component button clicked!")}
2121
end
2222
end
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
defmodule PhoenixLiveviewFlashComponentsExampleWeb.Flash do
2+
import Phoenix.LiveView
3+
4+
def on_mount(:default, _params, _session, socket) do
5+
{:cont, attach_hook(socket, :flash_receiver, :handle_info, &maybe_receive_flash/2)}
6+
end
7+
8+
defp maybe_receive_flash({:put_flash, type, message}, socket) do
9+
{:halt, put_flash(socket, type, message)}
10+
end
11+
12+
defp maybe_receive_flash(_, socket), do: {:cont, socket}
13+
14+
def put_flash!(socket, type, message) do
15+
send(self(), {:put_flash, type, message})
16+
socket
17+
end
18+
end

0 commit comments

Comments
 (0)