import React, { useEffect, useState } from 'react' import { useCookies } from 'react-cookie' 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 './index.scss' // GridType enum GridType { Class, Character, Weapon, Summon } // Props interface Props { partyId?: string mainWeapon?: GridWeapon mainSummon?: GridSummon friendSummon?: GridSummon characters?: GridArray weapons?: GridArray summons?: GridArray extra: boolean editable: boolean 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 [extra, setExtra] = useState(false) const [currentTab, setCurrentTab] = useState(GridType.Weapon) // Set states from props useEffect(() => { setExtra(props.extra || false) }, [props]) // Methods: Creating a new party async function createParty() { 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 // Note: This doesn't save to the server yet. function checkboxChanged(event: React.ChangeEvent) { setExtra(event.target.checked) } // 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