aboutsummaryrefslogtreecommitdiff
path: root/src/components/settings_modal/helpers/setting.js
blob: dc37675c47a6b5e86fa15153f680d1d39d561bd1 (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
import { get, set } from 'lodash'
export default {
  props: {
    path: {
      type: String,
      required: true
    },
    disabled: {
      type: Boolean,
      default: false
    },
    parentPath: {
      type: String
    },
    parentInvert: {
      type: Boolean,
      default: false
    },
    expert: {
      type: [Number, String],
      default: 0
    },
    source: {
      type: String,
      default: 'default'
    }
  },
  computed: {
    state () {
      const value = get(this.configSource, this.path)
      if (value === undefined) {
        return this.defaultState
      } else {
        return value
      }
    },
    shouldBeDisabled () {
      const parentValue = this.parentPath !== undefined ? get(this.configSource, this.parentPath) : null
      return this.disabled || (parentValue !== null ? (this.parentInvert ? parentValue : !parentValue) : false)
    },
    configSource () {
      switch (this.source) {
        case 'profile':
          return this.$store.state.profileConfig
        default:
          return this.$store.getters.mergedConfig
      }
    },
    configSink () {
      switch (this.source) {
        case 'profile':
          return (k, v) => this.$store.dispatch('setProfileOption', { name: k, value: v })
        default:
          return (k, v) => this.$store.dispatch('setOption', { name: k, value: v })
      }
    },
    defaultState () {
      switch (this.source) {
        case 'profile':
          return {}
        default:
          return get(this.$store.getters.defaultConfig, this.path)
      }
    },
    isProfileTied () {
      return this.source === 'profile'
    },
    isChanged () {
      return !this.source === 'default' && this.state !== this.defaultState
    },
    matchesExpertLevel () {
      return (this.expert || 0) <= this.$store.state.config.expertLevel > 0
    }
  },
  methods: {
    update (e) {
      console.log('U', this.path, e)
      this.configSink(this.path, e)
    },
    reset () {
      set(this.$store.getters.mergedConfig, this.path, this.defaultState)
    }
  }
}