defmodule CanneryWeb.Components.AmmoGroupCard do
@moduledoc """
Display card for an ammo group
"""
use CanneryWeb, :component
alias Cannery.{Ammo, Ammo.AmmoGroup, Repo}
alias CanneryWeb.Endpoint
attr :ammo_group, AmmoGroup, required: true
attr :show_container, :boolean, default: false
slot(:inner_block)
def ammo_group_card(%{ammo_group: ammo_group} = assigns) do
assigns =
%{show_container: show_container} = assigns |> assign_new(:show_container, fn -> false end)
preloads = if show_container, do: [:ammo_type, :container], else: [:ammo_type]
ammo_group = ammo_group |> Repo.preload(preloads)
assigns = assigns |> assign(:ammo_group, ammo_group)
~H"""
<.link patch={Routes.ammo_group_show_path(Endpoint, :show, @ammo_group)} class="mb-2 link">
<%= @ammo_group.ammo_type.name %>
<%= gettext("Count:") %>
<%= if @ammo_group.count == 0, do: "Empty", else: @ammo_group.count %>
<%= if @ammo_group.notes do %>
<%= gettext("Notes:") %>
<%= @ammo_group.notes %>
<% end %>
<%= gettext("Added on:") %>
<%= @ammo_group.inserted_at |> display_datetime() %>
<%= if @ammo_group.count == 0 do %>
<%= gettext("Used up on:") %>
<%= @ammo_group |> Ammo.get_last_used_shot_group() |> Map.get(:date) |> display_date() %>
<% end %>
<%= if @ammo_group.price_paid do %>
<%= gettext("Price paid:") %>
<%= gettext("$%{amount}",
amount: @ammo_group.price_paid |> :erlang.float_to_binary(decimals: 2)
) %>
<% end %>
<%= if @show_container and @ammo_group.container do %>
<%= gettext("Container:") %>
<.link
patch={Routes.container_show_path(Endpoint, :show, @ammo_group.container)}
class="link"
>
<%= @ammo_group.container.name %>
<% end %>
<%= if assigns |> Map.has_key?(:inner_block) do %>
<%= render_slot(@inner_block) %>
<% end %>
"""
end
end