import { useEffect, useState, useCallback } from 'react';
import {
  isNativeChainId,
  useTraseNetworks,
} from '../../hooks/useTraseNetworks';
import Tooltip from '../tooltip/tooltip';

import boot from '../../image/large-green.png';
import pussy from '../../image/large-purple-circle.png';
import eth from 'images/Ethereum_logo_2014.svg';
import osmo from 'images/osmosis.svg';
import cosmos from 'images/cosmos-2.svg';
import terra from 'images/terra.svg';
import defaultImg from '../../image/large-orange-circle.png';
import useQueueIpfsContent from 'src/hooks/useQueueIpfsContent';

// maybe reuse enum from DenomArr
const getNativeImg = (text) => {
  let img = null;

  switch (text) {
    case 'bostrom':
      img = boot;
      break;

    case 'space-pussy':
      img = pussy;
      break;

    case 'eth':
      img = eth;
      break;

    case 'cosmos':
      img = cosmos;
      break;

    case 'osmo':
      img = osmo;
      break;

    case 'terra':
      img = terra;
      break;

    default:
      img = defaultImg;
  }
  return img;
};

function ImgNetwork({ network, marginImg, size, zIndexImg, tooltipStatus }) {
  const { chainInfo } = useTraseNetworks(network);
  const [imgDenom, setImgDenom] = useState(null);
  const [tooltipText, setTooltipText] = useState(network);

  const { fetchWithDetails } = useQueueIpfsContent();

  useEffect(() => {
    if (network && !isNativeChainId(network)) {
      if (Object.prototype.hasOwnProperty.call(chainInfo, 'chainIdImageCid')) {
        const { chainIdImageCid, chainName } = chainInfo;
        if (chainIdImageCid && chainIdImageCid.length > 0) {
          getImgFromIpfsByCid(chainIdImageCid);
        } else {
          setImgDenom(defaultImg);
        }
        setTooltipText(chainName);
      }
    } else {
      setTooltipText(network);
      const nativeImg = getNativeImg(network);
      setImgDenom(nativeImg);
    }
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [chainInfo, network]);

  const getImgFromIpfsByCid = useCallback(
    async (cidAvatar) => {
      if (cidAvatar && fetchWithDetails) {
        return fetchWithDetails(cidAvatar, 'image').then(
          (details) => details?.content && setImgDenom(details?.content)
        );
      }
      return null;
    },
    [fetchWithDetails]
  );

  if (tooltipStatus) {
    return (
      <div>
        <Tooltip placement="top" tooltip={<div>{tooltipText}</div>}>
          <img
            style={{
              margin: marginImg || 0,
              width: size || 20,
              height: size || 20,
              // objectFit: 'cover',
              zIndex: zIndexImg || 0,
            }}
            src={imgDenom !== null ? imgDenom : defaultImg}
            alt="text"
          />
        </Tooltip>
      </div>
    );
  }

  return (
    <div style={{ display: 'flex' }}>
      <img
        style={{
          margin: marginImg || 0,
          width: size || 20,
          height: size || 20,
          // objectFit: 'cover',
          zIndex: zIndexImg || 0,
        }}
        src={imgDenom !== null ? imgDenom : defaultImg}
        alt="text"
      />
    </div>
  );
}

export default ImgNetwork;

Synonyms

cyb/src/components/networksImg/imgNetwork.jsx

Neighbours