import React, { useCallback, useMemo } from 'react' import classNames from 'classnames' import { NFTCategory, Rarity } from '@dcl/schemas' import { Atlas, Layer } from '../Atlas/Atlas' import { Props } from './NFTImage.types' import './NFTImage.css' import { getEstateCenter } from './utils' function NFTImage({ nft, className }: Props) { if ( nft.category === NFTCategory.WEARABLE || nft.category === NFTCategory.EMOTE ) { const rarity = nft.category === NFTCategory.EMOTE ? nft.data.emote.rarity : nft.data.wearable.rarity const [light, dark] = Rarity.getGradient(rarity) return (
{nft.name}
) } if (nft.category === NFTCategory.ENS) { return (
{nft.data.ens.subdomain}
) } if (nft.category === NFTCategory.ESTATE) { const parcels = nft.data.estate.parcels const [estateX, estateY] = useMemo( () => getEstateCenter(parcels), [parcels] ) const selectedEstateStrokeLayer: Layer = useCallback( (tileX, tileY) => { return parcels.some(({ x, y }) => tileX === x && y === tileY) ? { color: '#ff0044', scale: 1.4 } : null }, [parcels] ) const selectedEstateFillLayer: Layer = useCallback( (tileX, tileY) => { return parcels.some(({ x, y }) => tileX === x && y === tileY) ? { color: '#ff9990', scale: 1.2 } : null }, [parcels] ) return (
) } if (nft.category === NFTCategory.PARCEL) { const x = Number(nft.data.parcel.x) const y = Number(nft.data.parcel.y) const selectedStrokeLayer: Layer = useCallback( (tileX, tileY) => { return x === tileX && y === tileY ? { color: '#ff0044', scale: 1.4 } : null }, [x, y] ) const selectedFillLayer: Layer = useCallback( (tileX, tileY) => { return x === tileX && y === tileY ? { color: '#ff9990', scale: 1.2 } : null }, [x, y] ) return (
) } return null } export default React.memo(NFTImage)