defmodule ChesstrainerWeb.EndgameLive.Index do use ChesstrainerWeb, :live_view alias Chesstrainer.Endgames @impl true def render(assigns) do ~H""" <.header> Listing Endgames <:actions> <.button variant="primary" navigate={~p"/admin/endgames/new"}> <.icon name="hero-plus" /> New Endgame <.table id="endgames" rows={@streams.endgames} row_click={fn {_id, endgame} -> JS.navigate(~p"/admin/endgames/#{endgame}") end} > <:col :let={{_id, endgame}} label="Fen">{endgame.fen} <:col :let={{_id, endgame}} label="Color">{endgame.color} <:col :let={{_id, endgame}} label="Key">{endgame.key} <:col :let={{_id, endgame}} label="Rating">{endgame.rating} <:col :let={{_id, endgame}} label="Message">{endgame.message} <:col :let={{_id, endgame}} label="Notes">{endgame.notes} <:col :let={{_id, endgame}} label="Result">{endgame.result} <:col :let={{_id, endgame}} label="Attempted">{endgame.times_attempted} <:col :let={{_id, endgame}} label="Solved">{endgame.times_solved} <:action :let={{_id, endgame}}>
<.link navigate={~p"/admin/endgames/#{endgame}"}>Show
<.link navigate={~p"/admin/endgames/#{endgame}/edit"}>Edit <:action :let={{id, endgame}}> <.link phx-click={JS.push("delete", value: %{id: endgame.id}) |> hide("##{id}")} data-confirm="Are you sure?" > Delete
""" end @impl true def mount(_params, _session, socket) do {:ok, socket |> assign(:page_title, "Listing Endgames") |> stream(:endgames, list_endgames())} end @impl true def handle_event("delete", %{"id" => id}, socket) do endgame = Endgames.get_endgame!(id) {:ok, _} = Endgames.delete_endgame(endgame) {:noreply, stream_delete(socket, :endgames, endgame)} end defp list_endgames() do Endgames.list_endgames() end end