import React, { useEffect, useState } from 'react' import { useSnapshot } from 'valtio' import classNames from 'classnames' import { accountState } from '~utils/accountState' import { formatTimeAgo } from '~utils/timeAgo' import Button from '~components/Button' import { ButtonType } from '~utils/enums' import './index.scss' interface Props { shortcode: string id: string name: string raid: Raid grid: GridWeapon[] user?: User favorited: boolean createdAt: Date displayUser?: boolean | false onClick: (shortcode: string) => void onSave?: (partyId: string, favorited: boolean) => void } const GridRep = (props: Props) => { const numWeapons: number = 9 const { account } = useSnapshot(accountState) const [mainhand, setMainhand] = useState() const [weapons, setWeapons] = useState>({}) const titleClass = classNames({ 'empty': !props.name }) const raidClass = classNames({ 'raid': true, 'empty': !props.raid }) const userClass = classNames({ 'user': true, 'empty': !props.user }) useEffect(() => { const newWeapons = Array(numWeapons) for (const [key, value] of Object.entries(props.grid)) { if (value.position == -1) setMainhand(value.object) else if (!value.mainhand && value.position != null) newWeapons[value.position] = value.object } setWeapons(newWeapons) }, [props.grid]) function navigate() { props.onClick(props.shortcode) } function generateMainhandImage() { return (mainhand) ? {mainhand?.name.en} : '' } function generateGridImage(position: number) { return (weapons[position]) ? {weapons[position]?.name.en} : '' } function sendSaveData() { if (props.onSave) props.onSave(props.id, props.favorited) } const userImage = () => { if (props.user) return ( Gran ) else return (
) } const details = (

{ (props.name) ? props.name : 'Untitled' }

{ (props.raid) ? props.raid.name.en : 'No raid set' }
) const detailsWithUsername = (

{ (props.name) ? props.name : 'Untitled' }

{ (props.raid) ? props.raid.name.en : 'No raid set' }
{ (!props.user || (account.user && account.user.id !== props.user.id)) ?
{ userImage() } { (props.user) ? props.user.username : 'Anonymous' }
) return (
{ (props.displayUser) ? detailsWithUsername : details}
{generateMainhandImage()}
    { Array.from(Array(numWeapons)).map((x, i) => { return (
  • {generateGridImage(i)}
  • ) }) }
) } export default GridRep