mirror of
https://github.com/woutdp/live_svelte
synced 2026-05-24 09:28:21 +00:00
58 lines
1.1 KiB
Elixir
58 lines
1.1 KiB
Elixir
defmodule LiveSvelte.Slots do
|
|
@moduledoc false
|
|
|
|
import Phoenix.Component
|
|
|
|
@doc false
|
|
def rendered_slot_map(assigns) do
|
|
assigns
|
|
|> filter_slots_from_assigns()
|
|
|> render_slots()
|
|
end
|
|
|
|
@doc false
|
|
def js_process(assigns) do
|
|
assigns
|
|
|> Enum.map(fn
|
|
{:inner_block, value} -> {:default, value}
|
|
key_value -> key_value
|
|
end)
|
|
|> Enum.into(%{})
|
|
end
|
|
|
|
@doc false
|
|
def base_encode_64(assigns) do
|
|
assigns
|
|
|> Enum.map(fn {key, value} -> {key, Base.encode64(value)} end)
|
|
|> Enum.into(%{})
|
|
end
|
|
|
|
@doc false
|
|
defp filter_slots_from_assigns(assigns) do
|
|
assigns
|
|
|> Enum.filter(fn
|
|
{_key, [%{__slot__: _}]} -> true
|
|
_ -> false
|
|
end)
|
|
|> Enum.into(%{})
|
|
end
|
|
|
|
@doc false
|
|
defp render_slots(assigns) do
|
|
Enum.reduce(assigns, %{}, fn
|
|
{key, value}, acc -> Map.put(acc, key, render(%{slot: value}))
|
|
end)
|
|
end
|
|
|
|
@doc false
|
|
defp render(assigns) do
|
|
~H"""
|
|
<%= if assigns[:slot] do %>
|
|
<%= render_slot(@slot) %>
|
|
<% end %>
|
|
"""
|
|
|> Phoenix.HTML.Safe.to_iodata()
|
|
|> List.to_string()
|
|
|> String.trim()
|
|
end
|
|
end
|