Packages

phoenix_kit

1.7.200
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 integrations resource_links.ex
Raw

lib/phoenix_kit/integrations/resource_links.ex

defmodule PhoenixKit.Integrations.ResourceLinks do
@moduledoc """
Resolves `"integration"` resources to their edit page for deep-linking.
An activity logged against an integration (`resource_type: "integration"`,
`resource_uuid:` the storage row's uuid) resolves to the connection's edit
page (`/admin/settings/integrations/:uuid`), titled `provider / name`.
Registered as the `"integration"` handler by `PhoenixKit.ResourceLinks`
(gated on this module being loaded). Mirrors
`PhoenixKit.Users.CommentResources` — implements the same
`resolve_comment_resources/1` contract and returns a **raw** phoenix_kit path
(`Routes.path/1` is applied once at render).
"""
alias PhoenixKit.Integrations
@spec resolve_comment_resources([binary()]) :: %{binary() => map()}
def resolve_comment_resources(resource_uuids) when is_list(resource_uuids) do
resource_uuids
|> Enum.uniq()
|> Enum.reduce(%{}, fn uuid, acc ->
case info_for(uuid) do
nil -> acc
info -> Map.put(acc, uuid, info)
end
end)
rescue
_ -> %{}
end
# Raw path — the caller applies Routes.path/1 (prefix + locale) at render.
# The title lookup is best-effort: a transient settings error falls back to a
# generic label rather than dropping the (still-valid) deep-link.
defp info_for(uuid) when is_binary(uuid) and uuid != "" do
%{title: title_for(uuid), path: "/admin/settings/integrations/#{uuid}"}
end
defp info_for(_), do: nil
defp title_for(uuid) do
case Integrations.get_integration_by_uuid(uuid) do
{:ok, %{provider: provider, name: name}} -> connection_title(provider, name)
_ -> "Integration"
end
rescue
_ -> "Integration"
end
defp connection_title(provider, name) do
case {to_string(provider), to_string(name)} do
{"", ""} -> "Integration"
{p, ""} -> p
{"", n} -> n
{p, n} -> "#{p} / #{n}"
end
end
end