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.

Hooks Compartidos

Ubicación: src/shared/hooks/ Estos hooks encapsulan lógica reutilizable a nivel global de la aplicación. Están disponibles para cualquier módulo o pantalla.

Catálogo completo

HookArchivoParámetrosRetornoDescripción
useAppInitializationhooks/useAppInitialization.ts{ appIsReady: boolean, hasTimedOut: boolean }Inicializa la app: carga fonts, i18n, auth, onboarding, chat. Timeout de 2 minutos.
useAppLoadingStatehooks/useAppLoadingState.ts{ isLoading: boolean, isHomeReady: boolean }Calcula estado de carga desde hidratación de auth/property.
useAnalyticsProfileSynchooks/useAnalyticsProfileSync.tsenabled: booleanvoidSincroniza tipos de propiedad del usuario con PostHog.
useCombinedUnreadCounthooks/useCombinedUnreadCount.tsnumberAgrega conteo de chat + notificaciones no leídas. Actualiza badge de la app.
useKeyboardAwareScrollhooks/useKeyboardAwareScroll.ts{ enabled?, extraScrollHeight?, keyboardVerticalOffset? }{ scrollViewRef, handleInputFocus, handleScrollViewLayout, handleScroll }Scroll automático cuando el teclado aparece sobre un input.
useLinkinghooks/useLinking.tsObjeto con 8 métodos de link/parseWrapper del linkingService para deep links.
useNavigationhooks/useNavigation.tsvoid (side effects)Orquesta routing basado en estado: auth, onboarding, home, error.
useOnboardingStatushooks/useOnboardingStatus.ts{ hasSeenOnboarding, isOnboardingLoaded }Lee estado del onboarding e inicializa si es necesario.
usePropertySelectionhooks/usePropertySelection.ts{ isPropertySelected, isPropertySelectionRequired, hasPropertiesAvailable }Determina si se requiere selección de propiedad.
useScrollVisibilityhooks/useScrollVisibility.ts{ threshold?, triggerOnce? }{ ref, isVisible, onLayout }Detecta visibilidad de un componente durante scroll.
useStorageDiagnosticshooks/useStorageDiagnostics.tsenableDiagnostics?: booleanStorageDiagnostics | nullHealth checks de AsyncStorage + SecureStore.

Detalle de hooks clave

useAppInitialization

Es el hook principal que orquesta el arranque de la app. Se ejecuta una sola vez al montar el componente raíz.
  1. Carga de fuentes tipográficas 2. Inicialización de i18n (detección de idioma) 3. Hidratación del estado de autenticación 4. Carga del estado de onboarding 5. Inicialización del servicio de chat

useKeyboardAwareScroll

Resuelve el problema común en formularios donde el teclado oculta los inputs activos.
const { scrollViewRef, handleInputFocus, handleScrollViewLayout, handleScroll } =
  useKeyboardAwareScroll({
    enabled: true,
    extraScrollHeight: 20,
    keyboardVerticalOffset: 80,
  });

return (
  <ScrollView ref={scrollViewRef} onLayout={handleScrollViewLayout} onScroll={handleScroll}>
    <TextInput onFocus={handleInputFocus} />
  </ScrollView>
);

useCombinedUnreadCount

Combina el conteo de mensajes no leídos del chat con las notificaciones pendientes. Además, actualiza automáticamente el badge numérico del icono de la app en el dispositivo.

useNavigation

Este hook tiene side effects importantes. Redirige al usuario automáticamente según su estado de autenticación, onboarding y selección de propiedad. No debe usarse en componentes que no sean parte del flujo de navegación raíz.

Hooks de módulos específicos

Los hooks que pertenecen a un dominio particular no viven en shared/hooks/, sino en el directorio de hooks de su módulo correspondiente:

Booking

src/modules/booking/hooks/ Hooks para el flujo de reservas, calendario, selección de fechas.

Stays

src/modules/stays/hooks/ Hooks para gestión de estancias y reviews.

Chat

src/modules/chat/hooks/ Hooks para mensajería en tiempo real.

Profile

src/modules/profile/hooks/ Hooks para perfil de usuario y configuración.
Si un hook es utilizado por más de un módulo, debe vivir en src/shared/hooks/. Si es exclusivo de un módulo, debe permanecer en el directorio de hooks de ese módulo.