import { Link, Navigate, useParams } from 'react-router-dom';
import { LinkWindow } from 'src/components';
import Display from 'src/components/containerGradient/Display/Display';
import DisplayTitle from 'src/components/containerGradient/DisplayTitle/DisplayTitle';
import { Stars } from 'src/containers/portal/components';
import useCurrentAddress from 'src/hooks/useCurrentAddress';
import { useCybernet } from '../../cybernet.context';
import useCurrentAccountStake from '../../hooks/useCurrentAccountStake';
import useDelegate from '../../hooks/useDelegate';
import { cybernetRoutes } from '../../routes';
import useCybernetTexts from '../../useCybernetTexts';
import Banner from './Banner/Banner';
import ContractsTable from './ContractsTable/ContractsTable';
import styles from './Main.module.scss';

function Main() {
  const address = useCurrentAddress();

  const { getText } = useCybernetTexts();

  const { data } = useDelegate(address);
  const currentAddressIsDelegator = !!data;

  const { data: currentStake } = useCurrentAccountStake();
  const haveStake = currentStake?.some(({ stake }) => stake > 0);

  const { selectedContract, contracts } = useCybernet();

  const { nameOrAddress } = useParams();

  if (!nameOrAddress && contracts.length) {
    return (
      <Navigate
        to={cybernetRoutes.verse.getLink(
          'pussy',
          selectedContract?.metadata?.name || contracts[0].address
        )}
      />
    );
  }

  const {
    metadata: { name } = {},
    address: contractAddress,
    network = 'pussy',
  } = selectedContract || {};

  const contractNameOrAddress = name || contractAddress;

  const { staker_apr, validator_apr } = selectedContract?.economy || {};

  return (
    <>
      <Stars />
      <Banner />

      <div className={styles.verses}>
        <Display noPaddingX noPaddingY title={<DisplayTitle title="choose verse" />}>
          <ContractsTable />
        </Display>
      </div>

      <div className={styles.actions}>
        <div className={styles.bgWrapper}>
          <Display
            title={
              <DisplayTitle
                title={
                  <div className={styles.actionTitle}>
                    <h3>stake</h3>

                    {staker_apr && (
                      <div className={styles.apr}>
                        yield up to <br />
                        <span>{Number(selectedContract?.economy?.staker_apr).toFixed(2)}%</span>
                      </div>
                    )}
                  </div>
                }
              />
            }
          >
            <p className={styles.actionText}>learn by staking on {getText('delegate', true)}</p>
            <div className={styles.links}>
              <Link to={cybernetRoutes.delegators.getLink('pussy', contractNameOrAddress)}>
                {getText('delegate', true)}
              </Link>

              <button disabled type="button" className={styles.delegatorsBtn}>
                {getText('delegator', true)}
              </button>

              {haveStake && (
                <Link to={cybernetRoutes.myLearner.getLink('pussy', contractNameOrAddress)}>
                  my {getText('delegator')}
                </Link>
              )}
            </div>
          </Display>
        </div>

        <div className={styles.bgWrapper}>
          <Display
            title={
              <DisplayTitle
                title={
                  <div className={styles.actionTitle}>
                    <h3>mine</h3>
                    {validator_apr && (
                      <div className={styles.apr}>
                        yield up to
                        <span>{Number(selectedContract?.economy?.validator_apr).toFixed(2)}%</span>
                      </div>
                    )}
                  </div>
                }
              />
            }
          >
            <p className={styles.actionText}>teach by linking content</p>

            <div className={styles.links}>
              <Link to={cybernetRoutes.subnet.getLink('pussy', contractNameOrAddress, 0)}>
                {getText('root')}
              </Link>

              <Link to={cybernetRoutes.subnets.getLink(network, contractNameOrAddress)}>
                {getText('subnetwork', true)}
              </Link>

              {currentAddressIsDelegator && (
                <Link
                  to={cybernetRoutes.delegator.getLink(network, contractNameOrAddress, address)}
                >
                  my {getText('delegate')}
                </Link>
              )}
            </div>
          </Display>
        </div>

        <div className={styles.bgWrapper}>
          <Display
            title={
              <DisplayTitle
                title={
                  <div className={styles.actionTitle}>
                    <h3>deploy</h3>
                  </div>
                }
              />
            }
          >
            <div className={styles.links}>
              <LinkWindow to="https://github.com/cybercongress/cybertensor">
                cli and python package
              </LinkWindow>

              <LinkWindow to="https://github.com/cybercongress/cybertensor-subnet-template">
                subnet template
              </LinkWindow>

              <LinkWindow to="https://github.com/cybercongress/cybernet">
                cosmwasm contract
              </LinkWindow>

              <LinkWindow to="https://docs.spacepussy.ai">docs</LinkWindow>
            </div>
          </Display>
        </div>
      </div>
    </>
  );
}

export default Main;

Synonyms

bostrom.network/src/main.tsx
cyb/src/layouts/Main.tsx
pussy-ts/src/layouts/Main.tsx
pussy-landing/src/components/sections/Main/Main.tsx

Neighbours