From b8b7e4b02167e631c4b21d521dfc22eddea11d64 Mon Sep 17 00:00:00 2001
From: Angelina Filippova <linakirsanova@gmail.com>
Date: Mon, 25 Mar 2019 01:04:37 +0300
Subject: [PATCH] Add ability to choose only one filter in group

---
 src/views/users/components/UsersFilter.vue | 60 ++++++++++++++++++----
 1 file changed, 50 insertions(+), 10 deletions(-)

diff --git a/src/views/users/components/UsersFilter.vue b/src/views/users/components/UsersFilter.vue
index a866584a..f4a269c5 100644
--- a/src/views/users/components/UsersFilter.vue
+++ b/src/views/users/components/UsersFilter.vue
@@ -1,5 +1,12 @@
 <template>
-  <el-select v-model="value" placeholder="Select filter">
+  <el-select
+    v-model="value"
+    :collapse-tags="isMobile"
+    multiple
+    placeholder="Select filter"
+    class="select-field"
+    @change="handleFilterToggle"
+    @remove-tag="handleFilterToggle">
     <el-option-group
       v-for="group in filters"
       :key="group.label"
@@ -20,24 +27,57 @@ export default {
       filters: [{
         label: 'By user type',
         options: [{
-          label: 'Show local',
-          value: 'showLocal'
+          label: 'Local',
+          value: 'userType/showLocalUsersOnly'
         }, {
-          label: 'Show external',
-          value: 'showExternal'
+          label: 'External',
+          value: 'userType/showExternalUsersOnly'
         }]
       }, {
         label: 'By status',
         options: [{
-          label: 'Show Active',
-          value: 'showActive'
+          label: 'Active',
+          value: 'userStatus/showActiveUsersOnly'
         }, {
-          label: 'Show Deactivated',
-          value: 'showDeactivated'
+          label: 'Deactivated',
+          value: 'userStatus/showDeactivatedUsersOnly'
         }]
       }],
-      value: ''
+      value: []
+    }
+  },
+  computed: {
+    isMobile() {
+      return this.$store.state.app.device === 'mobile'
+    }
+  },
+  methods: {
+    handleFilterToggle(value) {
+      const reversed = value.reverse()
+      const userTypeFilter = reversed.find(filter => filter.includes('userType'))
+      const userStatusFilter = reversed.find(filter => filter.includes('userStatus'))
+      const filters = [userTypeFilter, userStatusFilter].filter(item => item)
+      this.$data.value = filters
+      const filtersWithoutGroupnames = filters.reduce((acc, item) => {
+        const filter = item.split('/')[1]
+        acc.push(filter)
+        return acc
+      }, [])
+      this.$store.dispatch('ToggleUsersFilter', filtersWithoutGroupnames)
     }
   }
 }
 </script>
+
+<style rel='stylesheet/scss' lang='scss' scoped>
+.select-field {
+  width: 350px;
+}
+@media
+only screen and (max-width: 760px),
+(min-device-width: 768px) and (max-device-width: 1024px) {
+  .select-field {
+    width: 48%;
+  }
+}
+</style>
-- 
GitLab