hyper-reality-visualizer / frontend /FRONTEND_DOCUMENTATION.md
eduardo4547's picture
Upload 150 files
cb5d9d0 verified
# Documentación del Frontend
Este documento describe la arquitectura, las rutas, los estados, los hooks y los componentes principales del frontend React + TypeScript ubicado en `frontend/`.
---
## 1. Visión general
El frontend está construido con:
- React 19
- TypeScript
- Vite
- React Router DOM
- Zustand para estado global
- @tanstack/react-query para consultas asíncronas
- Tailwind CSS para estilos
- Arquitectura basada en características (`features`)
La carpeta principal de la aplicación es `frontend/src`.
---
## 2. Estructura de carpetas clave
- `src/main.tsx` - punto de entrada, configuración de router y React Query
- `src/App.tsx` - rutas principales de la aplicación
- `src/store` - estado global con Zustand
- `src/api` - cliente y funciones de API centralizadas
- `src/hooks` - hooks reutilizables del frontend
- `src/features` - features organizadas por dominio
- `src/utils` - utilidades compartidas
- `src/types.ts` - tipos globales de la aplicación
---
## 3. Rutas principales
`src/App.tsx` define las rutas:
- `/``RoomSetup`
- `/visualizer``RoomVisualizer`
- `/settings``SettingsPage`
- `*` → redirección a `/`
---
## 4. Estado global (Zustand)
`src/store/useAppStore.ts` almacena:
- `previewImage` - URL de la imagen cargada
- `uploadMessage` - estado de mensaje de subida
- `openProductId` - producto seleccionado en `RoomVisualizer`
- `viewMode` - vista actual de productos en el visualizador (`grid` o `list`)
Funciones disponibles:
- `setPreviewImage`
- `setUploadMessage`
- `setOpenProductId`
- `setViewMode`
- `reset`
---
## 5. Cliente API centralizado
`src/api/client.ts` incluye:
- `DEV_API_BASE` y `API_BASE` para la URL del backend
- `getApiBase` / `buildApiUrl` para construir endpoints
- `fetchClientConfig` para obtener configuración de cliente
- `uploadRoomImage` para subir imágenes al servidor
- `startSession` para iniciar una sesión remota
Esta capa permite mantener la URL del backend en un solo lugar y soportar un token de desarrollo automático.
---
## 6. Hooks compartidos
### `src/hooks/useUploadImage.ts`
- Maneja la subida de imágenes al backend
- Controla `isUploading` y `uploadError`
- Envuelve `uploadRoomImage` del cliente API
---
## 7. Tipos globales
`src/types.ts` declara tipos comunes como:
- `ClientData`
- `RouteItem`
- `Product`
El tipo `Product` se usa en el visualizador para productos de catálogo.
---
## 8. Feature: Room Setup
### Archivos
- `src/features/roomSetup/RoomSetup.tsx`
- `src/features/roomSetup/roomSetupHooks.ts`
- `src/features/roomSetup/RoomSetupComponents.tsx`
- `src/data/roomSetupData.ts`
### Comportamiento
`RoomSetup` es la página principal donde el usuario puede:
- subir una imagen arrastrando o seleccionando archivo
- ver una vista previa de la imagen
- iniciar la navegación hacia el visualizador
- ver habitaciones de demostración filtrables
### `useRoomSetup`
Este hook abstrae toda la lógica de:
- drag & drop
- selección de archivos
- subida de imagen
- gestión de estados de carga
- navegación con `useNavigate`
### Componentes auxiliares
- `FilterButton` - botón de filtrado por categoría
- `RoomCard` - tarjeta de habitación de demostración
---
## 9. Feature: Room Visualizer
### Archivos
- `src/features/roomVisualizer/RoomVisualizer.tsx`
- `src/features/roomVisualizer/roomVisualizerHooks.ts`
- `src/features/roomVisualizer/roomVisualizerData.ts`
- `src/features/roomVisualizer/ProductCards.tsx`
### Comportamiento
`RoomVisualizer` muestra:
- la imagen subida por el usuario
- controles de zoom y arrastre de la imagen
- lista / grid de productos para aplicar en la habitación
- selección de producto y detalles asociados
### `useRoomVisualizer`
Extrae la lógica de visualización de productos:
- modo de vista (`grid` / `list`)
- búsqueda y filtros básicos
- producto seleccionado
- manejo de selección de producto
- agrupación en chunks para renderizar grillas
### Datos de productos
- `roomVisualizerData.ts` contiene el catálogo de productos estáticos usados en la vista.
### Componentes
- `ProductGroupCard` - renderiza un grupo de 3 productos en grid
- `IndividualProductCard` - renderiza un producto en modo lista
---
## 10. Feature: Settings
### Archivo
- `src/features/settings/SettingsPage.tsx`
### Comportamiento
La página de configuración permite al usuario:
- definir la URL base de la API
- activar / desactivar la lista de rutas en el viewer
- definir token de desarrollo automático
### Soporte de almacenamiento
`src/utils/settings.ts` gestiona:
- carga de `localStorage`
- guardado de configuración
- valores por defecto
---
## 11. Componentes comunes
- `src/components/ui/LoadingScreen.tsx` - pantalla de carga reutilizable
---
## 12. Flujo principal de la app
1. Usuario entra en `/`
2. Sube una imagen en `RoomSetup`
3. Se crea una vista previa y se almacena en Zustand
4. Se navega a `/visualizer`
5. `RoomVisualizer` usa la imagen y muestra productos
6. El usuario filtra, busca y selecciona productos
7. `SettingsPage` permite ajustar la API y opciones de la app
---
## 13. Cómo ejecutar el frontend
Desde `frontend/`:
```bash
npm install
npm run dev
```
Construcción de producción:
```bash
npm run build
```
---
## 14. Posibles mejoras futuras
- mover `roomVisualizerProducts` a una API real o servicio de datos
- extraer más componentes presentacionales del visualizador
- usar React Query para cargar configuración del cliente en lugar de gestión manual
- añadir tests unitarios para hooks y componentes
- normalizar rutas y nombres de features
---
## 15. Observaciones adicionales
- La base API se controla desde `VITE_API_BASE_URL` o `DEV_API_BASE` en desarrollo.
- La aplicación usa `queryClient` de React Query, aunque hoy solo se usa para potenciales fetches futuros.
- El estado global es ligero y se usa principalmente para compartir imagen previa, modo de vista y selección de producto.