Browse Source

feat(PrPage): show nip34 patch as pr

display patch summary in place of pr description tag

reroute to correct repo event if pr/patch event refers to a different
repo identifer
master
DanConwayDev 2 years ago
parent
commit
97e0814c42
No known key found for this signature in database
GPG Key ID: 68E15486D73F75E1
  1. 31
      src/lib/stores/PR.ts
  2. 12
      src/routes/repo/[repo_id]/pr/[pr_id]/+page.svelte
  3. 2
      src/routes/repo/[repo_id]/pr/[pr_id]/+page.ts

31
src/lib/stores/PR.ts

@ -9,8 +9,10 @@ import {
isPRStatus, isPRStatus,
type PRStatus, type PRStatus,
} from '$lib/components/prs/type' } from '$lib/components/prs/type'
import { pr_kind, pr_status_kind } from '$lib/kinds' import { pr_status_kind } from '$lib/kinds'
import { ensureSelectedRepo } from './repo' import { ensureSelectedRepo } from './repo'
import { extractPatchMessage } from '$lib/components/events/content/utils'
import { goto } from '$app/navigation'
export const selected_pr_full: Writable<PRFull> = writable({ ...full_defaults }) export const selected_pr_full: Writable<PRFull> = writable({ ...full_defaults })
@ -62,30 +64,33 @@ export const ensurePRFull = (repo_id: string, pr_id: string) => {
sub = ndk.subscribe( sub = ndk.subscribe(
{ {
ids: [pr_id], ids: [pr_id],
kinds: [pr_kind],
'#r': [`r-${repo_id}`],
limit: 50, limit: 50,
}, },
{ {
closeOnEose: false, closeOnEose: true,
}, },
NDKRelaySet.fromRelayUrls(repo.relays, ndk) repo.relays.length > 0
? NDKRelaySet.fromRelayUrls(repo.relays, ndk)
: undefined
) )
sub.on('event', (event: NDKEvent) => { sub.on('event', (event: NDKEvent) => {
try { try {
if ( if (event.id == pr_id) {
event.kind == pr_kind && const event_repo_id = event.tagValue('a')?.split(':')[2]
event.getMatchingTags('r').find((t) => t[1] === `r-${repo_id}`) && if (event_repo_id && event_repo_id !== repo_id) {
event.id == pr_id goto(`/repo/${encodeURIComponent(event_repo_id)}/pr/${pr_id}`)
) { }
selected_pr_full.update((full) => { selected_pr_full.update((full) => {
return { return {
...full, ...full,
pr_event: event, pr_event: event,
summary: { summary: {
...full.summary, ...full.summary,
title: event.tagValue('name') || '', title:
event.tagValue('name') ||
extractPatchMessage(event.content) ||
'',
descritpion: event.tagValue('description') || '', descritpion: event.tagValue('description') || '',
created_at: event.created_at, created_at: event.created_at,
comments: 0, comments: 0,
@ -140,7 +145,9 @@ export const ensurePRFull = (repo_id: string, pr_id: string) => {
{ {
closeOnEose: false, closeOnEose: false,
}, },
NDKRelaySet.fromRelayUrls(repo.relays, ndk) repo.relays.length > 0
? NDKRelaySet.fromRelayUrls(repo.relays, ndk)
: undefined
) )
sub_replies.on('event', (event: NDKEvent) => { sub_replies.on('event', (event: NDKEvent) => {

12
src/routes/repo/[repo_id]/pr/[pr_id]/+page.svelte

@ -12,13 +12,15 @@
import Container from '$lib/components/Container.svelte' import Container from '$lib/components/Container.svelte'
import ParsedContent from '$lib/components/events/content/ParsedContent.svelte' import ParsedContent from '$lib/components/events/content/ParsedContent.svelte'
import Compose from '$lib/wrappers/Compose.svelte' import Compose from '$lib/wrappers/Compose.svelte'
import { patch_kind } from '$lib/kinds'
import Patch from '$lib/components/events/content/Patch.svelte'
export let data: { export let data: {
repo_id: string repo_id: string
pr_id: string pr_id: string
} }
let repo_id = decodeURI(data.repo_id) let repo_id = data.repo_id
let pr_id = data.pr_id let pr_id = data.pr_id
ensureSelectedRepo(repo_id) ensureSelectedRepo(repo_id)
@ -62,7 +64,14 @@
<div class="md:flex"> <div class="md:flex">
<div class="md:mr-2 md:w-2/3"> <div class="md:mr-2 md:w-2/3">
<div class="prose my-3"> <div class="prose my-3">
{#if $selected_pr_full.pr_event && $selected_pr_full.pr_event.kind === patch_kind}
<Patch
content={$selected_pr_full.pr_event.content}
tags={$selected_pr_full.pr_event.tags}
/>
{:else}
<ParsedContent content={$selected_pr_full.summary.descritpion} /> <ParsedContent content={$selected_pr_full.summary.descritpion} />
{/if}
</div> </div>
<div role="alert" class="alert"> <div role="alert" class="alert">
<svg <svg
@ -88,6 +97,7 @@
</h3> </h3>
</div> </div>
</div> </div>
{#each $selected_pr_replies as event} {#each $selected_pr_replies as event}
<Thread {event} replies={[]} /> <Thread {event} replies={[]} />
{/each} {/each}

2
src/routes/repo/[repo_id]/pr/[pr_id]/+page.ts

@ -1,6 +1,6 @@
export const load = ({ params }) => { export const load = ({ params }) => {
return { return {
repo_id: params.repo_id, repo_id: decodeURIComponent(params.repo_id),
pr_id: params.pr_id, pr_id: params.pr_id,
} }
} }

Loading…
Cancel
Save