Skip to content

Commit 5eb2aab

Browse files
keng0oktsn
authored andcommitted
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
1 parent f9422a8 commit 5eb2aab

File tree

6 files changed

+40
-54
lines changed

6 files changed

+40
-54
lines changed

examples/chat/components/MessageSection.vue

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,34 @@
33
<h3 class="message-thread-heading">{{ thread.name }}</h3>
44
<ul class="message-list" ref="list">
55
<message
6-
v-for="message in sortedMessages"
6+
v-for="message in messages"
77
:key="message.id"
88
:message="message">
99
</message>
1010
</ul>
11-
<textarea class="message-composer" @keyup.enter="sendMessage"></textarea>
11+
<textarea
12+
class="message-composer"
13+
v-model="text"
14+
@keyup.enter="sendMessage"></textarea>
1215
</div>
1316
</template>
1417

1518
<script>
1619
import Message from './Message.vue'
17-
import { mapGetters } from 'vuex'
20+
import { mapActions, mapGetters } from 'vuex'
1821
1922
export default {
2023
name: 'MessageSection',
2124
components: { Message },
22-
computed: {
23-
...mapGetters({
24-
thread: 'currentThread',
25-
messages: 'currentMessages'
26-
}),
27-
sortedMessages () {
28-
return this.messages
29-
.slice()
30-
.sort((a, b) => a.timestamp - b.timestamp)
25+
data () {
26+
return {
27+
text: ''
3128
}
3229
},
30+
computed: mapGetters({
31+
thread: 'currentThread',
32+
messages: 'sortedMessages'
33+
}),
3334
watch: {
3435
'thread.lastMessage': function () {
3536
this.$nextTick(() => {
@@ -38,17 +39,17 @@ export default {
3839
})
3940
}
4041
},
41-
methods: {
42-
sendMessage (e) {
43-
const text = e.target.value
42+
methods: mapActions({
43+
sendMessage (dispatch) {
44+
const { text, thread } = this
4445
if (text.trim()) {
45-
this.$store.dispatch('sendMessage', {
46+
dispatch('sendMessage', {
4647
text,
47-
thread: this.thread
48+
thread
4849
})
49-
e.target.value = ''
50+
this.text = ''
5051
}
5152
}
52-
}
53+
})
5354
}
5455
</script>

examples/chat/components/ThreadSection.vue

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,12 @@
1919

2020
<script>
2121
import Thread from './Thread.vue'
22-
import { mapGetters } from 'vuex'
22+
import { mapActions, mapGetters } from 'vuex'
2323
2424
export default {
2525
name: 'ThreadSection',
2626
components: { Thread },
27-
computed: {
28-
...mapGetters([
29-
'threads',
30-
'currentThread'
31-
]),
32-
unreadCount () {
33-
const threads = this.threads
34-
return Object.keys(threads).reduce((count, id) => {
35-
return threads[id].lastMessage.isRead
36-
? count
37-
: count + 1
38-
}, 0)
39-
}
40-
},
41-
methods: {
42-
switchThread (id) {
43-
this.$store.dispatch('switchThread', { id })
44-
}
45-
}
27+
computed: mapGetters(['threads', 'currentThread', 'unreadCount']),
28+
methods: mapActions(['switchThread'])
4629
}
4730
</script>

examples/chat/store/actions.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
import * as api from '../api'
2-
import * as types from './mutation-types'
32

43
export const getAllMessages = ({ commit }) => {
54
api.getAllMessages(messages => {
6-
commit(types.RECEIVE_ALL, {
7-
messages
8-
})
5+
commit('receiveAll', messages)
96
})
107
}
118

129
export const sendMessage = ({ commit }, payload) => {
1310
api.createMessage(payload, message => {
14-
commit(types.RECEIVE_MESSAGE, {
15-
message
16-
})
11+
commit('receiveMessage', message)
1712
})
1813
}
1914

2015
export const switchThread = ({ commit }, payload) => {
21-
commit(types.SWITCH_THREAD, payload)
16+
commit('switchThread', payload)
2217
}

examples/chat/store/getters.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,14 @@ export const currentMessages = state => {
1212
? thread.messages.map(id => state.messages[id])
1313
: []
1414
}
15+
16+
export const unreadCount = ({ threads }) => {
17+
return Object.keys(threads).reduce((count, id) => {
18+
return threads[id].lastMessage.isRead ? count : count + 1
19+
}, 0)
20+
}
21+
22+
export const sortedMessages = (state, getters) => {
23+
const messages = getters.currentMessages
24+
return messages.slice().sort((a, b) => a.timestamp - b.timestamp)
25+
}

examples/chat/store/mutation-types.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

examples/chat/store/mutations.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import Vue from 'vue'
2-
import * as types from './mutation-types'
32

43
export default {
5-
[types.RECEIVE_ALL] (state, { messages }) {
4+
receiveAll (state, messages) {
65
let latestMessage
76
messages.forEach(message => {
87
// create new thread if the thread doesn't exist
@@ -20,11 +19,11 @@ export default {
2019
setCurrentThread(state, latestMessage.threadID)
2120
},
2221

23-
[types.RECEIVE_MESSAGE] (state, { message }) {
22+
receiveMessage (state, message) {
2423
addMessage(state, message)
2524
},
2625

27-
[types.SWITCH_THREAD] (state, { id }) {
26+
switchThread (state, id) {
2827
setCurrentThread(state, id)
2928
}
3029
}

0 commit comments

Comments
 (0)