import { Box, Icon, Skeleton, Typography } from "@mui/material"; import { useState, useEffect } from "react"; import { Tooltip } from "../Atoms/Tooltip"; import { IconCheckCircle, IconInformationCircle, IconXCircle, } from "@intersect.mbo/intersectmbo.org-icons-set"; import { successGreen } from "../../consts/colors"; import { SignatureVerificationResult } from "../../types/api"; import { verifyAuthorWitnessSet } from "../../services/requests/verifyAuthorWitnessSet"; import { useTranslation } from "../../contexts/I18nContext"; type GovernanceActionAuthorProps = { author: any; metadataUrl?: string; }; function GovernanceActionAuthor({ author, metadataUrl, }: GovernanceActionAuthorProps) { const [verificationResult, setVerificationResult] = useState(null); const [isLoading, setIsLoading] = useState(false); const { t } = useTranslation(); const getValue = (field: any) => { if (typeof field === "string") return field; if (field && typeof field === "object" && field["@value"]) return field["@value"]; return ""; }; const authorData = { name: getValue(author?.name), witnessAlgorithm: getValue(author?.witness?.witnessAlgorithm), publicKey: getValue(author?.witness?.publicKey), signature: getValue(author?.witness?.signature), }; useEffect(() => { const verifySignature = async () => { if ( !metadataUrl || !authorData.name || !authorData.witnessAlgorithm || !authorData.publicKey || !authorData.signature ) { return; } setIsLoading(true); try { const verificationData = { author: { name: authorData.name, witness: { witnessAlgorithm: authorData.witnessAlgorithm, publicKey: authorData.publicKey, signature: authorData.signature, }, }, metadataUrl, }; const result = await verifyAuthorWitnessSet(verificationData); setVerificationResult(result); } catch (error) { console.error("Error verifying signature:", error); setVerificationResult({ isValid: false, author: authorData.name, error: "Failed to verify signature", }); } finally { setIsLoading(false); } }; verifySignature(); }, [author, metadataUrl]); const renderVerificationIcon = () => { if (isLoading) { return ; } if (verificationResult?.isValid) { return ( ); } if (verificationResult && !verificationResult.isValid) { return ( ); } return null; }; return ( {renderVerificationIcon()} {authorData.name} ); } export default GovernanceActionAuthor;