aboutsummaryrefslogtreecommitdiff
path: root/src/components/user_reporting_modal/user_reporting_modal.js
blob: 67fde084463c4c49dc6000e8d51bd4482258040a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import Status from '../status/status.vue'
import List from '../list/list.vue'
import Checkbox from '../checkbox/checkbox.vue'
import Modal from '../modal/modal.vue'
import UserLink from '../user_link/user_link.vue'

const UserReportingModal = {
  components: {
    Status,
    List,
    Checkbox,
    Modal,
    UserLink
  },
  data () {
    return {
      comment: '',
      forward: false,
      statusIdsToReport: [],
      processing: false,
      error: false
    }
  },
  computed: {
    reportModal () {
      return this.$store.state.reports.reportModal
    },
    isLoggedIn () {
      return !!this.$store.state.users.currentUser
    },
    isOpen () {
      return this.isLoggedIn && this.reportModal.activated
    },
    userId () {
      return this.reportModal.userId
    },
    user () {
      return this.$store.getters.findUser(this.userId)
    },
    remoteInstance () {
      return !this.user.is_local && this.user.screen_name.substr(this.user.screen_name.indexOf('@') + 1)
    },
    statuses () {
      return this.reportModal.statuses
    },
    preTickedIds () {
      return this.reportModal.preTickedIds
    }
  },
  watch: {
    userId: 'resetState',
    preTickedIds (newValue) {
      this.statusIdsToReport = newValue
    }
  },
  methods: {
    resetState () {
      // Reset state
      this.comment = ''
      this.forward = false
      this.statusIdsToReport = this.preTickedIds
      this.processing = false
      this.error = false
    },
    closeModal () {
      this.$store.dispatch('closeUserReportingModal')
    },
    reportUser () {
      this.processing = true
      this.error = false
      const params = {
        userId: this.userId,
        comment: this.comment,
        forward: this.forward,
        statusIds: this.statusIdsToReport
      }
      this.$store.state.api.backendInteractor.reportUser({ ...params })
        .then(() => {
          this.processing = false
          this.resetState()
          this.closeModal()
        })
        .catch(() => {
          this.processing = false
          this.error = true
        })
    },
    clearError () {
      this.error = false
    },
    isChecked (statusId) {
      return this.statusIdsToReport.indexOf(statusId) !== -1
    },
    toggleStatus (checked, statusId) {
      if (checked === this.isChecked(statusId)) {
        return
      }

      if (checked) {
        this.statusIdsToReport.push(statusId)
      } else {
        this.statusIdsToReport.splice(this.statusIdsToReport.indexOf(statusId), 1)
      }
    },
    resize (e) {
      const target = e.target || e
      if (!(target instanceof window.Element)) { return }
      // Auto is needed to make textbox shrink when removing lines
      target.style.height = 'auto'
      target.style.height = `${target.scrollHeight}px`
      if (target.value === '') {
        target.style.height = null
      }
    }
  }
}

export default UserReportingModal