import React, { useState } from "react";
import { Icon, Button, Message, Divider, Header } from "semantic-ui-react";
import useVoteStyles from "./useVoteStyles";
import TxButton from "@polkadot/joy-utils/TxButton";
import { MemberId } from "@joystream/types/members";
import { ProposalId } from "@joystream/types/proposals";
import { useTransport } from "../runtime";
import { VoteKind } from '@joystream/types/proposals';
import { usePromise } from "../utils";
import { VoteKinds } from "@joystream/types/proposals";
export type VoteKindStr = typeof VoteKinds[number];
type VoteButtonProps = {
memberId: MemberId,
voteKind: VoteKindStr,
proposalId: ProposalId,
onSuccess: () => void
}
function VoteButton({ voteKind, proposalId, memberId, onSuccess }: VoteButtonProps) {
const { icon, color } = useVoteStyles(voteKind);
return (
// Button.Group "cheat" to force TxButton color
sendTx() }
txFailedCb={ () => null }
txSuccessCb={ onSuccess }
className={`icon left labeled`}>
{ voteKind }
)
}
type VotingSectionProps = {
memberId: MemberId,
proposalId: ProposalId,
isVotingPeriod: boolean,
};
export default function VotingSection({
memberId,
proposalId,
isVotingPeriod
}: VotingSectionProps) {
const transport = useTransport();
const [voted, setVoted] = useState(null);
const [vote] = usePromise(
() => transport.voteByProposalAndMember(proposalId, memberId),
undefined
);
if (vote === undefined) {
// Loading / error
return null;
}
const voteStr: VoteKindStr | null = voted || (vote && vote.type.toString() as VoteKindStr);
if (voteStr) {
const { icon, color } = useVoteStyles(voteStr);
return (
You voted {`"${voteStr}"`}
);
}
else if (!isVotingPeriod) {
return null;
}
return (
<>
{ VoteKinds.map((voteKind) =>
setVoted(voteKind) }/>
) }
>
);
}