]> Untitled Git - lemmy-ui.git/blob - src/shared/components/post/post-report.tsx
Adding Community Language fixes. #783 (#868)
[lemmy-ui.git] / src / shared / components / post / post-report.tsx
1 import { None } from "@sniptt/monads";
2 import { Component, linkEvent } from "inferno";
3 import { T } from "inferno-i18next-dess";
4 import {
5   PostReportView,
6   PostView,
7   ResolvePostReport,
8   SubscribedType,
9 } from "lemmy-js-client";
10 import { i18n } from "../../i18next";
11 import { WebSocketService } from "../../services";
12 import { auth, wsClient } from "../../utils";
13 import { Icon } from "../common/icon";
14 import { PersonListing } from "../person/person-listing";
15 import { PostListing } from "./post-listing";
16
17 interface PostReportProps {
18   report: PostReportView;
19 }
20
21 export class PostReport extends Component<PostReportProps, any> {
22   constructor(props: any, context: any) {
23     super(props, context);
24   }
25
26   render() {
27     let r = this.props.report;
28     let post = r.post;
29     let tippyContent = i18n.t(
30       r.post_report.resolved ? "unresolve_report" : "resolve_report"
31     );
32
33     // Set the original post data ( a troll could change it )
34     post.name = r.post_report.original_post_name;
35     post.url = r.post_report.original_post_url;
36     post.body = r.post_report.original_post_body;
37     let pv: PostView = {
38       post,
39       creator: r.post_creator,
40       community: r.community,
41       creator_banned_from_community: r.creator_banned_from_community,
42       counts: r.counts,
43       subscribed: SubscribedType.NotSubscribed,
44       saved: false,
45       read: false,
46       creator_blocked: false,
47       my_vote: r.my_vote,
48       unread_comments: 0,
49     };
50
51     return (
52       <div>
53         <PostListing
54           post_view={pv}
55           duplicates={None}
56           moderators={None}
57           admins={None}
58           showCommunity={true}
59           enableDownvotes={true}
60           enableNsfw={true}
61           viewOnly={true}
62           allLanguages={[]}
63           siteLanguages={[]}
64           hideImage
65         />
66         <div>
67           {i18n.t("reporter")}: <PersonListing person={r.creator} />
68         </div>
69         <div>
70           {i18n.t("reason")}: {r.post_report.reason}
71         </div>
72         {r.resolver.match({
73           some: resolver => (
74             <div>
75               {r.post_report.resolved ? (
76                 <T i18nKey="resolved_by">
77                   #
78                   <PersonListing person={resolver} />
79                 </T>
80               ) : (
81                 <T i18nKey="unresolved_by">
82                   #
83                   <PersonListing person={resolver} />
84                 </T>
85               )}
86             </div>
87           ),
88           none: <></>,
89         })}
90         <button
91           className="btn btn-link btn-animate text-muted py-0"
92           onClick={linkEvent(this, this.handleResolveReport)}
93           data-tippy-content={tippyContent}
94           aria-label={tippyContent}
95         >
96           <Icon
97             icon="check"
98             classes={`icon-inline ${
99               r.post_report.resolved ? "text-success" : "text-danger"
100             }`}
101           />
102         </button>
103       </div>
104     );
105   }
106
107   handleResolveReport(i: PostReport) {
108     let form = new ResolvePostReport({
109       report_id: i.props.report.post_report.id,
110       resolved: !i.props.report.post_report.resolved,
111       auth: auth().unwrap(),
112     });
113     WebSocketService.Instance.send(wsClient.resolvePostReport(form));
114   }
115 }