diff --git a/src/pages/UsersPage.tsx b/src/pages/UsersPage.tsx index d20d000..6ec9af2 100644 --- a/src/pages/UsersPage.tsx +++ b/src/pages/UsersPage.tsx @@ -50,6 +50,8 @@ export default function UsersPage() { const emptyUser: UserForm = { name: "", email: "", roleId: "", projectId: "", password: "", status: "ACTIVE", createdAt: new Date().toISOString().slice(0,10) }; const [form, setForm] = useState(emptyUser); + const activeProjects = projects.filter(p => p.status === 'ACTIVE'); + useEffect(() => { fetchUsers(); }, []); @@ -382,7 +384,7 @@ export default function UsersPage() { disabled={loadingProjects || saving} > - {projects.map(p => )} + {activeProjects.map(p => )} )} diff --git a/src/pages/projects/ProjectsPage.tsx b/src/pages/projects/ProjectsPage.tsx index 097c254..033ed10 100644 --- a/src/pages/projects/ProjectsPage.tsx +++ b/src/pages/projects/ProjectsPage.tsx @@ -7,7 +7,6 @@ import { fetchProjects, createProject as apiCreateProject, updateProject as apiUpdateProject, - deleteProject as apiDeleteProject, deactivateProject as apiDeactivateProject, } from "../../api/projects"; import { fetchMeterTypes, type MeterType } from "../../api/meterTypes"; @@ -28,10 +27,6 @@ export default function ProjectsPage() { const [meterTypes, setMeterTypes] = useState([]); - const [showDeactivateModal, setShowDeactivateModal] = useState(false); - const [projectToDeactivate, setProjectToDeactivate] = useState(null); - const [usersAssignedCount, setUsersAssignedCount] = useState(0); - const emptyForm: ProjectInput = { name: "", description: "", @@ -113,44 +108,27 @@ export default function ProjectsPage() { if (!activeProject) return; const confirmDelete = window.confirm( - `¿Estás seguro que quieres eliminar el proyecto "${activeProject.name}"?` + `¿Estás seguro que quieres desactivar el proyecto "${activeProject.name}"?\n\nEl proyecto será desactivado (no eliminado) y cualquier usuario asignado será desvinculado.` ); if (!confirmDelete) return; try { - await apiDeleteProject(activeProject.id); - setProjects((prev) => prev.filter((p) => p.id !== activeProject.id)); + const deactivatedProject = await apiDeactivateProject(activeProject.id); + + setProjects((prev) => + prev.map((p) => (p.id === deactivatedProject.id ? deactivatedProject : p)) + ); + setActiveProject(null); + alert(`Proyecto "${activeProject.name}" ha sido desactivado exitosamente.`); } catch (error) { - console.error("Error deleting project:", error); - - // Get error message - ApiError extends Error - let errorMessage = ""; - if (error instanceof Error) { - errorMessage = error.message; - } else if (typeof error === 'string') { - errorMessage = error; - } - - console.log("Error message:", errorMessage); // Debug log - - // Check if error is about users assigned to the project - if (errorMessage.includes("user(s) are assigned to this project")) { - // Extract number of users from error message - const match = errorMessage.match(/(\d+) user\(s\)/); - const userCount = match ? parseInt(match[1]) : 1; - - console.log("Users assigned:", userCount); // Debug log - - setUsersAssignedCount(userCount); - setProjectToDeactivate(activeProject); - setShowDeactivateModal(true); - } else { - alert( - `Error deleting project: ${errorMessage || "Please try again."}` - ); - } + console.error("Error deactivating project:", error); + alert( + `Error al desactivar el proyecto: ${ + error instanceof Error ? error.message : "Por favor intenta de nuevo." + }` + ); } }; @@ -174,31 +152,6 @@ export default function ProjectsPage() { setShowModal(true); }; - const handleConfirmDeactivate = async () => { - if (!projectToDeactivate) return; - - try { - const deactivatedProject = await apiDeactivateProject(projectToDeactivate.id); - - setProjects((prev) => - prev.map((p) => (p.id === deactivatedProject.id ? deactivatedProject : p)) - ); - - setShowDeactivateModal(false); - setProjectToDeactivate(null); - setActiveProject(null); - - alert(`Proyecto "${projectToDeactivate.name}" ha sido desactivado y los usuarios han sido desasignados.`); - } catch (error) { - console.error("Error deactivating project:", error); - alert( - `Error deactivating project: ${ - error instanceof Error ? error.message : "Please try again." - }` - ); - } - }; - const filtered = visibleProjects.filter((p) => `${p.name} ${p.areaName} ${p.description ?? ""}` .toLowerCase() @@ -435,60 +388,6 @@ export default function ProjectsPage() { )} - - {showDeactivateModal && projectToDeactivate && ( -
-
-

- Proyecto con Usuarios Asignados -

- -
-

- El proyecto "{projectToDeactivate.name}" tiene{" "} - {usersAssignedCount} usuario(s) asignado(s). -

- -

- No se puede eliminar directamente. ¿Deseas continuar con las siguientes acciones? -

- -
    -
  • - - El proyecto será desactivado (status = INACTIVE) -
  • -
  • - - Los {usersAssignedCount} usuario(s) serán desasignados (project_id = null) -
  • -
- -

- Nota: El proyecto no será eliminado de la base de datos, solo desactivado. -

-
- -
- - -
-
-
- )} ); }