diff --git a/main.py b/main.py index 4189d79..55314ff 100644 --- a/main.py +++ b/main.py @@ -55,7 +55,7 @@ def add_players(players: list[Player]): def list_players(): with Session(engine) as session: - statement = select(Player).order_by(Player.name) + statement = select(Player).order_by(Player.display_name) return session.exec(statement).fetchall() diff --git a/src/Rankings.tsx b/src/Rankings.tsx index 306c07c..bc188d5 100644 --- a/src/Rankings.tsx +++ b/src/Rankings.tsx @@ -1,12 +1,7 @@ -import { Dispatch, SetStateAction, useEffect, useMemo, useState } from "react"; +import { useEffect, useState } from "react"; import { ReactSortable, ReactSortableProps } from "react-sortablejs"; -import { apiAuth } from "./api"; - -interface Player { - id: number; - name: string; - number: string | null; -} +import { apiAuth, User } from "./api"; +import { useSession } from "./Session"; type PlayerListProps = Partial> & { orderedList?: boolean; @@ -17,116 +12,44 @@ function PlayerList(props: PlayerListProps) { {props.list?.map((item, index) => (
- {props.orderedList ? index + 1 + ". " + item.name : item.name} + {props.orderedList + ? index + 1 + ". " + item.display_name + : item.display_name}
))}
); } -interface SelectUserProps { - user: Player[]; - setUser: Dispatch>; - players: Player[]; - setPlayers: Dispatch>; -} - -export function SelectUser({ - user, - setUser, - players, - setPlayers, -}: SelectUserProps) { - return ( - <> -
- {user.length < 1 ? ( - <> - your name? -
drag your name here - - ) : ( - <> - { - setUser([]); - }} - > - {" โœ•"} - - - )} - -
- {user.length < 1 && ( -
-

๐Ÿฅ๐Ÿƒ

- - {players.length < 1 ? ( - - ) : ( - players.map((item, _) => ( -
-
- {item.name} -
-
- )) - )} -
-
- )} - - ); -} - interface PlayerInfoProps { - user: Player[]; - players: Player[]; + user: User; + players: User[]; } export function Chemistry({ user, players }: PlayerInfoProps) { - const index = players.indexOf(user[0]); + const index = players.indexOf(user); var otherPlayers = players.slice(); otherPlayers.splice(index, 1); - const [playersLeft, setPlayersLeft] = useState([]); - const [playersMiddle, setPlayersMiddle] = useState(otherPlayers); - const [playersRight, setPlayersRight] = useState([]); + const [playersLeft, setPlayersLeft] = useState([]); + const [playersMiddle, setPlayersMiddle] = useState(otherPlayers); + const [playersRight, setPlayersRight] = useState([]); + + useEffect(() => { + setPlayersMiddle(otherPlayers); + }, [players]); const [dialog, setDialog] = useState("dialog"); async function handleSubmit() { const dialog = document.querySelector("dialog[id='ChemistryDialog']"); (dialog as HTMLDialogElement).showModal(); - if (user.length < 1) { - setDialog("who are you?"); - } else { - setDialog("sending..."); - let _user = user.map(({ name }) => name)[0]; - let left = playersLeft.map(({ name }) => name); - let middle = playersMiddle.map(({ name }) => name); - let right = playersRight.map(({ name }) => name); - const data = { user: _user, hate: left, undecided: middle, love: right }; - const response = await apiAuth("chemistry", data); - response.ok ? setDialog("success!") : setDialog("try sending again"); - } + setDialog("sending..."); + let left = playersLeft.map(({ display_name }) => display_name); + let middle = playersMiddle.map(({ display_name }) => display_name); + let right = playersRight.map(({ display_name }) => display_name); + const data = { user: user, hate: left, undecided: middle, love: right }; + const response = await apiAuth("chemistry", data); + response.ok ? setDialog("success!") : setDialog("try sending again"); } return ( @@ -188,24 +111,23 @@ export function Chemistry({ user, players }: PlayerInfoProps) { } export function MVP({ user, players }: PlayerInfoProps) { - const [availablePlayers, setAvailablePlayers] = useState(players); - const [rankedPlayers, setRankedPlayers] = useState([]); + const [availablePlayers, setAvailablePlayers] = useState(players); + const [rankedPlayers, setRankedPlayers] = useState([]); const [dialog, setDialog] = useState("dialog"); + useEffect(() => { + setAvailablePlayers(players); + }, [players]); + async function handleSubmit() { const dialog = document.querySelector("dialog[id='MVPDialog']"); (dialog as HTMLDialogElement).showModal(); - if (user.length < 1) { - setDialog("who are you?"); - } else { - setDialog("sending..."); - let _user = user.map(({ name }) => name)[0]; - let mvps = rankedPlayers.map(({ name }) => name); - const data = { user: _user, mvps: mvps }; - const response = await apiAuth("mvps", data); - response.ok ? setDialog("success!") : setDialog("try sending again"); - } + setDialog("sending..."); + let mvps = rankedPlayers.map(({ display_name }) => display_name); + const data = { user: user, mvps: mvps }; + const response = await apiAuth("mvps", data); + response.ok ? setDialog("success!") : setDialog("try sending again"); } return ( @@ -267,21 +189,25 @@ export function MVP({ user, players }: PlayerInfoProps) { } export default function Rankings() { - const [user, setUser] = useState([]); - const [players, setPlayers] = useState([]); + const { user } = useSession(); + const [players, setPlayers] = useState([]); const [openTab, setOpenTab] = useState("Chemistry"); async function loadPlayers() { - const data = await apiAuth("player/list", null, "GET"); - setPlayers(data as Player[]); + try { + const data = await apiAuth("player/list", null, "GET"); + setPlayers(data as User[]); + } catch (error) { + console.error(error); + } } - useMemo(() => { + useEffect(() => { loadPlayers(); }, []); useEffect(() => { - user.length === 1 && openPage(openTab, "aliceblue"); + openPage(openTab, "aliceblue"); }, [user]); function openPage(pageName: string, color: string) { @@ -309,42 +235,39 @@ export default function Rankings() { setOpenTab(pageName); } - return ( + return user ? ( <> - - {user.length === 1 && ( - <> -
- - -
+
+ + +
- - assign as many or as few players as you want -
- and don't forget to submit (๐Ÿ’พ) when you're done :) -
+ + assign as many or as few players as you want +
+ and don't forget to submit (๐Ÿ’พ) when you're done :) +
-
- -
-
- -
- - )} +
+ +
+
+ +
+ ) : ( + not logged in. refresh the page... ); }