📩 Query Messages

Query most recent messages in a subcollection of the chat room

ChatRoom Component

ChatRoom.vue
<template>
  <main class="section">
    <h3>Welcome to ChatRoom.vue {{ chatId }}</h3>

    <User #user="{ user }">
      <div v-if="user">
        <ul>
          <li v-for="message of messages" :key="message.id">
            {{ message.text }}
          </li>
        </ul>

        <input v-model="newMessageText" class="input" />

        <button
          :disabled="!newMessageText || loading"
          class="button is-success"
          type="text"
          @click="addMessage(user.uid)"
        >Send</button>

      </div>

      <Login v-else />

    </User>

  </main>
</template>

<script>

import User from './User.vue';
import Login from './Login.vue';
import { db, storage } from '../firebase';

export default {
  components: {
    User,
    Login
  },
  data() {
      return {
          newMessageText: '',
          loading: false,
          messages: [],
      }
  },
  computed: {
    chatId() {
      return this.$route.params.id;
    },
    messagesCollection() {
      return db.doc(`chats/${this.chatId}`).collection('messages');
    },
  },
  firestore() {
    return {
      messages: this.messagesCollection.orderBy('createdAt').limitToLast(10)
    };
  },
    methods: {
      async addMessage(uid) {

          this.loading = true;

          const { id: messageId } = this.messagesCollection.doc();

           await this.messagesCollection.doc(messageId).set({
              text: this.newMessageText,
              sender: uid,
              createdAt: Date.now(),

          });
      }
    },
};
</script>

Questions? Let's chat

Open Discord