import { Dispatch, SetStateAction, useEffect } from 'react' import { Meta, ProfileMetadata } from '../../types' import { SignedStatus, useSigitMeta } from '../../hooks/useSigitMeta' import { Event, kinds } from 'nostr-tools' import { Link } from 'react-router-dom' import { MetadataController } from '../../controllers' import { hexToNpub, npubToHex, shorten } from '../../utils' import { appPublicRoutes, appPrivateRoutes } from '../../routes' import { Button, Divider, Tooltip } from '@mui/material' import { DisplaySigner } from '../DisplaySigner' import { faArchive, faCalendar, faCopy, faEye, faFile } from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { UserAvatar } from '../UserAvatar' import { UserAvatarGroup } from '../UserAvatarGroup' import styles from './style.module.scss' import { TooltipChild } from '../TooltipChild' import { getExtensionIconLabel } from '../getExtensionIconLabel' type SigitProps = { meta: Meta profiles: { [key: string]: ProfileMetadata } setProfiles: Dispatch> } export const DisplaySigit = ({ meta, profiles, setProfiles }: SigitProps) => { const { title, createdAt, submittedBy, signers, signedStatus, fileExtensions } = useSigitMeta(meta) useEffect(() => { const hexKeys: string[] = [] if (submittedBy) { hexKeys.push(npubToHex(submittedBy)!) } hexKeys.push(...signers.map((signer) => npubToHex(signer)!)) const metadataController = new MetadataController() hexKeys.forEach((key) => { if (!(key in profiles)) { const handleMetadataEvent = (event: Event) => { const metadataContent = metadataController.extractProfileMetadataContent(event) if (metadataContent) setProfiles((prev) => ({ ...prev, [key]: metadataContent })) } metadataController.on(key, (kind: number, event: Event) => { if (kind === kinds.Metadata) { handleMetadataEvent(event) } }) metadataController .findMetadata(key) .then((metadataEvent) => { if (metadataEvent) handleMetadataEvent(metadataEvent) }) .catch((err) => { console.error(`error occurred in finding metadata for: ${key}`, err) }) } }) }, [submittedBy, signers, profiles, setProfiles]) return (

{title}

{submittedBy && (function () { const profile = profiles[submittedBy] return ( ) })()} {submittedBy && signers.length ? ( ) : null} {signers.map((signer) => { const pubkey = npubToHex(signer)! const profile = profiles[pubkey] return ( ) })}
{createdAt}
{signedStatus} {fileExtensions.length > 0 ? ( {fileExtensions.length > 1 ? ( <> Multiple File Types ) : ( getExtensionIconLabel(fileExtensions[0]) )} ) : null}
) }