import React, { useContext, useEffect, useState } from 'react' import { withCookies, useCookies } from 'react-cookie' import { useRouter } from 'next/router' import AppContext from '~context/AppContext' import api from '~utils/api' import Party from '~components/Party' import Button from '~components/Button' interface Props { hash: string } const PartyRoute: React.FC = () => { const router = useRouter() const { party: slug } = router.query const { setEditable: setEditableContext } = useContext(AppContext) const [found, setFound] = useState(false) const [loading, setLoading] = useState(true) const [editable, setEditable] = useState(false) const [characters, setCharacters] = useState>({}) const [weapons, setWeapons] = useState>({}) const [summons, setSummons] = useState>({}) const [mainWeapon, setMainWeapon] = useState() const [mainSummon, setMainSummon] = useState() const [friendSummon, setFriendSummon] = useState() const [partyId, setPartyId] = useState('') const [extra, setExtra] = useState(false) const [cookies, _] = useCookies(['user']) useEffect(() => { async function fetchGrid(shortcode: string) { return api.endpoints.parties.getOne({ id: shortcode }) .then(response => { const party = response.data.party const partyUser = (party.user_id) ? party.user_id : undefined const loggedInUser = (cookies.user) ? cookies.user.user_id : '' if (partyUser != undefined && loggedInUser != undefined && partyUser === loggedInUser) { setEditable(true) setEditableContext(true) } const characters = populateCharacters(party.characters) const weapons = populateWeapons(party.weapons) const summons = populateSummons(party.summons) setExtra(response.data.party.is_extra) setFound(true) setLoading(false) setCharacters(characters) setWeapons(weapons) setSummons(summons) setPartyId(party.id) }) .catch(error => { if (error.response != null) { if (error.response.status == 404) { setFound(false) setLoading(false) } } else { console.error(error) } }) } function populateCharacters(list: [GridCharacter]) { let characters: GridArray = {} list.forEach((object: GridCharacter) => { if (object.position != null) characters[object.position] = object }) return characters } function populateWeapons(list: [GridWeapon]) { let weapons: GridArray = {} list.forEach((object: GridWeapon) => { if (object.mainhand) setMainWeapon(object) else if (!object.mainhand && object.position != null) weapons[object.position] = object }) return weapons } function populateSummons(list: [GridSummon]) { let summons: GridArray = {} list.forEach((object: GridSummon) => { if (object.main) setMainSummon(object) else if (object.friend) setFriendSummon(object) else if (!object.main && !object.friend && object.position != null) summons[object.position] = object }) return summons } const shortcode: string = slug as string if (shortcode) fetchGrid(shortcode) }, [slug, cookies.user, setEditableContext]) function render() { return (
) } function renderNotFound() { return (

There's no grid here.

) } if (!found && !loading) { return renderNotFound() } else if (found && !loading) { return render() } else { return (
) } } export default withCookies( PartyRoute )