From 0617601ff4805b8cbd11b84c31306331c183ce34 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Mon, 19 Oct 2020 05:13:02 -0700 Subject: [PATCH] Add Character support --- src/components/Party/index.tsx | 30 ++++++++++++++++++++++++---- src/components/SearchModal/index.tsx | 17 +++++++++++++--- src/routes/PartyRoute/index.tsx | 10 ++++++++++ 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/src/components/Party/index.tsx b/src/components/Party/index.tsx index 9eeb1d73..fa0587c6 100644 --- a/src/components/Party/index.tsx +++ b/src/components/Party/index.tsx @@ -24,6 +24,7 @@ interface Props { mainWeapon?: Weapon mainSummon?: Summon friendSummon?: Summon + characters?: GridArray weapons?: GridArray summons?: GridArray editable: boolean @@ -41,6 +42,7 @@ const Party = (props: Props) => { } : {} // Grid data + const [characters, setCharacters] = useState>({}) const [weapons, setWeapons] = useState>({}) const [summons, setSummons] = useState>({}) @@ -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 = ( { const characterGrid = ( { 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 diff --git a/src/components/SearchModal/index.tsx b/src/components/SearchModal/index.tsx index cc7efe5e..2338b1c0 100644 --- a/src/components/SearchModal/index.tsx +++ b/src/components/SearchModal/index.tsx @@ -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 { } } - 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 { return this.renderSummonSearchResults(results) case 'characters': - return (
) + return this.renderCharacterSearchResults(results) } } @@ -115,6 +116,16 @@ class SearchModal extends React.Component { ) } + renderCharacterSearchResults = (results: { [key: string]: any }) => { + return ( +
    + { results.map( (result: Character) => { + return { this.sendData(result) }} /> + })} +
+ ) + } + renderEmptyState = () => { let string = '' diff --git a/src/routes/PartyRoute/index.tsx b/src/routes/PartyRoute/index.tsx index 5a019bc1..d43ff104 100644 --- a/src/routes/PartyRoute/index.tsx +++ b/src/routes/PartyRoute/index.tsx @@ -17,6 +17,7 @@ const PartyRoute: React.FC = ({ match }) => { const [loading, setLoading] = useState(true) const [editable, setEditable] = useState(false) + const [characters, setCharacters] = useState>({}) const [weapons, setWeapons] = useState>({}) const [summons, setSummons] = useState>({}) @@ -43,8 +44,15 @@ const PartyRoute: React.FC = ({ match }) => { if (partyUser != undefined && loggedInUser != undefined && partyUser === loggedInUser) setEditable(true) + let characters: GridArray = {} let weapons: GridArray = {} let summons: GridArray = {} + + 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 = ({ match }) => { setFound(true) setLoading(false) + setCharacters(characters) setWeapons(weapons) setSummons(summons) setPartyId(party.id) @@ -86,6 +95,7 @@ const PartyRoute: React.FC = ({ match }) => { mainWeapon={mainWeapon} mainSummon={mainSummon} friendSummon={friendSummon} + characters={characters} weapons={weapons} summons={summons} editable={editable}