use container table component instead

This commit is contained in:
shibao 2022-12-03 20:20:11 -05:00
parent 95642061db
commit c99fbabcaa
21 changed files with 315 additions and 240 deletions

View File

@ -0,0 +1,157 @@
defmodule CanneryWeb.Components.ContainerTableComponent do
@moduledoc """
A component that displays a list of containers
"""
use CanneryWeb, :live_component
alias Cannery.{Accounts.User, Containers, Containers.Container, Repo}
alias CanneryWeb.Components.TagCard
alias Ecto.UUID
alias Phoenix.LiveView.{Rendered, Socket}
@impl true
@spec update(
%{
required(:id) => UUID.t(),
required(:current_user) => User.t(),
optional(:containers) => [Container.t()],
optional(:tag_actions) => Rendered.t(),
optional(:actions) => Rendered.t(),
optional(any()) => any()
},
Socket.t()
) :: {:ok, Socket.t()}
def update(%{id: _id, containers: _containers, current_user: _current_user} = assigns, socket) do
socket =
socket
|> assign(assigns)
|> assign_new(:tag_actions, fn -> [] end)
|> assign_new(:actions, fn -> [] end)
|> display_containers()
{:ok, socket}
end
defp display_containers(
%{
assigns: %{
containers: containers,
current_user: current_user,
tag_actions: tag_actions,
actions: actions
}
} = socket
) do
columns =
[
%{label: gettext("Name"), key: :name, type: :string},
%{label: gettext("Description"), key: :desc, type: :string},
%{label: gettext("Location"), key: :location, type: :string},
%{label: gettext("Type"), key: :type, type: :string},
%{label: gettext("Packs"), key: :packs, type: :integer},
%{label: gettext("Rounds"), key: :rounds, type: :string},
%{label: gettext("Tags"), key: :tags, type: :tags},
%{label: nil, key: :actions, sortable: false, type: :actions}
]
|> Enum.filter(fn %{key: key, type: type} ->
# remove columns if all values match defaults
default_value =
case type do
:boolean -> false
_other_type -> nil
end
containers
|> Enum.any?(fn container ->
type in [:tags, :actions] or not (container |> Map.get(key) == default_value)
end)
end)
rows =
containers
|> Enum.map(fn container ->
container
|> get_row_data_for_container(columns, %{
current_user: current_user,
tag_actions: tag_actions,
actions: actions
})
end)
socket
|> assign(
columns: columns,
rows: rows
)
end
@impl true
def render(assigns) do
~H"""
<div id={@id} class="w-full">
<.live_component
module={CanneryWeb.Components.TableComponent}
id={"table-#{@id}"}
columns={@columns}
rows={@rows}
/>
</div>
"""
end
@spec get_row_data_for_container(Container.t(), columns :: [map()], extra_data :: map) :: map()
defp get_row_data_for_container(container, columns, extra_data) do
container = container |> Repo.preload([:ammo_groups, :tags])
columns
|> Map.new(fn %{key: key} -> {key, get_value_for_key(key, container, extra_data)} end)
end
@spec get_value_for_key(atom(), Container.t(), extra_data :: map) :: any()
defp get_value_for_key(:name, %{id: id, name: container_name}, _extra_data) do
assigns = %{id: id, container_name: container_name}
{container_name,
~H"""
<div class="flex flex-wrap justify-center items-center">
<.link navigate={Routes.container_show_path(Endpoint, :show, @id)} class="link">
<%= @container_name %>
</.link>
</div>
"""}
end
defp get_value_for_key(:packs, container, _extra_data) do
container |> Containers.get_container_ammo_group_count!()
end
defp get_value_for_key(:rounds, container, _extra_data) do
container |> Containers.get_container_rounds!()
end
defp get_value_for_key(:tags, container, %{tag_actions: tag_actions}) do
assigns = %{tag_actions: tag_actions, container: container}
{container.tags |> Enum.map(fn %{name: name} -> name end),
~H"""
<div class="flex flex-wrap justify-center items-center">
<%= unless @container.tags |> Enum.empty?() do %>
<%= for tag <- @container.tags do %>
<TagCard.simple_tag_card tag={tag} />
<% end %>
<% end %>
<%= render_slot(@tag_actions, @container) %>
</div>
"""}
end
defp get_value_for_key(:actions, container, %{actions: actions}) do
assigns = %{actions: actions, container: container}
~H"""
<%= render_slot(@actions, @container) %>
"""
end
defp get_value_for_key(key, container, _extra_data), do: container |> Map.get(key)
end

