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