import { useEffect, useMemo } from 'react';
import { ContainerGradientText } from 'src/components/containerGradient/ContainerGradient';
import { useRobotContext } from 'src/pages/robot/robot.context';
import { useAdviser } from 'src/features/adviser/context';
import Loader2 from 'src/components/ui/Loader2';
import InfiniteScroll from 'react-infinite-scroll-component';
import { Dots, NoItems, SearchSnippet } from '../../../../../components';
import useGetLog from '../hooks/useGetLog';
import { RegistryTypes } from 'src/soft.js/types';

function FeedsTab() {
  const { address, addRefetch } = useRobotContext();
  const { setAdviser } = useAdviser();
  const { data, fetchNextPage, hasNextPage, refetch, error, isInitialLoading } =
    useGetLog(address);

  useEffect(() => {
    if (error) {
      setAdviser(error.message, 'red');
    } else {
      setAdviser(
        <>
          free unlimited public feed made by neuron <br />
          we accepting all type of content
        </>
      );
    }

    return () => {
      // maybe remove
      setAdviser(null);
    };
  }, [setAdviser, error]);

  const onClickRank = () => {};

  const logRows = useMemo(() => {
    return data.map((item, i) => {
      // add txs types
      let cyberLinkMessage = item.tx.body.messages[0];

      if (!cyberLinkMessage) {
        return null;
      }

      if (cyberLinkMessage['@type'] === RegistryTypes.MsgExec) {
        [cyberLinkMessage] = cyberLinkMessage.msgs;
      }

      const cid = cyberLinkMessage.links[0].to;

      if (!cid) {
        return null;
      }

      return (
        <SearchSnippet
          key={i}
          cid={cid}
          data={item}
          onClickRank={onClickRank}
        />
      );
    });
  }, [data]);

  useEffect(() => {
    addRefetch(refetch);
  }, [address]);

  // eslint-disable-next-line @typescript-eslint/no-empty-function
  let content;

  if (isInitialLoading) {
    content = <Loader2 />;
  } else if (error) {
    content = null;
  } else if (data.length) {
    content = (
      <InfiniteScroll
        dataLength={Object.keys(logRows).length}
        hasMore={Boolean(hasNextPage)}
        next={fetchNextPage}
        loader={<Loader2 />}
      >
        {logRows}
      </InfiniteScroll>
    );
  } else {
    content = <NoItems text="No feeds" />;
  }

  return (
    <ContainerGradientText>
      <div className="container-contentItem" style={{ width: '100%' }}>
        {content}
      </div>
    </ContainerGradientText>
  );
}

export default FeedsTab;

Synonyms

cyb/src/pages/robot/_refactor/account/tabs/feeds/feeds.tsx

Neighbours