import React, { useEffect, useState } from 'react' import { useCookies } from 'react-cookie' import PartyContext from '~context/PartyContext' import PartySegmentedControl from '~components/PartySegmentedControl' import WeaponGrid from '~components/WeaponGrid' import SummonGrid from '~components/SummonGrid' import CharacterGrid from '~components/CharacterGrid' import api from '~utils/api' import { TeamElement } from '~utils/enums' import './index.scss' // GridType enum GridType { Class, Character, Weapon, Summon } // Props interface Props { slug?: string pushHistory?: (path: string) => void } const Party = (props: Props) => { // Cookies const [cookies, _] = useCookies(['user']) const headers = (cookies.user != null) ? { headers: { 'Authorization': `Bearer ${cookies.user.access_token}` } } : {} // Set up states const [currentTab, setCurrentTab] = useState(GridType.Weapon) const [id, setId] = useState('') const [slug, setSlug] = useState('') const [element, setElement] = useState(TeamElement.Any) const [editable, setEditable] = useState(false) const [hasExtra, setHasExtra] = useState(false) // Methods: Creating a new party async function createParty(extra: boolean = false) { let body = { party: { ...(cookies.user) && { user_id: cookies.user.user_id }, is_extra: extra } } return await api.endpoints.parties.create(body, headers) } // Methods: Updating the party's extra flag function checkboxChanged(event: React.ChangeEvent) { setHasExtra(event.target.checked) api.endpoints.parties.update(id, { 'party': { 'is_extra': event.target.checked } }, headers) } // Methods: Navigating with segmented control function segmentClicked(event: React.ChangeEvent) { switch(event.target.value) { case 'class': setCurrentTab(GridType.Class) break case 'characters': setCurrentTab(GridType.Character) break case 'weapons': setCurrentTab(GridType.Weapon) break case 'summons': setCurrentTab(GridType.Summon) break default: break } } // Render: JSX components const navigation = ( ) const weaponGrid = ( ) const summonGrid = ( ) const characterGrid = ( ) const currentGrid = () => { switch(currentTab) { case GridType.Character: return characterGrid case GridType.Weapon: return weaponGrid case GridType.Summon: return summonGrid } } return (
{ navigation } { currentGrid() }
) } export default Party