defmodule Bones73kWeb.LiveHelpers do import Phoenix.LiveView alias Bones73k.Accounts alias Bones73k.Accounts.User alias Bones73kWeb.Router.Helpers, as: Routes alias Bones73kWeb.UserAuth import Phoenix.LiveView.Helpers @doc """ Renders a component inside the `Bones73kWeb.ModalComponent` component. The rendered modal receives a `:return_to` option to properly update the URL when the modal is closed. ## Examples <%= live_modal @socket, Bones73kWeb.PropertyLive.FormComponent, id: @property.id || :new, action: @live_action, property: @property, return_to: Routes.property_index_path(@socket, :index) %> """ def live_modal(socket, component, opts) do path = Keyword.fetch!(opts, :return_to) modal_opts = [id: :modal, return_to: path, component: component, opts: opts] live_component(socket, Bones73kWeb.ModalComponent, modal_opts) end def assign_defaults(session, socket) do Bones73kWeb.Endpoint.subscribe(UserAuth.pubsub_topic()) socket = assign_new(socket, :current_user, fn -> find_current_user(session) end) case socket.assigns.current_user do %User{} -> socket _other -> socket |> put_flash(:error, "You must log in to access this page.") |> redirect(to: Routes.user_session_path(socket, :new)) end end defp find_current_user(session) do with user_token when not is_nil(user_token) <- session["user_token"], %User{} = user <- Accounts.get_user_by_session_token(user_token), do: user end end