Sort Collection Via Event Handler: Difference between revisions
From ElixirBlocks
(Created page with "<source> defmodule AppWeb.SandboxLive do use AppWeb, :live_view alias App.TestBeds alias App.TestBeds.TestBed alias App.Repo import Ecto.Query def mount(_params, _session, socket) do testbeds = Repo.all(from(t in TestBed, order_by: t.name)) {:ok, assign(socket, testbeds: testbeds, sort_by: :name, sort_direction: :asc)} end def handle_event("toggle_sort_by_name", _params, socket) do current_direction = socket.assigns.sort_direction new_...") |
No edit summary |
||
Line 1: | Line 1: | ||
<source> | <source> | ||
defmodule AppWeb.SandboxLive do | defmodule AppWeb.SandboxLive do | ||
use AppWeb, :live_view | use AppWeb, :live_view | ||
Line 15: | Line 14: | ||
def handle_event("toggle_sort_by_name", _params, socket) do | def handle_event("toggle_sort_by_name", _params, socket) do | ||
current_direction = socket.assigns.sort_direction | current_direction = socket.assigns.sort_direction | ||
new_direction = | |||
new_direction = case current_direction do | |||
:asc -> :desc | |||
:desc -> :asc | |||
end | |||
# Build query based on sort direction | # Build query based on sort direction | ||
Line 56: | Line 60: | ||
end | end | ||
</source> | </source> |
Latest revision as of 20:17, 17 April 2025
defmodule AppWeb.SandboxLive do use AppWeb, :live_view alias App.TestBeds alias App.TestBeds.TestBed alias App.Repo import Ecto.Query def mount(_params, _session, socket) do testbeds = Repo.all(from(t in TestBed, order_by: t.name)) {:ok, assign(socket, testbeds: testbeds, sort_by: :name, sort_direction: :asc)} end def handle_event("toggle_sort_by_name", _params, socket) do current_direction = socket.assigns.sort_direction new_direction = case current_direction do :asc -> :desc :desc -> :asc end # Build query based on sort direction query = case new_direction do :asc -> from(t in TestBed, order_by: t.name) :desc -> from(t in TestBed, order_by: [desc: t.name]) end testbeds = Repo.all(query) {:noreply, assign(socket, testbeds: testbeds, sort_by: :name, sort_direction: new_direction)} end def render(assigns) do ~H""" <div> <!-- Name header with click to toggle sort --> <button phx-click="toggle_sort_by_name"> Sort by Name <%= if @sort_by == :name do %> <%= if @sort_direction == :asc do %> ▲ <% else %> ▼ <% end %> <% end %> </button> </div> <ul> <%= for testbed <- @testbeds do %> <li><%= testbed.name %></li> <% end %> </ul> """ end end