From 4f3a2a1660b09a06005eb0abbd169ca87a1cda43 Mon Sep 17 00:00:00 2001 From: junaiddshaukat Date: Fri, 3 Apr 2026 16:58:35 +0000 Subject: [PATCH 1/7] Add space search to recent activity page (#59) (#119) Co-authored-by: junaiddshaukat Co-committed-by: junaiddshaukat --- src/routes/spaces/[relay]/recent/+page.svelte | 184 +++++++++++++++++- 1 file changed, 182 insertions(+), 2 deletions(-) diff --git a/src/routes/spaces/[relay]/recent/+page.svelte b/src/routes/spaces/[relay]/recent/+page.svelte index cc888f00..309a1296 100644 --- a/src/routes/spaces/[relay]/recent/+page.svelte +++ b/src/routes/spaces/[relay]/recent/+page.svelte @@ -1,8 +1,23 @@ + +
+ + {$results.voters} voter{$results.voters === 1 ? "" : "s"} +
diff --git a/src/app/components/NoteContentPoll.svelte b/src/app/components/NoteContentPoll.svelte new file mode 100644 index 00000000..a60ecda4 --- /dev/null +++ b/src/app/components/NoteContentPoll.svelte @@ -0,0 +1,29 @@ + + +
+ + + {#if props.url} + + {/if} +
diff --git a/src/app/components/PollCreate.svelte b/src/app/components/PollCreate.svelte new file mode 100644 index 00000000..33d3cc3e --- /dev/null +++ b/src/app/components/PollCreate.svelte @@ -0,0 +1,238 @@ + + + + + + Create a Poll + Ask a question and collect votes right in the feed. + +
+ + {#snippet label()} +

Question*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + + {#snippet label()} +

Options*

+ {/snippet} + {#snippet input()} +
+ {#each options as option, index (option.id)} +
onDragStart(e, option.id)} + ondragover={e => onDragOver(e, option.id)} + ondrop={e => onDrop(e, option.id)} + ondragend={onDragEnd}> +
+ +
+ + +
+ {/each} + +
+ {/snippet} +
+ +
+ + {#snippet label()} + Poll type + {/snippet} + {#snippet input()} + + {/snippet} + + + {#snippet label()} + Ends at + {/snippet} + {#snippet input()} + + {/snippet} + +
+
+
+ + + + +
diff --git a/src/app/components/PollItem.svelte b/src/app/components/PollItem.svelte new file mode 100644 index 00000000..1f96e96a --- /dev/null +++ b/src/app/components/PollItem.svelte @@ -0,0 +1,34 @@ + + + + +
+ + Posted by + {#if h} + in + {/if} + + +
+ diff --git a/src/app/components/PollOption.svelte b/src/app/components/PollOption.svelte new file mode 100644 index 00000000..784c1fde --- /dev/null +++ b/src/app/components/PollOption.svelte @@ -0,0 +1,70 @@ + + +
+
+ + {votes} vote{votes === 1 ? "" : "s"} +
+ +
diff --git a/src/app/components/PollVotes.svelte b/src/app/components/PollVotes.svelte new file mode 100644 index 00000000..83448174 --- /dev/null +++ b/src/app/components/PollVotes.svelte @@ -0,0 +1,127 @@ + + +
+ {#each options as option (option.id)} + + {/each} +
+
+ {pollType === "multiplechoice" ? "Multiple choice" : "Single choice"} + {#if endsAt} + {#if closed} + • Ended {formatTimestampRelative(endsAt)} + {:else} + • Ends {formatTimestampRelative(endsAt)} + {/if} + {/if} +
+
{results.voters} vote{results.voters === 1 ? "" : "s"}
+
+
diff --git a/src/app/components/SpaceMenu.svelte b/src/app/components/SpaceMenu.svelte index d7b97c83..fd8d8a5d 100644 --- a/src/app/components/SpaceMenu.svelte +++ b/src/app/components/SpaceMenu.svelte @@ -1,6 +1,7 @@ + + + {#snippet title()} + + Polls + {/snippet} + {#snippet action()} + + {/snippet} + + + + {#each items as event (event.id)} +
+ +
+ {/each} +

+ + {#if loading} + Looking for polls... + {:else if items.length === 0} + No polls found. + {:else} + That's all! + {/if} + +

+
diff --git a/src/routes/spaces/[relay]/polls/[id]/+page.svelte b/src/routes/spaces/[relay]/polls/[id]/+page.svelte new file mode 100644 index 00000000..976f9c36 --- /dev/null +++ b/src/routes/spaces/[relay]/polls/[id]/+page.svelte @@ -0,0 +1,107 @@ + + + + {#snippet title()} +

{$event?.content || "Poll"}

+ {/snippet} +
+ + + {#if $event} +
+ +
+ + +
+
+ {#if !showAll && $comments.length > 4} +
+ +
+ {/if} + {#each $comments.slice(0, showAll ? undefined : 4) as reply (reply.id)} + +
+ + +
+
+ {/each} +
+ {#if showReply} + + {:else} +
+ +
+ {/if} + {:else} + {#await sleep(5000)} + Loading poll... + {:then} +

Failed to load poll.

+ {/await} + {/if} +
diff --git a/src/routes/spaces/[relay]/recent/+page.svelte b/src/routes/spaces/[relay]/recent/+page.svelte index 309a1296..d75ddbc0 100644 --- a/src/routes/spaces/[relay]/recent/+page.svelte +++ b/src/routes/spaces/[relay]/recent/+page.svelte @@ -46,9 +46,11 @@ import ClassifiedItem from "@app/components/ClassifiedItem.svelte" import GoalItem from "@app/components/GoalItem.svelte" import CalendarEventItem from "@app/components/CalendarEventItem.svelte" + import PollItem from "@app/components/PollItem.svelte" import RecentConversation from "@app/components/RecentConversation.svelte" import {decodeRelay, deriveEventsForUrl, CONTENT_KINDS} from "@app/core/state" import {goToEvent} from "@app/util/routes" + import {Poll} from "nostr-tools/kinds" const url = decodeRelay($page.params.relay!) const since = ago(3, MONTH) @@ -306,6 +308,8 @@ {:else if event.kind === EVENT_TIME} + {:else if event.kind === Poll} + {:else} {/if} From fceccf47bec1bb6b2c3fc6d506843c2bf9e1385d Mon Sep 17 00:00:00 2001 From: userAdityaa Date: Fri, 3 Apr 2026 23:54:20 +0000 Subject: [PATCH 3/7] fix(ui): hide report badge for non-admin users (#147) Co-authored-by: userAdityaa Co-committed-by: userAdityaa --- src/app/components/ReactionSummary.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/components/ReactionSummary.svelte b/src/app/components/ReactionSummary.svelte index fad73460..9d88180c 100644 --- a/src/app/components/ReactionSummary.svelte +++ b/src/app/components/ReactionSummary.svelte @@ -23,7 +23,7 @@ import Icon from "@lib/components/Icon.svelte" import Reaction from "@app/components/Reaction.svelte" import ReportDetails from "@app/components/ReportDetails.svelte" - import {REACTION_KINDS} from "@app/core/state" + import {REACTION_KINDS, deriveUserIsSpaceAdmin} from "@app/core/state" import {pushModal} from "@app/util/modal" interface Props { @@ -78,6 +78,8 @@ } } + const userIsAdmin = deriveUserIsSpaceAdmin(url) + const onReportClick = () => pushModal(ReportDetails, {url, event}) const reportReasons = $derived(uniq(map(e => getTag("e", e.tags)?.[2], $reports.values()))) @@ -118,7 +120,7 @@ {#if $reactions.length > 0 || $zaps.length || $reports.length > 0 || children}
- {#if url && $reports.length > 0} + {#if url && $reports.length > 0 && $userIsAdmin} - {#if show} - -
-
-
- Search - -
- -
-

{relayStatus}

- {#if !term} -

- {h ? "Search for content in this room." : "Search for content in this space."} -

- {:else if loading} -

Searching...

- {:else if eventsByAge.size === 0} -

No results found.

- {:else} -
- {#each eventsByAge as [key, events] (key)} + +{#if show} + +
+
+
+ Search + +
+ +
+

{relayStatus}

+ {#if !term} +

+ {h ? "Search for content in this room." : "Search for content in this space."} +

+ {:else if loading} +

Searching...

+ {:else if eventsByAge.size === 0} +

No results found.

+ {:else} +
+ {#each eventsByAge as [key, events] (key)} +
+

+ {#if key === "day"} + Last 24 Hours + {:else if key === "week"} + Last 7 Days + {:else} + Older + {/if} +

-

- {#if key === "day"} - Last 24 Hours - {:else if key === "week"} - Last 7 Days - {:else} - Older - {/if} -

-
- {#each events as event (event.id)} - - {/each} -
+ {#each events as event (event.id)} + + {/each}
- {/each} -
- {/if} -
+
+ {/each} +
+ {/if}
- {/if} -
+
+{/if} diff --git a/src/lib/components/Page.svelte b/src/lib/components/Page.svelte index ebe29cb6..8ee859e6 100644 --- a/src/lib/components/Page.svelte +++ b/src/lib/components/Page.svelte @@ -9,6 +9,6 @@
+ class="relative flex-grow flex flex-col min-w-0 ml-sai mb-sai mt-sai mr-sai bg-base-200 md:ml-0 md:mb-0 {props.class}"> {@render props.children?.()}
diff --git a/src/lib/components/PageBar.svelte b/src/lib/components/PageBar.svelte index 02418d3d..5d65355a 100644 --- a/src/lib/components/PageBar.svelte +++ b/src/lib/components/PageBar.svelte @@ -9,7 +9,7 @@ const {children, ...props}: Props = $props() -
+
{@render children?.()}
diff --git a/src/lib/components/PageContent.svelte b/src/lib/components/PageContent.svelte index 84483d6d..d73eebcc 100644 --- a/src/lib/components/PageContent.svelte +++ b/src/lib/components/PageContent.svelte @@ -10,10 +10,7 @@ let {children, element = $bindable(), ...props}: Props = $props() - const className = cx( - props.class, - "scroll-container cw cb ct fixed z-feature overflow-y-auto overflow-x-hidden", - ) + const className = cx(props.class, "scroll-container z-feature overflow-y-auto overflow-x-hidden")
diff --git a/src/lib/components/SecondaryNav.svelte b/src/lib/components/SecondaryNav.svelte index c92c3eb7..162c8b8f 100644 --- a/src/lib/components/SecondaryNav.svelte +++ b/src/lib/components/SecondaryNav.svelte @@ -12,7 +12,7 @@