forked from shibao/cannery
display used-up date on used-up ammo
This commit is contained in:
@ -4,7 +4,7 @@ defmodule CanneryWeb.Components.AmmoGroupCard do
|
||||
"""
|
||||
|
||||
use CanneryWeb, :component
|
||||
alias Cannery.Repo
|
||||
alias Cannery.{Ammo, Repo}
|
||||
alias CanneryWeb.Endpoint
|
||||
|
||||
def ammo_group_card(%{ammo_group: ammo_group} = assigns) do
|
||||
@ -47,6 +47,13 @@ defmodule CanneryWeb.Components.AmmoGroupCard do
|
||||
<%= @ammo_group.inserted_at |> display_datetime() %>
|
||||
</span>
|
||||
|
||||
<%= if @ammo_group.count == 0 do %>
|
||||
<span class="rounded-lg title text-lg">
|
||||
<%= gettext("Used up on:") %>
|
||||
<%= @ammo_group |> Ammo.get_last_used_shot_group() |> Map.get(:date) |> display_date() %>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<%= if @ammo_group.price_paid do %>
|
||||
<span class="rounded-lg title text-lg">
|
||||
<%= gettext("Price paid:") %>
|
||||
|
@ -6,7 +6,7 @@ defmodule CanneryWeb.Components.TableComponent do
|
||||
- `:columns`: An array of maps containing the following keys
|
||||
- `:label`: A gettext'd or otherwise user-facing string label for the
|
||||
column. Can be nil
|
||||
- `:key`: A string key used for sorting
|
||||
- `:key`: An atom key used for sorting
|
||||
- `:class`: Extra classes to be applied to the column element, if desired.
|
||||
Optional
|
||||
- `:sortable`: If false, will prevent the user from sorting with it.
|
||||
@ -28,13 +28,13 @@ defmodule CanneryWeb.Components.TableComponent do
|
||||
required(:columns) =>
|
||||
list(%{
|
||||
required(:label) => String.t() | nil,
|
||||
required(:key) => String.t() | nil,
|
||||
required(:key) => atom() | nil,
|
||||
optional(:class) => String.t(),
|
||||
optional(:sortable) => false
|
||||
}),
|
||||
required(:rows) =>
|
||||
list(%{
|
||||
(key :: String.t()) => any() | {custom_sort_value :: String.t(), value :: any()}
|
||||
(key :: atom()) => any() | {custom_sort_value :: String.t(), value :: any()}
|
||||
}),
|
||||
optional(any()) => any()
|
||||
},
|
||||
@ -56,20 +56,19 @@ defmodule CanneryWeb.Components.TableComponent do
|
||||
def handle_event(
|
||||
"sort_by",
|
||||
%{"sort-key" => key},
|
||||
%{assigns: %{rows: rows, last_sort_key: key, sort_mode: sort_mode}} = socket
|
||||
%{assigns: %{rows: rows, last_sort_key: last_sort_key, sort_mode: sort_mode}} = socket
|
||||
) do
|
||||
sort_mode = if sort_mode == :asc, do: :desc, else: :asc
|
||||
rows = rows |> sort_by_custom_sort_value_or_value(key, sort_mode)
|
||||
{:noreply, socket |> assign(sort_mode: sort_mode, rows: rows)}
|
||||
end
|
||||
key = key |> String.to_existing_atom()
|
||||
|
||||
def handle_event(
|
||||
"sort_by",
|
||||
%{"sort-key" => key},
|
||||
%{assigns: %{rows: rows}} = socket
|
||||
) do
|
||||
rows = rows |> sort_by_custom_sort_value_or_value(key, :asc)
|
||||
{:noreply, socket |> assign(last_sort_key: key, sort_mode: :asc, rows: rows)}
|
||||
sort_mode =
|
||||
case {key, sort_mode} do
|
||||
{^last_sort_key, :asc} -> :desc
|
||||
{^last_sort_key, :desc} -> :asc
|
||||
{_new_sort_key, _last_sort_mode} -> :asc
|
||||
end
|
||||
|
||||
rows = rows |> sort_by_custom_sort_value_or_value(key, sort_mode)
|
||||
{:noreply, socket |> assign(last_sort_key: key, sort_mode: sort_mode, rows: rows)}
|
||||
end
|
||||
|
||||
defp sort_by_custom_sort_value_or_value(rows, key, sort_mode) do
|
||||
|
@ -1,4 +1,4 @@
|
||||
<div class="w-full overflow-x-auto border border-gray-600 rounded-lg shadow-lg bg-black">
|
||||
<div id={@id} class="w-full overflow-x-auto border border-gray-600 rounded-lg shadow-lg bg-black">
|
||||
<table class="min-w-full table-auto text-center bg-white">
|
||||
<thead class="border-b border-primary-600">
|
||||
<tr>
|
||||
|
Reference in New Issue
Block a user