View File

@ -6,7 +6,6 @@ defmodule CanneryWeb.ContainerLive.Index do
use CanneryWeb, :live_view
import CanneryWeb.Components.ContainerCard
alias Cannery.{Containers, Containers.Container, Repo}
alias CanneryWeb.{Components.TagCard, Endpoint}
alias Ecto.Changeset
@impl true
@ -124,133 +123,9 @@ defmodule CanneryWeb.ContainerLive.Index do
defp display_containers(%{assigns: %{search: search, current_user: current_user}} = socket) do
containers =
Containers.list_containers(search, current_user) |> Repo.preload([:tags, :ammo_groups])
Containers.list_containers(search, current_user)
|> Repo.preload([:tags, :ammo_groups])
columns =
[
%{label: gettext("Name"), key: :name, type: :string},
%{label: gettext("Description"), key: :desc, type: :string},
%{label: gettext("Location"), key: :location, type: :string},
%{label: gettext("Type"), key: :type, type: :string},
%{label: gettext("Packs"), key: :packs, type: :integer},
%{label: gettext("Rounds"), key: :rounds, type: :string},
%{label: gettext("Tags"), key: :tags, type: :tags},
%{label: nil, key: :actions, sortable: false, type: :actions}
]
|> Enum.filter(fn %{key: key, type: type} ->
# remove columns if all values match defaults
default_value =
case type do
:boolean -> false
_other_type -> nil
socket |> assign(:containers, containers)
end
containers
|> Enum.any?(fn container ->
type in [:tags, :actions] or not (container |> Map.get(key) == default_value)
end)
end)
rows =
containers
|> Enum.map(fn container -> container |> get_row_data_for_container(columns) end)
socket
|> assign(
containers: containers,
columns: columns,
rows: rows
)
end
@spec get_row_data_for_container(Container.t(), [map()]) :: map()
defp get_row_data_for_container(container, columns) do
container = container |> Repo.preload([:ammo_groups, :tags])
columns
|> Map.new(fn %{key: key} -> {key, get_value_for_key(key, container)} end)
end
@spec get_value_for_key(atom(), Container.t()) :: any()
defp get_value_for_key(:name, %{id: id, name: container_name}) do
assigns = %{id: id, container_name: container_name}
{container_name,
~H"""
<div class="flex flex-wrap justify-center items-center">
<.link navigate={Routes.container_show_path(Endpoint, :show, @id)} class="link">
<%= @container_name %>
</.link>
</div>
"""}
end
defp get_value_for_key(:packs, container) do
container |> Containers.get_container_ammo_group_count!()
end
defp get_value_for_key(:rounds, container) do
container |> Containers.get_container_rounds!()
end
defp get_value_for_key(:tags, container) do
assigns = %{container: container}
{container.tags |> Enum.map(fn %{name: name} -> name end),
~H"""
<div class="flex flex-wrap justify-center items-center">
<%= unless @container.tags |> Enum.empty?() do %>
<%= for tag <- @container.tags do %>
<TagCard.simple_tag_card tag={tag} />
<% end %>
<% end %>
<div class="mx-4 my-2">
<.link
patch={Routes.container_index_path(Endpoint, :edit_tags, @container)}
class="text-primary-600 link"
>
<i class="fa-fw fa-lg fas fa-tags"></i>
</.link>
</div>
</div>
"""}
end
defp get_value_for_key(:actions, container) do
assigns = %{container: container}
~H"""
<.link
patch={Routes.container_index_path(Endpoint, :edit, @container)}
class="text-primary-600 link"
data-qa={"edit-#{@container.id}"}
>
<i class="fa-fw fa-lg fas fa-edit"></i>
</.link>
<.link
patch={Routes.container_index_path(Endpoint, :clone, @container)}
class="text-primary-600 link"
data-qa={"clone-#{@container.id}"}
>
<i class="fa-fw fa-lg fas fa-copy"></i>
</.link>
<.link
href="#"
class="text-primary-600 link"
phx-click="delete"
phx-value-id={@container.id}
data-confirm={
dgettext("prompts", "Are you sure you want to delete %{name}?", name: @container.name)
}
data-qa={"delete-#{@container.id}"}
>
<i class="fa-fw fa-lg fas fa-trash"></i>
</.link>
"""
end
defp get_value_for_key(key, container), do: container |> Map.get(key)
end

