defmodule ClickToComponent do @moduledoc """ Documentation for `ClickToComponent`. """ require Logger @enabled? Application.compile_env(:click_to_component, :enabled, false) if @enabled? and !Application.compile_env(:phoenix_live_view, :debug_heex_annotations) do Logger.warning(""" ClickToComponent requires :debug_heex_annotations to be enabled. Add the following configuration in your `config/dev.exs` file: config :phoenix_live_view, debug_heex_annotations: true """) end if !@enabled? and Application.compile_env(:phoenix_live_view, :debug_heex_annotations) do Logger.warning(""" It looks like :debug_heex_annotations is enabled, but ClickToComponent is not. To enable, add the following configuration in your `config/dev.exs` file: config :click_to_component, enabled: true """) end @doc """ Renders the ClickToComponent hook. Add to your `lib/my_app_web/layouts/root.html.heex` file as follows: ```html ``` """ import Phoenix.Component, only: [sigil_H: 2], warn: false if @enabled? do def render(assigns), do: __MODULE__.Components.click_to_component(assigns) else def render(assigns), do: ~H"" end @doc """ Returns the global `on_mount/1` LiveView hook for handling events as quoted code. Add to your `lib/my_app_web.ex` file as follows: ```elixir def live_view(opts \\ []) do quote do use Phoenix.LiveView, layout: {MyAppWeb.Layouts, :app} unquote(ClickToComponent.hooks()) # Rest of live_view quoted code... end end ``` """ if @enabled? do def hooks() do quote do on_mount(unquote(__MODULE__.Hooks)) end end else def hooks(), do: nil end end