Add Character support

This commit is contained in:
Justin Edmund 2020-10-19 05:13:02 -07:00
parent f8172bd157
commit 0617601ff4
3 changed files with 50 additions and 7 deletions

View file

@ -24,6 +24,7 @@ interface Props {
mainWeapon?: Weapon
mainSummon?: Summon
friendSummon?: Summon
characters?: GridArray<Character>
weapons?: GridArray<Weapon>
summons?: GridArray<Summon>
editable: boolean
@ -41,6 +42,7 @@ const Party = (props: Props) => {
} : {}
// Grid data
const [characters, setCharacters] = useState<GridArray<Character>>({})
const [weapons, setWeapons] = useState<GridArray<Weapon>>({})
const [summons, setSummons] = useState<GridArray<Summon>>({})
@ -52,9 +54,10 @@ const Party = (props: Props) => {
setMainWeapon(props.mainWeapon)
setMainSummon(props.mainSummon)
setFriendSummon(props.friendSummon)
setCharacters(props.characters || {})
setWeapons(props.weapons || {})
setSummons(props.summons || {})
}, [props.mainWeapon, props.mainSummon, props.friendSummon, props.weapons, props.summons])
}, [props.mainWeapon, props.mainSummon, props.friendSummon, props.characters, props.weapons, props.summons])
const weaponGrid = (
<WeaponGrid
@ -81,6 +84,8 @@ const Party = (props: Props) => {
const characterGrid = (
<CharacterGrid
userId={cookies.user ? cookies.user.userId : ''}
grid={characters}
editable={props.editable}
exists={props.exists}
onSelect={itemSelected}
@ -144,7 +149,11 @@ const Party = (props: Props) => {
saveClass()
break
case GridType.Character:
saveCharacter(item as Character, position, partyId)
const character = item as Character
saveCharacter(character, position, partyId)
.then(() => {
storeCharacter(character, position)
})
break
case GridType.Weapon:
const weapon = item as Weapon
@ -213,8 +222,21 @@ const Party = (props: Props) => {
}
// Character
function saveCharacter(character: Character, position: number, party: string) {
// TODO: Implement this
function storeCharacter(character: Character, position: number) {
// Store the grid unit character at the correct position
let newCharacters = Object.assign({}, characters)
newCharacters[position] = character
setCharacters(newCharacters)
}
async function saveCharacter(character: Character, position: number, party: string) {
await api.endpoints.characters.create({
'character': {
'party_id': party,
'character_id': character.id,
'position': position
}
}, headers)
}
// Class

View file

@ -4,6 +4,7 @@ import api from '~utils/api'
import Modal from '~components/Modal'
import Overlay from '~components/Overlay'
import CharacterResult from '~components/CharacterResult'
import WeaponResult from '~components/WeaponResult'
import SummonResult from '~components/SummonResult'
@ -11,7 +12,7 @@ import './index.css'
interface Props {
close: () => void
send: (object: Weapon | Summon, position: number) => any
send: (object: Character | Weapon | Summon, position: number) => any
placeholderText: string
fromPosition: number
object: 'weapons' | 'characters' | 'summons'
@ -75,7 +76,7 @@ class SearchModal extends React.Component<Props, State> {
}
}
sendData = (result: Weapon | Summon) => {
sendData = (result: Character | Weapon | Summon) => {
this.props.send(result, this.props.fromPosition)
this.props.close()
}
@ -91,7 +92,7 @@ class SearchModal extends React.Component<Props, State> {
return this.renderSummonSearchResults(results)
case 'characters':
return (<div />)
return this.renderCharacterSearchResults(results)
}
}
@ -115,6 +116,16 @@ class SearchModal extends React.Component<Props, State> {
)
}
renderCharacterSearchResults = (results: { [key: string]: any }) => {
return (
<ul id="results_container">
{ results.map( (result: Character) => {
return <CharacterResult key={result.id} data={result} onClick={() => { this.sendData(result) }} />
})}
</ul>
)
}
renderEmptyState = () => {
let string = ''

View file

@ -17,6 +17,7 @@ const PartyRoute: React.FC<PartyProps> = ({ match }) => {
const [loading, setLoading] = useState(true)
const [editable, setEditable] = useState(false)
const [characters, setCharacters] = useState<GridArray<Character>>({})
const [weapons, setWeapons] = useState<GridArray<Weapon>>({})
const [summons, setSummons] = useState<GridArray<Summon>>({})
@ -43,8 +44,15 @@ const PartyRoute: React.FC<PartyProps> = ({ match }) => {
if (partyUser != undefined && loggedInUser != undefined && partyUser === loggedInUser)
setEditable(true)
let characters: GridArray<Character> = {}
let weapons: GridArray<Weapon> = {}
let summons: GridArray<Summon> = {}
party.characters.forEach((gridCharacter: GridCharacter) => {
if (gridCharacter.position != null)
characters[gridCharacter.position] = gridCharacter.character
})
party.weapons.forEach((gridWeapon: GridWeapon) => {
if (gridWeapon.mainhand)
setMainWeapon(gridWeapon.weapon)
@ -63,6 +71,7 @@ const PartyRoute: React.FC<PartyProps> = ({ match }) => {
setFound(true)
setLoading(false)
setCharacters(characters)
setWeapons(weapons)
setSummons(summons)
setPartyId(party.id)
@ -86,6 +95,7 @@ const PartyRoute: React.FC<PartyProps> = ({ match }) => {
mainWeapon={mainWeapon}
mainSummon={mainSummon}
friendSummon={friendSummon}
characters={characters}
weapons={weapons}
summons={summons}
editable={editable}