exponential-chicken-egg/lib/chicken_egg_web/live/index_live.ex

43 lines
1.0 KiB
Elixir
Raw Normal View History

2023-04-16 21:32:56 +02:00
defmodule ChickenEggWeb.IndexLive do
use ChickenEggWeb, :live_view
alias ChickenEggWeb.ChickenComponents
def render(assigns) do
~H"""
2023-04-19 13:47:14 +02:00
<div class="board relative bg-green-700 w-screen h-screen" phx-window-keyup="boak" phx-key=" ">
2023-04-16 21:32:56 +02:00
<ChickenComponents.chicken x={@chicken.x} y={@chicken.y} />
<div id="chicken-eggs" phx-update="stream">
<div :for={{dom_id, egg} <- @streams.eggs} class="egg" id={dom_id}>
<ChickenComponents.egg x={egg.x} y={egg.y} />
</div>
</div>
</div>
"""
end
def mount(_params, _session, socket) do
eggs = []
{:ok,
socket
2023-04-19 13:47:14 +02:00
|> assign(:chicken, %{x: 42, y: 47})
2023-04-16 21:32:56 +02:00
|> stream(:eggs, eggs)}
end
def handle_event("boak", _params, socket) do
%{x: cx, y: cy} = socket.assigns.chicken
2023-04-19 13:47:14 +02:00
new_chicken = %{x: Enum.random(1..100), y: Enum.random(1..100)}
2023-04-16 21:32:56 +02:00
new_egg =
%{id: "egg#{cx}#{cy}", x: cx, y: cy}
|> IO.inspect()
{:noreply,
socket
|> assign(:chicken, new_chicken)
|> stream_insert(:eggs, new_egg)}
end
end