diff --git a/lib/grapevine_web/live/post_live.ex b/lib/grapevine_web/live/post_live.ex index 38b994a..2f4102f 100644 --- a/lib/grapevine_web/live/post_live.ex +++ b/lib/grapevine_web/live/post_live.ex @@ -33,6 +33,7 @@ defmodule GrapevineWeb.PostLive do all_categories = [%{id: 0, name: "All"} | categories] assign(socket, + category_id: "0", categories: all_categories, all_posts: posts, posts: posts, @@ -89,16 +90,31 @@ defmodule GrapevineWeb.PostLive do {:noreply, assign(socket, posts: posts, all_posts: posts)} end + @spec handle_info({:post_created, any} | {:updated_post, any}, Phoenix.LiveView.Socket.t()) :: + {:noreply, Phoenix.LiveView.Socket.t()} def handle_info({:post_created, post}, socket) do - posts = [post | socket.assigns.posts] + posts = [post | socket.assigns.all_posts] - {:noreply, assign(socket, posts: posts)} + filtered_posts = + Enum.filter(posts, &(&1.category_id == String.to_integer(socket.assigns.category_id))) + + socket = assign(socket, posts: filtered_posts, all_posts: posts) + + {:noreply, + push_patch(socket, + to: Routes.page_path(__MODULE__, :index, category_id: socket.assigns.category_id) + )} end def handle_info({:updated_post, post}, socket) do p_index = Enum.find_index(socket.assigns.posts, fn x -> x.id == post.id end) posts = List.replace_at(socket.assigns.posts, p_index, post) - {:noreply, assign(socket, posts: posts)} + socket = assign(socket, posts: posts) + + {:noreply, + push_patch(socket, + to: Routes.page_path(__MODULE__, :index, category_id: socket.assigns.category_id) + )} end def sort_posts(posts, "inserted_at", :desc) do