add button to resend email verification email
This commit is contained in:
		@@ -1,4 +1,5 @@
 | 
			
		||||
# v0.9.13
 | 
			
		||||
- Add button to resend email verification email
 | 
			
		||||
- Move staging to container, rather than ammo
 | 
			
		||||
- Add date restriction dropdown to range page
 | 
			
		||||
- Fix dates not rendering properly in table
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@
 | 
			
		||||
import Config
 | 
			
		||||
 | 
			
		||||
config :cannery,
 | 
			
		||||
  env: :dev,
 | 
			
		||||
  ecto_repos: [Cannery.Repo],
 | 
			
		||||
  generators: [binary_id: true]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,8 @@ config :cannery, CanneryWeb.Endpoint, cache_static_manifest: "priv/static/cache_
 | 
			
		||||
# Do not print debug messages in production
 | 
			
		||||
config :logger, level: :info
 | 
			
		||||
 | 
			
		||||
config :cannery, env: :prod
 | 
			
		||||
 | 
			
		||||
# ## SSL Support
 | 
			
		||||
#
 | 
			
		||||
# To get SSL working, you will need to add the `https` key
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,8 @@ config :cannery, CanneryWeb.Endpoint,
 | 
			
		||||
  secret_key_base: "S3qq9QtUdsFtlYej+HTjAVN95uP5i5tf2sPYINWSQfCKJghFj2B1+wTAoljZyHOK",
 | 
			
		||||
  server: false
 | 
			
		||||
 | 
			
		||||
config :cannery, env: :test
 | 
			
		||||
 | 
			
		||||
# In test we don't send emails.
 | 
			
		||||
