8 changed files with 325 additions and 221 deletions
@ -0,0 +1,21 @@ |
|||||||
|
<script lang="ts"> |
||||||
|
import { extractAReference } from '$lib/components/repo/utils' |
||||||
|
import { extractRepoAFromProposalEvent } from '$lib/stores/Proposals' |
||||||
|
import type { NDKEvent } from '@nostr-dev-kit/ndk' |
||||||
|
import { nip19 } from 'nostr-tools' |
||||||
|
|
||||||
|
export let event: NDKEvent |
||||||
|
let nevent = nip19.neventEncode({ |
||||||
|
id: event.id, |
||||||
|
relays: event.relay ? [event.relay.url] : undefined, |
||||||
|
}) |
||||||
|
let a_string = extractRepoAFromProposalEvent(event) |
||||||
|
let pointer = a_string ? extractAReference(a_string) : undefined |
||||||
|
let naddr = pointer ? nip19.naddrEncode(pointer) : undefined |
||||||
|
</script> |
||||||
|
|
||||||
|
<span> |
||||||
|
Git Issue for <a class="opacity-50" href={`/e/${naddr}`} |
||||||
|
>{pointer?.identifier}</a |
||||||
|
>: <a href={`/e/${nevent}`}>{event.content?.split('\n')[0]}</a> by |
||||||
|
</span> |
||||||
@ -0,0 +1,19 @@ |
|||||||
|
<script lang="ts"> |
||||||
|
import type { RepoEvent } from '$lib/components/repo/type' |
||||||
|
import { eventToRepoEvent } from '$lib/stores/repos' |
||||||
|
import type { NDKEvent } from '@nostr-dev-kit/ndk' |
||||||
|
|
||||||
|
export let event: NDKEvent | RepoEvent |
||||||
|
|
||||||
|
const isRepoEvent = (event: NDKEvent | RepoEvent): event is RepoEvent => { |
||||||
|
return Object.keys(event).includes('web') |
||||||
|
} |
||||||
|
|
||||||
|
let repo = isRepoEvent(event) ? event : eventToRepoEvent(event) |
||||||
|
</script> |
||||||
|
|
||||||
|
{#if repo} |
||||||
|
<span class=""> |
||||||
|
Git Repository: <a href={`/r/${repo.naddr}`}>{repo.name}</a> by |
||||||
|
</span> |
||||||
|
{/if} |
||||||
@ -1,58 +1,72 @@ |
|||||||
<script lang="ts"> |
<script lang="ts"> |
||||||
import EventWrapper from '$lib/components/events/EventWrapper.svelte' |
|
||||||
import EventWrapperLite from '$lib/components/events/EventWrapperLite.svelte' |
|
||||||
import Status from '$lib/components/events/content/Status.svelte' |
|
||||||
import Patch from '$lib/components/events/content/Patch.svelte' |
|
||||||
import ParsedContent from '$lib/components/events/content/ParsedContent.svelte' |
|
||||||
import { defaults as user_defaults } from '$lib/components/users/type' |
|
||||||
import { patch_kind, proposal_status_kinds } from '$lib/kinds' |
|
||||||
import { ensureUser } from '$lib/stores/users' |
|
||||||
import { NDKRelaySet, type NDKEvent } from '@nostr-dev-kit/ndk' |
import { NDKRelaySet, type NDKEvent } from '@nostr-dev-kit/ndk' |
||||||
import { onDestroy, onMount } from 'svelte' |
import { onMount } from 'svelte' |
||||||
import { get, writable, type Unsubscriber, type Writable } from 'svelte/store' |
import { get, writable, type Writable } from 'svelte/store' |
||||||
import { |
|
||||||
extractPatchMessage, |
|
||||||
isCoverLetter, |
|
||||||
isParsedNaddr, |
|
||||||
type ParsedNaddr, |
|
||||||
type ParsedNevent, |
|
||||||
type ParsedNote, |
|
||||||
} from '$lib/components/events/content/utils' |
|
||||||
import { base_relays, ndk } from '$lib/stores/ndk' |
import { base_relays, ndk } from '$lib/stores/ndk' |
||||||
import EventCard from './EventCard.svelte' |
import EventCard from './EventCard.svelte' |
||||||
|
import type { |
||||||
|
AddressPointer, |
||||||
|
EventPointer, |
||||||
|
} from 'nostr-tools/lib/types/nip19' |
||||||
|
import { repo_kind } from '$lib/kinds' |
||||||
|
import { ensureRepo } from '$lib/stores/repos' |
||||||
|
import EventWrapperLite from '$lib/components/events/EventWrapperLite.svelte' |
||||||
|
import Repo from '$lib/components/events/content/Repo.svelte' |
||||||
|
|
||||||
export let parsed_nostr_ref: ParsedNaddr | ParsedNevent | ParsedNote |
export let pointer: AddressPointer | EventPointer |
||||||
|
|
||||||
let cannot_find_event = false; |
let cannot_find_event = false |
||||||
let event: Writable<undefined | NDKEvent> = writable(undefined) |
let event: Writable<undefined | NDKEvent> = writable(undefined) |
||||||
|
|
||||||
|
const isAddressPointer = ( |
||||||
|
pointer: AddressPointer | EventPointer |
||||||
|
): pointer is AddressPointer => { |
||||||
|
return Object.keys(pointer).includes('identifier') |
||||||
|
} |
||||||
|
let is_repo = isAddressPointer(pointer) && pointer.kind == repo_kind |
||||||
|
let repo = |
||||||
|
is_repo && isAddressPointer(pointer) |
||||||
|
? ensureRepo(`${pointer.kind}:${pointer.pubkey}:${pointer.identifier}`) |
||||||
|
: undefined |
||||||
|
|
||||||
onMount(() => { |
onMount(() => { |
||||||
let sub = ndk.subscribe( |
if (!is_repo) { |
||||||
isParsedNaddr(parsed_nostr_ref) ? { |
let sub = ndk.subscribe( |
||||||
'#a': [`${parsed_nostr_ref.kind}:${parsed_nostr_ref.pubkey}:${parsed_nostr_ref.identifier}`], |
isAddressPointer(pointer) |
||||||
} : |
? { |
||||||
{ ids: [parsed_nostr_ref.id] }, |
'#a': [`${pointer.kind}:${pointer.pubkey}:${pointer.identifier}`], |
||||||
{closeOnEose: true}, |
} |
||||||
NDKRelaySet.fromRelayUrls([ ...base_relays, ...parsed_nostr_ref.relays ], ndk) |
: { ids: [pointer.id] }, |
||||||
) |
{ closeOnEose: true }, |
||||||
|
NDKRelaySet.fromRelayUrls( |
||||||
|
pointer.relays ? [...base_relays, ...pointer.relays] : base_relays, |
||||||
|
ndk |
||||||
|
) |
||||||
|
) |
||||||
|
|
||||||
sub.on('event', (e: NDKEvent) => { |
sub.on('event', (e: NDKEvent) => { |
||||||
event.set(e) |
event.set(e) |
||||||
}) |
}) |
||||||
|
|
||||||
sub.on('eose', () => { |
sub.on('eose', () => { |
||||||
if (!get(event)) cannot_find_event = true |
if (!get(event)) cannot_find_event = true |
||||||
}) |
}) |
||||||
|
} |
||||||
}) |
}) |
||||||
</script> |
</script> |
||||||
|
|
||||||
<div class="card shadow-xl border border-base-400 p-2 pt-0 my-3"> |
<div class="card my-3 border border-base-400 shadow-xl"> |
||||||
{#if $event && $event.pubkey} |
{#if repo && $repo} |
||||||
<EventCard event={$event} /> |
<EventWrapperLite author={$repo?.author} created_at={$repo?.created_at}> |
||||||
{:else if cannot_find_event} |
<Repo event={$repo} /> |
||||||
cannot find event |
</EventWrapperLite> |
||||||
{:else} |
{:else if $event && $event.pubkey} |
||||||
loading... |
<div class="p-2 pt-0"> |
||||||
{/if} |
<EventCard event={$event} preview={true} /> |
||||||
</div> |
</div> |
||||||
|
{:else if cannot_find_event} |
||||||
|
<div class="m-3 text-center text-sm">cannot find event</div> |
||||||
|
{:else} |
||||||
|
<div class="m-3 text-center text-sm">loading...</div> |
||||||
|
{/if} |
||||||
|
</div> |
||||||
|
|||||||
Loading…
Reference in new issue