View File

@ -51,12 +51,55 @@
<% else %>
<%= if @view_table do %>
<.live_component
module={CanneryWeb.Components.TableComponent}
module={CanneryWeb.Components.ContainerTableComponent}
id="containers_index_table"
action={@live_action}
columns={@columns}
rows={@rows}
/>
containers={@containers}
current_user={@current_user}
>
<:tag_actions :let={container}>
<div class="mx-4 my-2">
<.link
patch={Routes.container_index_path(Endpoint, :edit_tags, container)}
class="text-primary-600 link"
>
<i class="fa-fw fa-lg fas fa-tags"></i>
</.link>
</div>
</:tag_actions>
<:actions :let={container}>
<.link
patch={Routes.container_index_path(Endpoint, :edit, container)}
class="text-primary-600 link"
data-qa={"edit-#{container.id}"}
>
<i class="fa-fw fa-lg fas fa-edit"></i>
</.link>
<.link
patch={Routes.container_index_path(Endpoint, :clone, container)}
class="text-primary-600 link"
data-qa={"clone-#{container.id}"}
>
<i class="fa-fw fa-lg fas fa-copy"></i>
</.link>
<.link
href="#"
class="text-primary-600 link"
phx-click="delete"
phx-value-id={container.id}
data-confirm={
dgettext("prompts", "Are you sure you want to delete %{name}?",
name: container.name
)
}
data-qa={"delete-#{container.id}"}
>
<i class="fa-fw fa-lg fas fa-trash"></i>
</.link>
</:actions>
</.live_component>
<% else %>
<%= for container <- @containers do %>
<.container_card container={container}>

View File

@ -114,8 +114,8 @@ msgid "Container"
msgstr "Behälter"
#: lib/cannery_web/components/topbar.ex:57
#: lib/cannery_web/live/container_live/index.ex:50
#: lib/cannery_web/live/container_live/index.ex:59
#: lib/cannery_web/live/container_live/index.ex:49
#: lib/cannery_web/live/container_live/index.ex:58
#: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Containers"
@ -139,9 +139,9 @@ msgstr "Anzahl"
msgid "Count:"
msgstr "Anzahl:"
#: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:24
#: lib/cannery_web/live/container_live/form_component.html.heex:27
#: lib/cannery_web/live/container_live/index.ex:132
#, elixir-autogen, elixir-format
msgid "Description"
msgstr "Beschreibung"
@ -216,9 +216,9 @@ msgstr "Einladungen"
msgid "Keep me logged in for 60 days"
msgstr "Für 60 Tage eingeloggt bleiben"
#: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:133
#, elixir-autogen, elixir-format
msgid "Location"
msgstr "Standort"
@ -251,9 +251,9 @@ msgid "My cool ammo can"
msgstr "Meine coole Munitionskiste"
#: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/index.ex:131
#: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75
#, elixir-autogen, elixir-format
@ -266,8 +266,8 @@ msgstr "Name"
msgid "New Ammo type"
msgstr "Neuer Munitionstyp"
#: lib/cannery_web/live/container_live/index.ex:37
#: lib/cannery_web/live/container_live/index.ex:44
#: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.ex:43
#, elixir-autogen, elixir-format
msgid "New Container"
msgstr "Neuer Behälter"
@ -392,8 +392,8 @@ msgstr "Stahl"
msgid "Stored in"
msgstr "Gelagert in"
#: lib/cannery_web/components/container_table_component.ex:52
#: lib/cannery_web/components/topbar.ex:49
#: lib/cannery_web/live/container_live/index.ex:137
#: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -421,9 +421,9 @@ msgstr "Die selbst-gehostete Website zur Verwaltung von Schusswaffen"
msgid "Tracer"
msgstr "Leuchtspur"
#: lib/cannery_web/components/container_table_component.ex:49
#: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:35
#: lib/cannery_web/live/container_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Type"
msgstr "Art"
@ -638,13 +638,13 @@ msgstr "Neu verbinden..."
msgid "Loading..."
msgstr "Lädt..."
#: lib/cannery_web/live/container_live/index.ex:33
#: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/show.ex:113
#, elixir-autogen, elixir-format
msgid "Edit %{name}"
msgstr "%{name} bearbeiten"
#: lib/cannery_web/live/container_live/index.ex:70
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:114
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
@ -864,13 +864,13 @@ msgid "Rounds shot: %{count}"
msgstr "Patronen abgefeuert"
#: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/live/container_live/index.ex:135
#: lib/cannery_web/components/container_table_component.ex:50
#, elixir-autogen, elixir-format, fuzzy
msgid "Packs"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/live/container_live/index.ex:136
#: lib/cannery_web/components/container_table_component.ex:51
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds"
msgstr "Patronen:"

