Objetivo
Reducir duplicación en el frontend consolidando rutas, endpoints, y componentes repetidos.
Contexto
Hallazgos F2.9, F2.10, F2.11 de spec 003. Tres áreas de duplicación en el frontend:
Rutas y endpoints hardcoded (F2.9)
Rutas como /dashboard, /patients/${id}, /encounters/${id}/edit están hardcodeadas en ~15 lugares. Endpoints de API duplicados en hooks y páginas.
LoadingSpinner (F2.10)
El spinner <div className="h-8 w-8 animate-spin..."> está duplicado en 4 páginas.
ApiError tipada (F2.11)
Los errores se lanzan como new Error(error.detail), perdiendo status code y endpoint.
Cambios requeridos
- Crear
frontend/src/lib/navigation/routes.ts con constantes de rutas
- Crear
frontend/src/lib/api/endpoints.ts con constantes de endpoints
- Crear
frontend/src/components/ui/loading-spinner.tsx
- Crear clase
ApiError en frontend/src/lib/api/client.ts
- Reemplazar usos hardcoded
Criterios de aceptación
Verificación
cd frontend && npm run type-check && npm run lint && npm test
Referencia
docs/specs/003-refactor-plan/spec.md — F2.9, F2.10, F2.11
Objetivo
Reducir duplicación en el frontend consolidando rutas, endpoints, y componentes repetidos.
Contexto
Hallazgos F2.9, F2.10, F2.11 de spec 003. Tres áreas de duplicación en el frontend:
Rutas y endpoints hardcoded (F2.9)
Rutas como
/dashboard,/patients/${id},/encounters/${id}/editestán hardcodeadas en ~15 lugares. Endpoints de API duplicados en hooks y páginas.LoadingSpinner (F2.10)
El spinner
<div className="h-8 w-8 animate-spin...">está duplicado en 4 páginas.ApiError tipada (F2.11)
Los errores se lanzan como
new Error(error.detail), perdiendo status code y endpoint.Cambios requeridos
frontend/src/lib/navigation/routes.tscon constantes de rutasfrontend/src/lib/api/endpoints.tscon constantes de endpointsfrontend/src/components/ui/loading-spinner.tsxApiErrorenfrontend/src/lib/api/client.tsCriterios de aceptación
LoadingSpinnerreutilizable reemplaza las 4 instancias inlineApiErrorpreserva status code y endpointnpm run type-check && npm run lintpasanVerificación
Referencia
docs/specs/003-refactor-plan/spec.md— F2.9, F2.10, F2.11