fix: get checks passing, fix various bugs

This commit is contained in:
Zach Daniel 2024-04-02 22:01:11 -04:00
parent 2b94944247
commit 5d1b3a1d5b
9 changed files with 166 additions and 52 deletions

View file

@ -8,6 +8,7 @@
## curated tools may be disabled (e.g. the check for compilation warnings) ## curated tools may be disabled (e.g. the check for compilation warnings)
# {:compiler, false}, # {:compiler, false},
{:npm_test, false}, {:npm_test, false},
{:gettext, false},
{:check_formatter, command: "mix spark.formatter --check"} {:check_formatter, command: "mix spark.formatter --check"}
## ...or adjusted (e.g. use one-line formatter for more compact credo output) ## ...or adjusted (e.g. use one-line formatter for more compact credo output)

View file

@ -1462,7 +1462,7 @@ defmodule AshAdmin.Components.Resource.Form do
def relationships(resource, action, nil) do def relationships(resource, action, nil) do
resource resource
|> Ash.Resource.Info.relationships() |> Ash.Resource.Info.relationships()
|> Enum.filter(& &1.writable? && &1.public?) |> Enum.filter(&(&1.writable? && &1.public?))
|> only_accepted(action) |> only_accepted(action)
|> sort_relationships() |> sort_relationships()
end end
@ -1523,7 +1523,7 @@ defmodule AshAdmin.Components.Resource.Form do
attributes = attributes =
resource resource
|> Ash.Resource.Info.attributes() |> Ash.Resource.Info.attributes()
|> Enum.filter(& &1.writable? && &1.public?) |> Enum.filter(&(&1.writable? && &1.public?))
|> Enum.reject(&(&1.name == :autogenerated_id)) |> Enum.reject(&(&1.name == :autogenerated_id))
|> only_accepted(action) |> only_accepted(action)
|> Enum.reject(fn attribute -> |> Enum.reject(fn attribute ->

View file

@ -157,7 +157,7 @@ defmodule AshAdmin.Components.Resource.MetadataTable do
defp attributes(resource) do defp attributes(resource) do
resource resource
|> Ash.Resource.Info.attributes() |> Ash.Resource.Info.attributes()
|> Enum.sort_by(& not(&1.public?)) |> Enum.sort_by(&(not &1.public?))
end end
defp attribute_type(attribute) do defp attribute_type(attribute) do
@ -173,6 +173,6 @@ defmodule AshAdmin.Components.Resource.MetadataTable do
defp relationships(resource) do defp relationships(resource) do
resource resource
|> Ash.Resource.Info.relationships() |> Ash.Resource.Info.relationships()
|> Enum.sort_by(& not(&1.public?)) |> Enum.sort_by(&(not &1.public?))
end end
end end

View file

@ -144,7 +144,7 @@ defmodule AshAdmin.Components.Resource.Show do
~H""" ~H"""
<div class="mb-10"> <div class="mb-10">
<%= render_attributes(assigns, @record, @destination) %> <%= render_attributes(assigns, @record, @destination, @name) %>
<div class="px-4 py-3 text-right sm:px-6"> <div class="px-4 py-3 text-right sm:px-6">
<.link <.link
:if={AshAdmin.Resource.show_action(@destination)} :if={AshAdmin.Resource.show_action(@destination)}
@ -192,7 +192,7 @@ defmodule AshAdmin.Components.Resource.Show do
""" """
end end
defp render_attributes(assigns, record, resource) do defp render_attributes(assigns, record, resource, relationship_name \\ nil) do
{attributes, flags, bottom_attributes, _} = {attributes, flags, bottom_attributes, _} =
AshAdmin.Components.Resource.Form.attributes(resource, :show) AshAdmin.Components.Resource.Form.attributes(resource, :show)
@ -202,7 +202,8 @@ defmodule AshAdmin.Components.Resource.Show do
resource: resource, resource: resource,
attributes: attributes, attributes: attributes,
flags: flags, flags: flags,
bottom_attributes: bottom_attributes bottom_attributes: bottom_attributes,
relationship_name: relationship_name
) )
~H""" ~H"""
@ -219,7 +220,13 @@ defmodule AshAdmin.Components.Resource.Show do
> >
<div class="block text-sm font-medium text-gray-700"><%= to_name(attribute.name) %></div> <div class="block text-sm font-medium text-gray-700"><%= to_name(attribute.name) %></div>
<div> <div>
<%= render_maybe_sensitive_attribute(assigns, @resource, @record, attribute) %> <%= render_maybe_sensitive_attribute(
assigns,
@resource,
@record,
attribute,
@relationship_name
) %>
</div> </div>
</div> </div>
</div> </div>
@ -241,7 +248,13 @@ defmodule AshAdmin.Components.Resource.Show do
> >
<div class="block text-sm font-medium text-gray-700"><%= to_name(attribute.name) %></div> <div class="block text-sm font-medium text-gray-700"><%= to_name(attribute.name) %></div>
<div> <div>
<%= render_maybe_sensitive_attribute(assigns, @resource, @record, attribute) %> <%= render_maybe_sensitive_attribute(
assigns,
@resource,
@record,
attribute,
@relationship_name
) %>
</div> </div>
</div> </div>
</div> </div>
@ -264,39 +277,46 @@ defmodule AshAdmin.Components.Resource.Show do
> >
<div class="block text-sm font-medium text-gray-700"><%= to_name(attribute.name) %></div> <div class="block text-sm font-medium text-gray-700"><%= to_name(attribute.name) %></div>
<div> <div>
<%= render_maybe_sensitive_attribute(assigns, @resource, @record, attribute) %> <%= render_maybe_sensitive_attribute(
assigns,
@resource,
@record,
attribute,
@relationship_name
) %>
</div> </div>
</div> </div>
</div> </div>
""" """
end end
defp render_maybe_sensitive_attribute(assigns, resource, record, attribute) do defp render_maybe_sensitive_attribute(assigns, resource, record, attribute, relationship_name) do
assigns = assign(assigns, attribute: attribute) assigns = assign(assigns, attribute: attribute, relationship_name: relationship_name)
show_sensitive_fields = AshAdmin.Resource.show_sensitive_fields(resource) show_sensitive_fields = AshAdmin.Resource.show_sensitive_fields(resource)
if attribute.sensitive? && not Enum.member?(show_sensitive_fields, attribute.name) do if attribute.sensitive? && not Enum.member?(show_sensitive_fields, attribute.name) do
~H""" ~H"""
<.live_component <.live_component
id={"#{@record.id}-#{@attribute.name}"} id={"#{@relationship_name}_#{AshAdmin.Helpers.encode_primary_key(@record)}-#{@attribute.name}"}
module={SensitiveAttribute} module={SensitiveAttribute}
value={Map.get(@record, @attribute.name)} value={Map.get(@record, @attribute.name)}
> >
<%= render_attribute(assigns, @resource, @record, @attribute) %> <%= render_attribute(assigns, @resource, @record, @attribute, @relationship_name) %>
</.live_component> </.live_component>
""" """
else else
render_attribute(assigns, resource, record, attribute) render_attribute(assigns, resource, record, attribute, relationship_name)
end end
end end
defp render_attribute(assigns, resource, record, attribute, nested? \\ false) defp render_attribute(assigns, resource, record, attribute, relationship_name, nested? \\ false)
defp render_attribute( defp render_attribute(
assigns, assigns,
resource, resource,
record, record,
%{type: {:array, type}, name: name} = attribute, %{type: {:array, type}, name: name} = attribute,
relationship_name,
nested? nested?
) do ) do
if Map.get(record, name) in [[], nil] do if Map.get(record, name) in [[], nil] do
@ -309,6 +329,7 @@ defmodule AshAdmin.Components.Resource.Show do
type: type, type: type,
name: name, name: name,
attribute: attribute, attribute: attribute,
relationship_name: relationship_name,
nested: nested? nested: nested?
) )
@ -321,6 +342,7 @@ defmodule AshAdmin.Components.Resource.Show do
@resource, @resource,
Map.put(@record, @name, value), Map.put(@record, @name, value),
%{@attribute | type: @type}, %{@attribute | type: @type},
@relationship_name,
true true
) %> ) %>
</li> </li>
@ -334,6 +356,7 @@ defmodule AshAdmin.Components.Resource.Show do
@resource, @resource,
Map.put(@record, @name, value), Map.put(@record, @name, value),
%{@attribute | type: @type}, %{@attribute | type: @type},
@relationship_name,
true true
) %> ) %>
</li> </li>
@ -349,21 +372,42 @@ defmodule AshAdmin.Components.Resource.Show do
resource, resource,
record, record,
%{type: {:array, Ash.Type.Map}} = attribute, %{type: {:array, Ash.Type.Map}} = attribute,
relationship_name,
nested? nested?
) do ) do
render_attribute(assigns, resource, record, %{attribute | type: Ash.Type.Map}, nested?) render_attribute(
assigns,
resource,
record,
%{attribute | type: Ash.Type.Map},
relationship_name,
nested?
)
end end
defp render_attribute(assigns, _resource, record, %{type: Ash.Type.Map} = attribute, _nested?) do defp render_attribute(
assigns,
_resource,
record,
%{type: Ash.Type.Map} = attribute,
relationship_name,
_nested?
) do
encoded = Jason.encode!(Map.get(record, attribute.name)) encoded = Jason.encode!(Map.get(record, attribute.name))
assigns = assign(assigns, record: record, attribute: attribute, encoded: encoded) assigns =
assign(assigns,
record: record,
attribute: attribute,
encoded: encoded,
relationship_name: relationship_name
)
~H""" ~H"""
<div <div
phx-hook="JsonView" phx-hook="JsonView"
data-json={@encoded} data-json={@encoded}
id={"_#{AshAdmin.Helpers.encode_primary_key(@record)}_#{@attribute.name}_json"} id={"#{@relationship_name}_#{AshAdmin.Helpers.encode_primary_key(@record)}_#{@attribute.name}_json"}
/> />
""" """
rescue rescue
@ -371,7 +415,14 @@ defmodule AshAdmin.Components.Resource.Show do
"..." "..."
end end
defp render_attribute(assigns, _resource, record, %{name: name, type: Ash.Type.Boolean}, _) do defp render_attribute(
assigns,
_resource,
record,
%{name: name, type: Ash.Type.Boolean},
_relationship_name,
_
) do
case Map.get(record, name) do case Map.get(record, name) do
true -> true ->
~H""" ~H"""
@ -390,7 +441,14 @@ defmodule AshAdmin.Components.Resource.Show do
end end
end end
defp render_attribute(assigns, _resource, record, %{name: name, type: Ash.Type.Binary}, _) do defp render_attribute(
assigns,
_resource,
record,
%{name: name, type: Ash.Type.Binary},
_relationship_name,
_
) do
if Map.get(record, name) do if Map.get(record, name) do
~H""" ~H"""
<span class="italic">(binary data)</span> <span class="italic">(binary data)</span>
@ -400,7 +458,7 @@ defmodule AshAdmin.Components.Resource.Show do
end end
end end
defp render_attribute(assigns, resource, record, attribute, nested?) do defp render_attribute(assigns, resource, record, attribute, relationship_name, nested?) do
if Ash.Type.embedded_type?(attribute.type) do if Ash.Type.embedded_type?(attribute.type) do
if Map.get(record, attribute.name) in [nil, []] do if Map.get(record, attribute.name) in [nil, []] do
"None" "None"
@ -410,17 +468,28 @@ defmodule AshAdmin.Components.Resource.Show do
resource: resource, resource: resource,
record: record, record: record,
attribute: attribute, attribute: attribute,
nested: nested? nested: nested?,
relationship_name: relationship_name
) )
~H""" ~H"""
<%= if @nested do %> <%= if @nested do %>
<div class="ml-1 pl-2 pr-2"> <div class="ml-1 pl-2 pr-2">
<%= render_attributes(assigns, Map.get(@record, @attribute.name), @attribute.type) %> <%= render_attributes(
assigns,
Map.get(@record, @attribute.name),
@attribute.type,
@relationship_name
) %>
</div> </div>
<% else %> <% else %>
<div class="shadow-md border mt-4 mb-4 rounded py-2 px-2 ml-1 pl-2 pr-2"> <div class="shadow-md border mt-4 mb-4 rounded py-2 px-2 ml-1 pl-2 pr-2">
<%= render_attributes(assigns, Map.get(@record, @attribute.name), @attribute.type) %> <%= render_attributes(
assigns,
Map.get(@record, @attribute.name),
@attribute.type,
@relationship_name
) %>
</div> </div>
<% end %> <% end %>
""" """

