CoolFace
Apppublic

DataScope26/WEB

sourceHugging Faceupdated 8d agoView on Hugging Face
0likes
useCompanySettings.jsx214 linesDownload Raw Back to hooks
1import { useState, useEffect } from "react";2import { patchCompany, deleteCompany, uploadCompanyLogo } from "../services/apiCompanies.js";3import { getCookie } from "../utils/cookieUtils";4 5export const useCompanySettings = (selectedCompany) => {6  const [legalName, setLegalName] = useState("");7  const [saving, setSaving] = useState(false);8  const [deleting, setDeleting] = useState(false);9  const [statusMessage, setStatusMessage] = useState(null);10  const [errorMessage, setErrorMessage] = useState(null);11  const [uploadingLogo, setUploadingLogo] = useState(false);12 13  // Initialize form from selected company14  useEffect(() => {15    if (!selectedCompany) return;16 17    setLegalName(selectedCompany.name || "");18 19    setStatusMessage(null);20    setErrorMessage(null);21  }, [selectedCompany]);22 23  const handleDiscard = () => {24    if (!selectedCompany) return;25 26    setLegalName(selectedCompany.name || "");27 28    setStatusMessage(null);29    setErrorMessage(null);30  };31 32  const handleSave = async (onSuccess) => {33    setStatusMessage(null);34    setErrorMessage(null);35 36    if (!selectedCompany) return;37 38    // Validate name contains at least 1 letter39    const hasLetter = /[a-zA-Z]/.test(legalName);40    if (!hasLetter) {41      setErrorMessage("El nombre de la empresa debe contener al menos una letra.");42      return;43    }44 45    const token =46      sessionStorage.getItem("token") ||47      localStorage.getItem("token") ||48      getCookie("datascope_token");49 50    if (!token) {51      setErrorMessage("No hay sesión activa.");52      return;53    }54 55    const companyId =56      selectedCompany.id || selectedCompany.companyId;57 58    if (!companyId) {59      setErrorMessage("No se encontró el ID de la empresa.");60      return;61    }62 63    const payload = {64      name: legalName,65    };66 67    try {68      setSaving(true);69 70      const response = await patchCompany(71        token,72        companyId,73        payload74      );75 76      const updatedCompany =77        response?.data?.company ||78        response?.data ||79        response ||80        {81          ...selectedCompany,82          ...payload,83        };84 85      setStatusMessage("Guardado correctamente.");86 87      if (onSuccess) {88        onSuccess(updatedCompany);89      }90    } catch (err) {91      console.error(92        "Error al guardar company settings:",93        err94      );95 96      setErrorMessage(97        err?.response?.data?.message ||98        err?.message ||99        "No se pudo guardar. Intentá de nuevo."100      );101    } finally {102      setSaving(false);103    }104  };105 106  const handleDelete = async (onSuccess) => {107    setStatusMessage(null);108    setErrorMessage(null);109 110    if (!selectedCompany) return;111 112    const token =113      sessionStorage.getItem("token") ||114      localStorage.getItem("token") ||115      getCookie("datascope_token");116 117    if (!token) {118      setErrorMessage("No hay sesión activa.");119      return;120    }121 122    const companyId =123      selectedCompany.id || selectedCompany.companyId;124 125    if (!companyId) {126      setErrorMessage("No se encontró el ID de la empresa.");127      return;128    }129 130    try {131      setDeleting(true);132 133      const response = await deleteCompany(token, companyId);134 135      setStatusMessage("Empresa eliminada correctamente.");136 137      if (onSuccess) {138        onSuccess(response);139      }140    } catch (err) {141      console.error(142        "Error al eliminar company:",143        err144      );145 146      setErrorMessage(147        err?.response?.data?.message ||148        err?.message ||149        "No se pudo eliminar. Intentá de nuevo."150      );151    } finally {152      setDeleting(false);153    }154 155 156 157 158 159  };160 161  const handleLogoUpload = async (file, onSuccess) => {162    setStatusMessage(null);163    setErrorMessage(null);164 165    if (!selectedCompany || !file) return;166 167    const token =168      sessionStorage.getItem("token") ||169      localStorage.getItem("token") ||170      getCookie("datascope_token");171 172    if (!token) {173      setErrorMessage("No hay sesión activa.");174      return;175    }176 177    const companyId = selectedCompany.id || selectedCompany.companyId;178    if (!companyId) {179      setErrorMessage("No se encontró el ID de la empresa.");180      return;181    }182 183    try {184      setUploadingLogo(true);185 186      const { company: updatedCompany } = await uploadCompanyLogo(token, companyId, file);187 188      setStatusMessage("Logo actualizado correctamente.");189 190      if (onSuccess && updatedCompany) {191        onSuccess(updatedCompany);192      }193    } catch (err) {194      console.error("Error al subir el logo:", err);195      setErrorMessage(err?.message || "No se pudo subir el logo. Intentá de nuevo.");196    } finally {197      setUploadingLogo(false);198    }199  };200 201  return {202    legalName,203    setLegalName,204    saving,205    deleting,206    statusMessage,207    errorMessage,208    handleDiscard,209    handleSave,210    handleDelete,211    handleLogoUpload,212  };213};214