import { myAuthRequired, newVote, showScores } from "@utils/app"; import { numToSI } from "@utils/helpers"; import classNames from "classnames"; import { Component, linkEvent } from "inferno"; import { CommentAggregates, CreateCommentLike, CreatePostLike, PostAggregates, } from "lemmy-js-client"; import { VoteType } from "../../interfaces"; import { I18NextService } from "../../services"; import { Icon, Spinner } from "../common/icon"; interface VoteButtonsProps { id: number; onVote: (i: CreatePostLike | CreateCommentLike) => void; enableDownvotes?: boolean; counts: CommentAggregates | PostAggregates; my_vote?: number; } interface VoteButtonsState { upvoteLoading: boolean; downvoteLoading: boolean; } const tippy = (counts: CommentAggregates | PostAggregates): string => { const points = I18NextService.i18n.t("number_of_points", { count: Number(counts.score), formattedCount: Number(counts.score), }); const upvotes = I18NextService.i18n.t("number_of_upvotes", { count: Number(counts.upvotes), formattedCount: Number(counts.upvotes), }); const downvotes = I18NextService.i18n.t("number_of_downvotes", { count: Number(counts.downvotes), formattedCount: Number(counts.downvotes), }); return `${points} • ${upvotes} • ${downvotes}`; }; const handleUpvote = (i: VoteButtons) => { i.setState({ upvoteLoading: true }); i.props.onVote({ post_id: i.props.id, score: newVote(VoteType.Upvote, i.props.my_vote), auth: myAuthRequired(), }); i.setState({ upvoteLoading: false }); }; const handleDownvote = (i: VoteButtons) => { i.setState({ downvoteLoading: true }); i.props.onVote({ post_id: i.props.id, score: newVote(VoteType.Downvote, i.props.my_vote), auth: myAuthRequired(), }); i.setState({ downvoteLoading: false }); }; export class VoteButtonsCompact extends Component< VoteButtonsProps, VoteButtonsState > { state: VoteButtonsState = { upvoteLoading: false, downvoteLoading: false, }; constructor(props: any, context: any) { super(props, context); } render() { return (
{this.props.enableDownvotes && ( )}
); } } export class VoteButtons extends Component { state: VoteButtonsState = { upvoteLoading: false, downvoteLoading: false, }; constructor(props: any, context: any) { super(props, context); } render() { return (
{showScores() ? (
{numToSI(this.props.counts.score)}
) : (
)} {this.props.enableDownvotes && ( )}
); } }