Packages
ash_phoenix
2.1.8
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"""
<.header>
Listing <%= @resource_human_plural %>
<:actions>
<.link patch={~p"<%= @route_prefix %>/new"}>
<.button>New <%= @resource_human_singular %></.button>
</.link>
</: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 patch={~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>
<%= cond do %>
<% @create_action && @update_action -> %>
<.modal :if={@live_action in [:new, :edit]} id="<%= @resource_singular %>-modal" show on_cancel={JS.patch(~p"<%= @route_prefix %>")}>
<.live_component
module={<%= inspect Module.concat(@web_module, @resource_alias) %>Live.FormComponent}
id={(@<%= @resource_singular %> && @<%= @resource_singular%>.<%= @pkey %>) || :new}
title={@page_title}
<%= if @actor do %>
<%= @actor %>={@<%= @actor %>}
<% end %>
action={@live_action}
<%= @resource_singular %>={@<%= @resource_singular %>}
patch={~p"<%= @route_prefix %>"}
/>
</.modal>
<% @create_action -> %>
<.modal :if={@live_action == :new} id="<%= @resource_singular %>-modal" show on_cancel={JS.patch(~p"<%= @route_prefix %>")}>
<.live_component
module={<%= inspect Module.concat(@web_module, @resource_alias) %>Live.FormComponent}
<%= if @actor do %>
<%= @actor %>={@<%= @actor %>}
<% end %>
id={:new}
title={@page_title}
action={@live_action}
<%= @resource_singular %>={@<%= @resource_singular %>}
patch={~p"<%= @route_prefix %>"}
/>
</.modal>
<% @update_action -> %>
<.modal :if={@live_action == :edit} id="<%= @resource_singular %>-modal" show on_cancel={JS.patch(~p"<%= @route_prefix %>")}>
<.live_component
module={<%= inspect Module.concat(@web_module, @resource_alias) %>Live.FormComponent}
id={@<%= @resource_singular %>.<%= @pkey %>}
<%= if @actor do %>
<%= @actor %>={@<%= @actor %>}
<% end %>
title={@page_title}
action={@live_action}
<%= @resource_singular %>={@<%= @resource_singular %>}
patch={~p"<%= @route_prefix %>"}
/>
</.modal>
<% true -> %>
<% nil %>
<% end %>
"""
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