Browse Source

fix: improve handling of repo event not found

even if the repo event doesn't exist there may be many issues
and proposal that reference it so it makes sence to:
1. show the repo Menu with a count of proposals and issues
2. show the details within the address point
2. show the issues and proposals page with a warning

RepoPageWrapper stops overwriting all content with error
RepoHeader show warning
RepoDetails show basic details from address point and a warning
master
DanConwayDev 2 years ago
parent
commit
5d1aa91c08
No known key found for this signature in database
GPG Key ID: 68E15486D73F75E1
  1. 17
      src/lib/components/AlertWarning.svelte
  2. 20
      src/lib/components/repo/RepoDetails.svelte
  3. 6
      src/lib/components/repo/RepoHeader.svelte
  4. 1
      src/lib/stores/repos.ts
  5. 15
      src/lib/wrappers/RepoPageWrapper.svelte

17
src/lib/components/AlertWarning.svelte

@ -0,0 +1,17 @@
<div role="alert" class="m-auto max-w-xl">
<div role="alert" class="alert alert-warning bg-yellow-300 m-auto mt-6">
<!-- https://icon-sets.iconify.design/ph/warning-fill/ -->
<svg xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6 shrink-0 stroke-current"
viewBox="0 0 256 256">
<path
fill="currentColor"
d="M236.8 188.09L149.35 36.22a24.76 24.76 0 0 0-42.7 0L19.2 188.09a23.51 23.51 0 0 0 0 23.72A24.35 24.35 0 0 0 40.55 224h174.9a24.35 24.35 0 0 0 21.33-12.19a23.51 23.51 0 0 0 .02-23.72M120 104a8 8 0 0 1 16 0v40a8 8 0 0 1-16 0Zm8 88a12 12 0 1 1 12-12a12 12 0 0 1-12 12"
/></svg
>
<div>
<slot />
</div>
</div>
</div>

20
src/lib/components/repo/RepoDetails.svelte

@ -1,5 +1,6 @@
<script lang="ts"> <script lang="ts">
import UserHeader from '$lib/components/users/UserHeader.svelte' import UserHeader from '$lib/components/users/UserHeader.svelte'
import AlertWarning from '../AlertWarning.svelte'
import { icons_misc } from '../icons' import { icons_misc } from '../icons'
import { event_defaults } from './type' import { event_defaults } from './type'
@ -28,9 +29,14 @@
let naddr_copied = false let naddr_copied = false
let git_url_copied: false | string = false let git_url_copied: false | string = false
let maintainer_copied: false | string = false let maintainer_copied: false | string = false
$: event_not_found = !loading && created_at == 0
</script> </script>
<div class="prose w-full max-w-md"> <div class="prose w-full max-w-md">
{#if event_not_found}
<h4>identifier</h4>
<p class="my-2 break-words text-sm">{identifier}</p>
{:else}
{#if name == identifier} {#if name == identifier}
{#if loading} {#if loading}
<div class="skeleton my-3 h-5 w-20"></div> <div class="skeleton my-3 h-5 w-20"></div>
@ -156,6 +162,7 @@
{/each} {/each}
{/if} {/if}
</div> </div>
{/if}
<div> <div>
{#if loading} {#if loading}
@ -166,7 +173,7 @@
<div /> <div />
{:else} {:else}
<h4> <h4>
maintainers {#if maintainer_copied}<span {#if event_not_found}author{:else}maintainers{/if} {#if maintainer_copied}<span
class="text-sm text-success opacity-50" class="text-sm text-success opacity-50"
> >
(copied to clipboard)</span (copied to clipboard)</span
@ -179,6 +186,8 @@
{/each} {/each}
{/if} {/if}
</div> </div>
{#if !event_not_found}
<div> <div>
{#if loading} {#if loading}
<div class="skeleton my-3 h-5 w-20"></div> <div class="skeleton my-3 h-5 w-20"></div>
@ -206,6 +215,7 @@
<h4>earliest unique commit</h4> <h4>earliest unique commit</h4>
<p class="my-2 break-words text-xs">{unique_commit}</p> <p class="my-2 break-words text-xs">{unique_commit}</p>
{/if} {/if}
{/if}
{#if loading} {#if loading}
<div class="skeleton my-3 h-5 w-20"></div> <div class="skeleton my-3 h-5 w-20"></div>
@ -247,4 +257,12 @@
<p class="my-2 break-words text-xs">{naddr}</p> <p class="my-2 break-words text-xs">{naddr}</p>
</div> </div>
{/if} {/if}
{#if event_not_found}
<div class="text-xs">
<AlertWarning>
<div class="font-semibold pb-1">missing repository details</div>
<div>cannot find referenced repository event</div>
</AlertWarning>
</div>
{/if}
</div> </div>

6
src/lib/components/repo/RepoHeader.svelte

@ -1,5 +1,6 @@
<script lang="ts"> <script lang="ts">
import RepoMenu from '$lib/wrappers/RepoMenu.svelte' import RepoMenu from '$lib/wrappers/RepoMenu.svelte'
import UserHeader from '$lib/components/users/UserHeader.svelte'
import Container from '../Container.svelte' import Container from '../Container.svelte'
import { event_defaults, type RepoPage } from './type' import { event_defaults, type RepoPage } from './type'
@ -45,6 +46,11 @@
class="strong btn btn-ghost mb-0 mt-0 break-words px-3 text-sm" class="strong btn btn-ghost mb-0 mt-0 break-words px-3 text-sm"
>{short_name}</a >{short_name}</a
> >
{#if created_at === 0 && name.length === 0}
<span class="text-xs text-warning">
cannot find referenced repository event by <UserHeader user={author} inline />
</span>
{/if}
{/if} {/if}
<RepoMenu {selected_tab} /> <RepoMenu {selected_tab} />
</Container> </Container>

1
src/lib/stores/repos.ts

@ -51,6 +51,7 @@ export const ensureRepo = (a: string | NDKEvent): Writable<RepoEvent> => {
identifier, identifier,
author: pubkey, author: pubkey,
naddr: aToNaddr(a_ref) || '', naddr: aToNaddr(a_ref) || '',
maintainers: [pubkey],
}) })
const sub = ndk.subscribe( const sub = ndk.subscribe(

15
src/lib/wrappers/RepoPageWrapper.svelte

@ -40,20 +40,18 @@
}, 5000) }, 5000)
</script> </script>
{#if invalid_naddr || (waited_5_secs && !$selected_repo_collection.loading && $selected_repo_event.name.length === 0)} <RepoHeader {...$selected_repo_event} {selected_tab} />
{#if invalid_naddr}
<Container> <Container>
<AlertError> <AlertError>
{#if invalid_naddr}
<div>Error! invalid naddr in url:</div> <div>Error! invalid naddr in url:</div>
<div class="break-all">{repo_naddr}</div> <div class="break-all">{repo_naddr}</div>
{:else}
<div>Error! cannot find repository event:</div>
<div class="break-all">{repo_naddr}</div>
{/if}
</AlertError> </AlertError>
</Container> </Container>
{:else} <Container>
<RepoHeader {...$selected_repo_event} {selected_tab} /> <slot />
</Container>
{/if}
{#if with_side_bar} {#if with_side_bar}
<Container> <Container>
<div class="mt-2 md:flex"> <div class="mt-2 md:flex">
@ -76,4 +74,3 @@
{:else} {:else}
<slot /> <slot />
{/if} {/if}
{/if}

Loading…
Cancel
Save