aboutsummaryrefslogtreecommitdiff
path: root/src/components/mrf_transparency_panel/mrf_transparency_panel.js
blob: 13cfb52eec97e0d93f79bfb4532aca82dab57b3e (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
import { mapState } from 'vuex'
import { get } from 'lodash'

/**
 * This is for backwards compatibility. We originally didn't recieve
 * extra info like a reason why an instance was rejected/quarantined/etc.
 * Because we didn't want to break backwards compatibility it was decided
 * to add an extra "info" key.
 */
const toInstanceReasonObject = (instances, info, key) => {
  return instances.map(instance => {
    if (info[key] && info[key][instance] && info[key][instance].reason) {
      return { instance, reason: info[key][instance].reason }
    }
    return { instance, reason: '' }
  })
}

const MRFTransparencyPanel = {
  computed: {
    ...mapState({
      federationPolicy: state => get(state, 'instance.federationPolicy'),
      mrfPolicies: state => get(state, 'instance.federationPolicy.mrf_policies', []),
      quarantineInstances: state => toInstanceReasonObject(
        get(state, 'instance.federationPolicy.quarantined_instances', []),
        get(state, 'instance.federationPolicy.quarantined_instances_info', []),
        'quarantined_instances'
      ),
      acceptInstances: state => toInstanceReasonObject(
        get(state, 'instance.federationPolicy.mrf_simple.accept', []),
        get(state, 'instance.federationPolicy.mrf_simple_info', []),
        'accept'
      ),
      rejectInstances: state => toInstanceReasonObject(
        get(state, 'instance.federationPolicy.mrf_simple.reject', []),
        get(state, 'instance.federationPolicy.mrf_simple_info', []),
        'reject'
      ),
      ftlRemovalInstances: state => toInstanceReasonObject(
        get(state, 'instance.federationPolicy.mrf_simple.federated_timeline_removal', []),
        get(state, 'instance.federationPolicy.mrf_simple_info', []),
        'federated_timeline_removal'
      ),
      mediaNsfwInstances: state => toInstanceReasonObject(
        get(state, 'instance.federationPolicy.mrf_simple.media_nsfw', []),
        get(state, 'instance.federationPolicy.mrf_simple_info', []),
        'media_nsfw'
      ),
      mediaRemovalInstances: state => toInstanceReasonObject(
        get(state, 'instance.federationPolicy.mrf_simple.media_removal', []),
        get(state, 'instance.federationPolicy.mrf_simple_info', []),
        'media_removal'
      ),
      keywordsFtlRemoval: state => get(state, 'instance.federationPolicy.mrf_keyword.federated_timeline_removal', []),
      keywordsReject: state => get(state, 'instance.federationPolicy.mrf_keyword.reject', []),
      keywordsReplace: state => get(state, 'instance.federationPolicy.mrf_keyword.replace', [])
    }),
    hasInstanceSpecificPolicies () {
      return this.quarantineInstances.length ||
        this.acceptInstances.length ||
        this.rejectInstances.length ||
        this.ftlRemovalInstances.length ||
        this.mediaNsfwInstances.length ||
        this.mediaRemovalInstances.length
    },
    hasKeywordPolicies () {
      return this.keywordsFtlRemoval.length ||
        this.keywordsReject.length ||
        this.keywordsReplace.length
    }
  }
}

export default MRFTransparencyPanel