From a1c8fe84a3dc761828af7af8af92add285dbae6a Mon Sep 17 00:00:00 2001 From: Angelina Filippova <linakirsanova@gmail.com> Date: Sun, 5 Jan 2020 12:30:16 +0700 Subject: [PATCH] Fix proxy_url input for Upload tab --- src/store/modules/normalizers.js | 7 +-- src/views/settings/components/Inputs.vue | 2 +- .../inputComponents/ProxyUrlInput.vue | 47 +++++++++++++++---- 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/store/modules/normalizers.js b/src/store/modules/normalizers.js index d4dcbc1f..1b5c585e 100644 --- a/src/store/modules/normalizers.js +++ b/src/store/modules/normalizers.js @@ -132,8 +132,7 @@ const parseProxyUrl = value => { } export const partialUpdate = (group, key) => { - if ((group === ':pleroma' && key === 'Oban') || - (group === ':auto_linker' && key === ':opts')) { + if (group === ':auto_linker' && key === ':opts') { return false } return true @@ -206,7 +205,9 @@ const wrapValues = (settings, currentState) => { } else if (type === 'atom' && value.length > 0) { return { 'tuple': [setting, `:${value}`] } } else if (type.includes('tuple') && (type.includes('string') || type.includes('atom'))) { - return { 'tuple': [setting, { 'tuple': value }] } + return typeof value === 'string' + ? { 'tuple': [setting, value] } + : { 'tuple': [setting, { 'tuple': value }] } } else if (type.includes('tuple') && type.includes('list')) { return { 'tuple': [setting, value] } } else if (type === 'map') { diff --git a/src/views/settings/components/Inputs.vue b/src/views/settings/components/Inputs.vue index 90d66e46..cfb6d09d 100644 --- a/src/views/settings/components/Inputs.vue +++ b/src/views/settings/components/Inputs.vue @@ -73,7 +73,7 @@ <mascots-input v-if="setting.key === ':mascots'" :data="data" :setting-group="settingGroup" :setting="setting"/> <editable-keyword-input v-if="editableKeyword(setting.key, setting.type)" :data="data" :setting-group="settingGroup" :setting="setting"/> <icons-input v-if="setting.key === ':icons'" :data="data[':icons']" :setting-group="settingGroup" :setting="setting"/> - <proxy-url-input v-if="setting.key === ':proxy_url'" :data="data[setting.key]" :setting-group="settingGroup" :setting="setting"/> + <proxy-url-input v-if="setting.key === ':proxy_url'" :data="data[setting.key]" :setting-group="settingGroup" :setting="setting" :parents="settingParent"/> <!-- <ssl-options-input v-if="setting.key === ':ssl_options'" :setting-group="settingGroup" :setting-parent="settingParent" :setting="setting" :data="data" :nested="true" :custom-label-width="'100px'"/> --> <multiple-select v-if="setting.key === ':backends' || setting.key === ':args'" :data="data" :setting-group="settingGroup" :setting="setting"/> <prune-input v-if="setting.key === ':prune'" :data="data[setting.key]" :setting-group="settingGroup" :setting="setting"/> diff --git a/src/views/settings/components/inputComponents/ProxyUrlInput.vue b/src/views/settings/components/inputComponents/ProxyUrlInput.vue index 7848fe15..83829bd5 100644 --- a/src/views/settings/components/inputComponents/ProxyUrlInput.vue +++ b/src/views/settings/components/inputComponents/ProxyUrlInput.vue @@ -1,20 +1,22 @@ <template> <div class="setting-input"> <el-input - :value="data.host" + :value="proxyUrlData.host" placeholder="host (e.g. localhost or 127.0.0.1)" class="proxy-url-value-input" @input="updateProxyUrl($event, 'host')"/> : <el-input - :value="data.port" + :value="proxyUrlData.port" placeholder="port (e.g 9020 or 3090)" class="proxy-url-value-input" @input="updateProxyUrl($event, 'port')"/> - <el-checkbox :value="data.socks5" class="name-input" @change="updateProxyUrl($event, 'socks5')">Socks5</el-checkbox> + <el-checkbox :value="proxyUrlData.socks5" class="name-input" @change="updateProxyUrl($event, 'socks5')">Socks5</el-checkbox> </div> </template> <script> +import { processNested } from '@/store/modules/normalizers' + export default { name: 'ProxyUrlInput', props: { @@ -35,17 +37,35 @@ export default { default: function() { return {} } + }, + parents: { + type: Array, + default: function() { + return [] + }, + required: false + } + }, + computed: { + settings() { + return this.$store.state.settings.settings + }, + updatedSettings() { + return this.$store.state.settings.updatedSettings + }, + proxyUrlData() { + return Object.keys(this.data).length === 0 ? { socks5: false, host: null, port: null } : this.data } }, methods: { updateProxyUrl(value, inputType) { let data if (inputType === 'socks5') { - data = { ...this.data, socks5: value } + data = { ...this.proxyUrlData, socks5: value } } else if (inputType === 'host') { - data = { ...this.data, host: value } + data = { ...this.proxyUrlData, host: value } } else { - data = { ...this.data, port: value } + data = { ...this.proxyUrlData, port: value } } this.updateSetting(data, this.settingGroup.group, this.settingGroup.key, this.setting.key, this.setting.type) }, @@ -53,8 +73,19 @@ export default { const assembledData = value.socks5 ? [':socks5', value.host, value.port] : `${value.host}:${value.port}` - this.$store.dispatch('UpdateSettings', { group, key, input, value: assembledData, type }) - this.$store.dispatch('UpdateState', { group, key, input, value }) + if (this.parents.length > 0) { + const { valueForState, + valueForUpdatedSettings, + setting } = processNested(value, assembledData, group, key, this.parents.reverse(), this.settings, this.updatedSettings) + + this.$store.dispatch('UpdateSettings', + { group, key, input: setting.key, value: valueForUpdatedSettings, type: setting.type }) + this.$store.dispatch('UpdateState', + { group, key, input: setting.key, value: valueForState }) + } else { + this.$store.dispatch('UpdateSettings', { group, key, input, value: assembledData, type }) + this.$store.dispatch('UpdateState', { group, key, input, value }) + } } } } -- GitLab