From 0bc114ff631c2b4be533c9a46b497e46784f7483 Mon Sep 17 00:00:00 2001
From: Angelina Filippova <linakirsanova@gmail.com>
Date: Sat, 2 Nov 2019 15:47:07 +0300
Subject: [PATCH] Create component for rendering setting form from description

---
 src/views/settings/components/Setting.vue | 86 +++++++++++++++++++++++
 1 file changed, 86 insertions(+)
 create mode 100644 src/views/settings/components/Setting.vue

diff --git a/src/views/settings/components/Setting.vue b/src/views/settings/components/Setting.vue
new file mode 100644
index 00000000..cbcb1cd5
--- /dev/null
+++ b/src/views/settings/components/Setting.vue
@@ -0,0 +1,86 @@
+<template>
+  <div v-if="!loading">
+    <el-form-item v-if="settingsGroup.description" class="options-paragraph-container">
+      <p class="options-paragraph">{{ settingsGroup.description }}</p>
+    </el-form-item>
+    <div v-for="setting in settingsGroup.children" :key="setting.key">
+      <el-form-item :label="setting.key">
+        <el-input
+          v-if="setting.type === 'string'"
+          :value="data[setting.key]"
+          :placeholder="setting.suggestions[0]"
+          @input="updateSetting($event, settingsGroup.key, setting.key)"/>
+        <el-switch
+          v-if="setting.type === 'boolean'"
+          :value="data[setting.key]"
+          @change="updateSetting($event, settingsGroup.key, setting.key)"/>
+        <el-input-number
+          v-if="setting.type === 'integer'"
+          :value="data[setting.key]"
+          :placeholder="setting.suggestions[0].toString()"
+          :step="100"
+          :min="0"
+          size="large"
+          class="top-margin"
+          @change="updateSetting($event, settingsGroup.key, setting.key)"/>
+        <el-select
+          v-if="setting.type === 'module'"
+          :value="data.value"
+          clearable
+          @change="updateSetting($event, settingsGroup.children[0].key, 'value')">
+          <el-option
+            v-for="option in settingsGroup.children[0].suggestions"
+            :value="option"
+            :key="option"/>
+        </el-select>
+        <el-select
+          v-if="Array.isArray(setting.type)
+            && setting.type.includes('list')
+          && (setting.type.includes('module') || setting.type.includes('string'))"
+          :value="data[setting.key]"
+          multiple
+          filterable
+          allow-create
+          @change="updateSetting($event, settingsGroup.key, setting.key)">
+          <el-option v-for="option in setting.suggestions[0]" :key="option" :value="option"/>
+        </el-select>
+        <p class="expl">{{ setting.description }}</p>
+      </el-form-item>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Setting',
+  props: {
+    settingsGroup: {
+      type: Object,
+      default: function() {
+        return {}
+      }
+    },
+    data: {
+      type: Object,
+      default: function() {
+        return {}
+      }
+    }
+  },
+  computed: {
+    loading() {
+      return this.$store.state.settings.loading
+    }
+  },
+  methods: {
+    updateSetting(value, tab, input) {
+      this.$store.dispatch('UpdateSettings', { tab, data: { [input]: value }})
+    }
+  }
+}
+</script>
+
+<style rel='stylesheet/scss' lang='scss'>
+@import '../styles/main';
+@include settings
+</style>
-- 
GitLab