Current section
Files
Jump to
Current section
Files
lib/live_debugger_web.ex
defmodule LiveDebuggerWeb do
@moduledoc false
def live_view do
quote do
use Phoenix.LiveView,
layout: {LiveDebuggerWeb.Layout, :app}
on_mount({LiveDebuggerWeb.Hooks.Flash, :add_hook})
on_mount({LiveDebuggerWeb.Hooks.IframeCheck, :add_hook})
on_mount({LiveDebuggerWeb.Hooks.URL, :add_hook})
import Phoenix.HTML
import LiveDebuggerWeb.Helpers
import LiveDebuggerWeb.Components
import LiveDebuggerWeb.Hooks.Flash, only: [push_flash: 2, push_flash: 3]
end
end
def live_component do
quote do
use Phoenix.LiveComponent
import Phoenix.HTML
import LiveDebuggerWeb.Helpers
import LiveDebuggerWeb.Components
import LiveDebuggerWeb.Hooks.Flash, only: [push_flash: 2, push_flash: 3]
end
end
def component do
quote do
use Phoenix.Component
import Phoenix.HTML
import LiveDebuggerWeb.Helpers
import LiveDebuggerWeb.Components
end
end
def hook do
quote do
import Phoenix.LiveView
import Phoenix.Component
import LiveDebuggerWeb.Helpers
end
end
def hook_component do
quote do
use Phoenix.Component
import Phoenix.HTML
import LiveDebuggerWeb.Helpers
import LiveDebuggerWeb.Components
import Phoenix.LiveView
import Phoenix.Component
end
end
defmacro __using__(which) when is_atom(which) do
apply(__MODULE__, which, [])
end
end
defmodule LiveDebuggerWeb.Helpers do
@moduledoc false
def check_assigns!(%Phoenix.LiveView.Socket{assigns: assigns} = socket, key)
when is_atom(key) do
if Map.has_key?(assigns, key) do
socket
else
raise "Assign #{key} not found in assigns"
end
end
def check_assigns!(socket, keys) when is_list(keys) do
Enum.each(keys, &check_assigns!(socket, &1))
socket
end
def check_stream!(%Phoenix.LiveView.Socket{assigns: assigns} = socket, key) do
if Map.has_key?(assigns.streams, key) do
socket
else
raise "Stream #{key} not found in assigns.streams"
end
end
def check_hook!(socket, key) do
if Map.has_key?(socket.private, :hooks) and key in socket.private.hooks do
socket
else
raise "Hook #{key} not found in socket.private.hooks"
end
end
def register_hook(socket, key) do
if Map.has_key?(socket.private, :hooks) do
Phoenix.LiveView.put_private(socket, :hooks, [key | socket.private.hooks])
else
Phoenix.LiveView.put_private(socket, :hooks, [key])
end
end
def empty_map(_), do: %{}
def ok(socket), do: {:ok, socket}
def noreply(socket), do: {:noreply, socket}
def cont(socket), do: {:cont, socket}
def halt(socket), do: {:halt, socket}
end