Skip to main content

Documentation Index

Fetch the complete documentation index at: https://wiki.vivla.com/llms.txt

Use this file to discover all available pages before exploring further.

Visión general

La funcionalidad de chat en tiempo real se implementa con Stream Chat Expo SDK (v8.13.x). El módulo completo se encuentra en src/modules/chat/.

Estructura del módulo

Store

store/chatStore.ts — Zustand store que gestiona el estado del chat.

Auth Service

services/authService.ts — Token provider para autenticación con Stream.

Contexts

contexts/ — React contexts para la gestión de canales.

Rutas

Rutas de chat bajo /chat/ con file-based routing de Expo Router.

Store (Zustand)

El store en store/chatStore.ts gestiona todo el estado de la integración con Stream Chat:
PropiedadDescripción
StreamClientInstancia del cliente de Stream Chat
isConnectedEstado de conexión al servicio
activeChannelCanal actualmente activo
unreadCountConteo de mensajes no leídos
Token managementGestión de tokens con control de expiración
El store utiliza middlewares de devtools y persist de Zustand para facilitar el debugging y mantener el estado entre sesiones.

Autenticación

El servicio services/authService.ts actúa como token provider para Stream Chat. Se encarga de obtener y renovar los tokens de autenticación necesarios para conectar al usuario con el servicio de mensajería.
Los tokens de Stream Chat tienen expiración. El store gestiona automáticamente la renovación antes de que expiren.

Rutas de chat

/chat/[channelType]/[channelId]/ Vista principal de conversación dentro de un canal. Recibe el tipo y el ID del canal como parámetros dinámicos.

Integración en la app

OverlayProvider

El OverlayProvider de Stream Chat envuelve toda la aplicación desde el root layout. Este componente es necesario para que funcionen los overlays del SDK (previews de imágenes, menús contextuales, etc.).

Badge de mensajes no leídos

El tab Inbox en la navegación principal muestra un badge con el conteo de mensajes no leídos.
// Hook que agrega el conteo total de mensajes no leídos
const { unreadCount } = useCombinedUnreadCount();

Conteo combinado

El hook useCombinedUnreadCount agrega el conteo total de mensajes no leídos de todos los canales del usuario, proporcionando un número unificado para mostrar en la UI.

Archivos clave

ArchivoResponsabilidad
src/modules/chat/store/chatStore.tsEstado global del chat (Zustand)
src/modules/chat/services/authService.tsAutenticación con Stream
src/modules/chat/contexts/Contexts de gestión de canales