defmodule ChesstrainerWeb.ChessTestLive do
use ChesstrainerWeb, :live_view
@impl true
def mount(_params, _session, socket) do
{:ok, assign(socket, last_move: "None yet", san: "None yet", move_list: [])}
end
@impl true
def render(assigns) do
~H"""
Chessground LiveView Test
Last Played Move:
{@last_move}
{@san}
{if length(@move_list) == 0 do
"No Moves"
else
Enum.reverse(@move_list) |> Enum.join(", ")
end}
"""
end
@impl true
def handle_event("load_fen", %{"fen" => fen}, socket) do
clean_fen = String.trim(fen)
{:noreply,
socket
|> assign(:last_move, "Position Loaded")
|> assign(:san, "None yet")
|> assign(:move_list, [])
|> push_event("set_fen", %{fen: clean_fen})}
end
@impl true
def handle_event(
"move_played",
%{"from" => from, "to" => to, "fen" => _fen, "san" => san},
socket
) do
current_moves = socket.assigns.move_list
{:noreply,
socket
|> assign(:last_move, "#{from} ➔ #{to}")
|> assign(:san, san)
|> assign(:move_list, [san | current_moves])}
end
end