Browse Source

docs(examples): chat example update (#1149)

* remove mutation type

* use v-model instead of target.value

* Fix to use mapAction when using store's action

* Fix to use Arrow Function & Object destructuring

* Fix to use store/getters

* fix: revert the format change

* fix: change all mutation names in camelCase

* chore: fix code format

* chore: remove extra whitespace

* chore: const -> function
keng0o 7 years ago
parent
commit
5eb2aabca0

+ 20 - 19
examples/chat/components/MessageSection.vue

@@ -3,33 +3,34 @@
     <h3 class="message-thread-heading">{{ thread.name }}</h3>
     <h3 class="message-thread-heading">{{ thread.name }}</h3>
     <ul class="message-list" ref="list">
     <ul class="message-list" ref="list">
       <message
       <message
-        v-for="message in sortedMessages"
+        v-for="message in messages"
         :key="message.id"
         :key="message.id"
         :message="message">
         :message="message">
       </message>
       </message>
     </ul>
     </ul>
-    <textarea class="message-composer" @keyup.enter="sendMessage"></textarea>
+    <textarea
+      class="message-composer"
+      v-model="text"
+      @keyup.enter="sendMessage"></textarea>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
 import Message from './Message.vue'
 import Message from './Message.vue'
-import { mapGetters } from 'vuex'
+import { mapActions, mapGetters } from 'vuex'
 
 
 export default {
 export default {
   name: 'MessageSection',
   name: 'MessageSection',
   components: { Message },
   components: { Message },
-  computed: {
-    ...mapGetters({
-      thread: 'currentThread',
-      messages: 'currentMessages'
-    }),
-    sortedMessages () {
-      return this.messages
-        .slice()
-        .sort((a, b) => a.timestamp - b.timestamp)
+  data () {
+    return {
+      text: ''
     }
     }
   },
   },
+  computed: mapGetters({
+    thread: 'currentThread',
+    messages: 'sortedMessages'
+  }),
   watch: {
   watch: {
     'thread.lastMessage': function () {
     'thread.lastMessage': function () {
       this.$nextTick(() => {
       this.$nextTick(() => {
@@ -38,17 +39,17 @@ export default {
       })
       })
     }
     }
   },
   },
-  methods: {
-    sendMessage (e) {
-      const text = e.target.value
+  methods: mapActions({
+    sendMessage (dispatch) {
+      const { text, thread } = this
       if (text.trim()) {
       if (text.trim()) {
-        this.$store.dispatch('sendMessage', {
+        dispatch('sendMessage', {
           text,
           text,
-          thread: this.thread
+          thread
         })
         })
-        e.target.value = ''
+        this.text = ''
       }
       }
     }
     }
-  }
+  })
 }
 }
 </script>
 </script>

+ 3 - 20
examples/chat/components/ThreadSection.vue

@@ -19,29 +19,12 @@
 
 
 <script>
 <script>
 import Thread from './Thread.vue'
 import Thread from './Thread.vue'
-import { mapGetters } from 'vuex'
+import { mapActions, mapGetters } from 'vuex'
 
 
 export default {
 export default {
   name: 'ThreadSection',
   name: 'ThreadSection',
   components: { Thread },
   components: { Thread },
-  computed: {
-    ...mapGetters([
-      'threads',
-      'currentThread'
-    ]),
-    unreadCount () {
-      const threads = this.threads
-      return Object.keys(threads).reduce((count, id) => {
-        return threads[id].lastMessage.isRead
-          ? count
-          : count + 1
-      }, 0)
-    }
-  },
-  methods: {
-    switchThread (id) {
-      this.$store.dispatch('switchThread', { id })
-    }
-  }
+  computed: mapGetters(['threads', 'currentThread', 'unreadCount']),
+  methods: mapActions(['switchThread'])
 }
 }
 </script>
 </script>

+ 3 - 8
examples/chat/store/actions.js

@@ -1,22 +1,17 @@
 import * as api from '../api'
 import * as api from '../api'
-import * as types from './mutation-types'
 
 
 export const getAllMessages = ({ commit }) => {
 export const getAllMessages = ({ commit }) => {
   api.getAllMessages(messages => {
   api.getAllMessages(messages => {
-    commit(types.RECEIVE_ALL, {
-      messages
-    })
+    commit('receiveAll', messages)
   })
   })
 }
 }
 
 
 export const sendMessage = ({ commit }, payload) => {
 export const sendMessage = ({ commit }, payload) => {
   api.createMessage(payload, message => {
   api.createMessage(payload, message => {
-    commit(types.RECEIVE_MESSAGE, {
-      message
-    })
+    commit('receiveMessage', message)
   })
   })
 }
 }
 
 
 export const switchThread = ({ commit }, payload) => {
 export const switchThread = ({ commit }, payload) => {
-  commit(types.SWITCH_THREAD, payload)
+  commit('switchThread', payload)
 }
 }

+ 11 - 0
examples/chat/store/getters.js

@@ -12,3 +12,14 @@ export const currentMessages = state => {
     ? thread.messages.map(id => state.messages[id])
     ? thread.messages.map(id => state.messages[id])
     : []
     : []
 }
 }
+
+export const unreadCount = ({ threads }) => {
+  return Object.keys(threads).reduce((count, id) => {
+    return threads[id].lastMessage.isRead ? count : count + 1
+  }, 0)
+}
+
+export const sortedMessages = (state, getters) => {
+  const messages = getters.currentMessages
+  return messages.slice().sort((a, b) => a.timestamp - b.timestamp)
+}

+ 0 - 3
examples/chat/store/mutation-types.js

@@ -1,3 +0,0 @@
-export const SWITCH_THREAD = 'SWITCH_THREAD'
-export const RECEIVE_ALL = 'RECEIVE_ALL'
-export const RECEIVE_MESSAGE = 'RECEIVE_MESSAGE'

+ 3 - 4
examples/chat/store/mutations.js

@@ -1,8 +1,7 @@
 import Vue from 'vue'
 import Vue from 'vue'
-import * as types from './mutation-types'
 
 
 export default {
 export default {
-  [types.RECEIVE_ALL] (state, { messages }) {
+  receiveAll (state, messages) {
     let latestMessage
     let latestMessage
     messages.forEach(message => {
     messages.forEach(message => {
       // create new thread if the thread doesn't exist
       // create new thread if the thread doesn't exist
@@ -20,11 +19,11 @@ export default {
     setCurrentThread(state, latestMessage.threadID)
     setCurrentThread(state, latestMessage.threadID)
   },
   },
 
 
-  [types.RECEIVE_MESSAGE] (state, { message }) {
+  receiveMessage (state, message) {
     addMessage(state, message)
     addMessage(state, message)
   },
   },
 
 
-  [types.SWITCH_THREAD] (state, { id }) {
+  switchThread (state, id) {
     setCurrentThread(state, id)
     setCurrentThread(state, id)
   }
   }
 }
 }