import { useEffect, useState } from 'react';
import Tooltip from '../tooltip/tooltip';
import { trimString } from '../../utils/utils';
import styles from './TextDenom.module.scss';

export type CoinDenomProps = {
  coinDenom: string;
  // use demom type
  infoDenom: {
    denom: string;
    path: string;
    native?: boolean;
  } | null;
  tooltipStatus?: boolean;
};

function CoinDenom({ coinDenom, tooltipStatus, infoDenom }: CoinDenomProps) {
  const [textDenom, setTextDenom] = useState<string | null>(null);
  const [tooltipText, setTooltipText] = useState(coinDenom);

  useEffect(() => {
    if (coinDenom.includes('pool')) {
      setTextDenom(trimString(coinDenom, 3, 3));
      setTooltipText(trimString(coinDenom, 9, 9));
    } else if (
      infoDenom &&
      Object.prototype.hasOwnProperty.call(infoDenom, 'denom')
    ) {
      const { denom, path } = infoDenom;
      if (denom.length < 20) {
        setTextDenom(denom);
      } else {
        setTextDenom(trimString(denom, 12, 4));
      }
      if (path.length > 0) {
        setTooltipText(path);
      }
    } else {
      setTextDenom(coinDenom.toUpperCase());
    }
  }, [coinDenom, infoDenom]);

  const validInfo =
    infoDenom &&
    Object.prototype.hasOwnProperty.call(infoDenom, 'native') &&
    infoDenom.native === false;

  const validTootipStatusByDenom = validInfo || coinDenom.includes('pool');

  const denom = <span className={styles.denom}>{textDenom || '...'}</span>;

  if (tooltipStatus && validTootipStatusByDenom) {
    return (
      <Tooltip placement="top" tooltip={<div>{tooltipText}</div>}>
        {denom}
      </Tooltip>
    );
  }

  return denom;
}

export default CoinDenom;

Synonyms

cyb/src/components/valueImg/TextDenom.tsx

Neighbours