You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

85 lines
2.4 KiB

import RelayIcon from '@/components/RelayIcon'
import { DropdownMenuItem } from '@/components/ui/dropdown-menu'
import { useSeenOnRelays } from '@/hooks/useSeenOnRelays'
import { getKindDescription } from '@/lib/kind-description'
import { toRelay } from '@/lib/link'
import { simplifyUrl } from '@/lib/url'
import { useSecondaryPage } from '@/PageManager'
import type { Event } from 'nostr-tools'
import { useTranslation } from 'react-i18next'
export default function NoteOptionsMetaHeader({
event,
allowedRelays,
onNavigate,
inDropdown = false
}: {
event: Event
allowedRelays?: readonly string[]
onNavigate?: () => void
inDropdown?: boolean
}) {
const { t } = useTranslation()
const { push } = useSecondaryPage()
const relays = useSeenOnRelays(event.id, allowedRelays)
const { description } = getKindDescription(event.kind, event)
const relayRows = relays.map((relay) => {
const label = (
<>
<RelayIcon url={relay} className="size-4 shrink-0" />
<span className="min-w-0 truncate">{simplifyUrl(relay)}</span>
</>
)
if (inDropdown) {
return (
<DropdownMenuItem
key={relay}
className="min-w-0 gap-2"
onSelect={() => {
onNavigate?.()
push(toRelay(relay))
}}
>
{label}
</DropdownMenuItem>
)
}
return (
<li key={relay}>
<button
type="button"
className="flex w-full min-w-0 items-center gap-2 rounded-md px-1 py-1 text-left text-sm text-foreground hover:bg-muted"
onClick={() => {
onNavigate?.()
push(toRelay(relay))
}}
>
{label}
</button>
</li>
)
})
return (
<div className="space-y-2 border-b border-border px-3 py-2.5">
<p className="text-xs leading-snug text-muted-foreground/80" data-note-kind-label>
{t('Note kind label line', { kind: event.kind, description })}
</p>
{relays.length > 0 ? (
<div className="space-y-1">
<p className="text-[11px] font-medium uppercase tracking-wide text-muted-foreground">
{t('Seen on')}
</p>
{inDropdown ? (
<div className="space-y-0.5">{relayRows}</div>
) : (
<ul className="max-h-32 space-y-0.5 overflow-y-auto overscroll-y-contain">{relayRows}</ul>
)}
</div>
) : null}
</div>
)
}