Browse Source

refactor: replace PRSummary with PRFull

create PRFull in preparation for adding related events
master
DanConwayDev 2 years ago
parent
commit
cca93434b0
No known key found for this signature in database
GPG Key ID: 68E15486D73F75E1
  1. 11
      src/lib/components/prs/type.ts
  2. 49
      src/lib/stores/PR.ts
  3. 6
      src/routes/repo/[repo_id]/pr/[pr_id]/+page.svelte

11
src/lib/components/prs/type.ts

@ -32,3 +32,14 @@ export const summaries_defaults: PRSummaries = {
summaries: [], summaries: [],
loading: true, loading: true,
}; };
export interface PRFull {
summary: PRSummary;
loading: boolean;
}
export const full_defaults: PRFull = {
summary: { ...summary_defaults },
loading: true,
};

49
src/lib/stores/PR.ts

@ -1,41 +1,40 @@
import type { NDKEvent } from "@nostr-dev-kit/ndk"; import type { NDKEvent } from "@nostr-dev-kit/ndk";
import { writable, type Unsubscriber, type Writable } from "svelte/store" import { writable, type Unsubscriber, type Writable } from "svelte/store"
import { ndk } from "./ndk"; import { ndk } from "./ndk";
import type { Repo } from "$lib/components/repo/type";
import { defaults } from "$lib/components/repo/type";
import type { User } from "$lib/components/users/type"; import type { User } from "$lib/components/users/type";
import { ensureUser, users } from "./users"; import { ensureUser } from "./users";
import { summary_defaults, type PRSummary } from "$lib/components/prs/type"; import { type PRFull, full_defaults } from "$lib/components/prs/type";
let pr_kind: number = 318; let pr_kind: number = 318;
export let selected_pr_summary: Writable<PRSummary> = writable({ ...summary_defaults }); export let selected_pr_full: Writable<PRFull> = writable({ ...full_defaults });
let selected_repo_id: string = ""; let selected_repo_id: string = "";
let selected_pr_id: string = ""; let selected_pr_id: string = "";
let pr_summary_author_unsubsriber: Unsubscriber | undefined; let pr_summary_author_unsubsriber: Unsubscriber | undefined;
export let ensurePRSummary = (repo_id: string, pr_id: string) => { export let ensurePRFull = (repo_id: string, pr_id: string) => {
if (selected_pr_id == pr_id) return; if (selected_pr_id == pr_id) return;
if (pr_id == "") return selected_pr_summary.set({ if (pr_id == "") return selected_pr_full.set({ ...full_defaults });
...summary_defaults,
});
selected_repo_id = repo_id; selected_repo_id = repo_id;
selected_pr_id = pr_id; selected_pr_id = pr_id;
selected_pr_summary.update(summary => { selected_pr_full.update(full => {
return { return {
...summary, ...full,
summary: {
...full.summary,
id: pr_id, id: pr_id,
repo_id: repo_id, repo_id: repo_id,
loading: true, loading: true,
},
loading: true,
}; };
}); });
if (pr_summary_author_unsubsriber) pr_summary_author_unsubsriber(); if (pr_summary_author_unsubsriber) pr_summary_author_unsubsriber();
pr_summary_author_unsubsriber = undefined; pr_summary_author_unsubsriber = undefined;
let sub = ndk.subscribe({ let sub = ndk.subscribe({
ids: [pr_id], ids: [pr_id],
limit: 1, limit: 1,
@ -48,9 +47,11 @@ export let ensurePRSummary = (repo_id: string, pr_id: string) => {
&& event.id == pr_id && event.id == pr_id
) { ) {
selected_pr_summary.update(summary => { selected_pr_full.update(full => {
return { return {
...summary, ...full,
summary: {
...full.summary,
title: event.tagValue("name") || "", title: event.tagValue("name") || "",
created_at: event.created_at, created_at: event.created_at,
comments: 0, comments: 0,
@ -60,25 +61,33 @@ export let ensurePRSummary = (repo_id: string, pr_id: string) => {
npub: "", npub: "",
}, },
loading: false, loading: false,
}
}; };
}); });
pr_summary_author_unsubsriber = ensureUser(event.pubkey).subscribe((u: User) => { pr_summary_author_unsubsriber = ensureUser(event.pubkey).subscribe((u: User) => {
selected_pr_summary.update(summary => { selected_pr_full.update(full => {
return { return {
...summary, ...full,
author: event.pubkey == u.hexpubkey ? u : summary.author, summary: {
...full.summary,
author: event.pubkey == u.hexpubkey ? u : full.summary.author,
}
}; };
}); });
}); });
} }
} catch { } } catch { }
}); });
sub.on("eose", () => { sub.on("eose", () => {
selected_pr_summary.update(summary => { selected_pr_full.update(full => {
return { return {
...summary, ...full,
summary: {
...full.summary,
loading: false,
},
loading: false, loading: false,
}; };
}); });

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

@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import { ensureSelectedRepo, selected_repo } from "$lib/stores/repo"; import { ensureSelectedRepo, selected_repo } from "$lib/stores/repo";
import { ensurePRSummary, selected_pr_summary } from "$lib/stores/PR"; import { ensurePRFull, selected_pr_full } from "$lib/stores/PR";
import PrHeader from "$lib/components/prs/PRHeader.svelte"; import PrHeader from "$lib/components/prs/PRHeader.svelte";
import RepoHeader from "$lib/components/repo/RepoHeader.svelte"; import RepoHeader from "$lib/components/repo/RepoHeader.svelte";
@ -13,11 +13,11 @@
let pr_id = data.pr_id; let pr_id = data.pr_id;
ensureSelectedRepo(repo_id); ensureSelectedRepo(repo_id);
ensurePRSummary(repo_id, pr_id); ensurePRFull(repo_id, pr_id);
</script> </script>
<RepoHeader {...$selected_repo} /> <RepoHeader {...$selected_repo} />
<PrHeader {...$selected_pr_summary} /> <PrHeader {...$selected_pr_full.summary} />
<div class="flex"> <div class="flex">
<div class="w-2/3 mx-2"> <div class="w-2/3 mx-2">

Loading…
Cancel
Save