defmodule MtgWheelWeb.WheelLive do use MtgWheelWeb, :live_view alias MtgWheel.DeckGenerator @spin_duration_ms 3000 @impl true def mount(_params, _session, socket) do {:ok, assign(socket, page_title: "MTG Deck Wheel", spinning: false, result: nil, budgets: DeckGenerator.budgets(), archetypes: DeckGenerator.archetypes(), subthemes: DeckGenerator.subthemes(), color_combos: DeckGenerator.color_combos() )} end @impl true def handle_event("spin", _params, socket) do result = DeckGenerator.generate() Process.send_after(self(), :stop_spin, @spin_duration_ms) {:noreply, assign(socket, spinning: true, result: result)} end @impl true def handle_info(:stop_spin, socket) do {:noreply, assign(socket, spinning: false)} end @impl true def render(assigns) do ~H"""

MTG Deck Wheel

<.wheel label="Budget" items={Enum.map(@budgets, &"$#{&1}")} result={@result && @result.budget} spinning={@spinning} /> <.wheel label="Archetype" items={@archetypes} result={@result && @result.archetype} spinning={@spinning} /> <.wheel label="Subtheme" items={@subthemes} result={@result && @result.subtheme} spinning={@spinning} /> <.wheel label="Colors" items={@color_combos} result={@result && @result.colors} spinning={@spinning} />

Your Deck

<.stat label="Budget" value={@result && @result.budget} /> <.stat label="Archetype" value={@result && @result.archetype} /> <.stat label="Subtheme" value={@result && @result.subtheme} /> <.stat label="Colors" value={@result && @result.colors} />
""" end defp wheel(assigns) do ~H"""
<%= @label %>
<%= for _ <- 1..5 do %> <%= for item <- @items do %>
<%= item %>
<% end %> <% end %>
<%= @result %>
""" end defp stat(assigns) do ~H"""
<%= @label %>
<%= @value %>
""" end end