import { PaddedCard } from 'components/PaddedCard' import { createStyles, withStyles, WithStyles, Grid, Typography, } from '@material-ui/core' import { titleCase } from 'title-case' import { noCase } from 'change-case' import classNames from 'classnames' import React, { useState, useEffect } from 'react' import { ElapsedDuration } from 'components/ElapsedDuration' import StatusIcon from 'components/StatusIcon' const styles = (theme: any) => createStyles({ completed: { backgroundColor: theme.palette.success.light, }, errored: { backgroundColor: theme.palette.error.light, }, pending: { backgroundColor: theme.palette.warning.light, }, statusCard: { '&:last-child': { paddingBottom: theme.spacing.unit * 2, }, }, head: { display: 'flex', alignItems: 'center', }, statusIcon: { display: 'inline-block', }, statusText: { display: 'inline-block', textTransform: 'capitalize', color: theme.palette.secondary.main, }, statusRoot: { paddingLeft: theme.spacing.unit * 2, }, elapsedText: { color: theme.typography.display1.color, }, earnedLink: { color: theme.palette.success.main, }, }) interface Props extends WithStyles { createdAt?: string finishedAt?: string | null payment?: string | null status?: string title: string } const selectLink = (inWei: number) => inWei / 1e18 const EarnedLink = ({ classes, linkEarned, }: { linkEarned?: string | null classes: WithStyles['classes'] }) => { return ( +{linkEarned ? selectLink(parseInt(linkEarned, 10)) : 0} Link ) } const StatusCard: React.FC = ({ title, classes, payment, status = '', createdAt = '', finishedAt = '', }) => { const statusClass = classes[title as keyof typeof classes] || classes.pending const stillPending = status !== 'completed' && status !== 'errored' const [liveTime, setLiveTime] = useState(Date.now()) useEffect(() => { if (stillPending) setInterval(() => setLiveTime(Date.now()), 1000) }, [stillPending]) const endDate = finishedAt || liveTime return (
{title} {titleCase(noCase(title))} { } {title === 'completed' && payment && ( )}
) } export default withStyles(styles)(StatusCard)