Descripción
El módulo Stays gestiona las estadías del usuario organizadas por estado. Incluye filtrado, visualización por categoría, modales de acciones (cancelar, modificar, reseñar) y auto-prompt de reseñas al completar una estadía.- Ubicación:
src/modules/stays/
Los usuarios visitantes ven
StayGuestScreen en lugar de los Material Top Tabs. Los propietarios
(coowners) ven las 4 pestañas deslizables: activas, pasadas, canceladas y pendientes.Screens
API Endpoints
Cada endpoint acepta los parámetros
status (active, past, cancelled), page y limit. No hay
scroll infinito: se pide una única página grande (limit=100) por estado. my-rents y my-exchanges
solo aceptan active y past (no cancelled).
La API v2 retorna objetos
BookingV2 paginados que staysApi transforma a Booking mediante
mapBookingV2ToBooking (src/modules/booking/utils/bookingMapper.ts), pasando el status y el
id del usuario actual para resolver el rol y normalizar la propiedad.Hooks
Tipos principales
Temporadas
Las estadías se clasifican por temporada: peak, high, mid y low (con variantes ski/beach según la ubicación de la propiedad). Cada temporada tiene colores y traducciones asociadas definidas en las constantesSEASONS.
Store
El módulo utilizauseReviewQueueStore en Zustand para gestionar la cola de reseñas pendientes:
- Acciones del store
- ReviewQueueItem
populateQueue(stays, getCheckOut)— Llena la cola con estadías que requieren reseña. Solo se ejecuta una vez por sesión. -showNextReview()— Avanza al siguiente item de la cola. -dismissCurrentReview()— Descarta la reseña actual y avanza a la siguiente. -completeCurrentReview()— Marca como completada y avanza. -reset()— Reinicia la cola y permite reprocesar en la siguiente sesión.
StayCard Label System (v2)
El sistema de labels de la StayCard usa un modelo de 5 StayRoles con dos mensajes por tarjeta: un top message (texto contextual de acción) y un badge (indicador de approval).StayRoles
La funcióngetStayRole(stay) en src/modules/stays/utils/stayCardMessages.ts detecta el rol:
Badge Variants
Reglas de normalización
freeypendingsiempre producen el mismo texto (“Pendiente”) — spec regla 7cancelledstatus siempre produce el mismo badge (“Cancelada/o”) independiente del approvalswappedsolo aplica atype=exchange- Los guests por sí solos no distinguen dirección: una semana propia ya alquilada/intercambiada
llega con los guests del solicitante. Solo es
OWNER_RESERVED(solicitud enviada por el usuario) cuando él figura entre los asistentes (isUserAttending), quemapBookingV2ToBookingderiva buscando al usuario actual enstay.guests. En caso contrario se trata comoOWNER_PUBLISHED.
Matriz completa de labels (ES)
OWNER_BOOK — Coowner reservó su casa (role=coowner, type=book)
OWNER_RESERVED — Coowner reservó rent/exchange con guests (role=coowner, type=rent|exchange, con guests)
type=rent
type=exchange
OWNER_PUBLISHED — Coowner publicó su casa (role=coowner, type=rent|exchange, sin guests)
type=rent
type=exchange
INVITED_GUEST — Invitado a estancia (role=guest)
EXTERNAL_VISITOR — Cliente externo (role=visitor)
type=rent
type=exchange
Archivos clave
src/modules/stays/utils/stayCardMessages.ts— lógica de detección de StayRole y resolución de mensajessrc/modules/stays/components/StayCard.tsx— componente que renderiza top message + badgesrc/core/i18n/languages/es.ts— clavesstayScreen.stayCard.*src/core/i18n/languages/en.ts— claves equivalentes en inglés
Componentes destacados
StayCard
Tarjeta de estadía con información de fechas, propiedad y estado. Incluye indicador visual de
temporada.
StayList
Listado de estadías con soporte para skeletons de carga y estado vacío.
StayDetailsView
Vista de detalle de una estadía con información completa y panel de acciones.
SeasonsDisplay
Visualización de temporadas con colores y conteo de estadías disponibles por categoría.
StayActionsPanel
Panel de acciones contextuales: cancelar, modificar y gestionar invitados.
AutoShowReviewModal
Modal que se muestra automáticamente al completar una estadía. Embebe
SurveyScreen del modulo
Surveys con slug="stay-review" y onClose callback. Utiliza useReviewQueueStore para
gestionar múltiples reseñas pendientes.Modales
Tras confirmar una cancelación,
StayCancelModal navega con router.replace a
/(tabs)/04_stays?cancelled=true (en vez de push) para no dejar el detalle de una estadía ya
cancelada en el stack. Además, si se abre el detalle de una estadía inexistente (error
NOT_FOUND), StayDetailsScreen redirige automáticamente a /(tabs)/04_stays/active en lugar de
mostrar una pantalla de error.Reseñas de estadía
Las reseñas de estadía usan el motor genérico de encuestas del módulo Surveys conslug="stay-review" y scopeType="booking". El flujo tiene dos entry points:
- StayCard: El botón “Dar tu opinión” en estancias pasadas navega a
/booking/review?bookingId={id}, que renderizaSurveyScreen. - AutoShowReviewModal: Se muestra automáticamente tras el checkout. Embebe
SurveyScreendentro de un<Modal>cononClosecallback para avanzar en la cola de reseñas.
Las reseñas de estadía se gestionan a través del módulo Surveys (endpoint
/surveys/mobile/stay-review), no a través de endpoints custom del módulo Property. El módulo
Stays gestiona la UX y la cola de reseñas.