View File

@ -28,13 +28,13 @@ msgstr ""
msgid "Container must be empty before deleting"
msgstr "Behälter muss vor dem Löschen leer sein"
#: lib/cannery_web/live/container_live/index.ex:93
#: lib/cannery_web/live/container_live/index.ex:92
#: lib/cannery_web/live/container_live/show.ex:73
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr "Konnte %{name} nicht löschen: %{error}"
#: lib/cannery_web/live/container_live/index.ex:81
#: lib/cannery_web/live/container_live/index.ex:80
#, elixir-autogen, elixir-format
msgid "Could not find that container"
msgstr "Konnte Behälter nicht finden"

View File

@ -50,7 +50,7 @@ msgstr "%{name} erfolgreich deaktiviert"
msgid "%{name} enabled succesfully"
msgstr "%{name} erfolgreich aktiviert"
#: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/index.ex:85
#: lib/cannery_web/live/container_live/show.ex:63
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
@ -82,8 +82,8 @@ msgstr ""
"Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht "
"zurückgenommen werden!"
#: lib/cannery_web/live/container_live/index.ex:246
#: lib/cannery_web/live/container_live/index.html.heex:95
#: lib/cannery_web/live/container_live/index.html.heex:93
#: lib/cannery_web/live/container_live/index.html.heex:138
#: lib/cannery_web/live/container_live/show.html.heex:59
#: lib/cannery_web/live/tag_live/index.html.heex:39
#, elixir-autogen, elixir-format

View File

@ -99,8 +99,8 @@ msgid "Container"
msgstr ""
#: lib/cannery_web/components/topbar.ex:57
#: lib/cannery_web/live/container_live/index.ex:50
#: lib/cannery_web/live/container_live/index.ex:59
#: lib/cannery_web/live/container_live/index.ex:49
#: lib/cannery_web/live/container_live/index.ex:58
#: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Containers"
@ -124,9 +124,9 @@ msgstr ""
msgid "Count:"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:24
#: lib/cannery_web/live/container_live/form_component.html.heex:27
#: lib/cannery_web/live/container_live/index.ex:132
#, elixir-autogen, elixir-format
msgid "Description"
msgstr ""
@ -201,9 +201,9 @@ msgstr ""
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:133
#, elixir-autogen, elixir-format
msgid "Location"
msgstr ""
@ -236,9 +236,9 @@ msgid "My cool ammo can"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/index.ex:131
#: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75
#, elixir-autogen, elixir-format
@ -251,8 +251,8 @@ msgstr ""
msgid "New Ammo type"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:37
#: lib/cannery_web/live/container_live/index.ex:44
#: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.ex:43
#, elixir-autogen, elixir-format
msgid "New Container"
msgstr ""
@ -375,8 +375,8 @@ msgstr ""
msgid "Stored in"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:52
#: lib/cannery_web/components/topbar.ex:49
#: lib/cannery_web/live/container_live/index.ex:137
#: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -404,9 +404,9 @@ msgstr ""
msgid "Tracer"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:49
#: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:35
#: lib/cannery_web/live/container_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Type"
msgstr ""
@ -621,13 +621,13 @@ msgstr ""
msgid "Loading..."
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:33
#: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/show.ex:113
#, elixir-autogen, elixir-format
msgid "Edit %{name}"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:70
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:114
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
@ -847,13 +847,13 @@ msgid "Rounds shot: %{count}"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/live/container_live/index.ex:135
#: lib/cannery_web/components/container_table_component.ex:50
#, elixir-autogen, elixir-format
msgid "Packs"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/live/container_live/index.ex:136
#: lib/cannery_web/components/container_table_component.ex:51
#, elixir-autogen, elixir-format
msgid "Rounds"
msgstr ""

View File

