Show the home hosting section whether or not the user hosts a space
This commit is contained in:
parent
c4934db5ff
commit
a3d9106a43
3 changed files with 23 additions and 12 deletions
|
|
@ -1570,6 +1570,8 @@ Acceptance:
|
||||||
- Selecting a conversation opens it, and it stays in the inbox once read.
|
- Selecting a conversation opens it, and it stays in the inbox once read.
|
||||||
- Relay health checks are listed alongside the inbox, with the recommendation
|
- Relay health checks are listed alongside the inbox, with the recommendation
|
||||||
each one applies.
|
each one applies.
|
||||||
|
- Hosting is offered whether or not she hosts a space: a shortcut to the hosting
|
||||||
|
panel when she has one, an invitation to start one when she doesn't.
|
||||||
|
|
||||||
### US-106 — Share text into the app
|
### US-106 — Share text into the app
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -381,6 +381,9 @@ test("US-116 read the home dashboard", async ({seed, as}) => {
|
||||||
// Relay health checks had no mount point at all before the dashboard
|
// Relay health checks had no mount point at all before the dashboard
|
||||||
await expect(page.getByText("Health checks")).toBeVisible()
|
await expect(page.getByText("Health checks")).toBeVisible()
|
||||||
|
|
||||||
|
// Hosting shows even though alice hosts nothing, as an invitation to start a space
|
||||||
|
await expect(page.getByRole("button", {name: "Start a space"})).toBeVisible()
|
||||||
|
|
||||||
await page.getByRole("button", {name: "Mark all read"}).click()
|
await page.getByRole("button", {name: "Mark all read"}).click()
|
||||||
|
|
||||||
await expect(unreadDot(conversation)).toHaveCount(0)
|
await expect(unreadDot(conversation)).toHaveCount(0)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
import Icon from "@lib/components/Icon.svelte"
|
import Icon from "@lib/components/Icon.svelte"
|
||||||
import Link from "@lib/components/Link.svelte"
|
import Link from "@lib/components/Link.svelte"
|
||||||
import Button from "@lib/components/Button.svelte"
|
import Button from "@lib/components/Button.svelte"
|
||||||
|
import Spinner from "@lib/components/Spinner.svelte"
|
||||||
import HomeSection from "@app/components/HomeSection.svelte"
|
import HomeSection from "@app/components/HomeSection.svelte"
|
||||||
import RelayListItem from "@app/components/hosting/RelayListItem.svelte"
|
import RelayListItem from "@app/components/hosting/RelayListItem.svelte"
|
||||||
import RelayCreate from "@app/components/hosting/RelayCreate.svelte"
|
import RelayCreate from "@app/components/hosting/RelayCreate.svelte"
|
||||||
|
|
@ -13,31 +14,36 @@
|
||||||
import {HostingError, listTenantRelays, type HostedRelay} from "@app/hosting"
|
import {HostingError, listTenantRelays, type HostedRelay} from "@app/hosting"
|
||||||
|
|
||||||
let relays = $state<HostedRelay[]>([])
|
let relays = $state<HostedRelay[]>([])
|
||||||
let loaded = $state(false)
|
let loading = $state(true)
|
||||||
|
|
||||||
const openCreate = () => pushModal(RelayCreate)
|
const openCreate = () => pushModal(RelayCreate)
|
||||||
|
|
||||||
// A pubkey with no tenant yet answers with a HostingError, which is the ordinary case for
|
// A pubkey with no tenant yet answers with a HostingError, which is the ordinary case for
|
||||||
// anyone who has never hosted a space. The panel stays out of the way rather than reporting it.
|
// anyone who has never hosted a space.
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
try {
|
try {
|
||||||
relays = await listTenantRelays($user.pubkey)
|
relays = await listTenantRelays($user.pubkey)
|
||||||
loaded = true
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (!(e instanceof HostingError)) {
|
if (!(e instanceof HostingError)) {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
loading = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if loaded}
|
<HomeSection title="Hosting" icon={Server}>
|
||||||
<HomeSection title="Hosting" icon={Server}>
|
|
||||||
{#snippet action()}
|
{#snippet action()}
|
||||||
{#if relays.length > 0}
|
{#if relays.length > 0}
|
||||||
<Link href="/settings/hosting" class="button button-neutral button-xs">Manage</Link>
|
<Link href="/settings/hosting" class="button button-neutral button-xs">Manage</Link>
|
||||||
{/if}
|
{/if}
|
||||||
{/snippet}
|
{/snippet}
|
||||||
|
{#if loading}
|
||||||
|
<div class="flex justify-center px-4 pb-8">
|
||||||
|
<Spinner>Checking your hosted spaces…</Spinner>
|
||||||
|
</div>
|
||||||
|
{:else}
|
||||||
{#if relays.length > 0}
|
{#if relays.length > 0}
|
||||||
<div class="flex flex-col divide-y divide-line border-y border-line">
|
<div class="flex flex-col divide-y divide-line border-y border-line">
|
||||||
{#each relays as relay (relay.id)}
|
{#each relays as relay (relay.id)}
|
||||||
|
|
@ -59,5 +65,5 @@
|
||||||
{relays.length > 0 ? "Add another space" : "Start a space"}
|
{relays.length > 0 ? "Add another space" : "Start a space"}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</HomeSection>
|
{/if}
|
||||||
{/if}
|
</HomeSection>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue