add metadata to summoner spell
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
defmodule LolAnalyticsWeb.ChampionComponents.SummonerSpells.SummonerSpell do
|
||||
defstruct [:id, :win_rate, :total_games]
|
||||
|
||||
@type t :: %{
|
||||
id: integer(),
|
||||
win_rate: float(),
|
||||
total_games: integer()
|
||||
}
|
||||
end
|
||||
|
||||
defmodule LolAnalyticsWeb.ChampionComponents.SummonerSpells.Props do
|
||||
alias LolAnalyticsWeb.ChampionComponents.SummonerSpells.SummonerSpell
|
||||
|
||||
defstruct spell1: %SummonerSpell{},
|
||||
spell2: %SummonerSpell{}
|
||||
|
||||
@type t :: %{
|
||||
spell1: SummonerSpell.t(),
|
||||
spell2: SummonerSpell.t()
|
||||
}
|
||||
end
|
||||
|
||||
defmodule LolAnalyticsWeb.ChampionComponents.SummonerSpells do
|
||||
alias LolAnalyticsWeb.ChampionComponents.SummonerSpells.Props
|
||||
use Phoenix.Component
|
||||
|
||||
attr :spells, Props, default: %Props{}
|
||||
|
||||
def summoner_spells(assigns) do
|
||||
~H"""
|
||||
<div>
|
||||
Spells
|
||||
</div>
|
||||
"""
|
||||
end
|
||||
end
|
||||
@@ -1,3 +1,3 @@
|
||||
defmodule LolAnalyticsWeb.ChampionLive.Champion do
|
||||
defmodule LolAnalyticsWeb.ChampionLive.ChampionSummary do
|
||||
defstruct [:id, :win_rate, :image, :name, :team_position, :wins, :total_games]
|
||||
end
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
defmodule LolAnalyticsWeb.ChampionLive.Mapper do
|
||||
alias LolAnalyticsWeb.ChampionLive.Champion
|
||||
alias LolAnalyticsWeb.ChampionLive.ChampionSummary
|
||||
|
||||
def map_champs(champs) do
|
||||
champs
|
||||
|> Enum.map(fn champ ->
|
||||
%{
|
||||
Kernel.struct!(%Champion{}, champ)
|
||||
Kernel.struct!(%ChampionSummary{}, champ)
|
||||
| win_rate: :erlang.float_to_binary(champ.win_rate, decimals: 2)
|
||||
}
|
||||
end)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
defmodule LoLAnalyticsWeb.ChampionLive.Show do
|
||||
use LoLAnalyticsWeb, :live_view
|
||||
|
||||
import LolAnalyticsWeb.ChampionComponents.SummonerSpells
|
||||
|
||||
@impl true
|
||||
def mount(_params, _session, socket) do
|
||||
{:ok, socket}
|
||||
@@ -11,7 +13,23 @@ defmodule LoLAnalyticsWeb.ChampionLive.Show do
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:page_title, page_title(socket.assigns.live_action))
|
||||
|> assign(:champion, %{id: id})}
|
||||
|> assign(:champion, %{id: id})
|
||||
|> assign(:summoner_spells, %{summoner_spells: load_summoner_spells()})}
|
||||
end
|
||||
|
||||
defp load_summoner_spells() do
|
||||
%LolAnalyticsWeb.ChampionComponents.SummonerSpells.Props{
|
||||
spell1: %LolAnalyticsWeb.ChampionComponents.SummonerSpells.SummonerSpell{
|
||||
id: 1,
|
||||
win_rate: 51.7,
|
||||
total_games: 400
|
||||
},
|
||||
spell2: %LolAnalyticsWeb.ChampionComponents.SummonerSpells.SummonerSpell{
|
||||
id: 2,
|
||||
win_rate: 51.7,
|
||||
total_games: 500
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
defp page_title(:show), do: "Show Champion"
|
||||
|
||||
@@ -4,4 +4,8 @@
|
||||
<:actions></:actions>
|
||||
</.header>
|
||||
|
||||
<.back navigate={~p"/champions"}>Back to champions</.back>
|
||||
<.summoner_spells spells={@summoner_spells} />
|
||||
|
||||
<.back navigate={~p"/champions"}>
|
||||
Back to champions
|
||||
</.back>
|
||||
|
||||
@@ -3,5 +3,3 @@
|
||||
<:subtitle>This is a role record from your database.</:subtitle>
|
||||
<:actions></:actions>
|
||||
</.header>
|
||||
|
||||
<.back navigate={~p"/roles"}>Back to roles</.back>
|
||||
|
||||
Reference in New Issue
Block a user