@ -100,8 +100,8 @@ msgid "Container"
msgstr ""
#: lib/cannery_web/components/topbar.ex:57
#: lib/cannery_web/live/container_live/index.ex:50
#: lib/cannery_web/live/container_live/index.ex:59
#: lib/cannery_web/live/container_live/index.ex:49
#: lib/cannery_web/live/container_live/index.ex:58
#: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Containers"
@ -125,9 +125,9 @@ msgstr ""
msgid "Count:"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:24
#: lib/cannery_web/live/container_live/form_component.html.heex:27
#: lib/cannery_web/live/container_live/index.ex:132
#, elixir-autogen, elixir-format
msgid "Description"
msgstr ""
@ -202,9 +202,9 @@ msgstr ""
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:133
#, elixir-autogen, elixir-format
msgid "Location"
msgstr ""
@ -237,9 +237,9 @@ msgid "My cool ammo can"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/index.ex:131
#: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75
#, elixir-autogen, elixir-format
@ -252,8 +252,8 @@ msgstr ""
msgid "New Ammo type"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:37
#: lib/cannery_web/live/container_live/index.ex:44
#: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.ex:43
#, elixir-autogen, elixir-format
msgid "New Container"
msgstr ""
@ -376,8 +376,8 @@ msgstr ""
msgid "Stored in"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:52
#: lib/cannery_web/components/topbar.ex:49
#: lib/cannery_web/live/container_live/index.ex:137
#: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -405,9 +405,9 @@ msgstr ""
msgid "Tracer"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:49
#: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:35
#: lib/cannery_web/live/container_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Type"
msgstr ""
@ -622,13 +622,13 @@ msgstr ""
msgid "Loading..."
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:33
#: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/show.ex:113
#, elixir-autogen, elixir-format
msgid "Edit %{name}"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:70
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:114
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
@ -848,13 +848,13 @@ msgid "Rounds shot: %{count}"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/live/container_live/index.ex:135
#: lib/cannery_web/components/container_table_component.ex:50
#, elixir-autogen, elixir-format, fuzzy
msgid "Packs"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/live/container_live/index.ex:136
#: lib/cannery_web/components/container_table_component.ex:51
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds"
msgstr ""

View File

@ -15,13 +15,13 @@ msgstr ""
msgid "Container must be empty before deleting"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:93
#: lib/cannery_web/live/container_live/index.ex:92
#: lib/cannery_web/live/container_live/show.ex:73
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:81
#: lib/cannery_web/live/container_live/index.ex:80
#, elixir-autogen, elixir-format
msgid "Could not find that container"
msgstr ""

View File

@ -38,7 +38,7 @@ msgstr ""
msgid "%{name} enabled succesfully"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/index.ex:85
#: lib/cannery_web/live/container_live/show.ex:63
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
@ -68,8 +68,8 @@ msgstr ""
msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:246
#: lib/cannery_web/live/container_live/index.html.heex:95
#: lib/cannery_web/live/container_live/index.html.heex:93
#: lib/cannery_web/live/container_live/index.html.heex:138
#: lib/cannery_web/live/container_live/show.html.heex:59
#: lib/cannery_web/live/tag_live/index.html.heex:39
#, elixir-autogen, elixir-format

View File

@ -15,13 +15,13 @@ msgstr ""
msgid "Container must be empty before deleting"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:93
#: lib/cannery_web/live/container_live/index.ex:92
#: lib/cannery_web/live/container_live/show.ex:73
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:81
#: lib/cannery_web/live/container_live/index.ex:80
#, elixir-autogen, elixir-format
msgid "Could not find that container"
msgstr ""

View File

