import { Dispatch, SetStateAction, useEffect, useMemo, useState } from "react"; import { ReactSortable, ReactSortableProps } from "react-sortablejs"; import api, { baseUrl } from "./api"; interface Player { id: number; name: string; number: string | null; } type PlayerListProps = Partial> & { orderedList?: boolean; }; function PlayerList(props: PlayerListProps) { return ( {props.list?.map((item, index) => (
{props.orderedList ? index + 1 + ". " + item.name : item.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[]; } export function Chemistry({ user, players }: PlayerInfoProps) { const index = players.indexOf(user[0]); var otherPlayers = players.slice(); otherPlayers.splice(index, 1); const [playersLeft, setPlayersLeft] = useState([]); const [playersMiddle, setPlayersMiddle] = useState(otherPlayers); const [playersRight, setPlayersRight] = useState([]); 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 api("chemistry", data); response.ok ? setDialog("success!") : setDialog("try sending again"); } } return ( <>

๐Ÿ˜ฌ

{playersLeft.length < 1 && ( drag people here that you'd rather not play with )}

๐Ÿคท

๐Ÿ˜

{playersRight.length < 1 && ( drag people here that you love playing with from best to ... ok )}
{ event.currentTarget.close(); }} > {dialog} ); } export function MVP({ user, players }: PlayerInfoProps) { const [availablePlayers, setAvailablePlayers] = useState(players); const [rankedPlayers, setRankedPlayers] = useState([]); const [dialog, setDialog] = useState("dialog"); 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 api("mvps", data); response.ok ? setDialog("success!") : setDialog("try sending again"); } } return ( <>

๐Ÿฅ๐Ÿƒ

{availablePlayers.length < 1 && ( all sorted ๐Ÿ‘ )}

๐Ÿ†

{rankedPlayers.length < 1 && ( carefully place as many of the Most Valuable Players{" "} (according to your humble opinion) in this box )}
{ event.currentTarget.close(); }} > {dialog} ); } export default function Rankings() { const [user, setUser] = useState([]); const [players, setPlayers] = useState([]); const [openTab, setOpenTab] = useState("Chemistry"); async function loadPlayers() { const response = await fetch(`${baseUrl}api/player/list`, { method: "GET", }); const data = await response.json(); setPlayers(data as Player[]); } useMemo(() => { loadPlayers(); }, []); useEffect(() => { user.length === 1 && openPage(openTab, "aliceblue"); }, [user]); function openPage(pageName: string, color: string) { // Hide all elements with class="tabcontent" by default */ var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("tabcontent"); for (i = 0; i < tabcontent.length; i++) { (tabcontent[i] as HTMLElement).style.display = "none"; } // Remove the background color of all tablinks/buttons tablinks = document.getElementsByClassName("tablink"); for (i = 0; i < tablinks.length; i++) { let button = tablinks[i] as HTMLElement; button.style.opacity = "50%"; } // Show the specific tab content (document.getElementById(pageName) as HTMLElement).style.display = "block"; // Add the specific color to the button used to open the tab content let activeButton = document.getElementById( pageName + "Button" ) as HTMLElement; activeButton.style.fontWeight = "bold"; activeButton.style.opacity = "100%"; document.body.style.backgroundColor = color; setOpenTab(pageName); } return ( <> {user.length === 1 && ( <>
assign as many or as few players as you want
and don't forget to submit (๐Ÿ’พ) when you're done :)
)} ); }