use phoenix component modal
This commit is contained in:
		| @@ -1,43 +0,0 @@ | |||||||
| defmodule CanneryWeb.Components.Modal do |  | ||||||
|   @moduledoc """ |  | ||||||
|   Livecomponent that displays a floating modal window |  | ||||||
|   """ |  | ||||||
|  |  | ||||||
|   use CanneryWeb, :live_component |  | ||||||
|  |  | ||||||
|   @impl true |  | ||||||
|   def render(assigns) do |  | ||||||
|     ~H""" |  | ||||||
|     <div |  | ||||||
|       id={@id} |  | ||||||
|       class="fixed z-10 left-0 top-0 |  | ||||||
|       w-full h-full overflow-hidden |  | ||||||
|       p-8 flex flex-col justify-center items-center" |  | ||||||
|       style="opacity: 1 !important; background-color: rgba(0,0,0,0.4);" |  | ||||||
|       phx-capture-click="close" |  | ||||||
|       phx-window-keydown="close" |  | ||||||
|       phx-key="escape" |  | ||||||
|       phx-target={"#{@id}"} |  | ||||||
|       phx-page-loading |  | ||||||
|     > |  | ||||||
|       <div class="w-full max-w-3xl max-h-128 relative overflow-y-auto |  | ||||||
|         flex flex-col justify-start items-center |  | ||||||
|         bg-white border-2 rounded-lg"> |  | ||||||
|         <%= live_patch to: @return_to, |  | ||||||
|                    class: |  | ||||||
|                      "absolute top-8 right-10 text-gray-500 hover:text-gray-800 transition-all duration-500 ease-in-out" do %> |  | ||||||
|           <i class="fa-fw fa-lg fas fa-times"></i> |  | ||||||
|         <% end %> |  | ||||||
|         <div class="p-8 flex flex-col space-y-4 justify-start items-center"> |  | ||||||
|           <%= live_component(@component, @opts) %> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     """ |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   @impl true |  | ||||||
|   def handle_event("close", _, socket) do |  | ||||||
|     {:noreply, push_patch(socket, to: socket.assigns.return_to)} |  | ||||||
|   end |  | ||||||
| end |  | ||||||
| @@ -79,12 +79,15 @@ | |||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <%= if @live_action in [:new, :edit] do %> | <%= if @live_action in [:new, :edit] do %> | ||||||
|   <%= live_modal(CanneryWeb.AmmoGroupLive.FormComponent, |   <.modal return_to={Routes.ammo_group_index_path(@socket, :index)}> | ||||||
|     id: @ammo_group.id || :new, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.AmmoGroupLive.FormComponent} | ||||||
|     action: @live_action, |       id={@ammo_group.id || :new} | ||||||
|     ammo_group: @ammo_group, |       title={@page_title} | ||||||
|     return_to: Routes.ammo_group_index_path(@socket, :index), |       action={@live_action} | ||||||
|     current_user: @current_user |       ammo_group={@ammo_group} | ||||||
|   ) %> |       return_to={Routes.ammo_group_index_path(@socket, :index)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|   | |||||||
| @@ -53,12 +53,15 @@ | |||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <%= if @live_action in [:edit] do %> | <%= if @live_action in [:edit] do %> | ||||||
|   <%= live_modal(CanneryWeb.AmmoGroupLive.FormComponent, |   <.modal return_to={Routes.ammo_group_show_path(@socket, :show, @ammo_group)}> | ||||||
|     id: @ammo_group.id, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.AmmoGroupLive.FormComponent} | ||||||
|     action: @live_action, |       id={@ammo_group.id} | ||||||
|     ammo_group: @ammo_group, |       title={@page_title} | ||||||
|     return_to: Routes.ammo_group_show_path(@socket, :show, @ammo_group), |       action={@live_action} | ||||||
|     current_user: @current_user |       ammo_group={@ammo_group} | ||||||
|   ) %> |       return_to={Routes.ammo_group_show_path(@socket, :show, @ammo_group)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do | |||||||
|           %{:ammo_type => AmmoType.t(), :current_user => User.t(), optional(any) => any}, |           %{:ammo_type => AmmoType.t(), :current_user => User.t(), optional(any) => any}, | ||||||
|           Socket.t() |           Socket.t() | ||||||
|         ) :: {:ok, Socket.t()} |         ) :: {:ok, Socket.t()} | ||||||
|   def update(%{ammo_type: ammo_type} = assigns, socket) do |   def update(%{ammo_type: ammo_type, current_user: _current_user} = assigns, socket) do | ||||||
|     {:ok, socket |> assign(assigns) |> assign(:changeset, Ammo.change_ammo_type(ammo_type))} |     {:ok, socket |> assign(assigns) |> assign(:changeset, Ammo.change_ammo_type(ammo_type))} | ||||||
|   end |   end | ||||||
|  |  | ||||||
| @@ -186,9 +186,13 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do | |||||||
|     {:noreply, socket} |     {:noreply, socket} | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   defp save_ammo_type(%{assigns: %{return_to: return_to}} = socket, :new, ammo_type_params) do |   defp save_ammo_type( | ||||||
|  |          %{assigns: %{current_user: current_user, return_to: return_to}} = socket, | ||||||
|  |          :new, | ||||||
|  |          ammo_type_params | ||||||
|  |        ) do | ||||||
|     socket = |     socket = | ||||||
|       case Ammo.create_ammo_type(ammo_type_params) do |       case Ammo.create_ammo_type(ammo_type_params, current_user) do | ||||||
|         {:ok, %{name: ammo_type_name}} -> |         {:ok, %{name: ammo_type_name}} -> | ||||||
|           prompt = dgettext("prompts", "%{name} created successfully", name: ammo_type_name) |           prompt = dgettext("prompts", "%{name} created successfully", name: ammo_type_name) | ||||||
|           socket |> put_flash(:info, prompt) |> push_redirect(to: return_to) |           socket |> put_flash(:info, prompt) |> push_redirect(to: return_to) | ||||||
|   | |||||||
| @@ -5,8 +5,8 @@ defmodule CanneryWeb.AmmoTypeLive.Index do | |||||||
|  |  | ||||||
|   use CanneryWeb, :live_view |   use CanneryWeb, :live_view | ||||||
|  |  | ||||||
|   alias Cannery.Ammo |   alias Cannery.{Ammo, Ammo.AmmoType} | ||||||
|   alias Cannery.Ammo.AmmoType |   alias CanneryWeb.Endpoint | ||||||
|  |  | ||||||
|   @impl true |   @impl true | ||||||
|   def mount(_params, session, socket) do |   def mount(_params, session, socket) do | ||||||
|   | |||||||
| @@ -115,11 +115,16 @@ | |||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <%= if @live_action in [:new, :edit] do %> | <%= if @live_action in [:new, :edit] do %> | ||||||
|   <%= live_modal(CanneryWeb.AmmoTypeLive.FormComponent, |   <.modal return_to={Routes.ammo_type_index_path(Endpoint, :index)}> | ||||||
|     id: @ammo_type.id || :new, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.AmmoTypeLive.FormComponent} | ||||||
|     action: @live_action, |       id={@ammo_type.id || :new} | ||||||
|     ammo_type: @ammo_type, |       title={@page_title} | ||||||
|     return_to: Routes.ammo_type_index_path(@socket, :index) |       action={@live_action} | ||||||
|   ) %> |       ammo_type={@ammo_type} | ||||||
|  |       return_to={Routes.ammo_type_index_path(Endpoint, :index)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |       } | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ defmodule CanneryWeb.AmmoTypeLive.Show do | |||||||
|   use CanneryWeb, :live_view |   use CanneryWeb, :live_view | ||||||
|   import CanneryWeb.Components.AmmoGroupCard |   import CanneryWeb.Components.AmmoGroupCard | ||||||
|   alias Cannery.Ammo |   alias Cannery.Ammo | ||||||
|  |   alias CanneryWeb.Endpoint | ||||||
|  |  | ||||||
|   @impl true |   @impl true | ||||||
|   def mount(_params, session, socket) do |   def mount(_params, session, socket) do | ||||||
|   | |||||||
| @@ -106,11 +106,15 @@ | |||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <%= if @live_action in [:edit] do %> | <%= if @live_action in [:edit] do %> | ||||||
|   <%= live_modal(CanneryWeb.AmmoTypeLive.FormComponent, |   <.modal return_to={Routes.ammo_type_show_path(Endpoint, :show, @ammo_type)}> | ||||||
|     id: @ammo_type.id, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.AmmoTypeLive.FormComponent} | ||||||
|     action: @live_action, |       id={@ammo_type.id} | ||||||
|     ammo_type: @ammo_type, |       title={@page_title} | ||||||
|     return_to: Routes.ammo_type_show_path(@socket, :show, @ammo_type) |       action={@live_action} | ||||||
|   ) %> |       ammo_type={@ammo_type} | ||||||
|  |       return_to={Routes.ammo_type_show_path(Endpoint, :show, @ammo_type)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|   | |||||||
| @@ -43,12 +43,15 @@ | |||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <%= if @live_action in [:new, :edit] do %> | <%= if @live_action in [:new, :edit] do %> | ||||||
|   <%= live_modal(CanneryWeb.ContainerLive.FormComponent, |   <.modal return_to={Routes.container_index_path(@socket, :index)}> | ||||||
|     id: @container.id || :new, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.ContainerLive.FormComponent} | ||||||
|     action: @live_action, |       id={@container.id || :new} | ||||||
|     container: @container, |       title={@page_title} | ||||||
|     return_to: Routes.container_index_path(@socket, :index), |       action={@live_action} | ||||||
|     current_user: @current_user |       container={@container} | ||||||
|   ) %> |       return_to={Routes.container_index_path(@socket, :index)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|   | |||||||
| @@ -92,23 +92,29 @@ | |||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <%= if @live_action in [:edit] do %> | <%= if @live_action in [:edit] do %> | ||||||
|   <%= live_modal(CanneryWeb.ContainerLive.FormComponent, |   <.modal return_to={Routes.container_show_path(Endpoint, :show, @container)}> | ||||||
|     id: @container.id, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.ContainerLive.FormComponent} | ||||||
|     action: @live_action, |       id={@container.id} | ||||||
|     container: @container, |       title={@page_title} | ||||||
|     return_to: Routes.container_show_path(Endpoint, :show, @container), |       action={@live_action} | ||||||
|     current_user: @current_user |       container={@container} | ||||||
|   ) %> |       return_to={Routes.container_show_path(Endpoint, :show, @container)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|  |  | ||||||
| <%= if @live_action == :add_tag do %> | <%= if @live_action == :add_tag do %> | ||||||
|   <%= live_modal(CanneryWeb.ContainerLive.AddTagComponent, |   <.modal return_to={Routes.container_show_path(Endpoint, :show, @container)}> | ||||||
|     id: @container.id, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.ContainerLive.AddTagComponent} | ||||||
|     action: @live_action, |       id={@container.id} | ||||||
|     container: @container, |       title={@page_title} | ||||||
|     return_to: Routes.container_show_path(Endpoint, :show, @container), |       action={@live_action} | ||||||
|     current_user: @current_user |       container={@container} | ||||||
|   ) %> |       return_to={Routes.container_show_path(Endpoint, :show, @container)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|   | |||||||
| @@ -125,12 +125,15 @@ | |||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <%= if @live_action in [:new, :edit] do %> | <%= if @live_action in [:new, :edit] do %> | ||||||
|   <%= live_modal(CanneryWeb.InviteLive.FormComponent, |   <.modal return_to={Routes.invite_index_path(@socket, :index)}> | ||||||
|     id: @invite.id || :new, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.InviteLive.FormComponent} | ||||||
|     action: @live_action, |       id={@invite.id || :new} | ||||||
|     invite: @invite, |       title={@page_title} | ||||||
|     return_to: Routes.invite_index_path(@socket, :index), |       action={@live_action} | ||||||
|     current_user: @current_user |       invite={@invite} | ||||||
|   ) %> |       return_to={Routes.invite_index_path(@socket, :index)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|   | |||||||
| @@ -3,29 +3,10 @@ defmodule CanneryWeb.LiveHelpers do | |||||||
|   Contains common helper functions for liveviews |   Contains common helper functions for liveviews | ||||||
|   """ |   """ | ||||||
|  |  | ||||||
|  |   import Phoenix.LiveView | ||||||
|   import Phoenix.LiveView.Helpers |   import Phoenix.LiveView.Helpers | ||||||
|   import Phoenix.LiveView, only: [assign_new: 3] |  | ||||||
|   alias Cannery.Accounts |   alias Cannery.Accounts | ||||||
|   alias CanneryWeb.Components.Modal |   alias Phoenix.LiveView.JS | ||||||
|  |  | ||||||
|   @doc """ |  | ||||||
|   Renders a component inside the `Modal` component. |  | ||||||
|  |  | ||||||
|   The rendered modal receives a `:return_to` option to properly update |  | ||||||
|   the URL when the modal is closed. |  | ||||||
|  |  | ||||||
|   ## Examples |  | ||||||
|  |  | ||||||
|       <%= live_modal CanneryWeb.TagLive.FormComponent, |  | ||||||
|         id: @tag.id || :new, |  | ||||||
|         action: @live_action, |  | ||||||
|         tag: @tag, |  | ||||||
|         return_to: Routes.tag_index_path(@socket, :index) %> |  | ||||||
|   """ |  | ||||||
|   def live_modal(component, opts) do |  | ||||||
|     path = Keyword.fetch!(opts, :return_to) |  | ||||||
|     live_component(Modal, id: :modal, return_to: path, component: component, opts: opts) |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   def assign_defaults(socket, %{"user_token" => user_token} = _session) do |   def assign_defaults(socket, %{"user_token" => user_token} = _session) do | ||||||
|     socket |     socket | ||||||
| @@ -35,4 +16,77 @@ defmodule CanneryWeb.LiveHelpers do | |||||||
|   def assign_defaults(socket, _session) do |   def assign_defaults(socket, _session) do | ||||||
|     socket |     socket | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   @doc """ | ||||||
|  |   Renders a live component inside a modal. | ||||||
|  |  | ||||||
|  |   The rendered modal receives a `:return_to` option to properly update | ||||||
|  |   the URL when the modal is closed. | ||||||
|  |  | ||||||
|  |   ## Examples | ||||||
|  |  | ||||||
|  |       <.modal return_to={Routes.<%= schema.singular %>_index_path(@socket, :index)}> | ||||||
|  |         <.live_component | ||||||
|  |           module={<%= inspect context.web_module %>.<%= inspect Module.concat(schema.web_namespace, schema.alias) %>Live.FormComponent} | ||||||
|  |           id={@<%= schema.singular %>.id || :new} | ||||||
|  |           title={@page_title} | ||||||
|  |           action={@live_action} | ||||||
|  |           return_to={Routes.<%= schema.singular %>_index_path(@socket, :index)} | ||||||
|  |           <%= schema.singular %>: @<%= schema.singular %> | ||||||
|  |         /> | ||||||
|  |       </.modal> | ||||||
|  |   """ | ||||||
|  |   def modal(assigns) do | ||||||
|  |     assigns = assign_new(assigns, :return_to, fn -> nil end) | ||||||
|  |  | ||||||
|  |     ~H""" | ||||||
|  |     <div | ||||||
|  |       id="modal" | ||||||
|  |       class="fade-in fixed z-10 left-0 top-0 | ||||||
|  |       w-full h-full overflow-hidden | ||||||
|  |       p-8 flex flex-col justify-center items-center" | ||||||
|  |       style="opacity: 1 !important; background-color: rgba(0,0,0,0.4);" | ||||||
|  |       phx-remove={hide_modal()} | ||||||
|  |     > | ||||||
|  |       <div | ||||||
|  |         id="modal-content" | ||||||
|  |         class="fade-in-scale w-full max-w-3xl max-h-128 relative overflow-y-auto | ||||||
|  |         flex flex-col justify-start items-center | ||||||
|  |         bg-white border-2 rounded-lg" | ||||||
|  |         phx-click-away={hide_modal()} | ||||||
|  |         phx-window-keydown={hide_modal()} | ||||||
|  |         phx-key="escape" | ||||||
|  |       > | ||||||
|  |         <%= if @return_to do %> | ||||||
|  |           <%= live_patch to: @return_to, | ||||||
|  |                      id: "close", | ||||||
|  |                      class: | ||||||
|  |                        "absolute top-8 right-10 text-gray-500 hover:text-gray-800 transition-all duration-500 ease-in-out", | ||||||
|  |                      phx_click: hide_modal() do %> | ||||||
|  |             <i class="fa-fw fa-lg fas fa-times"></i> | ||||||
|  |           <% end %> | ||||||
|  |         <% else %> | ||||||
|  |           <a | ||||||
|  |             id="close" | ||||||
|  |             href="#" | ||||||
|  |             class="absolute top-8 right-10 text-gray-500 hover:text-gray-800 transition-all duration-500 ease-in-out" | ||||||
|  |             phx-click={hide_modal()} | ||||||
|  |           > | ||||||
|  |             <i class="fa-fw fa-lg fas fa-times"></i> | ||||||
|  |           </a> | ||||||
|  |         <% end %> | ||||||
|  |  | ||||||
|  |         <div class="p-8 flex flex-col space-y-4 justify-start items-center"> | ||||||
|  |           <%= render_slot(@inner_block) %> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     """ | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   def hide_modal(js \\ %JS{}) do | ||||||
|  |     js | ||||||
|  |     |> JS.hide(to: "#modal", transition: "fade-out") | ||||||
|  |     |> JS.hide(to: "#modal-content", transition: "fade-out-scale") | ||||||
|  |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -43,12 +43,15 @@ | |||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <%= if @live_action in [:new, :edit] do %> | <%= if @live_action in [:new, :edit] do %> | ||||||
|   <%= live_modal(CanneryWeb.TagLive.FormComponent, |   <.modal return_to={Routes.tag_index_path(@socket, :index)}> | ||||||
|     id: @tag.id || :new, |     <.live_component | ||||||
|     title: @page_title, |       module={CanneryWeb.TagLive.FormComponent} | ||||||
|     action: @live_action, |       id={@tag.id || :new} | ||||||
|     tag: @tag, |       title={@page_title} | ||||||
|     return_to: Routes.tag_index_path(@socket, :index), |       action={@live_action} | ||||||
|     current_user: @current_user |       tag={@tag} | ||||||
|   ) %> |       return_to={Routes.tag_index_path(@socket, :index)} | ||||||
|  |       current_user={@current_user} | ||||||
|  |     /> | ||||||
|  |   </.modal> | ||||||
| <% end %> | <% end %> | ||||||
|   | |||||||
| @@ -65,8 +65,7 @@ msgid "Invite someone new!" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-format, ex-autogen | #, elixir-format, ex-autogen | ||||||
| #: lib/cannery_web/components/topbar.ex:96 | #: lib/cannery_web/components/topbar.ex:102 | ||||||
| #: lib/cannery_web/templates/layout/topbar.html.heex:36 |  | ||||||
| #: lib/cannery_web/templates/user_confirmation/new.html.heex:26 | #: lib/cannery_web/templates/user_confirmation/new.html.heex:26 | ||||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:39 | #: lib/cannery_web/templates/user_registration/new.html.heex:39 | ||||||
| #: lib/cannery_web/templates/user_reset_password/edit.html.heex:41 | #: lib/cannery_web/templates/user_reset_password/edit.html.heex:41 | ||||||
| @@ -102,8 +101,7 @@ msgid "New Tag" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-format, ex-autogen | #, elixir-format, ex-autogen | ||||||
| #: lib/cannery_web/components/topbar.ex:89 | #: lib/cannery_web/components/topbar.ex:95 | ||||||
| #: lib/cannery_web/templates/layout/topbar.html.heex:28 |  | ||||||
| #: lib/cannery_web/templates/user_confirmation/new.html.heex:21 | #: lib/cannery_web/templates/user_confirmation/new.html.heex:21 | ||||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:3 | #: lib/cannery_web/templates/user_registration/new.html.heex:3 | ||||||
| #: lib/cannery_web/templates/user_registration/new.html.heex:34 | #: lib/cannery_web/templates/user_registration/new.html.heex:34 | ||||||
|   | |||||||
| @@ -154,7 +154,7 @@ msgstr "" | |||||||
|  |  | ||||||
| #, elixir-format, ex-autogen | #, elixir-format, ex-autogen | ||||||
| #: 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:46 | #: lib/cannery_web/live/ammo_type_live/show.ex:47 | ||||||
| msgid "Edit Ammo type" | msgid "Edit Ammo type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -218,7 +218,7 @@ msgid "Invite Only" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-format, ex-autogen | #, elixir-format, ex-autogen | ||||||
| #: lib/cannery_web/components/topbar.ex:60 | #: lib/cannery_web/components/topbar.ex:66 | ||||||
| msgid "Invites" | msgid "Invites" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -451,7 +451,7 @@ msgid "Show Ammo group" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-format, ex-autogen | #, elixir-format, ex-autogen | ||||||
| #: lib/cannery_web/live/ammo_type_live/show.ex:45 | #: lib/cannery_web/live/ammo_type_live/show.ex:46 | ||||||
| msgid "Show Ammo type" | msgid "Show Ammo type" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-format, ex-autogen | #, elixir-format, ex-autogen | ||||||
| #: lib/cannery_web/live/ammo_type_live/form_component.ex:193 | #: lib/cannery_web/live/ammo_type_live/form_component.ex:197 | ||||||
| #: lib/cannery_web/live/container_live/form_component.ex:126 | #: lib/cannery_web/live/container_live/form_component.ex:126 | ||||||
| #: lib/cannery_web/live/invite_live/form_component.ex:98 | #: lib/cannery_web/live/invite_live/form_component.ex:98 | ||||||
| #: lib/cannery_web/live/tag_live/form_component.ex:101 | #: lib/cannery_web/live/tag_live/form_component.ex:101 | ||||||
| @@ -20,7 +20,7 @@ msgstr "" | |||||||
|  |  | ||||||
| #, elixir-format, ex-autogen | #, elixir-format, ex-autogen | ||||||
| #: 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:39 | #: lib/cannery_web/live/ammo_type_live/show.ex:40 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:54 | #: lib/cannery_web/live/invite_live/index.ex:54 | ||||||
| #: lib/cannery_web/live/invite_live/index.ex:120 | #: lib/cannery_web/live/invite_live/index.ex:120 | ||||||
| #: lib/cannery_web/live/tag_live/index.ex:41 | #: lib/cannery_web/live/tag_live/index.ex:41 | ||||||
| @@ -109,8 +109,7 @@ msgid "Are you sure you want to delete your account?" | |||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #, elixir-format, ex-autogen | #, elixir-format, ex-autogen | ||||||
| #: lib/cannery_web/components/topbar.ex:75 | #: lib/cannery_web/components/topbar.ex:81 | ||||||
| #: lib/cannery_web/templates/layout/topbar.html.heex:21 |  | ||||||
| msgid "Are you sure you want to log out?" | msgid "Are you sure you want to log out?" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user