import * as React from "react"; import { compose } from "redux"; import { formatRoute } from "react-router-named-routes"; import { AppealGrantedEvent, AppealRequestedEvent, ApplicationEvent, ChallengeEvent, ChallengeCompletedEventProps, ChallengeFailedEvent as ChallengeFailedEventComponent, ChallengeSucceededEvent as ChallengeSucceededEventComponent, DepositEvent, GrantedAppealChallengedEvent, ListingHistoryEventTimestampProps, ListingWithdrawnEvent, RejectedEvent, TouchAndRemovedEvent, WhitelistedEvent, WithdrawalEvent, } from "@joincivil/components"; import { getFormattedTokenBalance } from "@joincivil/utils"; import { routes } from "../../constants"; import { ChallengeContainerProps, connectChallengeResults } from "../utility/HigherOrderComponents"; export interface ListingEventProps { event: any; listing: string; } const challengeCompletedEventContainer = (WrappedComponent: React.FunctionComponent) => { return compose>( connectChallengeResults, )(WrappedComponent); }; class ListingEvent extends React.Component { constructor(props: any) { super(props); } public render(): JSX.Element | null { const wrappedEvent = this.props.event; switch (wrappedEvent.event) { case "_AppealGranted": return ; case "_AppealRequested": return ; case "_Application": return this.renderApplicationEvent(wrappedEvent); case "_ApplicationRemoved": return ; case "_ApplicationWhitelisted": return ; case "_Challenge": return this.renderChallengeEvent(wrappedEvent); case "_ChallengeFailed": return this.renderChallengeFailedEvent(wrappedEvent); case "_ChallengeSucceeded": return this.renderChallengeSucceededEvent(wrappedEvent); case "_FailedChallengeOverturned": return this.renderChallengeSucceededEvent(wrappedEvent); case "_SuccessfulChallengeOverturned": return this.renderChallengeFailedEvent(wrappedEvent); case "_Deposit": return this.renderDepositEvent(wrappedEvent); case "_GrantedAppealChallenged": return ; case "_ListingRemoved": return ; case "_ListingWithdrawn": return ; case "_TouchAndRemoved": return ; case "_Withdrawal": return this.renderWithdrawalEvent(wrappedEvent); default: return null; } } private renderWithdrawalEvent(wrappedEvent: any): JSX.Element { const { withdrew } = wrappedEvent.args || wrappedEvent.returnValues; const formattedDeposit = getFormattedTokenBalance(withdrew); return ; } private renderDepositEvent(wrappedEvent: any): JSX.Element { const { added } = wrappedEvent.args || wrappedEvent.returnValues; const formattedDeposit = getFormattedTokenBalance(added); return ; } private renderApplicationEvent(wrappedEvent: any): JSX.Element { const { deposit } = wrappedEvent.args || wrappedEvent.returnValues; const formattedDeposit = getFormattedTokenBalance(deposit); return ; } private renderChallengeEvent(wrappedEvent: any): JSX.Element { const { challengeID, challenger } = wrappedEvent.args || wrappedEvent.returnValues; const challengeURI = formatRoute(routes.CHALLENGE, { listingAddress: this.props.listing, challengeID: challengeID.toString(), }); return ( ); } private renderChallengeFailedEvent(wrappedEvent: any): JSX.Element { const { challengeID } = wrappedEvent.args || wrappedEvent.returnValues; const ChallengeFailedComponent = challengeCompletedEventContainer( ChallengeFailedEventComponent, ) as React.ComponentClass; return ; } private renderChallengeSucceededEvent(wrappedEvent: any): JSX.Element { const { challengeID } = wrappedEvent.args || wrappedEvent.returnValues; const ChallengeSucceededComponent = challengeCompletedEventContainer(ChallengeSucceededEventComponent); return ; } } export default ListingEvent;