diff --git a/app/assets/stylesheets/chat.scss b/app/assets/stylesheets/chat.scss
index ebfc68bac..e20290263 100644
--- a/app/assets/stylesheets/chat.scss
+++ b/app/assets/stylesheets/chat.scss
@@ -1266,6 +1266,21 @@
}
}
+.report__abuse-options {
+ .crayons-field + .crayons-field {
+ margin-top: var(--su-2);
+ }
+}
+
+.report__abuse__button {
+ width: 135px;
+}
+.reported__message {
+ border: 1px solid;
+ max-height: 300px;
+ overflow: scroll;
+}
+
.membership-section {
position: relative;
diff --git a/app/controllers/feedback_messages_controller.rb b/app/controllers/feedback_messages_controller.rb
index 13d3808ba..e9016e15a 100644
--- a/app/controllers/feedback_messages_controller.rb
+++ b/app/controllers/feedback_messages_controller.rb
@@ -10,7 +10,7 @@ class FeedbackMessagesController < ApplicationController
@feedback_message = FeedbackMessage.new(params)
recaptcha_enabled = ReCaptcha::CheckEnabled.call(current_user)
- if (!recaptcha_enabled || recaptcha_verified?) && @feedback_message.save
+ if (!recaptcha_enabled || recaptcha_verified? || connect_feedback?) && @feedback_message.save
Slack::Messengers::Feedback.call(
user: current_user,
type: feedback_message_params[:feedback_type],
@@ -20,12 +20,24 @@ class FeedbackMessagesController < ApplicationController
)
rate_limiter.track_limit_by_action(:feedback_message_creation)
- redirect_to feedback_messages_path
+ respond_to do |format|
+ format.html { redirect_to feedback_messages_path }
+ format.json { render json: { success: true, message: "Your report is submitted" } }
+ end
else
@previous_message = feedback_message_params[:message]
-
flash[:notice] = "Make sure the forms are filled 🤖"
- render "pages/report_abuse"
+
+ respond_to do |format|
+ format.html { render "pages/report_abuse" }
+ format.json do
+ render json: {
+ success: false,
+ message: @feedback_message.errors_as_sentence,
+ status: :bad_request
+ }
+ end
+ end
end
end
@@ -36,8 +48,12 @@ class FeedbackMessagesController < ApplicationController
params["g-recaptcha-response"] && verify_recaptcha(recaptcha_params)
end
+ def connect_feedback?
+ feedback_message_params[:feedback_type] == "connect"
+ end
+
def feedback_message_params
- allowed_params = %i[message feedback_type category reported_url]
+ allowed_params = %i[message feedback_type category reported_url offender_id]
params.require(:feedback_message).permit(allowed_params)
end
end
diff --git a/app/javascript/chat/ReportAbuse/index.jsx b/app/javascript/chat/ReportAbuse/index.jsx
new file mode 100644
index 000000000..16c9013f0
--- /dev/null
+++ b/app/javascript/chat/ReportAbuse/index.jsx
@@ -0,0 +1,149 @@
+import { h, Fragment } from 'preact';
+import PropTypes from 'prop-types';
+import { useState } from 'preact/hooks';
+import { reportAbuse, blockUser } from '../actions/requestActions';
+import { addSnackbarItem } from '../../Snackbar';
+import { Button, FormField, RadioButton } from '@crayons';
+
+/**
+ * This component render the report abuse
+ *
+ * @param {object} props
+ * @param {object} props.data
+ * @param {function} props.closeReportAbuseForm
+ *
+ * @component
+ *
+ * @example
+ *
+ *
+ *
+ */
+function ReportAbuse({ data, closeReportAbuseForm }) {
+ const [category, setCategory] = useState(null);
+
+ const handleChange = (e) => {
+ setCategory(e.target.value);
+ };
+
+ const handleSubmit = async () => {
+ const response = await reportAbuse(
+ data.message,
+ 'connect',
+ category,
+ data.user_id,
+ );
+ const { success, message } = response;
+ if (success) {
+ const confirmBlock = window.confirm(
+ `The message will be reported.\n\nWould you like to block this person as well?\n\nThis will:
+ - prevent them from commenting on your posts
+ - block all notifications from them
+ - prevent them from messaging you via chat`,
+ );
+
+ if (confirmBlock) {
+ const response = await blockUser(data.user_id);
+ if (response.result === 'blocked') {
+ addSnackbarItem({
+ message:
+ 'Your report has been submitted and the user has been blocked',
+ });
+ }
+ } else {
+ addSnackbarItem({ message: 'Your report has been submitted.' });
+ }
+ closeReportAbuseForm();
+ } else {
+ addSnackbarItem({ message });
+ }
+ };
+
+ return (
+
+
+
Report Abuse
+
+ Thank you for reporting any abuse that violates our{' '}
+ code of conduct or{' '}
+ terms and conditions. We continue to try to make
+ this environment a great one for everybody.
+