diff --git a/e2e/USER_STORIES.md b/e2e/USER_STORIES.md index d7bfc83b..596d69f9 100644 --- a/e2e/USER_STORIES.md +++ b/e2e/USER_STORIES.md @@ -1576,6 +1576,17 @@ Acceptance: - 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-117 — See notes from the people I follow + +As alice, I want the home page to show what the people I follow have posted, so +that home is worth opening when nothing is waiting for me. + +Acceptance: + +- The Network section lists notes from her follows, resolved through the relays + those people publish to. +- Scrolling to the end of the feed loads more rather than asking her to. + ### US-106 — Share text into the app As alice, I want to hand text to Flotilla and choose where it lands, so that I diff --git a/e2e/specs/notifications.spec.ts b/e2e/specs/notifications.spec.ts index 8a14ad8c..3f2ffe9a 100644 --- a/e2e/specs/notifications.spec.ts +++ b/e2e/specs/notifications.spec.ts @@ -1,7 +1,7 @@ import {neventEncode, npubEncode} from "nostr-tools/nip19" import {HOUR, MINUTE} from "@welshman/lib" import {displayRelayUrl} from "@welshman/util" -import {Classified, MessagingRelayList, RelayList, Thread} from "@welshman/domain" +import {Classified, FollowList, MessagingRelayList, Note, RelayList, Thread} from "@welshman/domain" import type {Locator, Page} from "@playwright/test" import {expect, roomPath, spacePath, test, users} from "../harness" import type {SeededSpace, TestUser} from "../harness" @@ -415,6 +415,33 @@ test("US-116 read the home dashboard", async ({seed, as}) => { await expect(page.getByText("You're all caught up")).toBeVisible() }) +test("US-117 read the network feed on home", async ({seed, as}) => { + const note = "the tide charts are wrong again" + + await seed(({relay, user}) => { + const space = relay("space") + + space.room("general", {name: "General"}) + space.join(user.alice, "general") + space.join(user.bob, "general") + + // The feed asks each follow's write relays for their notes, so a note is only reachable + // through a relay list naming one. + seedRelays(space, user.alice) + seedRelays(space, user.bob) + + space.event(user.alice, () => + space.kind(FollowList).writer().follow(user.bob.pubkey).renderTemplate(), + ) + space.event(user.bob, () => space.kind(Note).writer().setContent(note).renderTemplate()) + }) + + const page = await as(users.alice, "/home") + + await expect(page.getByRole("heading", {name: "Network"})).toBeVisible() + await expect(page.getByText(note)).toBeVisible() +}) + test("US-106 share text into the app", async ({seed, as}) => { const shared = "the offsite is moving to the 14th" diff --git a/src/app/components/HomeNetwork.svelte b/src/app/components/HomeNetwork.svelte index 9524b242..6ac0466a 100644 --- a/src/app/components/HomeNetwork.svelte +++ b/src/app/components/HomeNetwork.svelte @@ -1,83 +1,76 @@ @@ -91,12 +84,12 @@

Browse spaces - {:else if events.length === 0} + {:else if notes.length === 0}
Looking for notes from people you follow…
{:else} - event.id} columnWidth={80} maxColumns={2} gap={3}> + event.id} columnWidth={80} maxColumns={2} gap={3}> {#snippet child(event)} {/snippet}