Packages
ash_admin
0.1.0
1.1.0
1.0.0-rc.0
0.14.0
0.13.26
0.13.25
0.13.24
0.13.23
0.13.22
0.13.21
0.13.20
0.13.19
0.13.18
0.13.17
0.13.16
0.13.15
0.13.14
0.13.13
0.13.12
0.13.11
0.13.10
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.11
0.11.10
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.12
0.10.11
0.10.10
retired
0.10.10-rc.1
0.10.10-rc.0
0.10.9
0.10.8
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0-rc.2
0.6.0-rc.1
0.6.0-rc.0
0.5.2
0.5.1-rc.0
0.5.0
0.4.5-rc.0
0.4.4
0.4.2
0.4.0
0.3.0-rc.0
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16-rc.1
0.2.16-rc.0
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.1
0.1.6
0.1.5
0.1.3
0.1.2
0.1.0
A super-admin UI for Ash Framework, built with Phoenix LiveView.
Current section
Files
Jump to
Current section
Files
lib/ash_admin/components/resource/resource.ex
defmodule AshAdmin.Components.Resource do
@moduledoc false
use Surface.LiveComponent
require Ash.Query
alias AshAdmin.Components.Resource.{Show, Form, Info, Nav, DataTable}
# prop hide_filter, :boolean, default: true
prop(resource, :any, required: true)
prop(api, :any, required: true)
prop(tab, :string, required: true)
prop(action, :any)
prop(actor, :any, required: true)
prop(set_actor, :event, required: true)
prop(authorizing, :boolean, required: true)
prop(tenant, :string, required: true)
prop(url_path, :string, default: "")
prop(params, :map, default: %{})
prop(primary_key, :any, default: nil)
prop(record, :any, default: nil)
prop(table, :any, default: nil)
prop(tables, :any, default: nil)
data(filter_open, :boolean, default: false)
slot(default)
def render(assigns) do
~H"""
<div class="content-center h-screen">
<Nav
resource={{ @resource }}
api={{ @api }}
tab={{ @tab }}
action={{ @action }}
table={{ @table }}
/>
<div class="mx-24 relative grid grid-cols-1 justify-items-center">
</div>
<slot />
<div :if={{ @record && match?({:ok, record} when not is_nil(record), @record) && @tab == "update" }}>
{{ {:ok, record} = @record
nil }}
<Form
type={{ :update }}
record={{ record }}
resource={{ @resource }}
action={{ @action }}
api={{ @api }}
id={{ update_id(@resource) }}
actor={{ @actor }}
set_actor={{ @set_actor }}
authorizing={{ @authorizing }}
tenant={{ @tenant }}
table={{ @table }}
tables={{ @tables }}
/>
</div>
<div :if={{ @record && match?({:ok, record} when not is_nil(record), @record) && @tab == "destroy" }}>
{{ {:ok, record} = @record
nil }}
<Form
type={{ :destroy }}
record={{ record }}
resource={{ @resource }}
action={{ @action }}
set_actor={{ @set_actor }}
api={{ @api }}
id={{ destroy_id(@resource) }}
actor={{ @actor }}
authorizing={{ @authorizing }}
tenant={{ @tenant }}
table={{ @table }}
tables={{ @tables }}
/>
</div>
<Show
:if={{ @tab == "read" && match?({:ok, %_{}}, @record) }}
resource={{ @resource }}
api={{ @api }}
id={{ show_id(@resource) }}
record={{ unwrap(@record) }}
actor={{ @actor }}
authorizing={{ @authorizing }}
tenant={{ @tenant }}
set_actor={{ @set_actor }}
table={{ @table }}
/>
<Info :if={{ @tab == "info" }} resource={{ @resource }} api={{ @api }} />
<Form
:if={{ @tab == "create" }}
type={{ :create }}
resource={{ @resource }}
api={{ @api }}
set_actor={{ @set_actor }}
action={{ @action }}
id={{ create_id(@resource) }}
actor={{ @actor }}
authorizing={{ @authorizing }}
tenant={{ @tenant }}
table={{ @table }}
tables={{ @tables }}
/>
<DataTable
:if={{ @tab == "data" }}
resource={{ @resource }}
action={{ @action }}
actor={{ @actor }}
api={{ @api }}
url_path={{ @url_path }}
params={{ @params }}
set_actor={{ @set_actor }}
id={{ data_table_id(@resource) }}
authorizing={{ @authorizing }}
table={{ @table }}
tables={{ @tables }}
/>
</div>
"""
end
defp unwrap({:ok, val}), do: val
defp data_table_id(resource) do
"#{resource}_table"
end
defp create_id(resource) do
"#{resource}_create"
end
defp update_id(resource) do
"#{resource}_update"
end
defp destroy_id(resource) do
"#{resource}_destroy"
end
defp show_id(resource) do
"#{resource}_show"
end
end