Packages

Simple LiveView components for inline editing

Retired package: Deprecated - retired

Current section

Files

Jump to
phoenix_live_editable lib phoenix live_editable.ex
Raw

lib/phoenix/live_editable.ex

defmodule Phoenix.LiveEditable do
import Phoenix.LiveView
use Phoenix.LiveComponent
# ----- lifecycle callbacks -----
def mount(socket) do
# {:ok, assign(socket, :focusid, "NONE")}
{:ok, socket}
end
def update(assigns, socket) do
Map.has_key?(assigns, :id) || raise("Needs `:id` assign")
Map.has_key?(assigns, :type) || raise("Needs `:type` assign ('text' | 'select')")
assigns = set_env(assigns)
# IO.inspect(assigns, label: "UPDATE ASSIG==>>")
# IO.inspect(socket, label: "UPDATE SOCK==>>")
{:ok, assign(socket, assigns)}
end
def render(assigns) do
# IO.inspect(assigns, label: "RENDER ASSIG==>>")
module = interface_module()
module.render(assigns)
end
# ----- event handlers -----
# ----- view helpers -----
defp set_env(assigns) do
mode = if assigns.id == assigns.focusid, do: "focus", else: "anchor"
assigns
|> Map.put(:mode, mode)
# |> IO.inspect(label: "SETENV")
end
def interface_module do
_app_name = Application.get_application(__MODULE__) # |> IO.inspect(label: "APPNAME ------->>>>")
case Application.fetch_env(:phoenix_live_editable, :css_framework) do
{:ok, module} ->
module
error ->
IO.inspect "+++++++++++++++++++++++++++++++++++++++"
IO.inspect "ERROR INTERFACE MODULE"
IO.inspect error
IO.inspect "+++++++++++++++++++++++++++++++++++++++"
Phoenix.LiveEditable.Interface.Milligram
end
end
defmacro __using__(_opts) do
quote do
on_mount Phoenix.LiveEditableHooks
def handle_event("focus", %{"id" => id}, socket) do
new_socket = assign(socket, :focusid, id)
{:noreply, new_socket}
end
def handle_event("cancel", _payload, socket) do
{:noreply, assign(socket, :focusid, "NONE")}
end
end
end
end