From 7a44bd1677721da7ebfd6de53ef381defdc7b2d6 Mon Sep 17 00:00:00 2001 From: Bhavishy Date: Fri, 3 Apr 2026 01:09:00 +0530 Subject: [PATCH] feat: add NIP-88 poll support --- src/app/components/NoteContentPoll.svelte | 4 +++- src/app/components/PollCreate.svelte | 11 +++++++++-- src/app/components/PollItem.svelte | 4 +++- src/app/components/PollVotes.svelte | 15 +++++++++------ src/routes/spaces/[relay]/polls/+page.svelte | 2 +- src/routes/spaces/[relay]/polls/[id]/+page.svelte | 6 +++++- 6 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/app/components/NoteContentPoll.svelte b/src/app/components/NoteContentPoll.svelte index db6af151..ffcf9bc3 100644 --- a/src/app/components/NoteContentPoll.svelte +++ b/src/app/components/NoteContentPoll.svelte @@ -35,7 +35,9 @@ {/if}

-

{$results.voters} voter{$results.voters === 1 ? "" : "s"}

+

+ {$results.voters} voter{$results.voters === 1 ? "" : "s"} +

diff --git a/src/app/components/PollCreate.svelte b/src/app/components/PollCreate.svelte index d4c46a30..fb17bf51 100644 --- a/src/app/components/PollCreate.svelte +++ b/src/app/components/PollCreate.svelte @@ -118,7 +118,11 @@ {#each options as option, index (index)}
diff --git a/src/app/components/PollItem.svelte b/src/app/components/PollItem.svelte index 7a5eea1f..1f96e96a 100644 --- a/src/app/components/PollItem.svelte +++ b/src/app/components/PollItem.svelte @@ -18,7 +18,9 @@ const h = getTagValue("h", event.tags) - +
diff --git a/src/app/components/PollVotes.svelte b/src/app/components/PollVotes.svelte index ee31e8a6..c334f9b9 100644 --- a/src/app/components/PollVotes.svelte +++ b/src/app/components/PollVotes.svelte @@ -33,10 +33,11 @@ const endsAt = getPollEndsAt(event) const results = $derived.by(() => getPollResults(event, $responses)) - const ownResponse = $derived.by(() => - $responses - .filter(response => response.pubkey === $pubkey) - .sort((left, right) => right.created_at - left.created_at)[0], + const ownResponse = $derived.by( + () => + $responses + .filter(response => response.pubkey === $pubkey) + .sort((left, right) => right.created_at - left.created_at)[0], ) const submit = async () => { @@ -111,9 +112,11 @@ {/if} {option.label} - {current?.votes || 0} vote{(current?.votes || 0) === 1 ? "" : "s"} + {current?.votes || 0} vote{(current?.votes || 0) === 1 ? "" : "s"}
- +
{/each} diff --git a/src/routes/spaces/[relay]/polls/+page.svelte b/src/routes/spaces/[relay]/polls/+page.svelte index c875ad9f..c5ac4b2d 100644 --- a/src/routes/spaces/[relay]/polls/+page.svelte +++ b/src/routes/spaces/[relay]/polls/+page.svelte @@ -5,7 +5,7 @@ import {page} from "$app/stores" import {sortBy, partition, spec, pushToMapKey, max} from "@welshman/lib" import type {TrustedEvent} from "@welshman/util" - import {COMMENT, getTagValue} from "@welshman/util" + import {getTagValue} from "@welshman/util" import {fly} from "@lib/transition" import PollIcon from "@assets/icons/revote.svg?dataurl" import Add from "@assets/icons/add.svg?dataurl" diff --git a/src/routes/spaces/[relay]/polls/[id]/+page.svelte b/src/routes/spaces/[relay]/polls/[id]/+page.svelte index eac6f17d..7de2c560 100644 --- a/src/routes/spaces/[relay]/polls/[id]/+page.svelte +++ b/src/routes/spaces/[relay]/polls/[id]/+page.svelte @@ -47,7 +47,11 @@ onMount(() => { const controller = new AbortController() - request({relays: [url], filters: [{kinds: [Poll], ids: [id]}, {kinds: [PollResponse], "#e": [id]}, ...filters], signal: controller.signal}) + request({ + relays: [url], + filters: [{kinds: [Poll], ids: [id]}, {kinds: [PollResponse], "#e": [id]}, ...filters], + signal: controller.signal, + }) return () => { controller.abort()