feat: add option to copy share link (#349)

This commit is contained in:
Daniel Omar Vergara Pérez
2025-05-23 00:47:26 -06:00
committed by GitHub
parent 6ee9cc1fd2
commit 0136515540
3 changed files with 26 additions and 2 deletions

View File

@@ -7,12 +7,12 @@ import {
DropdownMenuSeparator, DropdownMenuSeparator,
DropdownMenuTrigger DropdownMenuTrigger
} from '@/components/ui/dropdown-menu' } from '@/components/ui/dropdown-menu'
import { getSharableEventId } from '@/lib/event' import { getSharableEventId, getSharableEventLink } from '@/lib/event'
import { pubkeyToNpub } from '@/lib/pubkey' import { pubkeyToNpub } from '@/lib/pubkey'
import { useMuteList } from '@/providers/MuteListProvider' import { useMuteList } from '@/providers/MuteListProvider'
import { useNostr } from '@/providers/NostrProvider' import { useNostr } from '@/providers/NostrProvider'
import { useScreenSize } from '@/providers/ScreenSizeProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider'
import { Bell, BellOff, Code, Copy, Ellipsis } from 'lucide-react' import { Bell, BellOff, Code, Copy, Ellipsis, Link } from 'lucide-react'
import { Event } from 'nostr-tools' import { Event } from 'nostr-tools'
import { useMemo, useState } from 'react' import { useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
@@ -74,6 +74,17 @@ export default function NoteOptions({ event, className }: { event: Event; classN
<Copy /> <Copy />
{t('Copy user ID')} {t('Copy user ID')}
</Button> </Button>
<Button
onClick={() => {
setIsDrawerOpen(false)
navigator.clipboard.writeText(getSharableEventLink(event))
}}
className="w-full p-6 justify-start text-lg gap-4 [&_svg]:size-5"
variant="ghost"
>
<Link />
{t('Copy share link')}
</Button>
<Button <Button
onClick={() => { onClick={() => {
setIsRawEventDialogOpen(true) setIsRawEventDialogOpen(true)
@@ -126,7 +137,15 @@ export default function NoteOptions({ event, className }: { event: Event; classN
<Copy /> <Copy />
{t('Copy user ID')} {t('Copy user ID')}
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem
onClick={() => navigator.clipboard.writeText(getSharableEventLink(event))}
>
<Link />
{t('Copy share link')}
</DropdownMenuItem>
<DropdownMenuSeparator /> <DropdownMenuSeparator />
<DropdownMenuItem onClick={() => setIsRawEventDialogOpen(true)}> <DropdownMenuItem onClick={() => setIsRawEventDialogOpen(true)}>
<Code /> <Code />
{t('View raw event')} {t('View raw event')}

View File

@@ -43,6 +43,7 @@ export default {
Quote: 'Citar', Quote: 'Citar',
'Copy event ID': 'Copiar ID do evento', 'Copy event ID': 'Copiar ID do evento',
'Copy user ID': 'Copiar ID do usuário', 'Copy user ID': 'Copiar ID do usuário',
'Copy share ink': 'Copiar link de compartilhamento',
'View raw event': 'Ver evento bruto', 'View raw event': 'Ver evento bruto',
Like: 'Curtir', Like: 'Curtir',
'switch to light theme': 'Alternar para tema claro', 'switch to light theme': 'Alternar para tema claro',

View File

@@ -129,6 +129,10 @@ export function getSharableEventId(event: Event) {
return nip19.neventEncode({ id: event.id, author: event.pubkey, kind: event.kind, relays: hints }) return nip19.neventEncode({ id: event.id, author: event.pubkey, kind: event.kind, relays: hints })
} }
export function getSharableEventLink(event: Event) {
return `https://njump.me/${getSharableEventId(event)}`
}
export function getUsingClient(event: Event) { export function getUsingClient(event: Event) {
return event.tags.find(tagNameEquals('client'))?.[1] return event.tags.find(tagNameEquals('client'))?.[1]
} }