use async load on PoolListing items

This commit is contained in:
João Geonizeli
2021-08-30 18:09:44 -03:00
parent 9438420afa
commit 02abc03d00
3 changed files with 36 additions and 51 deletions

View File

@@ -7,9 +7,6 @@ import { getApr } from "../../utils/apr";
import { getPriceInBusd } from "../../utils/getPrice"; import { getPriceInBusd } from "../../utils/getPrice";
import { getTotalStaked } from "../../utils/getTotalStaked"; import { getTotalStaked } from "../../utils/getTotalStaked";
import { StakeOrderModal } from "./StakeOrderModal"; import { StakeOrderModal } from "./StakeOrderModal";
import { ethers } from "ethers";
import sousChef from "../../abi/sousChef.json"
import { getEndBlock } from "../../utils/getEndBlock";
type PoolProps = { type PoolProps = {
pool: PoolConfig; pool: PoolConfig;
@@ -32,14 +29,6 @@ export const Pool: FC<PoolProps> = ({ pool, balance }) => {
React.useEffect(() => { React.useEffect(() => {
(async () => { (async () => {
const chef = new ethers.Contract(
pool.contractAddress[56],
new ethers.utils.Interface(sousChef),
provider
);
const stakingPrice = await getPriceInBusd(router, pool.stakingToken); const stakingPrice = await getPriceInBusd(router, pool.stakingToken);
const earningPrice = await getPriceInBusd(router, pool.earningToken); const earningPrice = await getPriceInBusd(router, pool.earningToken);

View File

@@ -1,21 +1,19 @@
import { graphql } from "babel-plugin-relay/macro"; import { graphql } from "babel-plugin-relay/macro";
import React, { useEffect, useMemo, useState } from "react"; import React, { useEffect, useState } from "react";
import { useLazyLoadQuery } from "react-relay"; import { useLazyLoadQuery } from "react-relay";
import { ethers } from "ethers";
import { pools } from "../../constants/Pools"; import { pools } from "../../constants/Pools";
import { useBsc } from "../../contexts/BscProvider"; import { useBsc } from "../../contexts/BscProvider";
import { PoolConfig } from "../../types"; import type { PoolConfig } from "../../types";
import { Pool } from "./Pool"; import { Pool } from "./Pool";
import { ethers } from "ethers"; import sousChef from "../../abi/sousChef.json";
import sousChef from "../../abi/sousChef.json"
import { getEndBlock } from "../../utils/getEndBlock"; import { getEndBlock } from "../../utils/getEndBlock";
import type { PoolListingQuery } from "./__generated__/PoolListingQuery.graphql"; import type { PoolListingQuery } from "./__generated__/PoolListingQuery.graphql";
export const PoolListing = () => { export const PoolListing = () => {
const { const { provider } = useBsc();
provider const [validPools, setValidPools] = useState<PoolConfig[]>([]);
} = useBsc();
const [validPools, setValidPools] = useState<PoolConfig[]>([])
const { currentUser } = useLazyLoadQuery<PoolListingQuery>( const { currentUser } = useLazyLoadQuery<PoolListingQuery>(
graphql` graphql`
@@ -32,39 +30,42 @@ export const PoolListing = () => {
const balance = currentUser?.balance.amount ?? "0"; const balance = currentUser?.balance.amount ?? "0";
useEffect(() => {
(async () => {
const blockNumber = await provider.getBlockNumber();
const getChef = (pool: PoolConfig) => { const getChef = (pool: PoolConfig) => {
return new ethers.Contract( return new ethers.Contract(
pool.contractAddress[56], pool.contractAddress[56],
new ethers.utils.Interface(sousChef), new ethers.utils.Interface(sousChef),
provider provider
); );
};
const valids: PoolConfig[] = [];
pools.forEach(async (pool) => {
if (pool.sousId === 0) {
valids.push(pool);
setValidPools([...valids]);
return;
} }
useEffect(() => {
(async() => {
const blockNumber = await provider.getBlockNumber()
console.log(blockNumber)
const valids: PoolConfig[] = []
for(let pool of pools) {
if(pool.sousId === 0) {
valids.push(pool)
setValidPools([...valids])
continue
}
try { try {
const chef = getChef(pool) const chef = getChef(pool);
const endBlock = await getEndBlock(chef) const endBlock = await getEndBlock(chef);
if(endBlock >= blockNumber) {
valids.push(pool) if (endBlock >= blockNumber) {
setValidPools([...valids]) valids.push(pool);
setValidPools([...valids]);
} }
} catch(e) { } catch (e) {
console.log(e) console.error(e);
} }
} });
})() })();
}, []) }, [provider]);
return ( return (
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 place-items-center w-full gap-8 py-4 -mt-16 overflow-x-hidden"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 place-items-center w-full gap-8 py-4 -mt-16 overflow-x-hidden">

View File

@@ -1,9 +1,4 @@
import type { Contract } from "ethers"; import type { Contract } from "ethers";
import { ethers } from "ethers";
import { tokens } from "../constants/pancake/Tokens";
import type { Token } from "../constants/pancake/Tokens";
export const getEndBlock = async (sousChef: Contract) => { export const getEndBlock = async (sousChef: Contract) => {
try { try {