Packages

phoenix_kit

1.7.175
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit_web comments_forwarding.ex
Raw

lib/phoenix_kit_web/comments_forwarding.ex

defmodule PhoenixKitWeb.CommentsForwarding do
@moduledoc """
Forwards Leaf rich-text editor process messages to the optional
`phoenix_kit_comments` package.
The embedded `CommentsComponent`'s Leaf composer reports its content to the
*host* LiveView via a `{:leaf_changed, _}` process message — LiveComponents
can't receive `handle_info` themselves. The host must forward that message
back into the component, or "Post Comment" silently posts empty content.
`phoenix_kit_comments` is an optional sibling dependency with no compile-order
guarantee, so the call is resolved at runtime via `apply/3` (never a
compile-time-bound `mod.fun(...)` call) and degrades to a no-op when the
package is absent.
Used by `PhoenixKitWeb.Components.MediaBrowser.Embed` (macro-injected handler)
and `PhoenixKitWeb.Live.Users.MediaDetail` (inline handler) — both delegate
their `{:leaf_changed, _}` `handle_info` clause here so the optional-dep
contract lives in one place.
"""
require Logger
@doc """
Forwards a `{:leaf_changed, _}` message to the comments component.
Always returns `{:noreply, socket}`, so it can be used directly as the body of
a host `handle_info({:leaf_changed, _} = msg, socket)` clause. When the
comments package is absent (or its `forward_leaf_event/2` contract drifts) the
message is dropped gracefully — and contract drift is logged.
"""
def forward_leaf_changed(msg, socket) do
# credo:disable-for-next-line Credo.Check.Design.AliasUsage
mod = PhoenixKitComments.Web.CommentsComponent
if Code.ensure_loaded?(mod) and function_exported?(mod, :forward_leaf_event, 2) do
# credo:disable-for-next-line Credo.Check.Refactor.Apply
case apply(mod, :forward_leaf_event, [msg, socket]) do
{:noreply, _} = result ->
result
:pass ->
{:noreply, socket}
other ->
# Optional cross-package contract: forward_leaf_event/2 is expected to
# return {:noreply, socket} or :pass. Anything else shouldn't crash
# the host LiveView — degrade gracefully and log so a contract drift
# in phoenix_kit_comments is diagnosable.
Logger.warning(
"PhoenixKitComments.Web.CommentsComponent.forward_leaf_event/2 " <>
"returned an unexpected value (#{inspect(other)}); ignoring."
)
{:noreply, socket}
end
else
{:noreply, socket}
end
end
end