From 66ef9f1328f155d50775d55445522c11cd17fa01 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Mon, 13 Feb 2017 23:22:32 +0100
Subject: [PATCH] Add users muting.

---
 .../user_card_content/user_card_content.vue        |  8 ++++++++
 src/modules/users.js                               |  5 +++++
 test/unit/specs/modules/users.spec.js              | 14 ++++++++++++++
 3 files changed, 27 insertions(+)

diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue
index 9a21f404c..b44dcaa92 100644
--- a/src/components/user_card_content/user_card_content.vue
+++ b/src/components/user_card_content/user_card_content.vue
@@ -3,6 +3,10 @@
     <div class="base00-background panel-heading text-center" v-bind:style="style">
       <div class='user-info'>
         <img :src="user.profile_image_url">
+        <div v-if='user.muted' class='muteinfo'>Muted</div>
+        <div class='muteinfo'>
+          <button @click="toggleMute">Mute/Unmute</button>
+        </div>
         <span class="glyphicon glyphicon-user"></span>
         <div class='user-name'>{{user.name}}</div>
         <div class='user-screen-name'>@{{user.screen_name}}</div>
@@ -70,6 +74,10 @@
         const store = this.$store
         store.state.api.backendInteractor.unfollowUser(this.user.id)
           .then((unfollowedUser) => store.commit('addNewUsers', [unfollowedUser]))
+      },
+      toggleMute () {
+        const store = this.$store
+        store.commit('setMuted', {user: this.user, muted: !this.user.muted})
       }
     }
   }
diff --git a/src/modules/users.js b/src/modules/users.js
index 8ba365f36..544ca158b 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -1,6 +1,7 @@
 import timelineFetcher from '../services/timeline_fetcher/timeline_fetcher.service.js'
 import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'
 import { compact, map, each, find, merge } from 'lodash'
+import { set } from 'vue'
 
 // TODO: Unify with mergeOrAdd in statuses.js
 export const mergeOrAdd = (arr, item) => {
@@ -18,6 +19,10 @@ export const mergeOrAdd = (arr, item) => {
 }
 
 export const mutations = {
+  setMuted (state, { user: {id}, muted }) {
+    const user = find(state.users, {id})
+    set(user, 'muted', muted)
+  },
   setCurrentUser (state, user) {
     state.currentUser = user
   },
diff --git a/test/unit/specs/modules/users.spec.js b/test/unit/specs/modules/users.spec.js
index 07c71e329..812ba6326 100644
--- a/test/unit/specs/modules/users.spec.js
+++ b/test/unit/specs/modules/users.spec.js
@@ -17,4 +17,18 @@ describe('The users module', () => {
     expect(state.users).to.eql([user])
     expect(state.users[0].name).to.eql('Dude')
   })
+
+  it('sets a mute bit on users', () => {
+    const state = cloneDeep(defaultState)
+    const user = { id: 1, name: 'Guy' }
+
+    mutations.addNewUsers(state, [user])
+    mutations.setMuted(state, {user, muted: true})
+
+    expect(user.muted).to.eql(true)
+
+    mutations.setMuted(state, {user, muted: false})
+
+    expect(user.muted).to.eql(false)
+  })
 })
-- 
GitLab