fix: Specify vote content type so buttons work for both comments and posts

This commit is contained in:
Jay Sitter 2023-06-23 12:14:24 -04:00
parent c8a05fb290
commit 41c9b3baf9
4 changed files with 51 additions and 12 deletions

View file

@ -52,6 +52,7 @@ import {
CommentNodeI,
CommentViewType,
PurgeType,
VoteContentType,
} from "../../interfaces";
import { mdToHtml, mdToHtmlNoImages } from "../../markdown";
import { I18NextService, UserService } from "../../services";
@ -437,6 +438,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
{UserService.Instance.myUserInfo && !this.props.viewOnly && (
<>
<VoteButtonsCompact
voteContentType={VoteContentType.Comment}
id={this.commentView.comment.id}
onVote={this.props.onCommentVote}
enableDownvotes={this.props.enableDownvotes}

View file

@ -8,11 +8,12 @@ import {
CreatePostLike,
PostAggregates,
} from "lemmy-js-client";
import { VoteType } from "../../interfaces";
import { VoteContentType, VoteType } from "../../interfaces";
import { I18NextService } from "../../services";
import { Icon, Spinner } from "../common/icon";
interface VoteButtonsProps {
voteContentType: VoteContentType;
id: number;
onVote: (i: CreateCommentLike | CreatePostLike) => void;
enableDownvotes?: boolean;
@ -46,21 +47,45 @@ const tippy = (counts: CommentAggregates | PostAggregates): string => {
const handleUpvote = (i: VoteButtons) => {
i.setState({ upvoteLoading: true });
switch (i.props.voteContentType) {
case VoteContentType.Comment:
i.props.onVote({
id: i.props.id,
comment_id: i.props.id,
score: newVote(VoteType.Upvote, i.props.my_vote),
auth: myAuthRequired(),
});
break;
case VoteContentType.Post:
default:
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 });
switch (i.props.voteContentType) {
case VoteContentType.Comment:
i.props.onVote({
id: i.props.id,
comment_id: i.props.id,
score: newVote(VoteType.Downvote, i.props.my_vote),
auth: myAuthRequired(),
});
break;
case VoteContentType.Post:
default:
i.props.onVote({
post_id: i.props.id,
score: newVote(VoteType.Downvote, i.props.my_vote),
auth: myAuthRequired(),
});
}
i.setState({ downvoteLoading: false });
};

View file

@ -43,7 +43,12 @@ import {
TransferCommunity,
} from "lemmy-js-client";
import { relTags } from "../../config";
import { BanType, PostFormParams, PurgeType } from "../../interfaces";
import {
BanType,
PostFormParams,
PurgeType,
VoteContentType,
} from "../../interfaces";
import { mdNoImages, mdToHtml, mdToHtmlInline } from "../../markdown";
import { I18NextService, UserService } from "../../services";
import { setupTippy } from "../../tippy";
@ -598,6 +603,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
)}
{mobile && !this.props.viewOnly && (
<VoteButtonsCompact
voteContentType={VoteContentType.Post}
id={this.postView.post.id}
onVote={this.props.onPostVote}
enableDownvotes={this.props.enableDownvotes}
@ -1380,6 +1386,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
<article className="row post-container">
{!this.props.viewOnly && (
<VoteButtons
voteContentType={VoteContentType.Post}
id={this.postView.post.id}
onVote={this.props.onPostVote}
enableDownvotes={this.props.enableDownvotes}

View file

@ -77,6 +77,11 @@ export enum VoteType {
Downvote,
}
export enum VoteContentType {
Post,
Comment,
}
export interface CommentNodeI {
comment_view: CommentView;
children: Array<CommentNodeI>;