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.
Gestion de Estado
La app utiliza un patron hibrido para la gestion de estado:- Zustand para estado local/cliente (UI, sesion, preferencias)
- TanStack React Query para estado del servidor (datos remotos, cache, sincronizacion)
- React Context para funcionalidades transversales de UI
Zustand Stores
- Stores Globales
- Stores de Modulos
Ubicados en
src/shared/stores/:| Store | Archivo | Proposito | Persistencia |
|---|---|---|---|
useAppStore | appStore.ts | Estado de inicializacion (isInitializing, isReady, resetAllStores) | No |
useOnboardingStore | onboardingStore.ts | Estado de onboarding (hasSeenOnboarding, isLoaded) con initialize, markComplete, markUnseen, clear | AsyncStorage (manual) |
useKeyboardStore | keyboardStore.ts | Altura del teclado (height, isVisible) con valor por defecto de 336px | AsyncStorage (middleware persist) |
usePendingDeepLinkStore | pendingDeepLinkStore.ts | Cola de deep links pendientes (pendingRoute, setPendingRoute, consumePendingRoute) | No |
Detalle: authStore (Almacenamiento Hibrido)
ElauthStore implementa un sistema de almacenamiento hibrido para separar datos sensibles de datos regulares:
El
authStore usa partialize para seleccionar que datos se persisten y un createHybridStorage
personalizado que enruta automaticamente los datos sensibles a SecureStore y el resto a
AsyncStorage.Detalle: chatStore (Middlewares)
TanStack React Query
La configuracion delQueryClient se define en src/shared/constants/queryClient.ts:
| Parametro | Valor | Descripcion |
|---|---|---|
staleTime | 5 minutos (300,000ms) | Tiempo antes de que los datos se consideren obsoletos |
gcTime | 30 minutos (1,800,000ms) | Tiempo que los datos inactivos permanecen en cache |
retry | 1 | Numero de reintentos ante fallos |
refetchOnWindowFocus | false | No refrescar al volver a la app |
React Contexts
BottomSheetContext
Ubicacion:
src/shared/contexts/BottomSheetContext.tsxGestiona bottom sheets globales usando @gorhom/bottom-sheet. Provee:showBottomSheet(config)- Mostrar un bottom sheethideBottomSheet()- Ocultar el bottom sheet activohideAllBottomSheets()- Ocultar todos los bottom sheets
ScrollContext
Ubicacion:
src/shared/contexts/ScrollContext.tsxTracking de scroll offset y viewport height. Permite a componentes hijos reaccionar a la posicion de scroll del contenedor padre.Diagrama de Flujo de Estado
Middlewares de Zustand Utilizados
| Middleware | Stores que lo usan | Funcion |
|---|---|---|
persist | authStore, chatStore, keyboardStore | Persiste estado seleccionado entre sesiones |
devtools | chatStore | Integracion con React Native Debugger / Redux DevTools |
createJSONStorage | authStore, chatStore, keyboardStore | Adaptador de almacenamiento para persist |
El
onboardingStore implementa persistencia manual con AsyncStorage directamente (sin el
middleware persist), lo que le da mayor control sobre el formato de almacenamiento.