defmodule Phoenix.UI.Hooks do @moduledoc """ Helper module for loading data via LiveView lifecycle events. """ alias Phoenix.LiveView.Socket import Phoenix.LiveView, only: [attach_hook: 4] import Phoenix.Component, only: [assign: 3] @doc """ Attaches a hook that will parse and assign a URI struct on every `handle_params` lifecycle event. """ @spec on_mount(atom(), map(), map(), Socket.t()) :: {atom(), Socket.t()} def on_mount(:assign_uri, _params, _session, socket) do {:cont, attach_hook(socket, :assign_uri, :handle_params, &assign_uri/3)} end defp assign_uri(_params, uri, socket), do: {:cont, assign(socket, :uri, URI.parse(uri))} end