MessageSection.vue 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <template>
  2. <div class="message-section">
  3. <h3 class="message-thread-heading">{{ thread.name }}</h3>
  4. <ul class="message-list" v-el:list>
  5. <message
  6. v-for="message in thread.messages | orderBy 'timestamp'"
  7. track-by="id"
  8. :message="message">
  9. </message>
  10. </ul>
  11. <textarea class="message-composer" @keyup.enter="sendMessage"></textarea>
  12. </div>
  13. </template>
  14. <script>
  15. import vuex from '../vuex'
  16. import Message from './Message.vue'
  17. export default {
  18. components: { Message },
  19. computed: {
  20. thread () {
  21. const id = vuex.state.currentThreadID
  22. return id
  23. ? vuex.state.threads[id]
  24. : {}
  25. }
  26. },
  27. watch: {
  28. 'thread.lastMessage': function () {
  29. this.$nextTick(() => {
  30. const ul = this.$els.list
  31. ul.scrollTop = ul.scrollHeight
  32. })
  33. }
  34. },
  35. methods: {
  36. sendMessage (e) {
  37. const text = e.target.value
  38. if (text.trim()) {
  39. vuex.actions.sendMessage(text, this.thread)
  40. e.target.value = ''
  41. }
  42. }
  43. }
  44. }
  45. </script>