import * as React from "react";
import { parseEther, TxHash } from "@joincivil/typescript-types";
import { TwoStepEthTransaction } from "@joincivil/core";
import {
TransactionButtonNoModal,
CurrencyInput,
ModalContent,
TransferTokenTipsText,
StyledTransferTokenFormElement,
} from "@joincivil/components";
import { InjectedTransactionStatusModalProps, hasTransactionStatusModals } from "../utility/TransactionStatusModalsHOC";
import { CivilHelper, CivilHelperContext } from "../../apis/CivilHelper";
import { FormGroup } from "../utility/FormElements";
enum TransactionTypes {
WITHDRAW_VOTING_RIGHTS = "WITHDRAW_VOTING_RIGHTS",
}
const transactionLabels = {
[TransactionTypes.WITHDRAW_VOTING_RIGHTS]: "Transfer Voting Tokens to Available Balance",
};
const transactionSuccessContent = {
[TransactionTypes.WITHDRAW_VOTING_RIGHTS]: [
"You have successfully transferred your voting tokens",
Tokens in your Available Balance can be used for applying to The Civil Registry or challenging newsrooms
,
],
};
const transactionRejectionContent = {
[TransactionTypes.WITHDRAW_VOTING_RIGHTS]: [
"Your tokens were not transferred",
"To transfer your tokens, you need to confirm the transaction in your MetaMask wallet.",
],
};
const transactionErrorContent = {
[TransactionTypes.WITHDRAW_VOTING_RIGHTS]: [
"There was a problem with transferring your tokens",
Please retry your transaction,
],
};
const transactionStatusModalConfig = {
transactionLabels,
transactionSuccessContent,
transactionRejectionContent,
transactionErrorContent,
};
export interface ReclaimTokenProps {
onMobileTransactionClick?(): any;
}
interface ReclaimTokensState {
numTokens?: string;
isReclaimAmountValid?: boolean;
}
class ReclaimTokensComponent extends React.Component<
ReclaimTokenProps & InjectedTransactionStatusModalProps,
ReclaimTokensState
> {
public static contextType = CivilHelperContext;
public context: CivilHelper;
constructor(props: ReclaimTokenProps & InjectedTransactionStatusModalProps) {
super(props);
this.state = {
numTokens: "0",
isReclaimAmountValid: true,
};
}
public componentWillMount(): void {
this.props.setTransactions(this.getTransactions());
}
public render(): JSX.Element {
return (
<>
<>
CVL>}
onChange={this.updateViewState}
/>
Transfer
>
>
);
}
private getTransactions = (): any[] => {
return [
{
transaction: async () => {
this.props.updateTransactionStatusModalsState({
isWaitingTransactionModalOpen: true,
isTransactionProgressModalOpen: false,
isTransactionSuccessModalOpen: false,
transactionType: TransactionTypes.WITHDRAW_VOTING_RIGHTS,
});
return this.withdrawVotingRights();
},
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 withdrawVotingRights = async (): Promise | void> => {
const numTokens = parseEther(this.state.numTokens!);
return this.context.withdrawVotingRights(numTokens);
};
private updateViewState = (name: string, value: string): void => {
this.setState(() => ({ [name]: value }));
};
}
export default hasTransactionStatusModals(transactionStatusModalConfig)(ReclaimTokensComponent) as React.ComponentClass<
ReclaimTokenProps & InjectedTransactionStatusModalProps
>;