diff options
Diffstat (limited to 'src/components/settings_modal/helpers/setting.js')
| -rw-r--r-- | src/components/settings_modal/helpers/setting.js | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/components/settings_modal/helpers/setting.js b/src/components/settings_modal/helpers/setting.js new file mode 100644 index 00000000..dc37675c --- /dev/null +++ b/src/components/settings_modal/helpers/setting.js @@ -0,0 +1,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) + } + } +} |
