1 import { Component, InfernoNode, 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 { myAuthRequired } from "../../utils";
6 import { Icon, Spinner } from "../common/icon";
7 import { PersonListing } from "../person/person-listing";
8 import { PostListing } from "./post-listing";
10 interface PostReportProps {
11 report: PostReportView;
12 onResolveReport(form: ResolvePostReport): void;
15 interface PostReportState {
19 export class PostReport extends Component<PostReportProps, PostReportState> {
20 state: PostReportState = {
24 constructor(props: any, context: any) {
25 super(props, context);
28 componentWillReceiveProps(
29 nextProps: Readonly<{ children?: InfernoNode } & PostReportProps>
31 if (this.props != nextProps) {
32 this.setState({ loading: false });
37 const r = this.props.report;
38 const resolver = r.resolver;
40 const tippyContent = i18n.t(
41 r.post_report.resolved ? "unresolve_report" : "resolve_report"
44 // Set the original post data ( a troll could change it )
45 post.name = r.post_report.original_post_name;
46 post.url = r.post_report.original_post_url;
47 post.body = r.post_report.original_post_body;
48 const pv: PostView = {
50 creator: r.post_creator,
51 community: r.community,
52 creator_banned_from_community: r.creator_banned_from_community,
54 subscribed: "NotSubscribed",
57 creator_blocked: false,
63 <div className="post-report">
67 enableDownvotes={true}
73 // All of these are unused, since its view only
76 onPostReport={() => {}}
77 onBlockPerson={() => {}}
79 onDeletePost={() => {}}
80 onRemovePost={() => {}}
82 onFeaturePost={() => {}}
83 onPurgePerson={() => {}}
84 onPurgePost={() => {}}
85 onBanPersonFromCommunity={() => {}}
86 onBanPerson={() => {}}
87 onAddModToCommunity={() => {}}
89 onTransferCommunity={() => {}}
92 {i18n.t("reporter")}: <PersonListing person={r.creator} />
95 {i18n.t("reason")}: {r.post_report.reason}
99 {r.post_report.resolved ? (
100 <T i18nKey="resolved_by">
102 <PersonListing person={resolver} />
105 <T i18nKey="unresolved_by">
107 <PersonListing person={resolver} />
113 className="btn btn-link btn-animate text-muted py-0"
114 onClick={linkEvent(this, this.handleResolveReport)}
115 data-tippy-content={tippyContent}
116 aria-label={tippyContent}
118 {this.state.loading ? (
123 classes={`icon-inline ${
124 r.post_report.resolved ? "text-success" : "text-danger"
133 handleResolveReport(i: PostReport) {
134 i.setState({ loading: true });
135 i.props.onResolveReport({
136 report_id: i.props.report.post_report.id,
137 resolved: !i.props.report.post_report.resolved,
138 auth: myAuthRequired(),