forked from shibao/cannery
		
	add used filtering to ammo type show page
This commit is contained in:
		| @@ -4,6 +4,7 @@ | |||||||
| - Make ammo catalog page include ammo count | - Make ammo catalog page include ammo count | ||||||
| - Make ammo type show page a bit more compact | - Make ammo type show page a bit more compact | ||||||
| - Make ammo type show page include container names for each ammo | - Make ammo type show page include container names for each ammo | ||||||
|  | - Make ammo type show page filter used-up ammo | ||||||
| - Make container show page a bit more compact | - Make container show page a bit more compact | ||||||
| - Forgot to add the logo as the favicon whoops | - Forgot to add the logo as the favicon whoops | ||||||
|  |  | ||||||
|   | |||||||
| @@ -220,7 +220,15 @@ defmodule Cannery.Ammo do | |||||||
|  |  | ||||||
|   """ |   """ | ||||||
|   @spec list_ammo_groups_for_type(AmmoType.t(), User.t()) :: [AmmoGroup.t()] |   @spec list_ammo_groups_for_type(AmmoType.t(), User.t()) :: [AmmoGroup.t()] | ||||||
|   def list_ammo_groups_for_type(%AmmoType{id: ammo_type_id, user_id: user_id}, %User{id: user_id}) do |   @spec list_ammo_groups_for_type(AmmoType.t(), User.t(), include_empty :: boolean()) :: | ||||||
|  |           [AmmoGroup.t()] | ||||||
|  |   def list_ammo_groups_for_type(ammo_type, user, include_empty \\ false) | ||||||
|  |  | ||||||
|  |   def list_ammo_groups_for_type( | ||||||
|  |         %AmmoType{id: ammo_type_id, user_id: user_id}, | ||||||
|  |         %User{id: user_id}, | ||||||
|  |         _include_empty = true | ||||||
|  |       ) do | ||||||
|     Repo.all( |     Repo.all( | ||||||
|       from ag in AmmoGroup, |       from ag in AmmoGroup, | ||||||
|         left_join: sg in assoc(ag, :shot_groups), |         left_join: sg in assoc(ag, :shot_groups), | ||||||
| @@ -231,6 +239,22 @@ defmodule Cannery.Ammo do | |||||||
|     ) |     ) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def list_ammo_groups_for_type( | ||||||
|  |         %AmmoType{id: ammo_type_id, user_id: user_id}, | ||||||
|  |         %User{id: user_id}, | ||||||
|  |         _include_empty = false | ||||||
|  |       ) do | ||||||
|  |     Repo.all( | ||||||
|  |       from ag in AmmoGroup, | ||||||
|  |         left_join: sg in assoc(ag, :shot_groups), | ||||||
|  |         where: ag.ammo_type_id == ^ammo_type_id, | ||||||
|  |         where: ag.user_id == ^user_id, | ||||||
|  |         where: not (ag.count == 0), | ||||||
|  |         preload: [shot_groups: sg], | ||||||
|  |         order_by: ag.id | ||||||
|  |     ) | ||||||
|  |   end | ||||||
|  |  | ||||||
|   @doc """ |   @doc """ | ||||||
|   Returns the count of ammo_groups for an ammo type. |   Returns the count of ammo_groups for an ammo type. | ||||||
|  |  | ||||||
| @@ -285,22 +309,27 @@ defmodule Cannery.Ammo do | |||||||
|   """ |   """ | ||||||
|   @spec list_ammo_groups(User.t()) :: [AmmoGroup.t()] |   @spec list_ammo_groups(User.t()) :: [AmmoGroup.t()] | ||||||
|   @spec list_ammo_groups(User.t(), include_empty :: boolean()) :: [AmmoGroup.t()] |   @spec list_ammo_groups(User.t(), include_empty :: boolean()) :: [AmmoGroup.t()] | ||||||
|   def list_ammo_groups(%User{id: user_id}, include_empty \\ false) do |   def list_ammo_groups(user, include_empty \\ false) | ||||||
|     if include_empty do |  | ||||||
|  |   def list_ammo_groups(%User{id: user_id}, _include_empty = true) do | ||||||
|  |     Repo.all( | ||||||
|       from ag in AmmoGroup, |       from ag in AmmoGroup, | ||||||
|         left_join: sg in assoc(ag, :shot_groups), |         left_join: sg in assoc(ag, :shot_groups), | ||||||
|         where: ag.user_id == ^user_id, |         where: ag.user_id == ^user_id, | ||||||
|         preload: [shot_groups: sg], |         preload: [shot_groups: sg], | ||||||
|         order_by: ag.id |         order_by: ag.id | ||||||
|     else |     ) | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   def list_ammo_groups(%User{id: user_id}, _include_empty = false) do | ||||||
|  |     Repo.all( | ||||||
|       from ag in AmmoGroup, |       from ag in AmmoGroup, | ||||||
|         left_join: sg in assoc(ag, :shot_groups), |         left_join: sg in assoc(ag, :shot_groups), | ||||||
|         where: ag.user_id == ^user_id, |         where: ag.user_id == ^user_id, | ||||||
|         where: not (ag.count == 0), |         where: not (ag.count == 0), | ||||||
|         preload: [shot_groups: sg], |         preload: [shot_groups: sg], | ||||||
|         order_by: ag.id |         order_by: ag.id | ||||||
|     end |     ) | ||||||
|     |> Repo.all() |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   @doc """ |   @doc """ | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ defmodule CanneryWeb.Components.AmmoGroupCard do | |||||||
|       <div class="flex flex-col justify-center items-center"> |       <div class="flex flex-col justify-center items-center"> | ||||||
|         <span class="rounded-lg title text-lg"> |         <span class="rounded-lg title text-lg"> | ||||||
|           <%= gettext("Count:") %> |           <%= gettext("Count:") %> | ||||||
|           <%= @ammo_group.count %> |           <%= if @ammo_group.count == 0, do: "Empty", else: @ammo_group.count %> | ||||||
|         </span> |         </span> | ||||||
|  |  | ||||||
|         <%= if @ammo_group.notes do %> |         <%= if @ammo_group.notes do %> | ||||||
|   | |||||||
| @@ -9,22 +9,12 @@ defmodule CanneryWeb.AmmoTypeLive.Show do | |||||||
|   alias CanneryWeb.Endpoint |   alias CanneryWeb.Endpoint | ||||||
|  |  | ||||||
|   @impl true |   @impl true | ||||||
|   def mount(_params, _session, socket), do: {:ok, socket} |   def mount(_params, _session, socket), do: {:ok, socket |> assign(show_used: false)} | ||||||
|  |  | ||||||
|   @impl true |   @impl true | ||||||
|   def handle_params(%{"id" => id}, _params, %{assigns: %{current_user: current_user}} = socket) do |   def handle_params(%{"id" => id}, _params, %{assigns: %{current_user: current_user}} = socket) do | ||||||
|     ammo_type = Ammo.get_ammo_type!(id, current_user) |     ammo_type = Ammo.get_ammo_type!(id, current_user) | ||||||
|  |     {:noreply, socket |> display_ammo_type(ammo_type)} | ||||||
|     socket = |  | ||||||
|       socket |  | ||||||
|       |> assign( |  | ||||||
|         page_title: page_title(socket.assigns.live_action), |  | ||||||
|         ammo_type: ammo_type, |  | ||||||
|         ammo_groups: ammo_type |> Ammo.list_ammo_groups_for_type(current_user), |  | ||||||
|         avg_cost_per_round: ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user) |  | ||||||
|       ) |  | ||||||
|  |  | ||||||
|     {:noreply, socket} |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   @impl true |   @impl true | ||||||
| @@ -41,6 +31,34 @@ defmodule CanneryWeb.AmmoTypeLive.Show do | |||||||
|     {:noreply, socket |> put_flash(:info, prompt) |> push_redirect(to: redirect_to)} |     {:noreply, socket |> put_flash(:info, prompt) |> push_redirect(to: redirect_to)} | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   @impl true | ||||||
|  |   def handle_event("toggle_show_used", _, %{assigns: %{show_used: show_used}} = socket) do | ||||||
|  |     {:noreply, socket |> assign(:show_used, !show_used) |> display_ammo_type()} | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   defp display_ammo_type( | ||||||
|  |          %{ | ||||||
|  |            assigns: %{ | ||||||
|  |              live_action: live_action, | ||||||
|  |              current_user: current_user, | ||||||
|  |              show_used: show_used | ||||||
|  |            } | ||||||
|  |          } = socket, | ||||||
|  |          ammo_type | ||||||
|  |        ) do | ||||||
|  |     socket | ||||||
|  |     |> assign( | ||||||
|  |       page_title: page_title(live_action), | ||||||
|  |       ammo_type: ammo_type, | ||||||
|  |       ammo_groups: ammo_type |> Ammo.list_ammo_groups_for_type(current_user, show_used), | ||||||
|  |       avg_cost_per_round: ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user) | ||||||
|  |     ) | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   defp display_ammo_type(%{assigns: %{ammo_type: ammo_type}} = socket) do | ||||||
|  |     socket |> display_ammo_type(ammo_type) | ||||||
|  |   end | ||||||
|  |  | ||||||
|   defp page_title(:show), do: gettext("Show Ammo type") |   defp page_title(:show), do: gettext("Show Ammo type") | ||||||
|   defp page_title(:edit), do: gettext("Edit Ammo type") |   defp page_title(:edit), do: gettext("Edit Ammo type") | ||||||
| end | end | ||||||
|   | |||||||
| @@ -113,6 +113,14 @@ | |||||||
|  |  | ||||||
|   <hr class="hr" /> |   <hr class="hr" /> | ||||||
|  |  | ||||||
|  |   <div class="flex flex-col justify-center items-center"> | ||||||
|  |     <.toggle_button action="toggle_show_used" value={@show_used}> | ||||||
|  |       <span class="title text-lg text-primary-600"> | ||||||
|  |         <%= gettext("Show used") %> | ||||||
|  |       </span> | ||||||
|  |     </.toggle_button> | ||||||
|  |   </div> | ||||||
|  |  | ||||||
|   <div> |   <div> | ||||||
|     <%= if @ammo_groups |> Enum.empty?() do %> |     <%= if @ammo_groups |> Enum.empty?() do %> | ||||||
|       <h2 class="mx-8 my-4 title text-lg text-primary-600"> |       <h2 class="mx-8 my-4 title text-lg text-primary-600"> | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ defmodule CanneryWeb.ViewHelpers do | |||||||
|   :view` |   :view` | ||||||
|   """ |   """ | ||||||
|  |  | ||||||
|  |   import Phoenix.LiveView | ||||||
|   import Phoenix.LiveView.Helpers |   import Phoenix.LiveView.Helpers | ||||||
|  |  | ||||||
|   @id_length 16 |   @id_length 16 | ||||||
| @@ -65,4 +66,43 @@ defmodule CanneryWeb.ViewHelpers do | |||||||
|       if(Application.get_env(:cannery, CanneryWeb.ViewHelpers)[:shibao_mode], do: "q_q", else: "😔") |       if(Application.get_env(:cannery, CanneryWeb.ViewHelpers)[:shibao_mode], do: "q_q", else: "😔") | ||||||
|  |  | ||||||
|   def display_emoji(other_emoji), do: other_emoji |   def display_emoji(other_emoji), do: other_emoji | ||||||
|  |  | ||||||
|  |   @doc """ | ||||||
|  |   A toggle button element that can be directed to a liveview or a | ||||||
|  |   live_component's `handle_event/3`. | ||||||
|  |  | ||||||
|  |   ## Examples | ||||||
|  |  | ||||||
|  |   <.toggle_button action="my_liveview_action" value={@some_value}> | ||||||
|  |     <span>Toggle me!</span> | ||||||
|  |   </.toggle_button> | ||||||
|  |   <.toggle_button action="my_live_component_action" target={@myself} value={@some_value}> | ||||||
|  |     <span>Whatever you want</span> | ||||||
|  |   </.toggle_button> | ||||||
|  |   """ | ||||||
|  |   def toggle_button(assigns) do | ||||||
|  |     assigns = assigns |> assign_new(:id, fn -> assigns.action end) | ||||||
|  |  | ||||||
|  |     ~H""" | ||||||
|  |     <label for={@id} class="inline-flex relative items-center cursor-pointer"> | ||||||
|  |       <input | ||||||
|  |         type="checkbox" | ||||||
|  |         value={@value} | ||||||
|  |         checked={@value} | ||||||
|  |         id={@id} | ||||||
|  |         class="sr-only peer" | ||||||
|  |         { | ||||||
|  |           if assigns |> Map.has_key?(:target), | ||||||
|  |             do: %{"phx-click" => @action, "phx-value-value" => @value, "phx-target" => @target}, | ||||||
|  |             else: %{"phx-click" => @action, "phx-value-value" => @value} | ||||||
|  |         } | ||||||
|  |       /> | ||||||
|  |       <div class="w-11 h-6 bg-gray-200 rounded-full peer dark:bg-gray-700 peer-focus:ring-4 peer-focus:ring-teal-300 dark:peer-focus:ring-teal-800 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-1 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-teal-600"> | ||||||
|  |       </div> | ||||||
|  |       <span class="ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"> | ||||||
|  |         <%= render_slot(@inner_block) %> | ||||||
|  |       </span> | ||||||
|  |     </label> | ||||||
|  |     """ | ||||||
|  |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -178,7 +178,7 @@ msgstr "Munitionsgruppe bearbeiten" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:23 | #: lib/cannery_web/live/ammo_type_live/index.ex:23 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:45 | #: lib/cannery_web/live/ammo_type_live/show.ex:63 | ||||||
| msgid "Edit Ammo type" | msgid "Edit Ammo type" | ||||||
| msgstr "Munitionstyp bearbeiten" | msgstr "Munitionstyp bearbeiten" | ||||||
|  |  | ||||||
| @@ -322,7 +322,7 @@ msgid "No Ammo Types" | |||||||
| msgstr "Keine Munitionsarten" | msgstr "Keine Munitionsarten" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | #: lib/cannery_web/live/ammo_type_live/show.html.heex:127 | ||||||
| msgid "No ammo for this type" | msgid "No ammo for this type" | ||||||
| msgstr "Keine Munition dieser Art" | msgstr "Keine Munition dieser Art" | ||||||
|  |  | ||||||
| @@ -416,7 +416,7 @@ msgid "Settings" | |||||||
| msgstr "Einstellungen" | msgstr "Einstellungen" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:44 | #: lib/cannery_web/live/ammo_type_live/show.ex:62 | ||||||
| msgid "Show Ammo type" | msgid "Show Ammo type" | ||||||
| msgstr "Zeige Munitionsarten" | msgstr "Zeige Munitionsarten" | ||||||
|  |  | ||||||
| @@ -945,3 +945,8 @@ msgstr "Summe aller Patronen" | |||||||
| #: lib/cannery_web/components/ammo_group_card.ex:61 | #: lib/cannery_web/components/ammo_group_card.ex:61 | ||||||
| msgid "Container:" | msgid "Container:" | ||||||
| msgstr "Behälter" | msgstr "Behälter" | ||||||
|  |  | ||||||
|  | #, elixir-autogen, elixir-format | ||||||
|  | #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | ||||||
|  | msgid "Show used" | ||||||
|  | msgstr "" | ||||||
|   | |||||||
| @@ -188,7 +188,7 @@ msgstr "" | |||||||
| "%{multiplier}" | "%{multiplier}" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery/ammo.ex:442 | #: lib/cannery/ammo.ex:479 | ||||||
| msgid "Invalid multiplier" | msgid "Invalid multiplier" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ msgstr "%{name} erfolgreich erstellt" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:41 | #: lib/cannery_web/live/ammo_type_live/index.ex:41 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:38 | #: lib/cannery_web/live/ammo_type_live/show.ex:28 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:53 | #: lib/cannery_web/live/invite_live/index.ex:53 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:133 | #: lib/cannery_web/live/invite_live/index.ex:133 | ||||||
| #: lib/cannery_web/live/tag_live/index.ex:38 | #: lib/cannery_web/live/tag_live/index.ex:38 | ||||||
|   | |||||||
| @@ -163,7 +163,7 @@ msgstr "" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:23 | #: lib/cannery_web/live/ammo_type_live/index.ex:23 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:45 | #: lib/cannery_web/live/ammo_type_live/show.ex:63 | ||||||
| msgid "Edit Ammo type" | msgid "Edit Ammo type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -307,7 +307,7 @@ msgid "No Ammo Types" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | #: lib/cannery_web/live/ammo_type_live/show.html.heex:127 | ||||||
| msgid "No ammo for this type" | msgid "No ammo for this type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -399,7 +399,7 @@ msgid "Settings" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:44 | #: lib/cannery_web/live/ammo_type_live/show.ex:62 | ||||||
| msgid "Show Ammo type" | msgid "Show Ammo type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -928,3 +928,8 @@ msgstr "" | |||||||
| #: lib/cannery_web/components/ammo_group_card.ex:61 | #: lib/cannery_web/components/ammo_group_card.ex:61 | ||||||
| msgid "Container:" | msgid "Container:" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | #, elixir-autogen, elixir-format | ||||||
|  | #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | ||||||
|  | msgid "Show used" | ||||||
|  | msgstr "" | ||||||
|   | |||||||
| @@ -164,7 +164,7 @@ msgstr "" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:23 | #: lib/cannery_web/live/ammo_type_live/index.ex:23 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:45 | #: lib/cannery_web/live/ammo_type_live/show.ex:63 | ||||||
| msgid "Edit Ammo type" | msgid "Edit Ammo type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -308,7 +308,7 @@ msgid "No Ammo Types" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | #: lib/cannery_web/live/ammo_type_live/show.html.heex:127 | ||||||
| msgid "No ammo for this type" | msgid "No ammo for this type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -400,7 +400,7 @@ msgid "Settings" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:44 | #: lib/cannery_web/live/ammo_type_live/show.ex:62 | ||||||
| msgid "Show Ammo type" | msgid "Show Ammo type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -929,3 +929,8 @@ msgstr "" | |||||||
| #: lib/cannery_web/components/ammo_group_card.ex:61 | #: lib/cannery_web/components/ammo_group_card.ex:61 | ||||||
| msgid "Container:" | msgid "Container:" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | #, elixir-autogen, elixir-format | ||||||
|  | #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | ||||||
|  | msgid "Show used" | ||||||
|  | msgstr "" | ||||||
|   | |||||||
| @@ -171,7 +171,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier} | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery/ammo.ex:442 | #: lib/cannery/ammo.ex:479 | ||||||
| msgid "Invalid multiplier" | msgid "Invalid multiplier" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ msgstr "" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:41 | #: lib/cannery_web/live/ammo_type_live/index.ex:41 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:38 | #: lib/cannery_web/live/ammo_type_live/show.ex:28 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:53 | #: lib/cannery_web/live/invite_live/index.ex:53 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:133 | #: lib/cannery_web/live/invite_live/index.ex:133 | ||||||
| #: lib/cannery_web/live/tag_live/index.ex:38 | #: lib/cannery_web/live/tag_live/index.ex:38 | ||||||
|   | |||||||
| @@ -170,7 +170,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier} | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery/ammo.ex:442 | #: lib/cannery/ammo.ex:479 | ||||||
| msgid "Invalid multiplier" | msgid "Invalid multiplier" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -178,7 +178,7 @@ msgstr "" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:23 | #: lib/cannery_web/live/ammo_type_live/index.ex:23 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:45 | #: lib/cannery_web/live/ammo_type_live/show.ex:63 | ||||||
| msgid "Edit Ammo type" | msgid "Edit Ammo type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -322,7 +322,7 @@ msgid "No Ammo Types" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | #: lib/cannery_web/live/ammo_type_live/show.html.heex:127 | ||||||
| msgid "No ammo for this type" | msgid "No ammo for this type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -414,7 +414,7 @@ msgid "Settings" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:44 | #: lib/cannery_web/live/ammo_type_live/show.ex:62 | ||||||
| msgid "Show Ammo type" | msgid "Show Ammo type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -943,3 +943,8 @@ msgstr "" | |||||||
| #: lib/cannery_web/components/ammo_group_card.ex:61 | #: lib/cannery_web/components/ammo_group_card.ex:61 | ||||||
| msgid "Container:" | msgid "Container:" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | #, elixir-autogen, elixir-format | ||||||
|  | #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | ||||||
|  | msgid "Show used" | ||||||
|  | msgstr "" | ||||||
|   | |||||||
| @@ -186,7 +186,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier} | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery/ammo.ex:442 | #: lib/cannery/ammo.ex:479 | ||||||
| msgid "Invalid multiplier" | msgid "Invalid multiplier" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ msgstr "%{name} creado exitosamente" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:41 | #: lib/cannery_web/live/ammo_type_live/index.ex:41 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:38 | #: lib/cannery_web/live/ammo_type_live/show.ex:28 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:53 | #: lib/cannery_web/live/invite_live/index.ex:53 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:133 | #: lib/cannery_web/live/invite_live/index.ex:133 | ||||||
| #: lib/cannery_web/live/tag_live/index.ex:38 | #: lib/cannery_web/live/tag_live/index.ex:38 | ||||||
|   | |||||||
| @@ -178,7 +178,7 @@ msgstr "Éditer le groupe de munition" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:23 | #: lib/cannery_web/live/ammo_type_live/index.ex:23 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:45 | #: lib/cannery_web/live/ammo_type_live/show.ex:63 | ||||||
| msgid "Edit Ammo type" | msgid "Edit Ammo type" | ||||||
| msgstr "Éditer le type de munition" | msgstr "Éditer le type de munition" | ||||||
|  |  | ||||||
| @@ -322,7 +322,7 @@ msgid "No Ammo Types" | |||||||
| msgstr "Aucun type de munition" | msgstr "Aucun type de munition" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | #: lib/cannery_web/live/ammo_type_live/show.html.heex:127 | ||||||
| msgid "No ammo for this type" | msgid "No ammo for this type" | ||||||
| msgstr "Aucune munition pour ce type" | msgstr "Aucune munition pour ce type" | ||||||
|  |  | ||||||
| @@ -416,7 +416,7 @@ msgid "Settings" | |||||||
| msgstr "Paramètres" | msgstr "Paramètres" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:44 | #: lib/cannery_web/live/ammo_type_live/show.ex:62 | ||||||
| msgid "Show Ammo type" | msgid "Show Ammo type" | ||||||
| msgstr "Montrer le type de munition" | msgstr "Montrer le type de munition" | ||||||
|  |  | ||||||
| @@ -947,3 +947,8 @@ msgstr "Quantité de cartouches" | |||||||
| #: lib/cannery_web/components/ammo_group_card.ex:61 | #: lib/cannery_web/components/ammo_group_card.ex:61 | ||||||
| msgid "Container:" | msgid "Container:" | ||||||
| msgstr "Conteneur" | msgstr "Conteneur" | ||||||
|  |  | ||||||
|  | #, elixir-autogen, elixir-format | ||||||
|  | #: lib/cannery_web/live/ammo_type_live/show.html.heex:119 | ||||||
|  | msgid "Show used" | ||||||
|  | msgstr "" | ||||||
|   | |||||||
| @@ -187,7 +187,7 @@ msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier} | |||||||
| msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}" | msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}" | ||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery/ammo.ex:442 | #: lib/cannery/ammo.ex:479 | ||||||
| msgid "Invalid multiplier" | msgid "Invalid multiplier" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ msgstr "%{name} créé· avec succès" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:41 | #: lib/cannery_web/live/ammo_type_live/index.ex:41 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:38 | #: lib/cannery_web/live/ammo_type_live/show.ex:28 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:53 | #: lib/cannery_web/live/invite_live/index.ex:53 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:133 | #: lib/cannery_web/live/invite_live/index.ex:133 | ||||||
| #: lib/cannery_web/live/tag_live/index.ex:38 | #: lib/cannery_web/live/tag_live/index.ex:38 | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ msgstr "" | |||||||
|  |  | ||||||
| #, elixir-autogen, elixir-format | #, elixir-autogen, elixir-format | ||||||
| #: lib/cannery_web/live/ammo_type_live/index.ex:41 | #: lib/cannery_web/live/ammo_type_live/index.ex:41 | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:38 | #: lib/cannery_web/live/ammo_type_live/show.ex:28 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:53 | #: lib/cannery_web/live/invite_live/index.ex:53 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:133 | #: lib/cannery_web/live/invite_live/index.ex:133 | ||||||
| #: lib/cannery_web/live/tag_live/index.ex:38 | #: lib/cannery_web/live/tag_live/index.ex:38 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user