defmodule CanneryWeb.InviteLive.Index do @moduledoc """ Liveview to show a Cannery.Invites.Invite index """ use CanneryWeb, :live_view alias Cannery.Invites alias Cannery.Invites.Invite @impl true def mount(_params, session, socket) do {:ok, socket |> assign_defaults(session) |> display_invites()} end @impl true def handle_params(params, _url, %{assigns: %{live_action: live_action}} = socket) do {:noreply, socket |> apply_action(live_action, params)} end defp apply_action(%{assigns: %{current_user: current_user}} = socket, :edit, %{"id" => id}) do socket |> assign(page_title: gettext("Edit Invite"), invite: Invites.get_invite!(id, current_user)) end defp apply_action(socket, :new, _params) do socket |> assign(page_title: gettext("New Invite"), invite: %Invite{}) end defp apply_action(socket, :index, _params) do socket |> assign(page_title: gettext("Listing Invites"), invite: nil) end @impl true def handle_event("delete", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do %{name: invite_name} = id |> Invites.get_invite!(current_user) |> Invites.delete_invite!(current_user) prompt = dgettext("prompts", "%{name} deleted succesfully", name: invite_name) {:noreply, socket |> put_flash(:info, prompt) |> display_invites()} end def handle_event( "set_unlimited", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket ) do socket = Invites.get_invite!(id, current_user) |> Invites.update_invite(%{"uses_left" => nil}, current_user) |> case do {:ok, %{name: invite_name}} -> prompt = dgettext("prompts", "%{name} updated succesfully", name: invite_name) socket |> put_flash(:info, prompt) |> display_invites() {:error, changeset} -> socket |> put_flash(:error, changeset |> changeset_errors()) end {:noreply, socket} end def handle_event("enable", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do socket = Invites.get_invite!(id, current_user) |> Invites.update_invite(%{"uses_left" => nil, "disabled_at" => nil}, current_user) |> case do {:ok, %{name: invite_name}} -> prompt = dgettext("prompts", "%{name} enabled succesfully", name: invite_name) socket |> put_flash(:info, prompt) |> display_invites() {:error, changeset} -> socket |> put_flash(:error, changeset |> changeset_errors()) end {:noreply, socket} end def handle_event("disable", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second) socket = Invites.get_invite!(id, current_user) |> Invites.update_invite(%{"uses_left" => 0, "disabled_at" => now}, current_user) |> case do {:ok, %{name: invite_name}} -> prompt = dgettext("prompts", "%{name} disabled succesfully", name: invite_name) socket |> put_flash(:info, prompt) |> display_invites() {:error, changeset} -> socket |> put_flash(:error, changeset |> changeset_errors()) end {:noreply, socket} end defp display_invites(%{assigns: %{current_user: current_user}} = socket) do socket |> assign(:invites, Invites.list_invites(current_user)) end end