@ -114,8 +114,8 @@ msgid "Container"
msgstr ""
#: lib/cannery_web/components/topbar.ex:57
#: lib/cannery_web/live/container_live/index.ex:50
#: lib/cannery_web/live/container_live/index.ex:59
#: lib/cannery_web/live/container_live/index.ex:49
#: lib/cannery_web/live/container_live/index.ex:58
#: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Containers"
@ -139,9 +139,9 @@ msgstr ""
msgid "Count:"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:24
#: lib/cannery_web/live/container_live/form_component.html.heex:27
#: lib/cannery_web/live/container_live/index.ex:132
#, elixir-autogen, elixir-format
msgid "Description"
msgstr ""
@ -216,9 +216,9 @@ msgstr ""
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:133
#, elixir-autogen, elixir-format
msgid "Location"
msgstr ""
@ -251,9 +251,9 @@ msgid "My cool ammo can"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/index.ex:131
#: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75
#, elixir-autogen, elixir-format
@ -266,8 +266,8 @@ msgstr ""
msgid "New Ammo type"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:37
#: lib/cannery_web/live/container_live/index.ex:44
#: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.ex:43
#, elixir-autogen, elixir-format
msgid "New Container"
msgstr ""
@ -390,8 +390,8 @@ msgstr ""
msgid "Stored in"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:52
#: lib/cannery_web/components/topbar.ex:49
#: lib/cannery_web/live/container_live/index.ex:137
#: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -419,9 +419,9 @@ msgstr ""
msgid "Tracer"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:49
#: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:35
#: lib/cannery_web/live/container_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Type"
msgstr ""
@ -636,13 +636,13 @@ msgstr ""
msgid "Loading..."
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:33
#: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/show.ex:113
#, elixir-autogen, elixir-format
msgid "Edit %{name}"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:70
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:114
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
@ -862,13 +862,13 @@ msgid "Rounds shot: %{count}"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/live/container_live/index.ex:135
#: lib/cannery_web/components/container_table_component.ex:50
#, elixir-autogen, elixir-format, fuzzy
msgid "Packs"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/live/container_live/index.ex:136
#: lib/cannery_web/components/container_table_component.ex:51
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds"
msgstr ""

View File

@ -28,13 +28,13 @@ msgstr ""
msgid "Container must be empty before deleting"
msgstr "El contenedor debe estar vacío antes de ser borrado"
#: lib/cannery_web/live/container_live/index.ex:93
#: lib/cannery_web/live/container_live/index.ex:92
#: lib/cannery_web/live/container_live/show.ex:73
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr "No se pudo eliminar %{name}: %{error}"
#: lib/cannery_web/live/container_live/index.ex:81
#: lib/cannery_web/live/container_live/index.ex:80
#, elixir-autogen, elixir-format
msgid "Could not find that container"
msgstr "No se pudo encontrar el contenedor"

View File

@ -50,7 +50,7 @@ msgstr "%{name} desactivado exitosamente"
msgid "%{name} enabled succesfully"
msgstr "%{name} activado exitosamente"
#: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/index.ex:85
#: lib/cannery_web/live/container_live/show.ex:63
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
@ -82,8 +82,8 @@ msgstr ""
msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!"
#: lib/cannery_web/live/container_live/index.ex:246
#: lib/cannery_web/live/container_live/index.html.heex:95
#: lib/cannery_web/live/container_live/index.html.heex:93
#: lib/cannery_web/live/container_live/index.html.heex:138
#: lib/cannery_web/live/container_live/show.html.heex:59
#: lib/cannery_web/live/tag_live/index.html.heex:39
#, elixir-autogen, elixir-format

View File

@ -114,8 +114,8 @@ msgid "Container"
msgstr "Conteneur"
#: lib/cannery_web/components/topbar.ex:57
#: lib/cannery_web/live/container_live/index.ex:50
#: lib/cannery_web/live/container_live/index.ex:59
#: lib/cannery_web/live/container_live/index.ex:49
#: lib/cannery_web/live/container_live/index.ex:58
#: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Containers"
@ -139,9 +139,9 @@ msgstr "Quantité"
msgid "Count:"
msgstr "Quantité:"
#: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:24
#: lib/cannery_web/live/container_live/form_component.html.heex:27
#: lib/cannery_web/live/container_live/index.ex:132
#, elixir-autogen, elixir-format
msgid "Description"
msgstr "Description"
@ -216,9 +216,9 @@ msgstr "Invitations"
msgid "Keep me logged in for 60 days"
msgstr "Me garder authentifié durant 60 jours"
#: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:133
#, elixir-autogen, elixir-format
msgid "Location"
msgstr "Localisation"
@ -251,9 +251,9 @@ msgid "My cool ammo can"
msgstr "Ma superbe boite de munition"
#: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/index.ex:131
#: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75
#, elixir-autogen, elixir-format
@ -266,8 +266,8 @@ msgstr "Nom"
msgid "New Ammo type"
msgstr "Nouveau type de munition"
#: lib/cannery_web/live/container_live/index.ex:37
#: lib/cannery_web/live/container_live/index.ex:44
#: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.ex:43
#, elixir-autogen, elixir-format
msgid "New Container"
msgstr "Nouveau conteneur"
@ -392,8 +392,8 @@ msgstr "Acier"
msgid "Stored in"
msgstr "Est stocké dans"
#: lib/cannery_web/components/container_table_component.ex:52
#: lib/cannery_web/components/topbar.ex:49
#: lib/cannery_web/live/container_live/index.ex:137
#: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -423,9 +423,9 @@ msgstr "Le site web de suivi darme à feux auto-hébergé"
msgid "Tracer"
msgstr "Traceuse"
#: lib/cannery_web/components/container_table_component.ex:49
#: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:35
#: lib/cannery_web/live/container_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Type"
msgstr "Type"
@ -640,13 +640,13 @@ msgstr "Reconnexion en cours…"
msgid "Loading..."
msgstr "Chargement en cours…"
#: lib/cannery_web/live/container_live/index.ex:33
#: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/show.ex:113
#, elixir-autogen, elixir-format
msgid "Edit %{name}"
msgstr "Éditer %{name}"
#: lib/cannery_web/live/container_live/index.ex:70
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:114
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
@ -867,13 +867,13 @@ msgid "Rounds shot: %{count}"
msgstr "Cartouches tirées"
#: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/live/container_live/index.ex:135
#: lib/cannery_web/components/container_table_component.ex:50
#, elixir-autogen, elixir-format, fuzzy
msgid "Packs"
msgstr "Packages:"
#: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/live/container_live/index.ex:136
#: lib/cannery_web/components/container_table_component.ex:51
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds"
msgstr "Cartouches:"

