apps/ui-library/content/docs/vue/realtime-chat.mdx
<BlockItem name="realtime-chat-vue" description="Renders a real-time chat interface for users in a shared room." />
This block assumes that you have already installed a Supabase client for Vue from the previous step.
<RegistryBlock itemName="realtime-chat-vue" />The Realtime Chat component provides a complete chat interface that enables users to exchange messages in real-time within a shared room.
<script setup lang="ts">
import RealtimeChat from '@/components/realtime-chat.vue'
</script>
<template>
<RealtimeChat roomName="my-chat-room" username="john_doe" />
</template>
<script setup lang="ts">
import RealtimeChat from '@/components/realtime-chat.vue'
import { useMessagesQuery } from '@/composables/use-messages-query'
const { data } = useMessagesQuery()
</script>
<template>
<RealtimeChat roomName="my-chat-room" username="john_doe" :messages="data ?? []" />
</template>
<script setup lang="ts">
import RealtimeChat from '@/components/realtime-chat.vue'
import { useMessagesQuery } from '@/composables/use-messages-query'
import { storeMessages } from '@/lib/store-messages'
import type { ChatMessage } from '@/types'
const { data } = useMessagesQuery()
// Callback function for new messages
const handleMessage = async (messages: ChatMessage[]) => {
await storeMessages(messages)
}
</script>
<template>
<RealtimeChat
roomName="my-chat-room"
username="john_doe"
:messages="data ?? []"
:onMessage="handleMessage"
/>
</template>
onMessage and messages props| Prop | Type | Description |
|---|---|---|
roomName | string | Unique identifier for the shared chat room. |
username | string | Name of the current user; used to identify message senders. |
onMessage? | (messages: ChatMessage[]) => void | Optional callback to handle messages, useful for persistence. |
messages? | ChatMessage[] | Optional initial messages to display in the chat. |
interface ChatMessage {
id: string
content: string
user: {
name: string
}
createdAt: string
}