import { useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { ArrowLeft, Edit, Trash2, Mail, Phone, Globe, Building2, MapPin, FileText, } from 'lucide-react'; import { Button } from '@components/atoms/Button'; import { Spinner } from '@components/atoms/Spinner'; import { Card, CardHeader, CardTitle, CardContent } from '@components/molecules/Card'; import { Breadcrumbs } from '@components/organisms/Breadcrumbs'; import { ConfirmModal } from '@components/organisms/Modal'; import { useToast } from '@components/organisms/Toast'; import { ErrorEmptyState } from '@components/templates/EmptyState'; import { useCompany, useCompanyChildren } from '@features/companies/hooks'; import { companiesApi } from '@features/companies/api'; import { formatDate } from '@utils/formatters'; export function CompanyDetailPage() { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const { showToast } = useToast(); const { company, isLoading, error, refresh } = useCompany(id); const { children } = useCompanyChildren(id); const [showDeleteModal, setShowDeleteModal] = useState(false); const [isProcessing, setIsProcessing] = useState(false); const handleDelete = async () => { if (!id) return; setIsProcessing(true); try { await companiesApi.delete(id); showToast({ type: 'success', title: 'Empresa eliminada', message: 'La empresa ha sido eliminada exitosamente.', }); navigate('/companies'); } catch { showToast({ type: 'error', title: 'Error', message: 'No se pudo eliminar la empresa.', }); } finally { setIsProcessing(false); setShowDeleteModal(false); } }; if (isLoading) { return (
); } if (error || !company) { return (
); } return (

Detalle de empresa

{/* Company info card */}

{company.name}

{company.legalName && (

{company.legalName}

)} {company.taxId && ( {company.taxId} )}
{company.settings?.email && ( )} {company.settings?.phone && (
{company.settings.phone}
)} {company.settings?.website && ( )}
{/* Details */}
{/* Address */} {(company.settings?.address || company.settings?.city) && ( Dirección
{company.settings?.address && (

{company.settings.address}

)}

{[ company.settings?.city, company.settings?.state, company.settings?.zipCode, ] .filter(Boolean) .join(', ')}

{company.settings?.country && (

{company.settings.country}

)}
)} {/* Fiscal Info */} Información fiscal
RFC / Tax ID
{company.taxId || 'No especificado'}
Moneda
{company.currencyCode || 'MXN'}
Régimen fiscal
{company.settings?.taxRegime || 'No especificado'}
Posición fiscal
{company.settings?.fiscalPosition || 'No especificado'}
{/* Hierarchy */} Jerarquía corporativa
Empresa matriz
{company.parentCompanyName || 'Ninguna (empresa raíz)'}
Subsidiarias
{children.length > 0 ? (
    {children.map((child) => (
  • ))}
) : ( 'Ninguna' )}
{/* System Info */} Información del sistema
ID
{company.id}
Tenant ID
{company.tenantId}
Creado
{formatDate(company.createdAt, 'full')}
Actualizado
{company.updatedAt ? formatDate(company.updatedAt, 'full') : '-'}
{/* Delete Modal */} setShowDeleteModal(false)} onConfirm={handleDelete} title="Eliminar empresa" message={`¿Estás seguro de que deseas eliminar "${company.name}"? Esta acción no se puede deshacer.`} variant="danger" confirmText="Eliminar" isLoading={isProcessing} />
); } export default CompanyDetailPage;