CoolFace
Apppublic

DataScope26/WEB

sourceHugging Faceupdated 7d agoView on Hugging Face
0likes
useAreaManagement.jsx139 linesDownload Raw Back to hooks
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