View File

@ -28,13 +28,13 @@ msgstr ""
msgid "Container must be empty before deleting"
msgstr "Le conteneur doit être vide pour être supprimé"
#: lib/cannery_web/live/container_live/index.ex:93
#: lib/cannery_web/live/container_live/index.ex:92
#: lib/cannery_web/live/container_live/show.ex:73
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr "Impossible de supprimer %{name} : %{error}"
#: lib/cannery_web/live/container_live/index.ex:81
#: lib/cannery_web/live/container_live/index.ex:80
#, elixir-autogen, elixir-format
msgid "Could not find that container"
msgstr "Impossible de trouver ce conteneur"

View File

@ -50,7 +50,7 @@ msgstr "%{name} supprimé·e avec succès"
msgid "%{name} enabled succesfully"
msgstr "%{name} activé·e avec succès"
#: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/index.ex:85
#: lib/cannery_web/live/container_live/show.ex:63
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
@ -83,8 +83,8 @@ msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr ""
"Êtes-vous certain·e de supprimer %{email}? Cette action est définitive!"
#: lib/cannery_web/live/container_live/index.ex:246
#: lib/cannery_web/live/container_live/index.html.heex:95
#: lib/cannery_web/live/container_live/index.html.heex:93
#: lib/cannery_web/live/container_live/index.html.heex:138
#: lib/cannery_web/live/container_live/show.html.heex:59
#: lib/cannery_web/live/tag_live/index.html.heex:39
#, elixir-autogen, elixir-format

View File

