import * as React from "react";
import { compose } from "redux";
import { TxHash } from "@joincivil/typescript-types";
import { TwoStepEthTransaction } from "@joincivil/core";
import {
AppealResolveCard as AppealResolveCardComponent,
ModalContent,
ListingDetailPhaseCardComponentProps,
ChallengePhaseProps,
AppealDecisionProps,
} from "@joincivil/components";
import { urlConstants as links } from "@joincivil/utils";
import { CivilHelper, CivilHelperContext } from "../../apis/CivilHelper";
import {
ChallengeContainerProps,
connectChallengePhase,
connectChallengeResults,
} from "../utility/HigherOrderComponents";
import { InjectedTransactionStatusModalProps, hasTransactionStatusModals } from "../utility/TransactionStatusModalsHOC";
import { AppealDetailProps } from "./AppealDetail";
const AppealResolveCard = compose<
React.ComponentType<
ListingDetailPhaseCardComponentProps & ChallengePhaseProps & ChallengeContainerProps & AppealDecisionProps
>
>(
connectChallengeResults,
connectChallengePhase,
)(AppealResolveCardComponent);
enum TransactionTypes {
RESOLVE_APPEAL = "RESOLVE_APPEAL",
}
const transactionLabels = {
[TransactionTypes.RESOLVE_APPEAL]: "Resolve Appeal",
};
const transactionRejectionContent = {
[TransactionTypes.RESOLVE_APPEAL]: [
"The appeal was not resolved",
"To resolve the appeal, you need to confirm the transaction in your MetaMask wallet.",
],
};
const transactionErrorContent = {
[TransactionTypes.RESOLVE_APPEAL]: [
"There was a problem resolving the appeal",
Please retry your transaction,
],
};
const transactionSuccessContent = {
[TransactionTypes.RESOLVE_APPEAL]: [
"The appeal was resolved",
Voters can now collect rewards from their votes on this challenge, if they are available.
,
],
};
const transactionStatusModalConfig = {
transactionLabels,
transactionSuccessContent,
transactionRejectionContent,
transactionErrorContent,
};
class AppealResolve extends React.Component {
public static contextType = CivilHelperContext;
public context: CivilHelper;
public render(): JSX.Element {
const transactions = this.getTransactions();
const { appeal, challengeID, onMobileTransactionClick } = this.props;
const appealGranted = appeal.appealGranted;
const appealGrantedStatementURI = appeal.appealGrantedStatementURI;
return (
<>
>
);
}
private getTransactions = (): any[] => {
return [
{
transaction: async () => {
this.props.updateTransactionStatusModalsState({
isWaitingTransactionModalOpen: true,
isTransactionProgressModalOpen: false,
isTransactionSuccessModalOpen: false,
transactionType: TransactionTypes.RESOLVE_APPEAL,
});
return this.resolveAppeal();
},
handleTransactionHash: (txHash: TxHash) => {
this.props.updateTransactionStatusModalsState({
isWaitingTransactionModalOpen: false,
isTransactionProgressModalOpen: true,
});
},
postTransaction: () => {
this.props.updateTransactionStatusModalsState({
isWaitingTransactionModalOpen: false,
isTransactionProgressModalOpen: false,
isTransactionSuccessModalOpen: true,
});
},
handleTransactionError: this.props.handleTransactionError,
},
];
};
private resolveAppeal = async (): Promise> => {
return this.context.updateStatus(this.props.listingAddress);
};
}
export default compose>(
hasTransactionStatusModals(transactionStatusModalConfig),
)(AppealResolve);