import { useEffect, useMemo, useState } from 'react'; import { Link } from 'react-router'; import { useAuth } from '../../auth/AuthContext'; import { Alert, LoadingBlock, errorMessage } from '../../components/Feedback'; import { Icon } from '../../components/Icon'; import { getInventoryFamilyFindings, getInventoryTechnicalValues, } from '../../lib/inventoryStructureApi'; import type { InventoryFamilyFinding, InventoryTechnicalValues, } from '../../lib/inventoryStructureApi'; import { AssetTechnicalDataPanel } from './AssetTechnicalDataPanel'; export function AssetFindingCatalogPanel({ assetId, canManage }: { assetId: string; canManage: boolean }) { const { hasPermission } = useAuth(); const canEditTechnical = hasPermission('assets.update'); const [technical, setTechnical] = useState(null); const [items, setItems] = useState([]); const [search, setSearch] = useState(''); const [loading, setLoading] = useState(true); const [unsupported, setUnsupported] = useState(false); const [error, setError] = useState(''); useEffect(() => { let active = true; setLoading(true); setUnsupported(false); setError(''); getInventoryTechnicalValues(assetId) .then(async (loaded) => { const findings = await getInventoryFamilyFindings(loaded.family.id); if (!active) return; setTechnical(loaded); setItems(findings.items); }) .catch((requestError) => { if (!active) return; const message = errorMessage(requestError); if (message.includes('no tiene clasificación técnica')) setUnsupported(true); else setError(message); }) .finally(() => active && setLoading(false)); return () => { active = false; }; }, [assetId]); const visible = useMemo(() => { const needle = search.trim().toLocaleLowerCase(); if (!needle) return items; return items.filter((item) => [item.title, item.code, item.categoryName, item.legalBasis ?? ''] .some((value) => value.toLocaleLowerCase().includes(needle))); }, [items, search]); if (loading) return
; if (error) return {error}; if (unsupported || !technical) return
HALLAZGOS APLICABLES

Sin clasificación técnica

Departamento, Área y Yacimiento son niveles estructurales. Los Hallazgos se registran sobre Instalaciones y Subinstalaciones clasificadas.

; return
HALLAZGOS APLICABLES

{technical.family.name}

Se muestran únicamente los Hallazgos asociados a esta clasificación técnica. Éste es el mismo catálogo que consume la APK para este objeto.

{items.length} asociados
{canManage &&

¿Falta un Hallazgo? Administrá la clasificación en Configuración de Inventarios y el cambio se aplicará a todos los objetos de este mismo tipo técnico.

Configurar Inventarios
} {items.length > 0 && } {items.length === 0 ?
Esta clasificación todavía no tiene Hallazgos asociados. Desde Configuración de Inventarios podés vincular los que correspondan.
: visible.length === 0 ?
No hay Hallazgos asociados que coincidan con la búsqueda.
:
{visible.map((item) =>
{item.title} {item.categoryName} · {item.code}{item.suggestedSeverity ? ` · gravedad sugerida ${item.suggestedSeverity}/10` : ''} {item.legalBasis && {item.legalBasis}}
)}
}
; }