mitgliederverwaltung/lib/mv_web/member_live/show.ex
Moritz dedd40b949
Some checks failed
continuous-integration/drone/push Build is failing
add further locale tests
2025-06-18 23:35:43 +02:00

94 lines
2.8 KiB
Elixir

defmodule MvWeb.MemberLive.Show do
use MvWeb, :live_view
import Ash.Query
@impl true
def render(assigns) do
~H"""
<.header>
{@member.first_name} {@member.last_name}
<:subtitle>{gettext("This is a member record from your database.")}</:subtitle>
<:actions>
<.link patch={~p"/members/#{@member}/show/edit"} phx-click={JS.push_focus()}>
<.button>{gettext("Edit member")}</.button>
</.link>
</:actions>
</.header>
<.list>
<:item title={gettext("Id")}>{@member.id}</:item>
<:item title={gettext("First Name")}>{@member.first_name}</:item>
<:item title={gettext("Last Name")}>{@member.last_name}</:item>
<:item title={gettext("Email")}>{@member.email}</:item>
<:item title={gettext("Birth Date")}>{@member.birth_date}</:item>
<:item title={gettext("Paid")}>
{if @member.paid, do: gettext("Yes"), else: gettext("No")}
</:item>
<:item title={gettext("Phone Number")}>{@member.phone_number}</:item>
<:item title={gettext("Join Date")}>{@member.join_date}</:item>
<:item title={gettext("Exit Date")}>{@member.exit_date}</:item>
<:item title={gettext("Notes")}>{@member.notes}</:item>
<:item title={gettext("City")}>{@member.city}</:item>
<:item title={gettext("Street")}>{@member.street}</:item>
<:item title={gettext("House Number")}>{@member.house_number}</:item>
<:item title={gettext("Postal Code")}>{@member.postal_code}</:item>
</.list>
<h3 class="mt-8 mb-2 text-lg font-semibold">{gettext("Custom Properties")}</h3>
<.generic_list items={
Enum.map(@member.properties, fn p ->
{
# name
p.property_type && p.property_type.name,
# value
case p.value do
%{value: v} -> v
v -> v
end
}
end)
} />
<.back navigate={~p"/members"}>{gettext("Back to members")}</.back>
<.modal
:if={@live_action == :edit}
id="member-modal"
show
on_cancel={JS.patch(~p"/members/#{@member}")}
>
<.live_component
module={MvWeb.MemberLive.FormComponent}
id={@member.id}
title={@page_title}
action={@live_action}
member={@member}
patch={~p"/members/#{@member}"}
/>
</.modal>
"""
end
@impl true
def mount(_params, _session, socket) do
{:ok, socket}
end
@impl true
def handle_params(%{"id" => id}, _, socket) do
query =
Mv.Membership.Member
|> filter(id == ^id)
|> load(properties: [:property_type])
member = Ash.read_one!(query)
{:noreply,
socket
|> assign(:page_title, page_title(socket.assigns.live_action))
|> assign(:member, member)}
end
defp page_title(:show), do: gettext("Show Member")
defp page_title(:edit), do: gettext("Edit Member")
end