|
@@ -3,33 +3,34 @@
|
|
|
<h3 class="message-thread-heading">{{ thread.name }}</h3>
|
|
|
<ul class="message-list" ref="list">
|
|
|
<message
|
|
|
- v-for="message in sortedMessages"
|
|
|
+ v-for="message in messages"
|
|
|
:key="message.id"
|
|
|
:message="message">
|
|
|
</message>
|
|
|
</ul>
|
|
|
- <textarea class="message-composer" @keyup.enter="sendMessage"></textarea>
|
|
|
+ <textarea
|
|
|
+ class="message-composer"
|
|
|
+ v-model="text"
|
|
|
+ @keyup.enter="sendMessage"></textarea>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import Message from './Message.vue'
|
|
|
-import { mapGetters } from 'vuex'
|
|
|
+import { mapActions, mapGetters } from 'vuex'
|
|
|
|
|
|
export default {
|
|
|
name: 'MessageSection',
|
|
|
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: {
|
|
|
'thread.lastMessage': function () {
|
|
|
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()) {
|
|
|
- this.$store.dispatch('sendMessage', {
|
|
|
+ dispatch('sendMessage', {
|
|
|
text,
|
|
|
- thread: this.thread
|
|
|
+ thread
|
|
|
})
|
|
|
- e.target.value = ''
|
|
|
+ this.text = ''
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ })
|
|
|
}
|
|
|
</script>
|