View file

@ -101,8 +101,24 @@ defmodule AshAdmin.Components.Resource.Table do
|> Enum.reject(&(&1.name in skip)) |> Enum.reject(&(&1.name in skip))
end end
defp render_attribute(domain, record, attribute, formats, show_sensitive_fields, actor, relationship_name) do defp render_attribute(
process_attribute(domain, record, attribute, formats, show_sensitive_fields, actor, relationship_name) domain,
record,
attribute,
formats,
show_sensitive_fields,
actor,
relationship_name
) do
process_attribute(
domain,
record,
attribute,
formats,
show_sensitive_fields,
actor,
relationship_name
)
rescue rescue
_ -> _ ->
"..." "..."
@ -138,13 +154,29 @@ defmodule AshAdmin.Components.Resource.Table do
attributes = attributes(attribute.destination, display_attributes, []) attributes = attributes(attribute.destination, display_attributes, [])
Enum.map_join(attributes, " - ", fn x -> Enum.map_join(attributes, " - ", fn x ->
render_attribute(domain, relationship, x, formats, show_sensitive_fields, actor, relationship_name) render_attribute(
domain,
relationship,
x,
formats,
show_sensitive_fields,
actor,
relationship_name
)
end) end)
end end
end end
end end
defp process_attribute(_, record, %struct{} = attribute, formats, show_sensitive_fields, _actor, relationship_name) defp process_attribute(
_,
record,
%struct{} = attribute,
formats,
show_sensitive_fields,
_actor,
relationship_name
)
when struct in [Ash.Resource.Attribute, Ash.Resource.Aggregate, Ash.Resource.Calculation] do when struct in [Ash.Resource.Attribute, Ash.Resource.Aggregate, Ash.Resource.Calculation] do
{mod, func, args} = {mod, func, args} =
Keyword.get(formats || [], attribute.name, {Phoenix.HTML.Safe, :to_iodata, []}) Keyword.get(formats || [], attribute.name, {Phoenix.HTML.Safe, :to_iodata, []})
@ -162,16 +194,29 @@ defmodule AshAdmin.Components.Resource.Table do
end end
end end
defp process_attribute(_domain, _record, _attr, _formats, _show_sensitive_fields, _actor) do defp process_attribute(
_domain,
_record,
_attr,
_formats,
_show_sensitive_fields,
_actor,
_relationship_name
) do
"..." "..."
end end
defp format_sensitive_value(value, attribute, record, relationship_name) do defp format_sensitive_value(value, attribute, record, relationship_name) do
assigns = %{value: value, attribute: attribute, record: record, relationship_name: relationship_name} assigns = %{
value: value,
attribute: attribute,
record: record,
relationship_name: relationship_name
}
~H""" ~H"""
<.live_component <.live_component
id={"#{@relationship_name}-#{@record.id}-#{@attribute.name}"} id={"#{@relationship_name}-#{AshAdmin.Helpers.encode_primary_key(@record)}-#{@attribute.name}"}
module={SensitiveAttribute} module={SensitiveAttribute}
value={@value} value={@value}
> >

