View Source List
<List>
Presents rows of elements.
Overview
Each element inside the list is given its own row.
<List>
<%= for sport <- @sports do %>
<Text id={sport.id}><%= sport.name %></Text>
<% end %>
</List>Edit Mode
Use an <EditButton> to enter edit mode. This will allow rows to be moved, selected, and deleted.
<EditButton />
<List> ... </List>Selecting Rows
Use the selection attribute to set the selected row(s).
<List selection={@selected_sports} phx-change="selection-changed">
...
</List>Deleting and Moving Rows
Set an event name for the phx-delete attribute to enable the system delete action.
An event is sent with the index of the item to delete.
<List phx-delete="on_delete">
...
</List>defmodule MyAppWeb.SportsLive do
def handle_event("on_delete", %{ "index" => index }, socket) do
{:noreply, assign(socket, :items, List.delete_at(socket.assigns.items, index))}
end
endUse the phx-move event to enable the system move actions.
An event is sent with the index of the item to move and its destination index.
<List phx-move="on_move">
...
</List>defmodule MyAppWeb.SportsLive do
def handle_event("on_move", %{ "index" => index, "destination" => destination }, socket) do
{element, list} = List.pop_at(socket.assigns.sports, index)
moved = List.insert_at(list, (if destination > index, do: destination - 1, else: destination), element)
{:noreply, assign(socket, :sports, moved)}
end
endAttributes
Events
SwiftUI Documentation
See SwiftUI.List for more details on this View.
References
phx-delete
Event sent when a row is deleted.
Discussion
An event is sent with the index of the item to delete.
<List phx-delete="on_delete">
...
</List>defmodule MyAppWeb.SportsLive do
def handle_event("on_delete", %{ "index" => index }, socket) do
{:noreply, assign(socket, :items, List.delete_at(socket.assigns.items, index))}
end
end
phx-move
Event sent when a row is moved.
Discussion
An event is sent with the index of the item to move and its destination index.
<List phx-move="on_move">
...
</List>defmodule MyAppWeb.SportsLive do
def handle_event("on_move", %{ "index" => index, "destination" => destination }, socket) do
{element, list} = List.pop_at(socket.assigns.sports, index)
moved = List.insert_at(list, (if destination > index, do: destination - 1, else: destination), element)
{:noreply, assign(socket, :sports, moved)}
end
end
selection
Synchronizes the selected rows with the server.
Discussion
To allow an arbitrary number of rows to be selected, use the List type for the value. Use an empty list as the default value to start with no selection.
To only allow a single selection, use the String type for the value. Use nil as the default value to start with no selection.