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.
66 lines
1.8 KiB
66 lines
1.8 KiB
<script lang="ts"> |
|
import { nip19 } from 'nostr-tools' |
|
import Container from '$lib/components/Container.svelte' |
|
import ReposSummaryList from '$lib/components/ReposSummaryList.svelte' |
|
import { |
|
ensureRecentReposEvents, |
|
recent_repo_summaries, |
|
recent_repo_summaries_loading, |
|
} from '$lib/stores/repos' |
|
import UserHeader from '$lib/components/users/UserHeader.svelte' |
|
|
|
export let data: { npub: string } |
|
|
|
let error = false |
|
let pubkey: undefined | string |
|
$: { |
|
try { |
|
let decoded = nip19.decode(data.npub) |
|
if (decoded.type === 'npub') pubkey = decoded.data |
|
else if (decoded.type === 'nprofile') pubkey = decoded.data.pubkey |
|
else error = true |
|
} catch { |
|
error = true |
|
} |
|
} |
|
ensureRecentReposEvents() |
|
</script> |
|
|
|
{#if error} |
|
<Container> |
|
<div |
|
role="alert" |
|
class="wrap alert alert-error m-auto mt-6 w-full max-w-lg" |
|
> |
|
<svg |
|
xmlns="http://www.w3.org/2000/svg" |
|
class="h-6 w-6 shrink-0 stroke-current" |
|
fill="none" |
|
viewBox="0 0 24 24" |
|
><path |
|
stroke-linecap="round" |
|
stroke-linejoin="round" |
|
stroke-width="2" |
|
d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" |
|
/></svg |
|
> |
|
<span |
|
>Error! profile reference in URL is not a valid npub or nprofile: {data.npub}</span |
|
> |
|
</div> |
|
</Container> |
|
{:else if pubkey} |
|
<Container> |
|
<div class="mt-12"> |
|
<UserHeader user={pubkey} link_to_profile={false} size="full" /> |
|
<div class="divider"></div> |
|
<ReposSummaryList |
|
title="Repositories" |
|
repos={$recent_repo_summaries.filter( |
|
(summary) => pubkey && summary.maintainers.includes(pubkey) |
|
)} |
|
loading={$recent_repo_summaries_loading} |
|
/> |
|
</div> |
|
</Container> |
|
{/if}
|
|
|