import { useCallback, useEffect, useState } from 'react'; import { Auction, Deployer, Project } from 'gql-client'; import { Dialog, DialogTitle, DialogContent, DialogActions, } from '@mui/material'; import { CheckRoundFilledIcon, LoadingIcon, } from 'components/shared/CustomIcon'; import { useGQLClient } from 'context/GQLClientContext'; import { Button, Heading, Tag } from 'components/shared'; const WAIT_DURATION = 5000; const DIALOG_STYLE = { backgroundColor: 'rgba(0,0,0, .9)', padding: '2em', borderRadius: '0.5em', marginLeft: '0.5em', marginRight: '0.5em', color: 'gray', fontSize: 'small', }; export const AuctionCard = ({ project }: { project: Project }) => { const [auctionStatus, setAuctionStatus] = useState(''); const [deployers, setDeployers] = useState([]); const [fundsStatus, setFundsStatus] = useState(false); const [auctionDetails, setAuctionDetails] = useState(null); const [openDialog, setOpenDialog] = useState(false); const client = useGQLClient(); const getIconByAuctionStatus = (status: string) => status === 'completed' ? ( ) : ( ); const checkAuctionStatus = useCallback(async () => { const result = await client.getAuctionData(project.auctionId); setAuctionStatus(result.status); setAuctionDetails(result); }, [project.auctionId, project.deployers, project.fundsReleased]); const fetchUpdatedProject = useCallback(async () => { const updatedProject = await client.getProject(project.id); setDeployers(updatedProject.project!.deployers!); setFundsStatus(updatedProject.project!.fundsReleased!); }, [project.id]); const fetchData = useCallback(async () => { await Promise.all([checkAuctionStatus(), fetchUpdatedProject()]); }, [checkAuctionStatus, fetchUpdatedProject]); useEffect(() => { fetchData(); const timerId = setInterval(() => { fetchData(); }, WAIT_DURATION); return () => clearInterval(timerId); }, [fetchData]); const renderAuctionStatus = useCallback( () => ( {auctionStatus.toUpperCase()} ), [auctionStatus], ); const handleOpenDialog = () => setOpenDialog(true); const handleCloseDialog = () => setOpenDialog(false); return ( <>
Auction details
Auction Id {project.auctionId}
Auction Status
{renderAuctionStatus()}
{auctionStatus === 'completed' && ( <> {deployers?.length > 0 ? (
Deployer LRNs {deployers.map((deployer, index) => (

{'\u2022'} {deployer.deployerLrn}

))}
Deployer Funds Status
{fundsStatus ? 'RELEASED' : 'WAITING'}
) : (
No winning deployers
)} )}
Auction Details {auctionDetails && (
{JSON.stringify(auctionDetails, null, 2)}
)}
); };