From bb1658c1aa1f5cb9be1a9a1813b3b4319167f12a Mon Sep 17 00:00:00 2001
From: Angelina Filippova <linakirsanova@gmail.com>
Date: Wed, 23 Dec 2020 22:01:04 +0300
Subject: [PATCH] Close collapse items with emoji pack metadata when another
 collapse item was opened

---
 src/store/modules/emojiPacks.js               |  7 -----
 .../emojiPacks/components/RemoteEmojiPack.vue |  9 +++++-
 src/views/emojiPacks/index.vue                | 30 +++++++++++++------
 3 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/src/store/modules/emojiPacks.js b/src/store/modules/emojiPacks.js
index 13b82f92..ab06afb9 100644
--- a/src/store/modules/emojiPacks.js
+++ b/src/store/modules/emojiPacks.js
@@ -19,7 +19,6 @@ import Vue from 'vue'
 
 const emojiPacks = {
   state: {
-    activeTab: '',
     currentLocalFilesPage: 1,
     currentLocalPacksPage: 1,
     currentRemoteFilesPage: 1,
@@ -35,9 +34,6 @@ const emojiPacks = {
     remotePacksCount: 0
   },
   mutations: {
-    SET_ACTIVE_TAB: (state, tab) => {
-      state.activeTab = tab
-    },
     SET_LOCAL_FILES_COUNT: (state, count) => {
       state.localPackFilesCount = count
     },
@@ -205,9 +201,6 @@ const emojiPacks = {
         commit('UPDATE_LOCAL_PACK_PACK', { name: packName, pack: result.data })
       }
     },
-    SetActiveTab({ commit }, activeTab) {
-      commit('SET_ACTIVE_TAB', activeTab)
-    },
     async SetRemoteEmojiPacks({ commit, getters, state }, { page, remoteInstance }) {
       const { data } = await listRemotePacks(remoteInstance, page, state.pageSize, getters.authHost, getters.token)
       const { packs, count } = data
diff --git a/src/views/emojiPacks/components/RemoteEmojiPack.vue b/src/views/emojiPacks/components/RemoteEmojiPack.vue
index 9097178d..4ac2ade2 100644
--- a/src/views/emojiPacks/components/RemoteEmojiPack.vue
+++ b/src/views/emojiPacks/components/RemoteEmojiPack.vue
@@ -81,6 +81,10 @@ import SingleEmojiEditor from './SingleEmojiEditor.vue'
 export default {
   components: { SingleEmojiEditor },
   props: {
+    activeTab: {
+      type: String,
+      required: true
+    },
     name: {
       type: String,
       required: true
@@ -130,7 +134,7 @@ export default {
       }
     },
     loadRemotePack() {
-      return this.$store.state.emojiPacks.activeTab === this.name
+      return this.activeTab === this.name
     },
     pageSize() {
       return this.$store.state.emojiPacks.filesPageSize
@@ -199,6 +203,9 @@ export default {
     }
   },
   methods: {
+    collapse() {
+      this.showPackContent = []
+    },
     downloadFromInstance() {
       this.$store.dispatch(
         'DownloadFrom',
diff --git a/src/views/emojiPacks/index.vue b/src/views/emojiPacks/index.vue
index fc5770fd..90c5e562 100644
--- a/src/views/emojiPacks/index.vue
+++ b/src/views/emojiPacks/index.vue
@@ -33,7 +33,7 @@
             <span class="emoji-name-warning">{{ $t('emoji.emojiWarning') }}</span>
           </el-form-item>
           <el-form-item v-if="Object.keys(localPacks).length > 0" :label="$t('emoji.packs')">
-            <el-collapse v-for="(pack, name) in localPacks" :key="name" v-model="activeLocalPack" accordion @change="setActiveTab">
+            <el-collapse v-for="(pack, name) in localPacks" :key="name" v-model="activeLocalPack" accordion @change="closeRemoteTabs">
               <local-emoji-pack ref="localEmojiPack" :name="name" :pack="pack" :host="$store.getters.authHost" :is-local="true" />
             </el-collapse>
           </el-form-item>
@@ -66,8 +66,8 @@
             </div>
           </el-form-item>
           <el-form-item v-if="Object.keys(remotePacks).length > 0" :label="$t('emoji.packs')">
-            <el-collapse v-for="(pack, name) in remotePacks" :key="name" v-model="activeRemotePack" accordion @change="setActiveTab">
-              <remote-emoji-pack :name="name" :pack="pack" :host="$store.getters.authHost" :is-local="false" />
+            <el-collapse v-for="(pack, name) in remotePacks" :key="name" v-model="activeRemotePack" accordion @change="closeLocalTabs">
+              <remote-emoji-pack ref="remoteEmojiPack" :active-tab="activeRemotePack" :name="name" :pack="pack" :host="$store.getters.authHost" :is-local="false" />
             </el-collapse>
           </el-form-item>
         </el-form>
@@ -98,8 +98,8 @@ export default {
     return {
       activeTab: 'local',
       newPackName: '',
-      activeLocalPack: [],
-      activeRemotePack: [],
+      activeLocalPack: '',
+      activeRemotePack: '',
       fullscreenLoading: false
     }
   },
@@ -155,6 +155,22 @@ export default {
     this.refreshLocalPacks()
   },
   methods: {
+    closeLocalTabs() {
+      this.collapseExistingEmojis()
+      this.activeLocalPack = ''
+    },
+    closeRemoteTabs() {
+      this.collapseExistingEmojis()
+      this.activeRemotePack = ''
+    },
+    collapseExistingEmojis() {
+      if (this.$refs.localEmojiPack && this.$refs.localEmojiPack.length > 0) {
+        this.$refs.localEmojiPack.forEach(el => el.collapse())
+      }
+      if (this.$refs.remoteEmojiPack && this.$refs.remoteEmojiPack.length > 0) {
+        this.$refs.remoteEmojiPack.forEach(el => el.collapse())
+      }
+    },
     createLocalPack() {
       this.$store.dispatch('CreatePack', { name: this.newPackName })
         .then(() => {
@@ -203,10 +219,6 @@ export default {
         type: 'success',
         message: i18n.t('emoji.reloaded')
       })
-    },
-    setActiveTab(activeTab) {
-      this.$refs.localEmojiPack.forEach(el => el.collapse())
-      this.$store.dispatch('SetActiveTab', activeTab)
     }
   }
 }
-- 
GitLab