Skip to content

Commit ba0ef4c

Browse files
Last fixes
1 parent 4d655c4 commit ba0ef4c

File tree

6 files changed

+65
-40
lines changed

6 files changed

+65
-40
lines changed

src/routes/+layout.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
</a>
8383

8484
<!-- Navigation -->
85-
<!-- TODO: don't hardcode this? -->
85+
<!-- TODO: don't hardcode scrollY? -->
8686
{#if scrollY > 150 && $page.route.id === "/"}
8787
<ul transition:fade={{ duration: 200 }} class="ml-6 hidden sm:block">
8888
<li>

src/routes/[pullOrIssue=poi]/[org]/[repo]/[id=number]/+page.svelte

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
info: undefined,
3030
comments: undefined
3131
};
32+
let prsToFetch: number[] = [];
3233
3334
$: info = prInfo.info || issueInfo.info;
3435
$: pullOrIssue = data.pullOrIssue;
@@ -147,37 +148,50 @@
147148
issue_number: data.id
148149
})
149150
.then(({ data: response }) => {
150-
for (let event of response) {
151-
if (event.event === "cross-referenced") {
151+
prsToFetch = response
152+
.filter(event => event.event === "cross-referenced")
153+
.map(event => {
152154
const anyEvent = event as any; // doesn't have the source property for some reason
153-
const prNumber = anyEvent.source.issue.number;
154-
data.octokit.rest.pulls
155-
.get({
156-
owner: data.org,
157-
repo: data.repo,
158-
pull_number: prNumber
159-
})
160-
.then(({ data }) => {
161-
if (!linkedPRsOrIssues) {
162-
linkedPRsOrIssues = [];
163-
}
164-
if (linkedPRsOrIssues.map(i => i.number).includes(data.number)) {
165-
return;
166-
}
167-
linkedPRsOrIssues.push({
168-
title: data.title,
169-
author: {
170-
login: data.user.login,
171-
avatarUrl: data.user.avatar_url
172-
},
173-
body: data.body ?? "",
174-
createdAt: data.created_at,
175-
number: data.number
176-
});
177-
linkedPRsOrIssues = [...linkedPRsOrIssues];
178-
});
155+
return anyEvent.source.issue.number;
156+
});
157+
})
158+
.catch(() => (linkedPRsOrIssues = []));
159+
}
160+
$: if (prsToFetch.length > 0) {
161+
Promise.all(
162+
prsToFetch.map(prNumber =>
163+
data.octokit.rest.pulls.get({
164+
owner: data.org,
165+
repo: data.repo,
166+
pull_number: prNumber
167+
})
168+
)
169+
)
170+
.then(prs => {
171+
if (!linkedPRsOrIssues) {
172+
linkedPRsOrIssues = [];
173+
}
174+
for (let { data } of prs) {
175+
if (linkedPRsOrIssues.map(i => i.number).includes(data.number)) {
176+
continue;
179177
}
178+
linkedPRsOrIssues.push({
179+
title: data.title,
180+
author: {
181+
login: data.user.login,
182+
avatarUrl: data.user.avatar_url
183+
},
184+
body: data.body ?? "",
185+
createdAt: data.created_at,
186+
number: data.number
187+
});
180188
}
189+
linkedPRsOrIssues = linkedPRsOrIssues.sort(
190+
(a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()
191+
);
192+
prsToFetch = prsToFetch.filter(
193+
prNumber => !prs.map(pr => pr.data.number).includes(prNumber)
194+
);
181195
})
182196
.catch(() => (linkedPRsOrIssues = []));
183197
}

src/routes/[pullOrIssue=poi]/[org]/[repo]/[id=number]/+page.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
1+
import { dev } from "$app/environment";
2+
import { env } from "$env/dynamic/public";
13
import { error } from "@sveltejs/kit";
24

35
export async function load({ params, fetch }) {
46
const { pullOrIssue, org, repo, id } = params;
57

68
const poiName = pullOrIssue === "pull" ? "pulls" : "issues";
7-
const isUrlOk = (await fetch(`https://api.github.com/repos/${org}/${repo}/${poiName}/${id}`)).ok;
9+
const isUrlOk = (
10+
await fetch(`https://api.github.com/repos/${org}/${repo}/${poiName}/${id}`, {
11+
headers:
12+
dev && env.PUBLIC_GITHUB_TOKEN
13+
? {
14+
Authorization: `token ${env.PUBLIC_GITHUB_TOKEN}`
15+
}
16+
: undefined
17+
})
18+
).ok;
819
if (!isUrlOk) {
920
error(404);
1021
}

src/routes/[pullOrIssue=poi]/[org]/[repo]/[id=number]/BottomCollapsible.svelte

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@
33
import type { Icon } from "lucide-svelte";
44
import * as Accordion from "$lib/components/ui/accordion";
55
6+
const key = "collapsible";
7+
68
export let icon: ComponentType<Icon> | null = null;
79
export let label: string;
810
export let secondaryLabel: string | undefined = undefined;
911
export let openByDefault = false;
1012
</script>
1113

1214
<div class="rounded-xl border px-4">
13-
<Accordion.Root value={openByDefault ? "comments" : undefined}>
14-
<Accordion.Item value="comments" class="border-b-0">
15+
<Accordion.Root value={openByDefault ? key : undefined}>
16+
<Accordion.Item value={key} class="border-b-0">
1517
<Accordion.Trigger
1618
class="group hover:no-underline [&>svg:last-child]:flex-shrink-0 [&[data-state=open]>svg:last-child]:rotate-180 [&[data-state=open]>svg]:rotate-0"
1719
>

src/routes/[pullOrIssue=poi]/[org]/[repo]/[id=number]/MarkdownRenderer.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<span
1414
class={cn(
15-
"prose dark:prose-invert prose-a:no-underline prose-a:underline-offset-4 prose-a:[overflow-wrap:_anywhere] hover:prose-a:underline prose-li:my-1",
15+
"prose dark:prose-invert prose-a:no-underline prose-a:underline-offset-4 prose-a:[overflow-wrap:_anywhere] hover:prose-a:underline prose-code:text-wrap prose-li:my-1",
1616
inline && "*:inline",
1717
className
1818
)}

src/routes/[pullOrIssue=poi]/[org]/[repo]/[id=number]/PageRenderer.svelte

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,18 +136,16 @@
136136
</h3>
137137
<GHBadge
138138
{type}
139-
status={info.closed_at
140-
? type === "pull" && "merged" in info
139+
status={info.state === "closed"
140+
? "merged" in info
141141
? info.merged
142142
? "merged"
143143
: "closed"
144-
: info.draft
145-
? "draft"
146-
: "open"
147-
: info.state === "closed"
148-
? "state_reason" in info && info.state_reason === "completed"
144+
: "state_reason" in info && info.state_reason === "completed"
149145
? "solved"
150146
: "closed"
147+
: info.draft
148+
? "draft"
151149
: "open"}
152150
/>
153151
</div>

0 commit comments

Comments
 (0)