37 lines
966 B
Elixir
37 lines
966 B
Elixir
defmodule WishWeb.HomeLive.Index do
|
|
use WishWeb, :live_view
|
|
|
|
alias Wish.Wishlist
|
|
|
|
@impl true
|
|
def mount(_params, session, socket) do
|
|
grid? =
|
|
case Map.get(session, "user_display", "grid") do
|
|
"grid" -> true
|
|
_ -> false
|
|
end
|
|
|
|
{:ok, assign(socket, :items, Wishlist.list_items()) |> assign(:grid, grid?)}
|
|
end
|
|
|
|
@impl true
|
|
def handle_event("toggle_view_state", _, socket) do
|
|
{:noreply, assign(socket, :grid, !socket.assigns.grid)}
|
|
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
|
|
end
|