import React, { useEffect, useState } from 'react' import { useRouter } from 'next/router' import { useTranslation } from 'next-i18next' import classnames from 'classnames' import SearchModal from '~components/SearchModal' import SummonHovercard from '~components/SummonHovercard' import UncapIndicator from '~components/UncapIndicator' import PlusIcon from '~public/icons/Add.svg' import type { SearchableObject } from '~types' import './index.scss' interface Props { gridSummon: GridSummon | undefined unitType: 0 | 1 | 2 position: number editable: boolean updateObject: (object: SearchableObject, position: number) => void updateUncap: (id: string, position: number, uncap: number) => void } const SummonUnit = (props: Props) => { const { t } = useTranslation('common') const [imageUrl, setImageUrl] = useState('') const router = useRouter() const locale = router.locale && ['en', 'ja'].includes(router.locale) ? router.locale : 'en' const classes = classnames({ SummonUnit: true, main: props.unitType == 0, grid: props.unitType == 1, friend: props.unitType == 2, editable: props.editable, filled: props.gridSummon !== undefined, }) const gridSummon = props.gridSummon const summon = gridSummon?.object useEffect(() => { generateImageUrl() }) function generateImageUrl() { let imgSrc = '' if (props.gridSummon) { const summon = props.gridSummon.object! const upgradedSummons = [ '2040094000', '2040100000', '2040080000', '2040098000', '2040090000', '2040084000', '2040003000', '2040056000', '2040020000', '2040034000', '2040028000', '2040027000', '2040046000', '2040047000', ] let suffix = '' if ( upgradedSummons.indexOf(summon.granblue_id.toString()) != -1 && props.gridSummon.uncap_level == 5 ) suffix = '_02' // Generate the correct source for the summon if (props.unitType == 0 || props.unitType == 2) imgSrc = `${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/summon-main/${summon.granblue_id}${suffix}.jpg` else imgSrc = `${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/summon-grid/${summon.granblue_id}${suffix}.jpg` } setImageUrl(imgSrc) } function passUncapData(uncap: number) { if (props.gridSummon) props.updateUncap(props.gridSummon.id, props.position, uncap) } const image = (
{summon?.name.en} {props.editable ? ( ) : ( '' )}
) const editableImage = ( {image} ) const unitContent = (
{props.editable ? editableImage : image} {gridSummon ? ( ) : ( '' )}

{summon?.name[locale]}

) const withHovercard = ( {unitContent} ) return gridSummon && !props.editable ? withHovercard : unitContent } export default SummonUnit