From 7c2defcf0ec5be2b1a8e4a9f146e27268e4738e7 Mon Sep 17 00:00:00 2001 From: SleeplessOne1917 Date: Thu, 31 Aug 2023 12:34:06 +0000 Subject: [PATCH] Report fix (#2089) * Fix report dialog not closing once submitted. * Refactor * Incorporate suggested changes --- lemmy-translations | 2 +- .../components/comment/comment-node.tsx | 52 +++----------- src/shared/components/common/report-form.tsx | 69 +++++++++++++++++++ src/shared/components/post/post-listing.tsx | 49 +++---------- .../private_message/private-message.tsx | 53 +++----------- 5 files changed, 103 insertions(+), 122 deletions(-) create mode 100644 src/shared/components/common/report-form.tsx diff --git a/lemmy-translations b/lemmy-translations index 22637606..38bb32f6 160000 --- a/lemmy-translations +++ b/lemmy-translations @@ -1 +1 @@ -Subproject commit 22637606f4a4455458e64cefe9f5ec33dccb6c52 +Subproject commit 38bb32f6898b227aaad06a48d8bf69a5b48416d6 diff --git a/src/shared/components/comment/comment-node.tsx b/src/shared/components/comment/comment-node.tsx index fefcc724..8f723ae9 100644 --- a/src/shared/components/comment/comment-node.tsx +++ b/src/shared/components/comment/comment-node.tsx @@ -68,6 +68,7 @@ import { CommunityLink } from "../community/community-link"; import { PersonListing } from "../person/person-listing"; import { CommentForm } from "./comment-form"; import { CommentNodes } from "./comment-nodes"; +import ReportForm from "../common/report-form"; interface CommentNodeState { showReply: boolean; @@ -90,7 +91,6 @@ interface CommentNodeState { viewSource: boolean; showAdvanced: boolean; showReportDialog: boolean; - reportReason?: string; createOrEditCommentLoading: boolean; upvoteLoading: boolean; downvoteLoading: boolean; @@ -105,7 +105,6 @@ interface CommentNodeState { addAdminLoading: boolean; transferCommunityLoading: boolean; fetchChildrenLoading: boolean; - reportLoading: boolean; purgeLoading: boolean; } @@ -179,7 +178,6 @@ export class CommentNode extends Component { addAdminLoading: false, transferCommunityLoading: false, fetchChildrenLoading: false, - reportLoading: false, purgeLoading: false, }; @@ -187,6 +185,7 @@ export class CommentNode extends Component { super(props, context); this.handleReplyCancel = this.handleReplyCancel.bind(this); + this.handleReportComment = this.handleReportComment.bind(this); } get commentView(): CommentView { @@ -232,7 +231,6 @@ export class CommentNode extends Component { addAdminLoading: false, transferCommunityLoading: false, fetchChildrenLoading: false, - reportLoading: false, purgeLoading: false, }); } @@ -978,33 +976,7 @@ export class CommentNode extends Component { )} {this.state.showReportDialog && ( -
- - - -
+ )} {this.state.showBanDialog && (
@@ -1279,10 +1251,6 @@ export class CommentNode extends Component { i.setState({ showReportDialog: !i.state.showReportDialog }); } - handleReportReasonChange(i: CommentNode, event: any) { - i.setState({ reportReason: event.target.value }); - } - handleModRemoveShow(i: CommentNode) { i.setState({ showRemoveDialog: !i.state.showRemoveDialog, @@ -1538,14 +1506,16 @@ export class CommentNode extends Component { }); } - handleReportComment(i: CommentNode, event: any) { - event.preventDefault(); - i.setState({ reportLoading: true }); - i.props.onCommentReport({ - comment_id: i.commentId, - reason: i.state.reportReason ?? "", + handleReportComment(reason: string) { + this.props.onCommentReport({ + comment_id: this.commentId, + reason, auth: myAuthRequired(), }); + + this.setState({ + showReportDialog: false, + }); } handlePurgeBothSubmit(i: CommentNode, event: any) { diff --git a/src/shared/components/common/report-form.tsx b/src/shared/components/common/report-form.tsx new file mode 100644 index 00000000..b58da594 --- /dev/null +++ b/src/shared/components/common/report-form.tsx @@ -0,0 +1,69 @@ +import { Component, linkEvent } from "inferno"; +import { I18NextService } from "../../services/I18NextService"; +import { Spinner } from "./icon"; +import { randomStr } from "@utils/helpers"; + +interface ReportFormProps { + onSubmit: (reason: string) => void; +} + +interface ReportFormState { + loading: boolean; + reason: string; +} + +function handleReportReasonChange(i: ReportForm, event: any) { + i.setState({ reason: event.target.value }); +} + +function handleReportSubmit(i: ReportForm, event: any) { + event.preventDefault(); + i.setState({ loading: true }); + i.props.onSubmit(i.state.reason); + + i.setState({ + loading: false, + reason: "", + }); +} + +export default class ReportForm extends Component< + ReportFormProps, + ReportFormState +> { + state: ReportFormState = { + loading: false, + reason: "", + }; + constructor(props, context) { + super(props, context); + } + + render() { + const { loading, reason } = this.state; + const id = `report-form-${randomStr()}`; + + return ( + + + + + + ); + } +} diff --git a/src/shared/components/post/post-listing.tsx b/src/shared/components/post/post-listing.tsx index 95d1a468..6a1a0cf8 100644 --- a/src/shared/components/post/post-listing.tsx +++ b/src/shared/components/post/post-listing.tsx @@ -62,6 +62,7 @@ import { CommunityLink } from "../community/community-link"; import { PersonListing } from "../person/person-listing"; import { MetadataCard } from "./metadata-card"; import { PostForm } from "./post-form"; +import ReportForm from "../common/report-form"; interface PostListingState { showEdit: boolean; @@ -84,8 +85,6 @@ interface PostListingState { showMoreMobile: boolean; showBody: boolean; showReportDialog: boolean; - reportReason?: string; - reportLoading: boolean; blockLoading: boolean; lockLoading: boolean; deleteLoading: boolean; @@ -152,7 +151,6 @@ export class PostListing extends Component { showBody: false, showReportDialog: false, purgeLoading: false, - reportLoading: false, blockLoading: false, lockLoading: false, deleteLoading: false, @@ -176,13 +174,13 @@ export class PostListing extends Component { this.handleEditPost = this.handleEditPost.bind(this); this.handleEditCancel = this.handleEditCancel.bind(this); + this.handleReportSubmit = this.handleReportSubmit.bind(this); } componentWillReceiveProps(nextProps: PostListingProps) { if (this.props !== nextProps) { this.setState({ purgeLoading: false, - reportLoading: false, blockLoading: false, lockLoading: false, deleteLoading: false, @@ -1288,30 +1286,7 @@ export class PostListing extends Component { )} {this.state.showReportDialog && ( -
- - - -
+ )} {this.state.showPurgeDialog && (
{ i.setState({ showReportDialog: !i.state.showReportDialog }); } - handleReportReasonChange(i: PostListing, event: any) { - i.setState({ reportReason: event.target.value }); - } - - handleReportSubmit(i: PostListing, event: any) { - event.preventDefault(); - i.setState({ reportLoading: true }); - i.props.onPostReport({ - post_id: i.postView.post.id, - reason: i.state.reportReason ?? "", + handleReportSubmit(reason: string) { + this.props.onPostReport({ + post_id: this.postView.post.id, + reason, auth: myAuthRequired(), }); + + this.setState({ + showReportDialog: false, + }); } handleBlockPersonClick(i: PostListing) { diff --git a/src/shared/components/private_message/private-message.tsx b/src/shared/components/private_message/private-message.tsx index c185c11e..cc09418c 100644 --- a/src/shared/components/private_message/private-message.tsx +++ b/src/shared/components/private_message/private-message.tsx @@ -15,6 +15,7 @@ import { Icon, Spinner } from "../common/icon"; import { MomentTime } from "../common/moment-time"; import { PersonListing } from "../person/person-listing"; import { PrivateMessageForm } from "./private-message-form"; +import ReportForm from "../common/report-form"; interface PrivateMessageState { showReply: boolean; @@ -22,10 +23,8 @@ interface PrivateMessageState { collapsed: boolean; viewSource: boolean; showReportDialog: boolean; - reportReason?: string; deleteLoading: boolean; readLoading: boolean; - reportLoading: boolean; } interface PrivateMessageProps { @@ -49,12 +48,12 @@ export class PrivateMessage extends Component< showReportDialog: false, deleteLoading: false, readLoading: false, - reportLoading: false, }; constructor(props: any, context: any) { super(props, context); this.handleReplyCancel = this.handleReplyCancel.bind(this); + this.handleReportSubmit = this.handleReportSubmit.bind(this); } get mine(): boolean { @@ -76,7 +75,6 @@ export class PrivateMessage extends Component< showReportDialog: false, deleteLoading: false, readLoading: false, - reportLoading: false, }); } } @@ -251,34 +249,7 @@ export class PrivateMessage extends Component< )} {this.state.showReportDialog && ( - - - - -
+ )} {this.state.showReply && (
@@ -362,17 +333,15 @@ export class PrivateMessage extends Component< i.setState({ showReportDialog: !i.state.showReportDialog }); } - handleReportReasonChange(i: PrivateMessage, event: any) { - i.setState({ reportReason: event.target.value }); - } - - handleReportSubmit(i: PrivateMessage, event: any) { - event.preventDefault(); - i.setState({ reportLoading: true }); - i.props.onReport({ - private_message_id: i.props.private_message_view.private_message.id, - reason: i.state.reportReason ?? "", + handleReportSubmit(reason: string) { + this.props.onReport({ + private_message_id: this.props.private_message_view.private_message.id, + reason, auth: myAuthRequired(), }); + + this.setState({ + showReportDialog: false, + }); } }