config :cannery, Cannery.Mailer, adapter: Swoosh.Adapters.Test
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -116,6 +116,20 @@ defmodule CanneryWeb.InviteLive.Index do
 | 
			
		||||
    {:noreply, socket |> put_flash(:info, dgettext("prompts", "Copied to clipboard"))}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def handle_event("resend_email_verification", %{"id" => id}, socket) do
 | 
			
		||||
    %{email: user_email} = user = Accounts.get_user!(id)
 | 
			
		||||
 | 
			
		||||
    Accounts.deliver_user_confirmation_instructions(
 | 
			
		||||
      user,
 | 
			
		||||
      fn token -> url(CanneryWeb.Endpoint, ~p"/users/confirm/#{token}") end
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    prompt =
 | 
			
		||||
      dgettext("prompts", "Email resent to %{user_email} succesfully", user_email: user_email)
 | 
			
		||||
 | 
			
		||||
    {:noreply, socket |> put_flash(:info, prompt) |> display_invites()}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def handle_event(
 | 
			
		||||
        "delete_user",
 | 
			
		||||
        %{"id" => id},
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
<div class="mx-auto flex flex-col justify-center items-center space-y-4 max-w-3xl">
 | 
			
		||||
  <h1 class="title text-2xl title-primary-500">
 | 
			
		||||
<div class="flex flex-col justify-center items-center mx-auto space-y-4 max-w-3xl">
 | 
			
		||||
  <h1 class="text-2xl title title-primary-500">
 | 
			
		||||
    <%= gettext("Invites") %>
 | 
			
		||||
  </h1>
 | 
			
		||||
 | 
			
		||||
  <%= if @invites |> Enum.empty?() do %>
 | 
			
		||||
    <h1 class="title text-xl text-primary-600">
 | 
			
		||||
    <h1 class="text-xl title text-primary-600">
 | 
			
		||||
      <%= gettext("No invites") %>
 | 
			
		||||
      <%= display_emoji("😔") %>
 | 
			
		||||
    </h1>
 | 
			
		||||
@@ -95,7 +95,7 @@
 | 
			
		||||
  <%= unless @admins |> Enum.empty?() do %>
 | 
			
		||||
    <hr class="hr" />
 | 
			
		||||
 | 
			
		||||
    <h1 class="title text-2xl text-primary-600">
 | 
			
		||||
    <h1 class="text-2xl title text-primary-600">
 | 
			
		||||
      <%= gettext("Admins") %>
 | 
			
		||||
    </h1>
 | 
			
		||||
 | 
			
		||||
@@ -123,27 +123,38 @@
 | 
			
		||||
  <%= unless @users |> Enum.empty?() do %>
 | 
			
		||||
    <hr class="hr" />
 | 
			
		||||
 | 
			
		||||
    <h1 class="title text-2xl text-primary-600">
 | 
			
		||||
    <h1 class="text-2xl title text-primary-600">
 | 
			
		||||
      <%= gettext("Users") %>
 | 
			
		||||
    </h1>
 | 
			
		||||
 | 
			
		||||
    <div class="flex flex-col justify-center items-stretch space-y-4">
 | 
			
		||||
      <.user_card :for={user <- @users} user={user}>
 | 
			
		||||
        <.link
 | 
			
		||||
          href="#"
 | 
			
		||||
          class="text-primary-600 link"
 | 
			
		||||
          phx-click="delete_user"
 | 
			
		||||
          phx-value-id={user.id}
 | 
			
		||||
          data-confirm={
 | 
			
		||||
            dgettext(
 | 
			
		||||
              "prompts",
 | 
			
		||||
              "Are you sure you want to delete %{email}? This action is permanent!",
 | 
			
		||||
              email: user.email
 | 
			
		||||
            )
 | 
			
		||||
          }
 | 
			
		||||
        >
 | 
			
		||||
          <i class="fa-fw fa-lg fas fa-trash"></i>
 | 
			
		||||
        </.link>
 | 
			
		||||
        <div class="flex justify-center items-center space-x-2">
 | 
			
		||||
          <.link
 | 
			
		||||
            :if={!user.confirmed_at}
 | 
			
		||||
            class="text-primary-600 link"
 | 
			
		||||
            href="#"
 | 
			
		||||
            phx-click="resend_email_verification"
 | 
			
		||||
            phx-value-id={user.id}
 | 
			
		||||
          >
 | 
			
		||||
            <i class="fa-fw fa-lg fas fa-paper-plane"></i>
 | 
			
		||||
          </.link>
 | 
			
		||||
          <.link
 | 
			
		||||
            class="text-primary-600 link"
 | 
			
		||||
            data-confirm={
 | 
			
		||||
              dgettext(
 | 
			
		||||
                "prompts",
 | 
			
		||||
                "Are you sure you want to delete %{email}? This action is permanent!",
 | 
			
		||||
                email: user.email
 | 
			
		||||
              )
 | 
			
		||||
            }
 | 
			
		||||
            href="#"
 | 
			
		||||
            phx-click="delete_user"
 | 
			
		||||
            phx-value-id={user.id}
 | 
			
		||||
          >
 | 
			
		||||
            <i class="fa-fw fa-lg fas fa-trash"></i>
 | 
			
		||||
          </.link>
 | 
			
		||||
        </div>
 | 
			
		||||
      </.user_card>
 | 
			
		||||
    </div>
 | 
			
		||||
  <% end %>
 | 
			
		||||
 
 | 
			
		||||
@@ -120,7 +120,7 @@ defmodule CanneryWeb.Router do
 | 
			
		||||
  #
 | 
			
		||||
  # Note that preview only shows emails that were sent by the same
 | 
			
		||||
  # node running the Phoenix server.
 | 
			
		||||
  if Mix.env() == :dev do
 | 
			
		||||
  if Application.compile_env(:cannery, :env) == :dev do
 | 
			
		||||
    scope "/dev" do
 | 
			
		||||
      pipe_through :browser
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ msgid "A link to confirm your email change has been sent to the new address."
 | 
			
		||||
msgstr "Eine Mail zum Bestätigen ihre Mailadresse wurde Ihnen zugesandt."
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:110
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:138
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:145
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -278,7 +278,7 @@ msgstr "%{name} erfolgreich aktiviert"
 | 
			
		||||
msgid "%{invite_name} updated succesfully"
 | 
			
		||||
msgstr "%{name} erfolgreich aktualisiert"
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:125
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:139
 | 
			
		||||
#, elixir-autogen, elixir-format, fuzzy
 | 
			
		||||
msgid "%{user_email} deleted succesfully"
 | 
			
		||||
msgstr "%{name} erfolgreich gelöscht"
 | 
			
		||||
@@ -297,3 +297,8 @@ msgstr "Sind Sie sicher, dass sie %{name} auf unbegrenzt setzen möchten?"
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Container unstaged succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:128
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Email resent to %{user_email} succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ msgid "A link to confirm your email change has been sent to the new address."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:110
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:138
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:145
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -257,7 +257,7 @@ msgstr ""
 | 
			
		||||
msgid "%{invite_name} updated succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:125
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:139
 | 
			
		||||
#, elixir-autogen, elixir-format, fuzzy
 | 
			
		||||
msgid "%{user_email} deleted succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -276,3 +276,8 @@ msgstr ""
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Container unstaged succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:128
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Email resent to %{user_email} succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,7 @@ msgstr ""
 | 
			
		||||
"dirección."
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:110
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:138
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:145
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
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!"
 | 
			
		||||
@@ -279,7 +279,7 @@ msgstr "%{name} activado exitosamente"
 | 
			
		||||
msgid "%{invite_name} updated succesfully"
 | 
			
		||||
msgstr "%{name} actualizado exitosamente"
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:125
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:139
 | 
			
		||||
#, elixir-autogen, elixir-format, fuzzy
 | 
			
		||||
msgid "%{user_email} deleted succesfully"
 | 
			
		||||
msgstr "%{name} borrado exitosamente"
 | 
			
		||||
@@ -298,3 +298,8 @@ msgstr "Está seguro que desea hacer %{name} ilimitado?"
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Container unstaged succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:128
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Email resent to %{user_email} succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,7 @@ msgstr ""
 | 
			
		||||
"adresse."
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:110
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:138
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:145
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -279,7 +279,7 @@ msgstr "%{name} activé·e avec succès"
 | 
			
		||||
msgid "%{invite_name} updated succesfully"
 | 
			
		||||
msgstr "%{name} mis à jour avec succès"
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:125
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:139
 | 
			
		||||
#, elixir-autogen, elixir-format, fuzzy
 | 
			
		||||
msgid "%{user_email} deleted succesfully"
 | 
			
		||||
msgstr "%{name} supprimé· avec succès"
 | 
			
		||||
@@ -298,3 +298,8 @@ msgstr "Êtes-vous certain·e de vouloir rendre %{name} illimité ?"
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Container unstaged succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:128
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Email resent to %{user_email} succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ msgid "A link to confirm your email change has been sent to the new address."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:110
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:138
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:145
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -271,7 +271,7 @@ msgstr ""
 | 
			
		||||
msgid "%{invite_name} updated succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:125
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:139
 | 
			
		||||
#, elixir-autogen, elixir-format, fuzzy
 | 
			
		||||
msgid "%{user_email} deleted succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -290,3 +290,8 @@ msgstr ""
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Container unstaged succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:128
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Email resent to %{user_email} succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ msgid "A link to confirm your email change has been sent to the new address."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:110
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:138
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:145
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -268,7 +268,7 @@ msgstr ""
 | 
			
		||||
msgid "%{invite_name} updated succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:125
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:139
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "%{user_email} deleted succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -287,3 +287,8 @@ msgstr ""
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Container unstaged succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:128
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Email resent to %{user_email} succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ msgid "A link to confirm your email change has been sent to the new address."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:110
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:138
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.html.heex:145
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -257,7 +257,7 @@ msgstr ""
 | 
			
		||||
msgid "%{invite_name} updated succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:125
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:139
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "%{user_email} deleted succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -276,3 +276,8 @@ msgstr ""
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Container unstaged succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/cannery_web/live/invite_live/index.ex:128
 | 
			
		||||
#, elixir-autogen, elixir-format
 | 
			
		||||
msgid "Email resent to %{user_email} succesfully"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user