From 4b44a8da08b417f018cc92085c93a25592164d46 Mon Sep 17 00:00:00 2001 From: dmolinari Date: Wed, 1 Apr 2026 14:24:25 -0300 Subject: [PATCH] fix: Remove unused import in ProtectedRoute (Refs #2) --- Frontend/.dockerignore | 4 ++++ Frontend/.env.example | 1 + Frontend/src/App.tsx | 8 +++++--- Frontend/src/api/client.ts | 14 ++++++++------ Frontend/src/components/ProtectedRoute.tsx | 7 ++++--- Frontend/src/hooks/useAuth.tsx | 7 ++++--- Frontend/src/pages/LoginPage.tsx | 8 ++++++-- Frontend/src/pages/RegisterPage.tsx | 8 +++++--- 8 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 Frontend/.dockerignore create mode 100644 Frontend/.env.example diff --git a/Frontend/.dockerignore b/Frontend/.dockerignore new file mode 100644 index 0000000..5abd532 --- /dev/null +++ b/Frontend/.dockerignore @@ -0,0 +1,4 @@ +node_modules +dist +.env +.env.local \ No newline at end of file diff --git a/Frontend/.env.example b/Frontend/.env.example new file mode 100644 index 0000000..6ff1b0c --- /dev/null +++ b/Frontend/.env.example @@ -0,0 +1 @@ +VITE_API_URL=http://localhost:5000/api \ No newline at end of file diff --git a/Frontend/src/App.tsx b/Frontend/src/App.tsx index b3e9775..55df495 100644 --- a/Frontend/src/App.tsx +++ b/Frontend/src/App.tsx @@ -1,16 +1,18 @@ import { Routes, Route, Navigate } from 'react-router-dom'; -import { AuthProvider } from './hooks/useAuth'; -import { ProtectedRoute } from './components/ProtectedRoute'; +import { AuthProvider, useAuth } from './hooks/useAuth'; +import ProtectedRoute from './components/ProtectedRoute'; import LoginPage from './pages/LoginPage'; import RegisterPage from './pages/RegisterPage'; import DashboardPage from './pages/DashboardPage'; function App() { + const { isAuthenticated } = useAuth(); + return ( + } /> } /> } /> diff --git a/Frontend/src/api/client.ts b/Frontend/src/api/client.ts index 95ac86d..3d9e9de 100644 --- a/Frontend/src/api/client.ts +++ b/Frontend/src/api/client.ts @@ -1,5 +1,5 @@ -import { LoginRequest, RegisterRequest, AuthResponse, RegisterResponse } from '../types/auth'; -import { User } from '../types/user'; +import type { LoginRequest, RegisterRequest, AuthResponse, RegisterResponse } from '../types/auth'; +import type { User } from '../types/user'; const API_URL = import.meta.env.VITE_API_URL || ''; @@ -24,10 +24,12 @@ class ApiClient { throw new Error('Unauthorized'); } - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - throw new Error(errorData.message || `Error ${response.status}`); - } +if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + // Handle both { error: "message" } and { message: "..." } formats + const errorMessage = errorData.error || errorData.message || `Error ${response.status}`; + throw new Error(errorMessage); + } return response.json(); } diff --git a/Frontend/src/components/ProtectedRoute.tsx b/Frontend/src/components/ProtectedRoute.tsx index 98c2af1..0915e12 100644 --- a/Frontend/src/components/ProtectedRoute.tsx +++ b/Frontend/src/components/ProtectedRoute.tsx @@ -1,14 +1,15 @@ -import { Navigate, Outlet } from 'react-router-dom'; +import { Navigate } from 'react-router-dom'; import { useAuth } from '../hooks/useAuth'; +import type { PropsWithChildren } from 'react'; -const ProtectedRoute = () => { +const ProtectedRoute = ({ children }: PropsWithChildren<{}>) => { const { isAuthenticated } = useAuth(); if (!isAuthenticated) { return ; } - return ; + return children; }; export default ProtectedRoute; \ No newline at end of file diff --git a/Frontend/src/hooks/useAuth.tsx b/Frontend/src/hooks/useAuth.tsx index 1772053..364d518 100644 --- a/Frontend/src/hooks/useAuth.tsx +++ b/Frontend/src/hooks/useAuth.tsx @@ -1,7 +1,8 @@ -import { createContext, useContext, useState, useEffect, ReactNode } from 'react'; +import { createContext, useContext, useState, useEffect } from 'react'; +import type { ReactNode } from 'react'; import { apiClient } from '../api/client'; -import { RegisterResponse, LoginRequest, RegisterRequest } from '../types/auth'; -import { User } from '../types/user'; +import type { LoginRequest, RegisterRequest } from '../types/auth'; +import type { User } from '../types/user'; interface AuthContextProps { user: User | null; diff --git a/Frontend/src/pages/LoginPage.tsx b/Frontend/src/pages/LoginPage.tsx index c6761f6..f38ef8b 100644 --- a/Frontend/src/pages/LoginPage.tsx +++ b/Frontend/src/pages/LoginPage.tsx @@ -18,8 +18,12 @@ const LoginPage = () => { try { await login({ username, password }); navigate('/dashboard', { replace: true }); - } catch (err: any) { - setError(err.message || 'Error al iniciar sesión'); + } catch (err) { + if (err instanceof Error) { + setError(err.message || 'Error al iniciar sesión'); + } else { + setError('Error al iniciar sesión'); + } } finally { setLoading(false); } diff --git a/Frontend/src/pages/RegisterPage.tsx b/Frontend/src/pages/RegisterPage.tsx index 0d9a64e..1a5060f 100644 --- a/Frontend/src/pages/RegisterPage.tsx +++ b/Frontend/src/pages/RegisterPage.tsx @@ -20,12 +20,14 @@ const RegisterPage = () => { try { await register({ username, password, email, nombreCompleto }); navigate('/dashboard', { replace: true }); - } catch (err: any) { + } catch (err) { // Handle 409 Conflict for duplicate username/email - if (err.message?.includes('409')) { + if (err instanceof Error && err.message?.includes('409')) { setError('El usuario o correo electrónico ya existe'); - } else { + } else if (err instanceof Error) { setError(err.message || 'Error al registrarse'); + } else { + setError('Error al registrarse'); } } finally { setLoading(false);