From: Jay Sitter <jay@jaysitter.com>
Date: Fri, 23 Jun 2023 16:14:24 +0000 (-0400)
Subject: fix: Specify vote content type so buttons work for both comments and posts
X-Git-Url: http://these/git/%24%7B%60data:application/static/%7B%60https:/%24%7Bi.domain%7D%60%7D?a=commitdiff_plain;h=41c9b3baf9af72593833fc03b253fe2f9d103726;p=lemmy-ui.git

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

diff --git a/src/shared/components/comment/comment-node.tsx b/src/shared/components/comment/comment-node.tsx
index d38a7af..2fabba1 100644
--- a/src/shared/components/comment/comment-node.tsx
+++ b/src/shared/components/comment/comment-node.tsx
@@ -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}
diff --git a/src/shared/components/common/vote-buttons.tsx b/src/shared/components/common/vote-buttons.tsx
index b337794..f6113c4 100644
--- a/src/shared/components/common/vote-buttons.tsx
+++ b/src/shared/components/common/vote-buttons.tsx
@@ -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 });
-  i.props.onVote({
-    id: i.props.id,
-    score: newVote(VoteType.Upvote, i.props.my_vote),
-    auth: myAuthRequired(),
-  });
+
+  switch (i.props.voteContentType) {
+    case VoteContentType.Comment:
+      i.props.onVote({
+        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 });
-  i.props.onVote({
-    id: i.props.id,
-    score: newVote(VoteType.Downvote, i.props.my_vote),
-    auth: myAuthRequired(),
-  });
+  switch (i.props.voteContentType) {
+    case VoteContentType.Comment:
+      i.props.onVote({
+        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 });
 };
 
diff --git a/src/shared/components/post/post-listing.tsx b/src/shared/components/post/post-listing.tsx
index e8ab95e..5a5ffe0 100644
--- a/src/shared/components/post/post-listing.tsx
+++ b/src/shared/components/post/post-listing.tsx
@@ -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}
diff --git a/src/shared/interfaces.ts b/src/shared/interfaces.ts
index 6946fd3..b37dbd3 100644
--- a/src/shared/interfaces.ts
+++ b/src/shared/interfaces.ts
@@ -77,6 +77,11 @@ export enum VoteType {
   Downvote,
 }
 
+export enum VoteContentType {
+  Post,
+  Comment,
+}
+
 export interface CommentNodeI {
   comment_view: CommentView;
   children: Array<CommentNodeI>;