Skip to content

Commit 655f7f1

Browse files
committed
Merge branch 'release/0.18.3'
2 parents 5cef67c + e9fd8f2 commit 655f7f1

6 files changed

Lines changed: 41 additions & 7 deletions

File tree

lib/backpex/html/item_action.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ defmodule Backpex.HTML.ItemAction do
3636
id={:item_action_modal}
3737
live_resource={@live_resource}
3838
action_type={:item}
39-
{Map.drop(assigns, [:socket, :flash, :fields])}
39+
{Map.drop(assigns, [:fields | Backpex.HTML.Resource.lv_reserved_assigns()])}
4040
/>
4141
</div>
4242
</Layout.modal>

lib/backpex/html/resource.ex

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ defmodule Backpex.HTML.Resource do
1717

1818
embed_templates("resource/*")
1919

20+
@doc """
21+
Returns the list of assigns that `Phoenix.LiveView` reserves and that must be dropped
22+
before spreading parent assigns into a child `Phoenix.LiveComponent`.
23+
24+
`Phoenix.Component.assign/3` rejects these keys with an `ArgumentError`. Centralizing
25+
the list here ensures every spread site forwards the same safe subset of the parent's
26+
assigns.
27+
"""
28+
def lv_reserved_assigns, do: [:flash, :uploads, :streams, :socket, :myself]
29+
2030
@doc """
2131
Renders a resource table.
2232
"""
@@ -112,7 +122,7 @@ defmodule Backpex.HTML.Resource do
112122
id={"resource_#{@name}_#{@primary_key}"}
113123
module={@field_options.module}
114124
type={@type}
115-
{Map.drop(assigns, [:socket, :flash, :myself, :uploads])}
125+
{Map.drop(assigns, lv_reserved_assigns())}
116126
/>
117127
"""
118128
end
@@ -148,7 +158,7 @@ defmodule Backpex.HTML.Resource do
148158
id={@id}
149159
module={@field_options.module}
150160
type={@type}
151-
{Map.drop(assigns, [:socket, :flash, :myself, :uploads])}
161+
{Map.drop(assigns, lv_reserved_assigns())}
152162
/>
153163
"""
154164
end
@@ -183,7 +193,7 @@ defmodule Backpex.HTML.Resource do
183193
module={@field_options.module}
184194
lv_uploads={assigns[:uploads]}
185195
type={@type}
186-
{Map.drop(assigns, [:socket, :flash, :myself, :uploads])}
196+
{Map.drop(assigns, lv_reserved_assigns())}
187197
/>
188198
"""
189199
end

lib/backpex/html/resource/resource_form_main.html.heex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
module={Backpex.FormComponent}
44
id={:edit}
55
live_resource={@live_resource}
6-
{Map.drop(assigns, [:socket, :flash])}
6+
{Map.drop(assigns, lv_reserved_assigns())}
77
/>
88
</.main_container>

lib/backpex/html/resource/resource_index.html.heex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
id={:modal}
1313
live_resource={@live_resource}
1414
action_type={:resource}
15-
{Map.drop(assigns, [:socket, :flash, :fields])}
15+
{Map.drop(assigns, [:fields | lv_reserved_assigns()])}
1616
/>
1717
</.modal>
1818

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule Backpex.MixProject do
22
use Mix.Project
33

4-
@version "0.18.2"
4+
@version "0.18.3"
55

66
@source_url "https://github.com/naymspace/backpex"
77
@changelog_url "https://github.com/naymspace/backpex/releases"
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
defmodule Backpex.HTML.ResourceTest do
2+
use ExUnit.Case, async: true
3+
4+
alias Backpex.HTML.Resource
5+
6+
describe "lv_reserved_assigns/0" do
7+
test "includes every assign reserved by Phoenix.LiveView" do
8+
reserved = Resource.lv_reserved_assigns()
9+
10+
for key <- [:flash, :uploads, :streams, :socket, :myself] do
11+
assert key in reserved, "expected #{inspect(key)} in lv_reserved_assigns/0"
12+
end
13+
end
14+
15+
test "dropping the reserved set removes :streams from a parent-style assigns map" do
16+
assigns = %{streams: %{example: :ref}, foo: 1, bar: 2}
17+
18+
result = Map.drop(assigns, Resource.lv_reserved_assigns())
19+
20+
refute Map.has_key?(result, :streams)
21+
assert result == %{foo: 1, bar: 2}
22+
end
23+
end
24+
end

0 commit comments

Comments
 (0)