From cb89fb09be6ed5c4bcea4fd0934b3d7cbd5371d4 Mon Sep 17 00:00:00 2001
From: Angelina Filippova <linakirsanova@gmail.com>
Date: Thu, 9 Jul 2020 22:27:18 +0300
Subject: [PATCH] Add input for settings with type ['keyword', 'string']

---
 src/store/modules/normalizers.js                      |  2 +-
 src/views/settings/components/Inputs.vue              |  1 +
 .../inputComponents/EditableKeywordInput.vue          | 11 +++++++++++
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/store/modules/normalizers.js b/src/store/modules/normalizers.js
index c146d60e..e4eb8816 100644
--- a/src/store/modules/normalizers.js
+++ b/src/store/modules/normalizers.js
@@ -93,7 +93,7 @@ export const parseTuples = (tuples, key) => {
         return [...acc, { [mascot.tuple[0]]: { ...mascot.tuple[1], id: `f${(~~(Math.random() * 1e8)).toString(16)}` }}]
       }, [])
     } else if (Array.isArray(item.tuple[1]) &&
-      (item.tuple[0] === ':groups' || item.tuple[0] === ':replace' || item.tuple[0] === ':retries')) {
+      (item.tuple[0] === ':groups' || item.tuple[0] === ':replace' || item.tuple[0] === ':retries' || item.tuple[0] === ':headers')) {
       accum[item.tuple[0]] = item.tuple[1].reduce((acc, group) => {
         return [...acc, { [group.tuple[0]]: { value: group.tuple[1], id: `f${(~~(Math.random() * 1e8)).toString(16)}` }}]
       }, [])
diff --git a/src/views/settings/components/Inputs.vue b/src/views/settings/components/Inputs.vue
index 0578ae2f..44ee957f 100644
--- a/src/views/settings/components/Inputs.vue
+++ b/src/views/settings/components/Inputs.vue
@@ -283,6 +283,7 @@ export default {
       return key === ':replace' ||
         type === 'map' ||
         (Array.isArray(type) && type.includes('keyword') && type.includes('integer')) ||
+        (Array.isArray(type) && type.includes('keyword') && type.includes('string')) ||
         (Array.isArray(type) && type.includes('keyword') && type.findIndex(el => el.includes('list') && el.includes('string')) !== -1)
     },
     getFormattedDescription(desc) {
diff --git a/src/views/settings/components/inputComponents/EditableKeywordInput.vue b/src/views/settings/components/inputComponents/EditableKeywordInput.vue
index 009b2033..76002dd7 100644
--- a/src/views/settings/components/inputComponents/EditableKeywordInput.vue
+++ b/src/views/settings/components/inputComponents/EditableKeywordInput.vue
@@ -16,6 +16,14 @@
       </div>
       <el-button :size="isDesktop ? 'medium' : 'mini'" icon="el-icon-plus" circle @click="addRowToEditableKeyword"/>
     </div>
+    <div v-if="editableKeywordWithString" :data-search="setting.key || setting.group">
+      <div v-for="element in data" :key="getId(element)" class="setting-input">
+        <el-input :value="getKey(element)" placeholder="key" class="name-input" @input="parseEditableKeyword($event, 'key', element)"/> :
+        <el-input :value="getValue(element)" placeholder="value" class="value-input" @input="parseEditableKeyword($event, 'value', element)"/>
+        <el-button :size="isDesktop ? 'medium' : 'mini'" class="icon-minus-button" icon="el-icon-minus" circle @click="deleteEditableKeywordRow(element)"/>
+      </div>
+      <el-button :size="isDesktop ? 'medium' : 'mini'" icon="el-icon-plus" circle @click="addRowToEditableKeyword"/>
+    </div>
     <div v-else :data-search="setting.key || setting.group">
       <div v-for="element in data" :key="getId(element)" class="setting-input">
         <el-input :value="getKey(element)" placeholder="key" class="name-input" @input="parseEditableKeyword($event, 'key', element)"/> :
@@ -54,6 +62,9 @@ export default {
     editableKeywordWithInteger() {
       return Array.isArray(this.setting.type) && this.setting.type.includes('keyword') && this.setting.type.includes('integer')
     },
+    editableKeywordWithString() {
+      return Array.isArray(this.setting.type) && this.setting.type.includes('keyword') && this.setting.type.includes('string')
+    },
     isDesktop() {
       return this.$store.state.app.device === 'desktop'
     }
-- 
GitLab