From 65dbf7b85d680f0855e9f6706a4437d2f4a52227 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson <shp@cock.li>
Date: Tue, 12 Jan 2021 14:43:21 +0200
Subject: [PATCH] Add report button to status ellipsis menu

---
 CHANGELOG.md                                     |  3 +++
 .../account_actions/account_actions.js           |  2 +-
 src/components/extra_buttons/extra_buttons.js    |  9 +++++++--
 src/components/extra_buttons/extra_buttons.vue   | 10 ++++++++++
 .../user_reporting_modal/user_reporting_modal.js |  2 +-
 src/modules/reports.js                           | 16 ++++++++++++----
 .../entity_normalizer.service.js                 |  1 -
 7 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4f270bfeaf..7164eb2656 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
 
 ## [Unreleased]
+### Added
+- Added Report button to status ellipsis menu for easier reporting
+
 ### Fixed
 - Follows/Followers tabs on user profiles now display the content properly.
 - Handle punycode in screen names
diff --git a/src/components/account_actions/account_actions.js b/src/components/account_actions/account_actions.js
index 395d6685e1..e53c4f773d 100644
--- a/src/components/account_actions/account_actions.js
+++ b/src/components/account_actions/account_actions.js
@@ -35,7 +35,7 @@ const AccountActions = {
       this.$store.dispatch('unblockUser', this.user.id)
     },
     reportUser () {
-      this.$store.dispatch('openUserReportingModal', this.user.id)
+      this.$store.dispatch('openUserReportingModal', { userId: this.user.id })
     },
     openChat () {
       this.$router.push({
diff --git a/src/components/extra_buttons/extra_buttons.js b/src/components/extra_buttons/extra_buttons.js
index b5b29e8a5a..dd45b6b9f9 100644
--- a/src/components/extra_buttons/extra_buttons.js
+++ b/src/components/extra_buttons/extra_buttons.js
@@ -9,7 +9,8 @@ import {
   faExternalLinkAlt
 } from '@fortawesome/free-solid-svg-icons'
 import {
-  faBookmark as faBookmarkReg
+  faBookmark as faBookmarkReg,
+  faFlag
 } from '@fortawesome/free-regular-svg-icons'
 
 library.add(
@@ -19,7 +20,8 @@ library.add(
   faEyeSlash,
   faThumbtack,
   faShareAlt,
-  faExternalLinkAlt
+  faExternalLinkAlt,
+  faFlag
 )
 
 const ExtraButtons = {
@@ -66,6 +68,9 @@ const ExtraButtons = {
       this.$store.dispatch('unbookmark', { id: this.status.id })
         .then(() => this.$emit('onSuccess'))
         .catch(err => this.$emit('onError', err.error.error))
+    },
+    reportStatus () {
+      this.$store.dispatch('openUserReportingModal', { userId: this.status.user.id, statusIds: [this.status.id] })
     }
   },
   computed: {
diff --git a/src/components/extra_buttons/extra_buttons.vue b/src/components/extra_buttons/extra_buttons.vue
index dc790cad7e..e845d8fc5a 100644
--- a/src/components/extra_buttons/extra_buttons.vue
+++ b/src/components/extra_buttons/extra_buttons.vue
@@ -109,6 +109,16 @@
             icon="external-link-alt"
           /><span>{{ $t("status.external_source") }}</span>
         </a>
+        <button
+          class="button-default dropdown-item dropdown-item-icon"
+          @click.prevent="reportStatus"
+          @click="close"
+        >
+          <FAIcon
+            fixed-width
+            :icon="['far', 'flag']"
+          /><span>{{ $t("user_card.report") }}</span>
+        </button>
       </div>
     </div>
     <span
diff --git a/src/components/user_reporting_modal/user_reporting_modal.js b/src/components/user_reporting_modal/user_reporting_modal.js
index 38cf117bf0..5ec4a5dfde 100644
--- a/src/components/user_reporting_modal/user_reporting_modal.js
+++ b/src/components/user_reporting_modal/user_reporting_modal.js
@@ -48,7 +48,7 @@ const UserReportingModal = {
       // Reset state
       this.comment = ''
       this.forward = false
-      this.statusIdsToReport = []
+      this.statusIdsToReport = this.$store.state.reports.preTickedIds
       this.processing = false
       this.error = false
     },
diff --git a/src/modules/reports.js b/src/modules/reports.js
index 904022f1b1..c6026f38b7 100644
--- a/src/modules/reports.js
+++ b/src/modules/reports.js
@@ -4,12 +4,14 @@ const reports = {
   state: {
     userId: null,
     statuses: [],
+    preTicked: [],
     modalActivated: false
   },
   mutations: {
-    openUserReportingModal (state, { userId, statuses }) {
+    openUserReportingModal (state, { userId, statuses, preTickedIds }) {
       state.userId = userId
       state.statuses = statuses
+      state.preTickedIds = preTickedIds
       state.modalActivated = true
     },
     closeUserReportingModal (state) {
@@ -17,9 +19,15 @@ const reports = {
     }
   },
   actions: {
-    openUserReportingModal ({ rootState, commit }, userId) {
-      const statuses = filter(rootState.statuses.allStatuses, status => status.user.id === userId)
-      commit('openUserReportingModal', { userId, statuses })
+    openUserReportingModal ({ rootState, commit }, { userId, statusIds = [] }) {
+      const preTickedStatuses = statusIds.map(id => rootState.statuses.allStatusesObject[id])
+      const preTickedIds = statusIds
+      const statuses = preTickedStatuses.concat(
+        filter(rootState.statuses.allStatuses,
+          status => status.user.id === userId && !preTickedIds.includes(status.id)
+        )
+      )
+      commit('openUserReportingModal', { userId, statuses, preTickedIds })
     },
     closeUserReportingModal ({ commit }) {
       commit('closeUserReportingModal')
diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js
index 206e628177..625f593ea9 100644
--- a/src/services/entity_normalizer/entity_normalizer.service.js
+++ b/src/services/entity_normalizer/entity_normalizer.service.js
@@ -201,7 +201,6 @@ export const parseUser = (data) => {
   // Convert punycode to unicode
   if (output.screen_name.includes('@')) {
     const parts = output.screen_name.split('@')
-    console.log(parts)
     let unicodeDomain = punycode.toUnicode(parts[1])
     if (unicodeDomain !== parts[1]) {
       // Add some identifier so users can potentially spot spoofing attempts:
-- 
GitLab