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.
101 lines
3.1 KiB
101 lines
3.1 KiB
import type { NDKEvent } from "@nostr-dev-kit/ndk"; |
|
import { writable, type Unsubscriber, type Writable } from "svelte/store" |
|
import { ndk } from "./ndk"; |
|
import type { Repo } from "$lib/components/repo/type"; |
|
import { summary_defaults } from "$lib/components/prs/type"; |
|
import type { User } from "$lib/components/users/type"; |
|
import { ensureUser, users } from "./users"; |
|
import type { PRSummaries, PRSummary } from "$lib/components/prs/type"; |
|
|
|
export let pr_summaries: Writable<PRSummaries> = writable({ |
|
id: "", |
|
summaries: [], |
|
loading: false, |
|
}); |
|
|
|
let pr_kind: number = 318; |
|
|
|
let selected_repo_id: string = ""; |
|
|
|
let authors_unsubscribers: Unsubscriber[] = []; |
|
|
|
export let ensurePRSummaries = (repo_id: string) => { |
|
if (selected_repo_id == repo_id) return; |
|
if (repo_id == "") return pr_summaries.set({ |
|
id: "", |
|
summaries: [], |
|
loading: false, |
|
}); |
|
|
|
selected_repo_id = repo_id; |
|
pr_summaries.update(prs => { |
|
return { |
|
...prs, |
|
id: repo_id, |
|
loading: true, |
|
}; |
|
}); |
|
authors_unsubscribers.forEach(u => u()); |
|
authors_unsubscribers = []; |
|
|
|
let sub = ndk.subscribe({ |
|
kinds: [pr_kind], |
|
'#r': [`r-${repo_id}`], |
|
limit: 50, |
|
}); |
|
|
|
sub.on("event", (event: NDKEvent) => { |
|
try { |
|
if (event.kind == pr_kind |
|
&& event.getMatchingTags("r").find(t => t[1] === `r-${repo_id}`) |
|
) { |
|
console.log(event); |
|
pr_summaries.update(prs => { |
|
return { |
|
...prs, |
|
summaries: [ |
|
...prs.summaries, |
|
{ |
|
...summary_defaults, |
|
id: event.id, |
|
repo_id: repo_id, |
|
title: event.tagValue("name") || "", |
|
created_at: event.created_at, |
|
comments: 0, |
|
author: { |
|
hexpubkey: event.pubkey, |
|
loading: true, |
|
npub: "", |
|
}, |
|
loading: false, |
|
} |
|
], |
|
} |
|
}); |
|
|
|
authors_unsubscribers.push( |
|
ensureUser(event.pubkey).subscribe((u: User) => { |
|
pr_summaries.update(prs => { |
|
console.log('test'); |
|
return { |
|
...prs, |
|
summaries: prs.summaries.map(o => ({ |
|
...o, |
|
author: u, |
|
})), |
|
} |
|
}); |
|
}) |
|
); |
|
} |
|
} catch { } |
|
}); |
|
sub.on("eose", () => { |
|
pr_summaries.update(prs => { |
|
return { |
|
...prs, |
|
loading: false, |
|
}; |
|
}); |
|
}); |
|
}
|
|
|