Toggling view modes

This commit is contained in:
2023-11-24 00:38:13 +00:00
parent 77dda92301
commit e3e68b89ee
2 changed files with 47 additions and 20 deletions

View File

@@ -5,6 +5,17 @@ defmodule WishWeb.HomeLive.Index do
@impl true @impl true
def mount(_params, _session, socket) do def mount(_params, _session, socket) do
{:ok, stream(socket, :items, Wishlist.list_items())} {:ok, assign(socket, :items, Wishlist.list_items()) |> assign(:display, :grid)}
end
@impl true
def handle_event("toggle", _, socket) do
new_state =
case socket.assigns.display do
:row -> :grid
:grid -> :row
end
{:noreply, assign(socket, :display, new_state)}
end end
end end

View File

@@ -1,26 +1,42 @@
<.header> <.header>
Listing Items Listing Items
<:actions>
<.button phx-click="toggle">
Toggle Display
</.button>
</:actions>
</.header> </.header>
<div class="grid grid-cols-3" id="items" phx-update="stream">
<div <div
:for={{dom_id, item} <- @streams.items} class={
id={dom_id} case @display do
phx-click={JS.navigate(~p"/details/#{item}")} :grid -> "grid grid-cols-3 gap-2"
:row -> ""
end
}
id="items-grid"
> >
<img :if={item.image_url} src={item.image_url} /> <.link
<%= item.title %> :for={item <- @items}
</div> navigate={~p"/details/#{item}"}
</div> class={[
"p-2 rounded hover:bg-zinc-100 active:bg-zinc-200",
<div class="" id="items" phx-update="stream"> case @display do
<div :grid -> "h-72"
:for={{dom_id, item} <- @streams.items} :row -> "flex flex-row h-24"
id={dom_id} end
phx-click={JS.navigate(~p"/details/#{item}")} ]}
class="flex flex-row h-20"
> >
<img :if={item.image_url} src={item.image_url} /> <div class="aspect-square flex flex-col justify-center">
<img
:if={item.image_url}
src={item.image_url}
alt={item.title}
height="224"
width="224"
class="rounded"
/>
</div>
<%= item.title %> <%= item.title %>
</div> </.link>
</div> </div>