import * as GridWeapon from '~transformers/GridWeaponTransformer' import * as GridSummon from '~transformers/GridSummonTransformer' import * as GridCharacter from '~transformers/GridCharacterTransformer' // Transforms API response to Party object export function toObject(data: any): Grid { console.log('----- GridTransformer.tsx -----') console.log(data.summons, data.characters) console.log('----- End GridTransformer.tsx -----') const mainSummon = data.summons ? data.summons.find((summon: any) => summon.main === true) : null const friendSummon = data.summons ? data.summons.find((summon: any) => summon.friend === true) : null const allSummons = data.summons ? removeItem(data.summons, [mainSummon, friendSummon]) : null const mainWeapon = data.weapons ? data.weapons.find((weapon: any) => weapon.mainhand === true) : null return { characters: data.characters ? mapToGridArray(data.characters, GridCharacter.toObject) : null, summons: { mainSummon: mainSummon ? GridSummon.toObject(mainSummon) : null, friendSummon: friendSummon ? GridSummon.toObject(friendSummon) : null, allSummons: allSummons ? mapToGridArray(allSummons, GridSummon.toObject) : null, }, weapons: { mainWeapon: mainWeapon ? GridWeapon.toObject(mainWeapon) : null, allWeapons: data.weapons ? mapToGridArray(data.weapons, GridWeapon.toObject) : null, }, } } function removeItem(arr: Array, values: T[]): Array { values.forEach((value) => { const index = arr.indexOf(value) if (index > -1) { arr.splice(index, 1) } }) return arr } function mapToGridArray( arr: any[], transformer: (data: any) => T ): GridArray { return arr.reduce( (gridArray, item) => ({ ...gridArray, [item.position]: transformer(item) }), {} as GridArray ) }