diff --git a/src/store/modules/normalizers.js b/src/store/modules/normalizers.js index 6eecebca359a9b53356e3ac0019f63438bb7fd90..c146d60eacb7bacd8625681bf3a48e67fb8dffe3 100644 --- a/src/store/modules/normalizers.js +++ b/src/store/modules/normalizers.js @@ -1,5 +1,14 @@ import _ from 'lodash' +export const getBooleanValue = value => { + if (value === 'true') { + return true + } else if (value === 'false') { + return false + } + return value +} + export const checkPartialUpdate = (settings, updatedSettings, description) => { return Object.keys(updatedSettings).reduce((acc, group) => { acc[group] = Object.keys(updatedSettings[group]).reduce((acc, key) => { diff --git a/src/views/settings/components/Inputs.vue b/src/views/settings/components/Inputs.vue index c0d62c6dd4a56d3fa96cad72cde1271ae42b7612..38fc9f8efb9514244460626f4876cdc23b41cb3a 100644 --- a/src/views/settings/components/Inputs.vue +++ b/src/views/settings/components/Inputs.vue @@ -55,7 +55,7 @@ :data-search="setting.key || setting.group" @change="update($event, settingGroup.group, settingGroup.key, settingParent, setting.key, setting.type, nested)"/> <el-select - v-if="!reducedSelects && (setting.type === 'module' || (setting.type.includes('atom') && setting.type.includes('dropdown')))" + v-if="renderSingleSelect(setting.type)" :value="inputValue === false ? 'false' : inputValue" :data-search="setting.key || setting.group" clearable @@ -67,7 +67,7 @@ :key="index"/> </el-select> <el-select - v-if="!reducedSelects && renderMultipleSelect(setting.type)" + v-if="renderMultipleSelect(setting.type)" :value="inputValue" :data-search="setting.key || setting.group" multiple @@ -99,12 +99,12 @@ <editable-keyword-input v-if="editableKeyword(setting.key, setting.type)" :data="keywordData" :setting-group="settingGroup" :setting="setting"/> <icons-input v-if="setting.key === ':icons'" :data="iconsData" :setting-group="settingGroup" :setting="setting"/> <mascots-input v-if="setting.key === ':mascots'" :data="keywordData" :setting-group="settingGroup" :setting="setting"/> - <multiple-select v-if="setting.key === ':backends' || setting.key === ':args'" :data="data" :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"/> <prune-input v-if="setting.key === ':prune'" :data="data[setting.key]" :setting-group="settingGroup" :setting="setting"/> <rate-limit-input v-if="settingGroup.key === ':rate_limit'" :data="data" :setting-group="settingGroup" :setting="setting"/> <reg-invites-input v-if="[':registrations_open', ':invites_enabled'].includes(setting.key)" :data="data" :setting-group="settingGroup" :setting="setting"/> <select-input-with-reduced-labels v-if="reducedSelects" :data="data" :setting-group="settingGroup" :setting="setting"/> + <specific-multiple-select v-if="setting.key === ':backends' || setting.key === ':args'" :data="data" :setting-group="settingGroup" :setting="setting"/> <!--------------------> <el-tooltip v-if="canBeDeleted && isTablet" :content="$t('settings.removeFromDB')" placement="bottom-end" class="delete-setting-button-container"> <el-button icon="el-icon-delete" circle size="mini" class="delete-setting-button" @click="removeSetting"/> @@ -126,13 +126,13 @@ import { EditableKeywordInput, IconsInput, MascotsInput, - MultipleSelect, ProxyUrlInput, PruneInput, RateLimitInput, RegInvitesInput, - SelectInputWithReducedLabels } from './inputComponents' -import { processNested } from '@/store/modules/normalizers' + SelectInputWithReducedLabels, + SpecificMultipleSelect } from './inputComponents' +import { getBooleanValue, processNested } from '@/store/modules/normalizers' import _ from 'lodash' import marked from 'marked' @@ -144,12 +144,12 @@ export default { EditableKeywordInput, IconsInput, MascotsInput, - MultipleSelect, ProxyUrlInput, PruneInput, RateLimitInput, RegInvitesInput, - SelectInputWithReducedLabels + SelectInputWithReducedLabels, + SpecificMultipleSelect }, props: { customLabelWidth: { @@ -323,7 +323,7 @@ export default { }) }, renderMultipleSelect(type) { - return Array.isArray(type) && this.setting.key !== ':backends' && this.setting.key !== ':args' && ( + return !this.reducedSelects && Array.isArray(type) && this.setting.key !== ':backends' && this.setting.key !== ':args' && ( type.includes('module') || (type.includes('list') && type.includes('string')) || (type.includes('list') && type.includes('atom')) || @@ -331,10 +331,14 @@ export default { this.setting.key === ':args' ) }, + renderSingleSelect(type) { + return !this.reducedSelects && (type === 'module' || (type.includes('atom') && type.includes('dropdown'))) + }, update(value, group, key, parents, input, type, nested) { + const updatedValue = this.renderSingleSelect(type) ? getBooleanValue(value) : value nested - ? this.processNestedData(value, group, key, parents) - : this.updateSetting(value, group, key, input, type) + ? this.processNestedData(updatedValue, group, key, parents) + : this.updateSetting(updatedValue, group, key, input, type) }, updateSetting(value, group, key, input, type) { this.$store.dispatch('UpdateSettings', { group, key, input, value, type }) diff --git a/src/views/settings/components/inputComponents/SelectInputWithReducedLabels.vue b/src/views/settings/components/inputComponents/SelectInputWithReducedLabels.vue index 622eb896455c8eaeea76273ae4db927cf0de2e3a..8e7b91291b01325d4d5dd9ffe203d802cbbbda63 100644 --- a/src/views/settings/components/inputComponents/SelectInputWithReducedLabels.vue +++ b/src/views/settings/components/inputComponents/SelectInputWithReducedLabels.vue @@ -13,7 +13,7 @@ </el-select> <el-select v-if="setting.type === 'module' || (setting.type.includes('atom') && setting.type.includes('dropdown'))" - :value="inputValue" + :value="inputValue === false ? 'false' : inputValue" :data-search="setting.key || setting.group" clearable class="input" @@ -28,6 +28,8 @@ </template> <script> +import { getBooleanValue } from '@/store/modules/normalizers' + export default { name: 'SelectInputWithReducedLabels', props: { @@ -107,8 +109,9 @@ export default { }) }, updateSetting(value, group, key, input, type) { - this.$store.dispatch('UpdateSettings', { group, key, input, value, type }) - this.$store.dispatch('UpdateState', { group, key, input, value }) + const updatedValue = getBooleanValue(value) + this.$store.dispatch('UpdateSettings', { group, key, input, value: updatedValue, type }) + this.$store.dispatch('UpdateState', { group, key, input, value: updatedValue }) } } } diff --git a/src/views/settings/components/inputComponents/MultipleSelect.vue b/src/views/settings/components/inputComponents/SpecificMultipleSelect.vue similarity index 94% rename from src/views/settings/components/inputComponents/MultipleSelect.vue rename to src/views/settings/components/inputComponents/SpecificMultipleSelect.vue index 66b3aa7546babdc5d6868ec2c9da0b9c00722ae3..25df11a7c6fdd8790a4c627840c56c0d15930018 100644 --- a/src/views/settings/components/inputComponents/MultipleSelect.vue +++ b/src/views/settings/components/inputComponents/SpecificMultipleSelect.vue @@ -5,8 +5,6 @@ :value="data.value" :data-search="setting.key || setting.group" multiple - filterable - allow-create class="input" @change="updateSetting($event, settingGroup.group, settingGroup.key, setting.key, setting.type)"> <el-option value=":console" label="console"/> @@ -18,8 +16,6 @@ :value="data[setting.key]" :data-search="setting.key || setting.group" multiple - filterable - allow-create class="input" @change="updateSetting($event, settingGroup.group, settingGroup.key, setting.key, setting.type)"> <el-option value="strip" label="strip"/> @@ -31,7 +27,7 @@ <script> export default { - name: 'MultipleSelect', + name: 'SpecificMultipleSelect', props: { data: { type: [Object, Array], diff --git a/src/views/settings/components/inputComponents/index.js b/src/views/settings/components/inputComponents/index.js index 13c92c3f39ba4de16f140cb359a4cdc205adc51e..3b9bc788e66afe54311cf7a3ef5dab2fd771cbd8 100644 --- a/src/views/settings/components/inputComponents/index.js +++ b/src/views/settings/components/inputComponents/index.js @@ -3,9 +3,9 @@ export { default as EditableKeywordInput } from './EditableKeywordInput' export { default as CrontabInput } from './CrontabInput' export { default as IconsInput } from './IconsInput' export { default as MascotsInput } from './MascotsInput' -export { default as MultipleSelect } from './MultipleSelect' export { default as ProxyUrlInput } from './ProxyUrlInput' export { default as PruneInput } from './PruneInput' export { default as RateLimitInput } from './RateLimitInput' export { default as RegInvitesInput } from './RegInvitesInput' export { default as SelectInputWithReducedLabels } from './SelectInputWithReducedLabels' +export { default as SpecificMultipleSelect } from './SpecificMultipleSelect'