diff --git a/src/CONST.js b/src/CONST.js index 8806b2a5a530..182548b4d99e 100755 --- a/src/CONST.js +++ b/src/CONST.js @@ -2429,6 +2429,12 @@ const CONST = { // This ID is used in SelectionScraper.js to query the DOM for UnreadActionIndicator's // div and then remove it from copied contents in the getHTMLOfSelection() method. UNREAD_ACTION_INDICATOR_ID: 'no-copy-area-unread-action-indicator', + MODERATION: { + MODERATOR_DECISION_PENDING: 'pending', + MODERATOR_DECISION_PENDING_HIDE: 'pendingHide', + FLAG_SEVERITY_SPAM: 'spam', + FLAG_SEVERITY_INCONSIDERATE: 'inconsiderate', + }, }; export default CONST; diff --git a/src/libs/actions/Report.js b/src/libs/actions/Report.js index 2c6101d32cb7..e7d37ecea837 100644 --- a/src/libs/actions/Report.js +++ b/src/libs/actions/Report.js @@ -1677,6 +1677,81 @@ function leaveRoom(reportID) { navigateToConciergeChat(); } +/** + * Flag a comment as offensive + * + * @param {String} reportID + * @param {Object} reportAction + * @param {String} severity + */ +function flagComment(reportID, reportAction, severity) { + let newDecision; + if (severity === CONST.MODERATION.FLAG_SEVERITY_SPAM || severity === CONST.MODERATION.FLAG_SEVERITY_INCONSIDERATE) { + newDecision = { + decision: CONST.MODERATION.MODERATOR_DECISION_PENDING, + }; + } else { + newDecision = { + decision: CONST.MODERATION.MODERATOR_DECISION_PENDING_HIDE, + }; + } + + const message = reportAction.message[0]; + const reportActionID = reportAction.reportActionID; + + const updatedDecisions = [...(message.moderationDecisions || []), newDecision]; + + const updatedMessage = { + ...message, + moderationDecisions: updatedDecisions, + }; + + const optimisticData = [ + { + onyxMethod: CONST.ONYX.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, + value: { + [reportActionID]: { + pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, + message: [updatedMessage], + }, + }, + }, + ]; + + const failureData = [ + { + onyxMethod: CONST.ONYX.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, + value: { + [reportActionID]: { + ...reportAction, + pendingAction: null, + }, + }, + }, + ]; + + const successData = [ + { + onyxMethod: CONST.ONYX.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, + value: { + [reportActionID]: { + pendingAction: null, + }, + }, + }, + ]; + + const parameters = { + severity, + reportActionID, + }; + + API.write('FlagComment', parameters, {optimisticData, successData, failureData}); +} + export { addComment, addAttachment, @@ -1721,4 +1796,5 @@ export { hasAccountIDReacted, shouldShowReportActionNotification, leaveRoom, + flagComment, };