UNPKG

@bzxnetwork/portal

Version:
245 lines (215 loc) 7.05 kB
import styled from "styled-components"; import MuiCard from "@material-ui/core/Card"; import CardActions from "@material-ui/core/CardActions"; import MuiCardContent from "@material-ui/core/CardContent"; import Button from "@material-ui/core/Button"; import { Dialog, DialogActions, DialogContent } from "@material-ui/core"; import OrderItem from "../orders/OrderHistory/OrderItem"; import { COLORS } from "../styles/constants"; import { getSymbol, getDecimals } from "../common/tokens"; import { fromBigNumber } from "../common/utils"; import BZxComponent from "../common/BZxComponent"; const CardContent = styled(MuiCardContent)` position: relative; `; const Card = styled(MuiCard)` width: 100%; margin-bottom: 24px; `; const DataPointContainer = styled.div` display: flex; justify-content: flex-start; align-items: center; `; const DataPoint = styled.span` margin-left: 16px; `; const Hash = styled.a` display: inline-block; font-family: monospace; white-space: nowrap; overflow: hidden; //text-overflow: ellipsis; //max-width: 20ch; `; const Label = styled.span` font-weight: 600; color: ${COLORS.gray}; `; const UpperRight = styled.div` position: absolute; top: 16px; right: 16px; display: flex; flex-direction: column; align-items: flex-end; `; // const LowerUpperRight = styled.div` // position: absolute; // top: 72px; // right: 16px; // `; export default class ClosedLoan extends BZxComponent { state = { showOrderDialog: false, order: undefined }; getSingleOrder = async loanOrderHash => { const { bZx } = this.props; const order = await this.wrapAndRun(bZx.getSingleOrder({ loanOrderHash })); return order; }; toggleOrderDialog = async event => { event.preventDefault(); if (event.target.id !== ``) { const order = await this.getSingleOrder(event.target.id); this.setState(p => ({ showOrderDialog: !p.showOrderDialog, order })); } else { this.setState(p => ({ showOrderDialog: !p.showOrderDialog })); } }; render() { const { tokens, bZx, accounts } = this.props; const { collateralTokenAddressFilled, collateralTokenAmountFilled, positionTokenAddressFilled, positionTokenAmountFilled, interestTokenAddress, interestPaidTotal, loanTokenAmountFilled, loanTokenAddress, loanStartUnixTimestampSec, loanOrderHash, lender } = this.props.data; const collateralToken = tokens.filter( t => t.address === collateralTokenAddressFilled )[0]; const collateralTokenSymbol = collateralToken.symbol; const loanTokenSymbol = getSymbol(tokens, loanTokenAddress); const interestTokenSymbol = getSymbol(tokens, interestTokenAddress); const positionTokenSymbol = getSymbol(tokens, positionTokenAddressFilled); const collateralTokenDecimals = collateralToken.decimals; const loanTokenDecimals = getDecimals(tokens, loanTokenAddress); const interestTokenDecimals = getDecimals(tokens, interestTokenAddress); const positionTokenDecimals = getDecimals( tokens, positionTokenAddressFilled ); const tradeOpened = positionTokenAddressFilled !== loanTokenAddress; const loanOpenedDate = new Date(loanStartUnixTimestampSec * 1000); return ( <Card> <CardContent> <DataPointContainer> <Label>Order # </Label> <DataPoint title={loanOrderHash}> <Hash href="#" onClick={this.toggleOrderDialog} target="_blank" rel="noopener noreferrer" id={loanOrderHash} > {loanOrderHash} </Hash> </DataPoint> <Dialog open={this.state.showOrderDialog} onClose={this.toggleOrderDialog} // style={{width: `1000px`}} fullWidth maxWidth="md" > <DialogContent> <OrderItem key={loanOrderHash} bZx={bZx} accounts={accounts} tokens={tokens} takenOrder={this.state.order} noShadow /> </DialogContent> <DialogActions> <Button onClick={this.toggleOrderDialog}>OK</Button> </DialogActions> </Dialog> </DataPointContainer> <DataPointContainer> <Label>Lender </Label> <DataPoint title={lender}> <Hash href={`${bZx.etherscanURL}address/${lender}`} target="_blank" rel="noopener noreferrer" > {lender} </Hash> </DataPoint> </DataPointContainer> <UpperRight> <Label>Loan Opened</Label> <div title={loanOpenedDate.toUTCString()}> {loanOpenedDate.toLocaleString()} </div> </UpperRight> <hr /> <DataPointContainer> <Label>Collateral</Label> <DataPoint> {fromBigNumber( collateralTokenAmountFilled, 10 ** collateralTokenDecimals )} {` `} {collateralTokenSymbol} </DataPoint> </DataPointContainer> <DataPointContainer> <Label>Borrowed</Label> <DataPoint> {fromBigNumber(loanTokenAmountFilled, 10 ** loanTokenDecimals)} {` `} {loanTokenSymbol} </DataPoint> </DataPointContainer> <DataPointContainer> <Label>Interest Paid</Label> <DataPoint> {fromBigNumber(interestPaidTotal, 10 ** interestTokenDecimals)} {` `} {interestTokenSymbol} </DataPoint> </DataPointContainer> {/* <LowerUpperRight>[Collateral Options]</LowerUpperRight> */} </CardContent> {/*<CardActions> <DataPointContainer style={{ marginLeft: `12px` }}> <Label>Active Trade</Label> <DataPoint>{Boolean(tradeOpened).toString()}</DataPoint> </DataPointContainer> <DataPointContainer style={{ marginLeft: `12px` }}> <Label>Trade Amount</Label> <DataPoint> {fromBigNumber( positionTokenAmountFilled, 10 ** positionTokenDecimals )} {` `} {positionTokenSymbol} </DataPoint> </DataPointContainer> </CardActions>*/} </Card> ); } }