Fix issue LiveJSON when not using SSR

This commit is contained in:
Wout De Puysseleir 2023-06-28 16:01:19 -07:00
parent 9e131f24e5
commit c1f64075d4
No known key found for this signature in database
GPG key ID: 3DE9371B50FEC46A
3 changed files with 17 additions and 11 deletions

View file

@ -3,7 +3,16 @@ defmodule ExampleWeb.LiveJson do
def render(assigns) do
~H"""
<.svelte name="LiveJson" live_json_props={%{big_data_set: @ljbig_data_set}} />
<div class="flex gap-10">
<div>
SSR:
<.svelte name="LiveJson" live_json_props={%{big_data_set: @ljbig_data_set}} />
</div>
<div>
No SSR:
<.svelte name="LiveJson" live_json_props={%{big_data_set: @ljbig_data_set}} ssr={false} />
</div>
</div>
"""
end

View file

@ -78,6 +78,7 @@ defmodule LiveSvelte do
assigns =
assigns
|> assign(:init, init)
|> assign(:slots, slots)
|> assign(:ssr_render, ssr_code)
@ -88,7 +89,7 @@ defmodule LiveSvelte do
id={id(@name)}
data-name={@name}
data-props={json(@props)}
data-live-json={render_live_json(@live_json_props, @ssr_render)}
data-live-json={if @init, do: json(@live_json_props), else: @live_json_props |> Map.keys() |> json()}
data-slots={Slots.base_encode_64(@slots) |> json}
phx-update="ignore"
phx-hook="SvelteHook"
@ -119,9 +120,6 @@ defmodule LiveSvelte do
end
end
def render_live_json(data, nil), do: json(Map.keys(data))
def render_live_json(data, _ssr_render), do: json(data)
defp id(name), do: "#{name}-#{System.unique_integer([:positive])}"
@doc false

View file

@ -5,7 +5,7 @@ defmodule LiveSvelte.LiveJson do
:live_json_props,
:map,
default: %{},
doc: "LiveJson props to pass to the Svelte component"
doc: "LiveJSON props to pass to the svelte component"
)
slot(:inner_block)
@ -13,12 +13,11 @@ defmodule LiveSvelte.LiveJson do
def live_json(assigns) do
~H"""
<%= if @live_json_props != %{} do %>
<div id="lj" phx-hook="LiveJSON">
<%= render_slot(@inner_block) %>
</div>
<% else %>
<%= render_slot(@inner_block) %>
<div id={id("lj")} phx-hook="LiveJSON" />
<% end %>
<%= render_slot(@inner_block) %>
"""
end
defp id(name), do: "#{name}-#{System.unique_integer([:positive])}"
end