View file

@ -37,7 +37,7 @@ defmodule AshAdmin.MixProject do
end end
defp elixirc_paths(:test) do defp elixirc_paths(:test) do
["test/support", "lib"] ["test/support", "lib", "dev"]
end end
defp elixirc_paths(:prod) do defp elixirc_paths(:prod) do

View file

@ -12,11 +12,9 @@
"db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"}, "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"},
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
"dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"}, "dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"},
"earmark": {:hex, :earmark, "1.4.46", "8c7287bd3137e99d26ae4643e5b7ef2129a260e3dcf41f251750cb4563c8fb81", [:mix], [], "hexpm", "798d86db3d79964e759ddc0c077d5eb254968ed426399fbf5a62de2b5ff8910a"},
"earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"}, "earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"},
"ecto": {:hex, :ecto, "3.11.2", "e1d26be989db350a633667c5cda9c3d115ae779b66da567c68c80cfb26a8c9ee", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c38bca2c6f8d8023f2145326cc8a80100c3ffe4dcbd9842ff867f7fc6156c65"}, "ecto": {:hex, :ecto, "3.11.2", "e1d26be989db350a633667c5cda9c3d115ae779b66da567c68c80cfb26a8c9ee", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c38bca2c6f8d8023f2145326cc8a80100c3ffe4dcbd9842ff867f7fc6156c65"},
"ecto_sql": {:hex, :ecto_sql, "3.11.1", "e9abf28ae27ef3916b43545f9578b4750956ccea444853606472089e7d169470", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ce14063ab3514424276e7e360108ad6c2308f6d88164a076aac8a387e1fea634"}, "ecto_sql": {:hex, :ecto_sql, "3.11.1", "e9abf28ae27ef3916b43545f9578b4750956ccea444853606472089e7d169470", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ce14063ab3514424276e7e360108ad6c2308f6d88164a076aac8a387e1fea634"},
"elixir_make": {:hex, :elixir_make, "0.8.2", "cd4a5a75891362e9207adaac7e66223fd256ec2518ae013af7f10c9c85b50b5c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.0", [hex: :certifi, repo: "hexpm", optional: true]}], "hexpm", "9d9607d640c372a7291e5a56ce655aa2351897929be20bd211648fdb79e725dc"},
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"esbuild": {:hex, :esbuild, "0.8.1", "0cbf919f0eccb136d2eeef0df49c4acf55336de864e63594adcea3814f3edf41", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "25fc876a67c13cb0a776e7b5d7974851556baeda2085296c14ab48555ea7560f"}, "esbuild": {:hex, :esbuild, "0.8.1", "0cbf919f0eccb136d2eeef0df49c4acf55336de864e63594adcea3814f3edf41", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "25fc876a67c13cb0a776e7b5d7974851556baeda2085296c14ab48555ea7560f"},
"ets": {:hex, :ets, "0.9.0", "79c6a6c205436780486f72d84230c6cba2f8a9920456750ddd1e47389107d5fd", [:mix], [], "hexpm", "2861fdfb04bcaeff370f1a5904eec864f0a56dcfebe5921ea9aadf2a481c822b"}, "ets": {:hex, :ets, "0.9.0", "79c6a6c205436780486f72d84230c6cba2f8a9920456750ddd1e47389107d5fd", [:mix], [], "hexpm", "2861fdfb04bcaeff370f1a5904eec864f0a56dcfebe5921ea9aadf2a481c822b"},
@ -35,7 +33,6 @@
"makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"}, "makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"},
"makeup_erlang": {:hex, :makeup_erlang, "0.1.5", "e0ff5a7c708dda34311f7522a8758e23bfcd7d8d8068dc312b5eb41c6fd76eba", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "94d2e986428585a21516d7d7149781480013c56e30c6a233534bedf38867a59a"}, "makeup_erlang": {:hex, :makeup_erlang, "0.1.5", "e0ff5a7c708dda34311f7522a8758e23bfcd7d8d8068dc312b5eb41c6fd76eba", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "94d2e986428585a21516d7d7149781480013c56e30c6a233534bedf38867a59a"},
"mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"}, "mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"},
"nimble_options": {:hex, :nimble_options, "1.1.0", "3b31a57ede9cb1502071fade751ab0c7b8dbe75a9a4c2b5bbb0943a690b63172", [:mix], [], "hexpm", "8bbbb3941af3ca9acc7835f5655ea062111c9c27bcac53e004460dfd19008a99"},
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
"phoenix": {:hex, :phoenix, "1.7.11", "1d88fc6b05ab0c735b250932c4e6e33bfa1c186f76dcf623d8dd52f07d6379c7", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "b1ec57f2e40316b306708fe59b92a16b9f6f4bf50ccfa41aa8c7feb79e0ec02a"}, "phoenix": {:hex, :phoenix, "1.7.11", "1d88fc6b05ab0c735b250932c4e6e33bfa1c186f76dcf623d8dd52f07d6379c7", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "b1ec57f2e40316b306708fe59b92a16b9f6f4bf50ccfa41aa8c7feb79e0ec02a"},
"phoenix_html": {:hex, :phoenix_html, "4.1.1", "4c064fd3873d12ebb1388425a8f2a19348cef56e7289e1998e2d2fa758aa982e", [:mix], [], "hexpm", "f2f2df5a72bc9a2f510b21497fd7d2b86d932ec0598f0210fed4114adc546c6f"}, "phoenix_html": {:hex, :phoenix_html, "4.1.1", "4c064fd3873d12ebb1388425a8f2a19348cef56e7289e1998e2d2fa758aa982e", [:mix], [], "hexpm", "f2f2df5a72bc9a2f510b21497fd7d2b86d932ec0598f0210fed4114adc546c6f"},
@ -44,7 +41,6 @@
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
"phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},
"phoenix_view": {:hex, :phoenix_view, "2.0.3", "4d32c4817fce933693741deeb99ef1392619f942633dde834a5163124813aad3", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "cd34049af41be2c627df99cd4eaa71fc52a328c0c3d8e7d4aa28f880c30e7f64"}, "phoenix_view": {:hex, :phoenix_view, "2.0.3", "4d32c4817fce933693741deeb99ef1392619f942633dde834a5163124813aad3", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "cd34049af41be2c627df99cd4eaa71fc52a328c0c3d8e7d4aa28f880c30e7f64"},
"picosat_elixir": {:hex, :picosat_elixir, "0.2.3", "bf326d0f179fbb3b706bb2c15fbc367dacfa2517157d090fdfc32edae004c597", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "f76c9db2dec9d2561ffaa9be35f65403d53e984e8cd99c832383b7ab78c16c66"},
"plug": {:hex, :plug, "1.15.3", "712976f504418f6dff0a3e554c40d705a9bcf89a7ccef92fc6a5ef8f16a30a97", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cc4365a3c010a56af402e0809208873d113e9c38c401cabd88027ef4f5c01fd2"}, "plug": {:hex, :plug, "1.15.3", "712976f504418f6dff0a3e554c40d705a9bcf89a7ccef92fc6a5ef8f16a30a97", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cc4365a3c010a56af402e0809208873d113e9c38c401cabd88027ef4f5c01fd2"},
"plug_cowboy": {:hex, :plug_cowboy, "2.7.0", "3ae9369c60641084363b08fe90267cbdd316df57e3557ea522114b30b63256ea", [:mix], [{:cowboy, "~> 2.7.0 or ~> 2.8.0 or ~> 2.9.0 or ~> 2.10.0", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "d85444fb8aa1f2fc62eabe83bbe387d81510d773886774ebdcb429b3da3c1a4a"}, "plug_cowboy": {:hex, :plug_cowboy, "2.7.0", "3ae9369c60641084363b08fe90267cbdd316df57e3557ea522114b30b63256ea", [:mix], [{:cowboy, "~> 2.7.0 or ~> 2.8.0 or ~> 2.9.0 or ~> 2.10.0", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "d85444fb8aa1f2fc62eabe83bbe387d81510d773886774ebdcb429b3da3c1a4a"},
"plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"}, "plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"},

View file

@ -2307,14 +2307,17 @@
findPhxChildren(el, parentId) { findPhxChildren(el, parentId) {
return this.all(el, `${PHX_VIEW_SELECTOR}[${PHX_PARENT_ID}="${parentId}"]`); return this.all(el, `${PHX_VIEW_SELECTOR}[${PHX_PARENT_ID}="${parentId}"]`);
}, },
findParentCIDs(node, cids) { findExistingParentCIDs(node, cids) {
let initial = new Set(cids); let parentCids = /* @__PURE__ */ new Set();
let parentCids = cids.reduce((acc, cid) => { let childrenCids = /* @__PURE__ */ new Set();
let selector = `[${PHX_COMPONENT}="${cid}"] [${PHX_COMPONENT}]`; cids.forEach((cid) => {
this.filterWithinSameLiveView(this.all(node, selector), node).map((el) => parseInt(el.getAttribute(PHX_COMPONENT))).forEach((childCID) => acc.delete(childCID)); this.filterWithinSameLiveView(this.all(node, `[${PHX_COMPONENT}="${cid}"]`), node).forEach((parent) => {
return acc; parentCids.add(cid);
}, initial); this.all(parent, `[${PHX_COMPONENT}]`).map((el) => parseInt(el.getAttribute(PHX_COMPONENT))).forEach((childCID) => childrenCids.add(childCID));
return parentCids.size === 0 ? new Set(cids) : parentCids; });
});
childrenCids.forEach((childCid) => parentCids.delete(childCid));
return parentCids;
}, },
filterWithinSameLiveView(nodes, parent) { filterWithinSameLiveView(nodes, parent) {
if (parent.querySelector(PHX_VIEW_SELECTOR)) { if (parent.querySelector(PHX_VIEW_SELECTOR)) {
@ -4918,7 +4921,7 @@ removing illegal node: "${(childNode.outerHTML || childNode.nodeValue).trim()}"
let phxChildrenAdded = false; let phxChildrenAdded = false;
if (this.rendered.isComponentOnlyDiff(diff)) { if (this.rendered.isComponentOnlyDiff(diff)) {
this.liveSocket.time("component patch complete", () => { this.liveSocket.time("component patch complete", () => {
let parentCids = dom_default.findParentCIDs(this.el, this.rendered.componentCIDs(diff)); let parentCids = dom_default.findExistingParentCIDs(this.el, this.rendered.componentCIDs(diff));
parentCids.forEach((parentCID) => { parentCids.forEach((parentCID) => {
if (this.componentPatch(this.rendered.getComponent(diff, parentCID), parentCID)) { if (this.componentPatch(this.rendered.getComponent(diff, parentCID), parentCID)) {
phxChildrenAdded = true; phxChildrenAdded = true;
@ -6569,13 +6572,13 @@ removing illegal node: "${(childNode.outerHTML || childNode.nodeValue).trim()}"
document.cookie = "actor_resource=" + payload.resource + ";path=/"; document.cookie = "actor_resource=" + payload.resource + ";path=/";
document.cookie = "actor_primary_key=" + payload.primary_key + ";path=/"; document.cookie = "actor_primary_key=" + payload.primary_key + ";path=/";
document.cookie = "actor_action=" + payload.action + ";path=/"; document.cookie = "actor_action=" + payload.action + ";path=/";
document.cookie = "actor_api=" + payload.api + ";path=/"; document.cookie = "actor_domain=" + payload.domain + ";path=/";
}); });
this.handleEvent("clear_actor", () => { this.handleEvent("clear_actor", () => {
document.cookie = "actor_resource=;path=/"; document.cookie = "actor_resource=;path=/";
document.cookie = "actor_primary_key=;path=/"; document.cookie = "actor_primary_key=;path=/";
document.cookie = "actor_action;path=/"; document.cookie = "actor_action;path=/";
document.cookie = "actor_api=;path=/"; document.cookie = "actor_domain=;path=/";
document.cookie = "actor_authorizing=false;path=/"; document.cookie = "actor_authorizing=false;path=/";
document.cookie = "actor_paused=true;path=/"; document.cookie = "actor_paused=true;path=/";
}); });
@ -6623,7 +6626,7 @@ removing illegal node: "${(childNode.outerHTML || childNode.nodeValue).trim()}"
actor_resource: getCookie("actor_resource"), actor_resource: getCookie("actor_resource"),
actor_primary_key: getCookie("actor_primary_key"), actor_primary_key: getCookie("actor_primary_key"),
actor_action: getCookie("actor_action"), actor_action: getCookie("actor_action"),
actor_api: getCookie("actor_api"), actor_domain: getCookie("actor_domain"),
actor_authorizing: getCookie("actor_authorizing"), actor_authorizing: getCookie("actor_authorizing"),
actor_paused: getCookie("actor_paused") actor_paused: getCookie("actor_paused")
}; };

View file

@ -1,7 +1,7 @@
defmodule AshAdmin.Test.Post do defmodule AshAdmin.Test.Post do
@moduledoc false @moduledoc false
use Ash.Resource, use Ash.Resource,
domain: Demo.Tickets.Domain, domain: AshAdmin.Test.Domain,
data_layer: Ash.DataLayer.Ets data_layer: Ash.DataLayer.Ets
attributes do attributes do
@ -9,7 +9,7 @@ defmodule AshAdmin.Test.Post do
attribute :body, :string do attribute :body, :string do
allow_nil?(false) allow_nil?(false)
public? true public?(true)
end end
end end
end end