diff --git a/lib/cannery_web/live/ammo_group_live/index.ex b/lib/cannery_web/live/ammo_group_live/index.ex index d7e6eed0..da439c27 100644 --- a/lib/cannery_web/live/ammo_group_live/index.ex +++ b/lib/cannery_web/live/ammo_group_live/index.ex @@ -75,6 +75,114 @@ defmodule CanneryWeb.AmmoGroupLive.Index do defp display_ammo_groups(%{assigns: %{current_user: current_user}} = socket) do ammo_groups = Ammo.list_ammo_groups(current_user) |> Repo.preload([:ammo_type, :container]) containers = Containers.list_containers(current_user) - socket |> assign(ammo_groups: ammo_groups, containers: containers) + + columns = [ + %{label: gettext("Ammo type"), key: "ammo_type"}, + %{label: gettext("Count"), key: "count"}, + %{label: gettext("Price paid"), key: "price_paid"}, + %{label: gettext("% left"), key: "remaining"}, + %{label: gettext("Range"), key: "range"}, + %{label: gettext("Container"), key: "container"}, + %{ + label: nil, + key: "actions", + sortable: false, + class: "px-4 py-2 space-x-4 flex justify-center items-center" + } + ] + + rows = + ammo_groups + |> Enum.map(fn ammo_group -> + assigns = %{ammo_group: ammo_group} + + columns + |> Enum.into(%{}, fn %{key: key} -> + value = + case key do + "ammo_type" -> + {ammo_group.ammo_type.name, + live_patch(ammo_group.ammo_type.name, + to: Routes.ammo_type_show_path(Endpoint, :show, ammo_group.ammo_type), + class: "link" + )} + + "price_paid" -> + if ammo_group.price_paid do + gettext("$%{amount}", + amount: ammo_group.price_paid |> :erlang.float_to_binary(decimals: 2) + ) + else + {"a", nil} + end + + "remaining" -> + "#{ammo_group |> Ammo.get_percentage_remaining()}%" + + "range" -> + {ammo_group.staged, + ~H""" + + + <%= live_patch(dgettext("actions", "Record shots"), + to: Routes.ammo_group_index_path(Endpoint, :add_shot_group, ammo_group), + class: "btn btn-primary" + ) %> + """} + + "container" -> + if ammo_group.container do + {ammo_group.container.name, + live_patch(ammo_group.container.name, + to: Routes.ammo_group_index_path(Endpoint, :move, ammo_group), + class: "btn btn-primary" + )} + else + {nil, nil} + end + + "actions" -> + ~H""" + <%= live_redirect to: Routes.ammo_group_show_path(Endpoint, :show, ammo_group), + class: "text-primary-600 link", + data: [qa: "view-#{ammo_group.id}"] do %> + + <% end %> + + <%= live_patch to: Routes.ammo_group_index_path(Endpoint, :edit, ammo_group), + class: "text-primary-600 link", + data: [qa: "edit-#{ammo_group.id}"] do %> + + <% end %> + + <%= link to: "#", + class: "text-primary-600 link", + phx_click: "delete", + phx_value_id: ammo_group.id, + data: [ + confirm: dgettext("prompts", "Are you sure you want to delete this ammo?"), + qa: "delete-#{ammo_group.id}" + ] do %> + + <% end %> + """ + + _ -> + ammo_group |> Map.get(key |> String.to_existing_atom()) + end + + {key, value} + end) + end) + + socket + |> assign(ammo_groups: ammo_groups, containers: containers, columns: columns, rows: rows) end end diff --git a/lib/cannery_web/live/ammo_group_live/index.html.heex b/lib/cannery_web/live/ammo_group_live/index.html.heex index a4b59a2a..1daea38d 100644 --- a/lib/cannery_web/live/ammo_group_live/index.html.heex +++ b/lib/cannery_web/live/ammo_group_live/index.html.heex @@ -45,116 +45,13 @@ ) %> <% end %> -
- <%= gettext("Ammo type") %> - | -- <%= gettext("Count") %> - | -- <%= gettext("Price paid") %> - | -- <%= gettext("% left") %> - | -- <%= gettext("Range") %> - | -- <%= gettext("Container") %> - | - -- |
---|---|---|---|---|---|---|
- <%= live_patch(ammo_group.ammo_type.name, - to: Routes.ammo_type_show_path(Endpoint, :show, ammo_group.ammo_type), - class: "link" - ) %> - | - -- <%= ammo_group.count %> - | - -- <%= if ammo_group.price_paid do %> - <%= gettext("$%{amount}", - amount: ammo_group.price_paid |> :erlang.float_to_binary(decimals: 2) - ) %> - <% end %> - | - -- <%= "#{ammo_group |> Ammo.get_percentage_remaining()}%" %> - | - -
-
-
-
- <%= live_patch(dgettext("actions", "Record shots"),
- to: Routes.ammo_group_index_path(Endpoint, :add_shot_group, ammo_group),
- class: "btn btn-primary"
- ) %>
-
- |
-
- - <%= if ammo_group.container do %> - <%= live_patch(ammo_group.container.name, - to: Routes.ammo_group_index_path(Endpoint, :move, ammo_group), - class: "btn btn-primary" - ) %> - <% end %> - | - -
-
- <%= live_redirect to: Routes.ammo_group_show_path(Endpoint, :show, ammo_group),
- class: "text-primary-600 link",
- data: [qa: "view-#{ammo_group.id}"] do %>
-
- <% end %>
-
- <%= live_patch to: Routes.ammo_group_index_path(Endpoint, :edit, ammo_group),
- class: "text-primary-600 link",
- data: [qa: "edit-#{ammo_group.id}"] do %>
-
- <% end %>
-
- <%= link to: "#",
- class: "text-primary-600 link",
- phx_click: "delete",
- phx_value_id: ammo_group.id,
- data: [
- confirm: dgettext("prompts", "Are you sure you want to delete this ammo?"),
- qa: "delete-#{ammo_group.id}"
- ] do %>
-
- <% end %>
-
- |
-