defmodule WishWeb.HomeLive.Index do use WishWeb, :live_view alias Wish.Wishlist use Phoenix.Component @impl true def mount(_params, session, socket) do items = if socket.assigns.current_user do Wishlist.list_visible_items() else Wishlist.list_available_items() end {:ok, assign(socket, :items, items) |> assign(:hidden, false)} end @impl true def handle_event("toggle_hidden_items", _, socket) do new_state = !socket.assigns.hidden items = if new_state do Wishlist.list_visible_items() else Wishlist.list_available_items() end {:noreply, assign(socket, :items, items) |> assign(:hidden, new_state)} end @impl true def handle_event("toggle_received", %{"id" => id}, socket) do item = Wishlist.get_item!(id) case Wishlist.toggle_received(item) do {:ok, updated_item} -> index = Enum.find_index(socket.assigns.items, &(&1.id == updated_item.id)) updated_list = List.update_at(socket.assigns.items, index, fn _ -> updated_item end) {:noreply, assign(socket, :items, updated_list)} {:error, _} -> {:noreply, socket} end end attr :item, :any def dropdown(assigns) do ~H""" """ end end