Packages
ash_phoenix
2.3.1
2.3.24
2.3.23
2.3.22
2.3.21
2.3.20
2.3.19
2.3.18
2.3.17
2.3.16
2.3.15
2.3.14
2.3.13
2.3.12
2.3.11
2.3.10
2.3.9
2.3.8
2.3.7
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.0
2.1.26
2.1.25
2.1.24
2.1.23
2.1.22
2.1.21
2.1.20
2.1.19
2.1.18
2.1.17
2.1.16
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.8
2.0.0-rc.7
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.3.7
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.26
1.2.25
1.2.24
1.2.23
1.2.22
1.2.21
1.2.20
1.2.19
1.2.18
1.2.17
1.2.16
1.2.15
1.2.14
1.2.13
1.2.12
1.2.11
1.2.10
1.2.9
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.1.0-rc.3
1.1.0-rc.2
1.1.0-rc.1
1.1.0-rc.0
1.0.0-rc.1
1.0.0-rc.0
1.0.0-pre.2
1.0.0-pre.1
1.0.0-pre.0
0.7.7
0.7.6-rc.0
0.7.5
0.7.4
0.7.3
0.7.2-rc.2
0.7.2-rc.1
0.7.2-rc.0
0.7.1
0.7.0
0.6.0-rc.7
0.6.0-rc.6
0.6.0-rc.5
0.6.0-rc.4
0.6.0-rc.3
0.6.0-rc.2
0.6.0-rc.1
0.6.0-rc.0
0.5.19-rc.2
0.5.19-rc.1
0.5.19-rc.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.24
0.4.23
0.4.23-rc.1
0.4.23-rc.0
0.4.22-rc2
0.4.22-rc1
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Utilities for integrating Ash and Phoenix
Current section
Files
Jump to
Current section
Files
priv/templates/ash_phoenix.gen.live/index.ex.eex
defmodule <%= inspect Module.concat(@web_module, @resource_alias) %>Live.Index do
use <%= @web_module %>, :live_view
@impl true
def render(assigns) do
~H"""
<Layouts.app flash={@flash}>
<.header>
Listing <%= @resource_human_plural %>
<:actions>
<.button variant="primary" navigate={~p"<%= @route_prefix %>/new"}>
<.icon name="hero-plus" /> New <%= @resource_human_singular %>
</.button>
</:actions>
</.header>
<.table
id="<%= @resource_plural %>"
rows={@streams.<%= @resource_plural %>}
row_click={fn {_<%= @pkey %>, <%= @resource_singular %>} -> JS.navigate(~p"<%= @route_prefix %>/#{<%= @resource_singular %>}") end}
>
<%= for %{name: name} <- @attrs do %>
<:col :let={{_<%= @pkey %>, <%= @resource_singular %>}} label="<%= Phoenix.Naming.humanize(Atom.to_string(name)) %>"><%%= <%= @resource_singular %>.<%= name %> %></:col>
<% end %>
<:action :let={{_<%= @pkey %>, <%= @resource_singular %>}}>
<div class="sr-only">
<.link navigate={~p"<%= @route_prefix %>/#{<%= @resource_singular %>}"}>Show</.link>
</div>
<%= if @update_action do %>
<.link navigate={~p"<%= @route_prefix %>/#{<%= @resource_singular %>}/edit"}>Edit</.link>
<% end %>
</:action>
<%= if @destroy do %>
<:action :let={{<%= @pkey %>, <%= @resource_singular %>}}>
<.link
phx-click={JS.push("delete", value: %{<%= @pkey %>: <%= @resource_singular %>.<%= @pkey %>}) |> hide("##{<%= @pkey %>}")}
data-confirm="Are you sure?"
>
Delete
</.link>
</:action>
<% end %>
</.table>
</div>
"""
end
@impl true
def mount(_params, _session, socket) do
<%= if @actor do %>
{:ok,
socket
<%= if @actor do %>
|> stream(:<%= @resource_plural %>, Ash.read!(<%= @resource %>, actor: socket.assigns[:<%= @actor %>]))
<% else %>
|> stream(:<%= @resource_plural %>, Ash.read!(<%= @resource %>))
<% end %>
|> assign_new(:<%= @actor %>, fn -> nil end)}
<% else %>
{:ok, stream(socket, :<%= @resource_plural %>, Ash.read!(<%= @resource %>))}
<% end %>
end
@impl true
def handle_params(params, _url, socket) do
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
end
<%= if @update_action do %>
defp apply_action(socket, :edit, %{"<%= @pkey %>" => <%= @pkey %>}) do
socket
|> assign(:page_title, "Edit <%= @resource_human_singular %>")
|> assign(:<%= @resource_singular %>, <%= @get_by_pkey %>)
end
<% end %>
<%= if @create_action do %>
defp apply_action(socket, :new, _params) do
socket
|> assign(:page_title, "New <%= @resource_human_singular %>")
<%= if @update_action do %>
|> assign(:<%= @resource_singular %>, nil)
<% end %>
end
<% end %>
defp apply_action(socket, :index, _params) do
socket
|> assign(:page_title, "Listing <%= @resource_human_plural %>")
<%= if @update_action || @create_action do %>
|> assign(:<%= @resource_singular %>, nil)
<% end %>
end
<%= if @create_action || @update_action do %>
@impl true
def handle_info({<%= inspect Module.concat(@web_module, @resource_alias) %>Live.FormComponent, {:saved, <%= @resource_singular %>}}, socket) do
{:noreply, stream_insert(socket, :<%= @resource_plural %>, <%= @resource_singular %>)}
end
<% end %>
<%= if @destroy do %>
@impl true
def handle_event("delete", %{"<%= @pkey %>" => <%= @pkey %>}, socket) do
<%= @destroy %>
{:noreply, stream_delete(socket, :<%= @resource_plural %>, <%= @resource_singular %>)}
end
<% end %>
end