DataScope26/WEB
0
1import { useState } from "react";2import { getAreas, createArea, updateArea, deleteArea } from "../services/apiCompanySetup.js";3import { getCookie } from "../utils/cookieUtils.js";4 5export const useAreaManagement = (companyId) => {6 const [areas, setAreas] = useState([]);7 const [loading, setLoading] = useState(false);8 const [error, setError] = useState(null);9 const [statusMessage, setStatusMessage] = useState(null);10 const [isCreating, setIsCreating] = useState(false);11 const [isUpdating, setIsUpdating] = useState(false);12 const [isDeleting, setIsDeleting] = useState(false);13 14 const getToken = () =>15 sessionStorage.getItem("token") ||16 localStorage.getItem("token") ||17 getCookie("datascope_token");18 19 const fetchAreas = async () => {20 if (!companyId) return;21 22 setLoading(true);23 setError(null);24 25 try {26 const token = getToken();27 if (!token) throw new Error("No hay sesión activa");28 29 const response = await getAreas(token, companyId);30 setAreas(response.data || []);31 } catch (err) {32 const errorMsg = err?.response?.data?.error || err?.message || "Error al cargar áreas";33 setError(errorMsg);34 console.error("Error fetching areas:", err);35 } finally {36 setLoading(false);37 }38 };39 40 const handleCreateArea = async (name) => {41 if (!name.trim()) {42 setError("El nombre del área no puede estar vacío");43 return null;44 }45 46 setIsCreating(true);47 setError(null);48 setStatusMessage(null);49 50 try {51 const token = getToken();52 if (!token) throw new Error("No hay sesión activa");53 54 const response = await createArea(token, companyId, name.trim());55 const newArea = response.data;56 57 setAreas([...areas, newArea]);58 setStatusMessage("Área creada exitosamente");59 return newArea;60 } catch (err) {61 const errorMsg = err?.response?.data?.error || err?.message || "Error al crear área";62 setError(errorMsg);63 console.error("Error creating area:", err);64 return null;65 } finally {66 setIsCreating(false);67 }68 };69 70 const handleUpdateArea = async (areaId, newName) => {71 if (!newName.trim()) {72 setError("El nombre del área no puede estar vacío");73 return null;74 }75 76 setIsUpdating(true);77 setError(null);78 setStatusMessage(null);79 80 try {81 const token = getToken();82 if (!token) throw new Error("No hay sesión activa");83 84 const response = await updateArea(token, companyId, areaId, newName.trim());85 const updatedArea = response.data;86 87 setAreas(areas.map(area => area.id === areaId ? updatedArea : area));88 setStatusMessage("Área actualizada exitosamente");89 return updatedArea;90 } catch (err) {91 const errorMsg = err?.response?.data?.error || err?.message || "Error al actualizar área";92 setError(errorMsg);93 console.error("Error updating area:", err);94 return null;95 } finally {96 setIsUpdating(false);97 }98 };99 100 const handleDeleteArea = async (areaId) => {101 setIsDeleting(true);102 setError(null);103 setStatusMessage(null);104 105 try {106 const token = getToken();107 if (!token) throw new Error("No hay sesión activa");108 109 await deleteArea(token, companyId, areaId);110 setAreas(areas.filter(area => area.id !== areaId));111 setStatusMessage("Área eliminada exitosamente");112 return true;113 } catch (err) {114 const errorMsg = err?.response?.data?.error || err?.message || "Error al eliminar área";115 setError(errorMsg);116 console.error("Error deleting area:", err);117 return false;118 } finally {119 setIsDeleting(false);120 }121 };122 123 return {124 areas,125 loading,126 error,127 statusMessage,128 isCreating,129 isUpdating,130 isDeleting,131 fetchAreas,132 handleCreateArea,133 handleUpdateArea,134 handleDeleteArea,135 setStatusMessage,136 setError,137 };138};139 