import React, { useCallback, useState } from 'react' import { useModal as useModal } from '~utils/useModal' import debounce from 'lodash.debounce' import SearchModal from '~components/SearchModal' import SummonUnit from '~components/SummonUnit' import ExtraSummons from '~components/ExtraSummons' import api from '~utils/api' import './index.scss' // GridType export enum GridType { Class, Character, Weapon, Summon } // Props interface Props { userId?: string partyId?: string main?: GridSummon | undefined friend?: GridSummon | undefined grid: GridArray editable: boolean exists: boolean found?: boolean onSelect: (type: GridType, summon: Summon, position: number) => void } const SummonGrid = (props: Props) => { const { open, openModal, closeModal } = useModal() const [searchPosition, setSearchPosition] = useState(0) const numSummons: number = 4 const searchGrid: GridArray = Object.values(props.grid).map((o) => o.summon) function receiveSummon(summon: Summon, position: number) { props.onSelect(GridType.Summon, summon, position) } function sendData(object: Character | Weapon | Summon, position: number) { if (isSummon(object)) { receiveSummon(object, position) } } function isSummon(object: Character | Weapon | Summon): object is Summon { // There aren't really any unique fields here return (object as Summon).granblue_id !== undefined } function openSearchModal(position: number) { setSearchPosition(position) openModal() } async function updateUncap(id: string, level: number) { await api.updateUncap('summon', id, level) .catch(error => { console.error(error) }) } const initiateUncapUpdate = (id: string, uncapLevel: number) => { debouncedAction(id, uncapLevel) } const debouncedAction = useCallback( () => debounce((id, number) => { updateUncap(id, number) }, 1000), [] )() return (
Main Summon
{ openSearchModal(-1) }} updateUncap={initiateUncapUpdate} />
Friend Summon
{ openSearchModal(6) }} updateUncap={initiateUncapUpdate} />
Summons
    { Array.from(Array(numSummons)).map((x, i) => { return (
  • { openSearchModal(i) }} updateUncap={initiateUncapUpdate} />
  • ) }) }
{open ? ( ) : null}
) } export default SummonGrid