Files
GenericRestServer/lib/generic_rest_server_web/live/item_live/show.ex

70 lines
1.9 KiB
Elixir

defmodule GenericRestServerWeb.ItemLive.Show do
use GenericRestServerWeb, :live_view
alias GenericRestServer.Items
@impl true
def render(assigns) do
~H"""
<Layouts.app flash={@flash} current_scope={@current_scope}>
<.header>
Item {@item.id}
<:subtitle>This is a item record from your database.</:subtitle>
<:actions>
<.button navigate={~p"/items"}>
<.icon name="hero-arrow-left" />
</.button>
<.button variant="primary" navigate={~p"/items/#{@item}/edit?return_to=show"}>
<.icon name="hero-pencil-square" /> Edit item
</.button>
</:actions>
</.header>
<.list>
<:item title="Name">{@item.name}</:item>
<:item title="Description">{@item.description}</:item>
<:item title="Info">{@item.info}</:item>
<:item title="Amount">{@item.amount}</:item>
<:item title="Factor">{@item.factor}</:item>
<:item title="Type">{@item.type}</:item>
</.list>
</Layouts.app>
"""
end
@impl true
def mount(%{"id" => id}, _session, socket) do
if connected?(socket) do
Items.subscribe_items(socket.assigns.current_scope)
end
{:ok,
socket
|> assign(:page_title, "Show Item")
|> assign(:item, Items.get_item!(socket.assigns.current_scope, id))}
end
@impl true
def handle_info(
{:updated, %GenericRestServer.Items.Item{id: id} = item},
%{assigns: %{item: %{id: id}}} = socket
) do
{:noreply, assign(socket, :item, item)}
end
def handle_info(
{:deleted, %GenericRestServer.Items.Item{id: id}},
%{assigns: %{item: %{id: id}}} = socket
) do
{:noreply,
socket
|> put_flash(:error, "The current item was deleted.")
|> push_navigate(to: ~p"/items")}
end
def handle_info({type, %GenericRestServer.Items.Item{}}, socket)
when type in [:created, :updated, :deleted] do
{:noreply, socket}
end
end