From cc58a376a94c28532121fca2e1ab1d0e7de11046 Mon Sep 17 00:00:00 2001 From: Logan Hunt Date: Thu, 14 Apr 2022 11:43:34 -0600 Subject: Add pubsub --- lib/aggiedit_web/live/post_live/index.ex | 11 ++++- lib/aggiedit_web/live/post_live/index.html.heex | 55 ++++++++++--------------- 2 files changed, 32 insertions(+), 34 deletions(-) (limited to 'lib/aggiedit_web/live/post_live') diff --git a/lib/aggiedit_web/live/post_live/index.ex b/lib/aggiedit_web/live/post_live/index.ex index 57ae727..6b2be56 100644 --- a/lib/aggiedit_web/live/post_live/index.ex +++ b/lib/aggiedit_web/live/post_live/index.ex @@ -10,7 +10,9 @@ defmodule AggieditWeb.PostLive.Index do def mount(%{"room_id" => _room_id} = params, session, socket) do {:ok, socket} = assign_socket_room_and_user_or_error(params, session, socket) case socket.assigns do - %{:room => room} -> {:ok, assign(socket, %{:posts => room |> Repo.preload(posts: [:user, :upload]) |> Map.get(:posts)})} + %{:room => room} -> + if connected?(socket), do: Rooms.subscribe(socket.assigns.room) + {:ok, assign(socket, %{:posts => room |> Repo.preload(posts: [:user, :upload]) |> Map.get(:posts)}), temporary_assigns: [posts: []]} _ -> {:ok, socket} end end @@ -59,4 +61,11 @@ defmodule AggieditWeb.PostLive.Index do {:noreply, socket |> put_flash(:error, "You do not have permission to delete this post.") |> redirect(to: Routes.post_index_path(socket, :index, socket.assigns.room))} end end + + @impl true + def handle_info({action, post}, socket) when action in [:post_created, :post_updated, :post_deleted] do + {:noreply, update(socket, :posts, fn posts -> + [posts | post] + end)} + end end diff --git a/lib/aggiedit_web/live/post_live/index.html.heex b/lib/aggiedit_web/live/post_live/index.html.heex index 7532685..efb42cb 100644 --- a/lib/aggiedit_web/live/post_live/index.html.heex +++ b/lib/aggiedit_web/live/post_live/index.html.heex @@ -15,39 +15,28 @@ <% end %> <%= live_patch "New Post", to: Routes.post_index_path(@socket, :new, @room) %> -<%= for post <- @posts do %> -
- <%= if !is_nil(post.upload) do %> - <%= live_redirect to: Routes.post_show_path(@socket, :show, @room, post) do %> -
- -
+
+ <%= for post <- @posts do %> +
+ <%= if !is_nil(post.upload) do %> + <%= live_redirect to: Routes.post_show_path(@socket, :show, @room, post) do %> +
+ +
+ <% end %> <% end %> - <% end %> -
- <%= live_redirect to: Routes.post_show_path(@socket, :show, @room, post) do %> -

<%= post.title %>

- <% end %> -
aggie/<%= post.user.username %>
-

<%= post.body %>

+
+ <%= live_redirect to: Routes.post_show_path(@socket, :show, @room, post) do %> +

<%= post.title %>

+ <% end %> +
aggie/<%= post.user.username %>
+

<%= post.body %>

- <%= if Aggiedit.Roles.guard?(@current_user, :edit, post) && Aggiedit.Roles.guard?(@current_user, :edit, post) do %> - <%= live_patch "Edit", to: Routes.post_index_path(@socket, :edit, @room, post) %> - <%= link "Delete", to: "#", phx_click: "delete", phx_value_id: post.id %> - <% end %> + <%= if Aggiedit.Roles.guard?(@current_user, :edit, post) && Aggiedit.Roles.guard?(@current_user, :edit, post) do %> + <%= live_patch "Edit", to: Routes.post_index_path(@socket, :edit, @room, post) %> + <%= link "Delete", to: "#", phx_click: "delete", phx_value_id: post.id %> + <% end %> +
-
- -<% end %> - + <% end %> +
-- cgit v1.2.3-70-g09d2