import React, { useCallback, useState } from 'react' import { useModal as useModal } from '~utils/useModal' import debounce from 'lodash.debounce' import SearchModal from '~components/SearchModal' import WeaponUnit from '~components/WeaponUnit' import ExtraWeapons from '~components/ExtraWeapons' import api from '~utils/api' import './index.scss' // GridType export enum GridType { Class, Character, Weapon, Summon } // Props interface Props { userId?: string partyId?: string mainhand?: GridWeapon | undefined grid: GridArray extra: boolean editable: boolean exists: boolean found?: boolean onSelect: (type: GridType, weapon: Weapon, position: number) => void } const WeaponGrid = (props: Props) => { const { open, openModal, closeModal } = useModal() const [searchPosition, setSearchPosition] = useState(0) const numWeapons: number = 9 const searchGrid: GridArray = Object.values(props.grid).map((o) => o.weapon) function receiveWeapon(weapon: Weapon, position: number) { props.onSelect(GridType.Weapon, weapon, position) } function sendData(object: Character | Weapon | Summon, position: number) { if (isWeapon(object)) { receiveWeapon(object, position) } } function isWeapon(object: Character | Weapon | Summon): object is Weapon { return (object as Weapon).proficiency !== undefined } function openSearchModal(position: number) { setSearchPosition(position) openModal() } async function updateUncap(id: string, level: number) { await api.updateUncap('weapon', 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), [] )() const extraGrid = ( ) return (
{ openSearchModal(-1) }} updateUncap={initiateUncapUpdate} />
    { Array.from(Array(numWeapons)).map((x, i) => { return (
  • { openSearchModal(i) }} updateUncap={initiateUncapUpdate} />
  • ) }) }
{ (() => { if(props.extra) { return extraGrid } })() } {open ? ( ) : null}
) } export default WeaponGrid