@ -110,8 +110,8 @@ msgid "Container"
msgstr ""
#: lib/cannery_web/components/topbar.ex:57
#: lib/cannery_web/live/container_live/index.ex:50
#: lib/cannery_web/live/container_live/index.ex:59
#: lib/cannery_web/live/container_live/index.ex:49
#: lib/cannery_web/live/container_live/index.ex:58
#: lib/cannery_web/live/container_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Containers"
@ -135,9 +135,9 @@ msgstr ""
msgid "Count:"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:47
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:24
#: lib/cannery_web/live/container_live/form_component.html.heex:27
#: lib/cannery_web/live/container_live/index.ex:132
#, elixir-autogen, elixir-format
msgid "Description"
msgstr ""
@ -212,9 +212,9 @@ msgstr ""
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:48
#: lib/cannery_web/components/move_ammo_group_component.ex:69
#: lib/cannery_web/live/container_live/form_component.html.heex:42
#: lib/cannery_web/live/container_live/index.ex:133
#, elixir-autogen, elixir-format
msgid "Location"
msgstr ""
@ -247,9 +247,9 @@ msgid "My cool ammo can"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:45
#: lib/cannery_web/components/container_table_component.ex:46
#: lib/cannery_web/live/ammo_type_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/form_component.html.heex:20
#: lib/cannery_web/live/container_live/index.ex:131
#: lib/cannery_web/live/invite_live/form_component.html.heex:20
#: lib/cannery_web/live/tag_live/form_component.ex:75
#, elixir-autogen, elixir-format
@ -262,8 +262,8 @@ msgstr ""
msgid "New Ammo type"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:37
#: lib/cannery_web/live/container_live/index.ex:44
#: lib/cannery_web/live/container_live/index.ex:36
#: lib/cannery_web/live/container_live/index.ex:43
#, elixir-autogen, elixir-format
msgid "New Container"
msgstr ""
@ -386,8 +386,8 @@ msgstr ""
msgid "Stored in"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:52
#: lib/cannery_web/components/topbar.ex:49
#: lib/cannery_web/live/container_live/index.ex:137
#: lib/cannery_web/live/tag_live/index.ex:32
#: lib/cannery_web/live/tag_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -415,9 +415,9 @@ msgstr ""
msgid "Tracer"
msgstr ""
#: lib/cannery_web/components/container_table_component.ex:49
#: lib/cannery_web/components/move_ammo_group_component.ex:68
#: lib/cannery_web/live/container_live/form_component.html.heex:35
#: lib/cannery_web/live/container_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Type"
msgstr ""
@ -632,13 +632,13 @@ msgstr ""
msgid "Loading..."
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:33
#: lib/cannery_web/live/container_live/index.ex:32
#: lib/cannery_web/live/container_live/show.ex:113
#, elixir-autogen, elixir-format
msgid "Edit %{name}"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:70
#: lib/cannery_web/live/container_live/index.ex:69
#: lib/cannery_web/live/container_live/show.ex:114
#, elixir-autogen, elixir-format
msgid "Edit %{name} tags"
@ -858,13 +858,13 @@ msgid "Rounds shot: %{count}"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:100
#: lib/cannery_web/live/container_live/index.ex:135
#: lib/cannery_web/components/container_table_component.ex:50
#, elixir-autogen, elixir-format, fuzzy
msgid "Packs"
msgstr ""
#: lib/cannery_web/components/ammo_type_table_component.ex:80
#: lib/cannery_web/live/container_live/index.ex:136
#: lib/cannery_web/components/container_table_component.ex:51
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds"
msgstr ""

View File

@ -29,13 +29,13 @@ msgstr ""
msgid "Container must be empty before deleting"
msgstr "Caithfidh an coimeádán a bheidh follamh roimh scriosadh"
#: lib/cannery_web/live/container_live/index.ex:93
#: lib/cannery_web/live/container_live/index.ex:92
#: lib/cannery_web/live/container_live/show.ex:73
#, elixir-autogen, elixir-format
msgid "Could not delete %{name}: %{error}"
msgstr "Ní feidir %{name} a scriosadh: %{error}"
#: lib/cannery_web/live/container_live/index.ex:81
#: lib/cannery_web/live/container_live/index.ex:80
#, elixir-autogen, elixir-format
msgid "Could not find that container"
msgstr "Ní feidir an coimeádán sin a fáil"

View File

@ -48,7 +48,7 @@ msgstr ""
msgid "%{name} enabled succesfully"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/index.ex:85
#: lib/cannery_web/live/container_live/show.ex:63
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
@ -78,8 +78,8 @@ msgstr ""
msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:246
#: lib/cannery_web/live/container_live/index.html.heex:95
#: lib/cannery_web/live/container_live/index.html.heex:93
#: lib/cannery_web/live/container_live/index.html.heex:138
#: lib/cannery_web/live/container_live/show.html.heex:59
#: lib/cannery_web/live/tag_live/index.html.heex:39
#, elixir-autogen, elixir-format

View File

@ -37,7 +37,7 @@ msgstr ""
msgid "%{name} enabled succesfully"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:86
#: lib/cannery_web/live/container_live/index.ex:85
#: lib/cannery_web/live/container_live/show.ex:63
#, elixir-autogen, elixir-format
msgid "%{name} has been deleted"
@ -67,8 +67,8 @@ msgstr ""
msgid "Are you sure you want to delete %{email}? This action is permanent!"
msgstr ""
#: lib/cannery_web/live/container_live/index.ex:246
#: lib/cannery_web/live/container_live/index.html.heex:95
#: lib/cannery_web/live/container_live/index.html.heex:93
#: lib/cannery_web/live/container_live/index.html.heex:138
#: lib/cannery_web/live/container_live/show.html.heex:59
#: lib/cannery_web/live/tag_live/index.html.heex:39
#, elixir-autogen, elixir-format