diff --git a/AGENTS.md b/AGENTS.md
index 0ff74656..0939c90b 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -169,6 +169,7 @@ src/
- When creating forms, use `FieldInline` or `Field` instead of custom elements/tailwindcss
- Do not define svelte event handlers inline, instead name them and put them in the script section of templates
- Avoid using `as`, except where necessary. Instead, annotate function parameters, and ensure upstream values are typed correctly.
+- Instead of `getTag(tagName, event.tags)?.[1] || ""`, use `getTagValue(tagName, event.tags)`
**Human-First Simplicity (Jon Staab Style):**
diff --git a/src/app/components/ProfileDetail.svelte b/src/app/components/ProfileDetail.svelte
index 7a85105f..0c7484ee 100644
--- a/src/app/components/ProfileDetail.svelte
+++ b/src/app/components/ProfileDetail.svelte
@@ -30,6 +30,7 @@
import EventInfo from "@app/components/EventInfo.svelte"
import ProfileBadges from "@app/components/ProfileBadges.svelte"
import {pubkeyLink, deriveUserIsSpaceAdmin, deriveSpaceBannedPubkeyItems} from "@app/core/state"
+ import {addSpaceMembers} from "@app/core/commands"
import {pushModal} from "@app/util/modal"
import {pushToast} from "@app/util/toast"
import {makeChatPath} from "@app/util/routes"
@@ -85,10 +86,7 @@
})
const restoreMember = async () => {
- const {error} = await manageRelay(url!, {
- method: ManagementMethod.AllowPubkey,
- params: [pubkey],
- })
+ const error = await addSpaceMembers(url!, [pubkey])
if (error) {
pushToast({theme: "error", message: error})
diff --git a/src/app/components/ReportItem.svelte b/src/app/components/ReportItem.svelte
index 3faecb1e..8d8a9a57 100644
--- a/src/app/components/ReportItem.svelte
+++ b/src/app/components/ReportItem.svelte
@@ -15,10 +15,10 @@
type Props = {
url: string
event: TrustedEvent
- onDelete?: () => void
+ onResolved?: () => void
}
- const {url, event, onDelete}: Props = $props()
+ const {url, event, onResolved}: Props = $props()
const etag = getTag("e", event.tags)
const ptag = getTag("p", event.tags)
@@ -45,7 +45,7 @@
{/if}
-
+
{#if event.content}
diff --git a/src/app/components/RoomForm.svelte b/src/app/components/RoomForm.svelte
index 77e6577d..218feb74 100644
--- a/src/app/components/RoomForm.svelte
+++ b/src/app/components/RoomForm.svelte
@@ -208,7 +208,7 @@
- Require admins to approve join requests
+ Membership requires approval
{@render footer({loading})}
diff --git a/src/app/components/RoomJoinItem.svelte b/src/app/components/RoomJoinItem.svelte
new file mode 100644
index 00000000..7c7c2020
--- /dev/null
+++ b/src/app/components/RoomJoinItem.svelte
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ requested membership in #
+
+
+
+
+
+
+
+
diff --git a/src/app/components/RoomMembersAdd.svelte b/src/app/components/RoomMembersAdd.svelte
index 3336132a..63397e3d 100644
--- a/src/app/components/RoomMembersAdd.svelte
+++ b/src/app/components/RoomMembersAdd.svelte
@@ -2,9 +2,8 @@
import {onMount} from "svelte"
import {setKey, popKey} from "@lib/implicit"
import {sleep} from "@welshman/lib"
- import {ManagementMethod} from "@welshman/util"
- import {manageRelay} from "@welshman/app"
- import {addRoomMember, displayProfileByPubkey, waitForThunkError} from "@welshman/app"
+ import {displayProfileByPubkey} from "@welshman/app"
+ import type {PublishedRoomMeta} from "@welshman/util"
import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl"
import Spinner from "@lib/components/Spinner.svelte"
import Button from "@lib/components/Button.svelte"
@@ -22,6 +21,7 @@
import {pushToast} from "@app/util/toast"
import {pushModal} from "@app/util/modal"
import {deriveRoom, deriveSpaceMembers} from "@app/core/state"
+ import {addRoomMembers} from "@app/core/commands"
interface Props {
url: string
@@ -42,35 +42,14 @@
// Show loading for auto submit callback
await sleep(500)
- const results = await Promise.all(
- pubkeys
- .filter(pubkey => !$spaceMembers.includes(pubkey))
- .map(pubkey =>
- manageRelay(url, {
- method: ManagementMethod.AllowPubkey,
- params: [pubkey],
- }),
- ),
- )
+ const error = await addRoomMembers(url, $room as PublishedRoomMeta, pubkeys)
- for (const {error} of results) {
- if (error) {
- return pushToast({theme: "error", message: error})
- }
+ if (error) {
+ pushToast({theme: "error", message: error})
+ } else {
+ pushToast({message: "Members have successfully been added!"})
+ back()
}
-
- const errors = await Promise.all(
- pubkeys.map(pubkey => waitForThunkError(addRoomMember(url, $room, pubkey))),
- )
-
- for (const error of errors) {
- if (error) {
- return pushToast({theme: "error", message: errors[0]})
- }
- }
-
- pushToast({message: "Members have successfully been added!"})
- back()
} finally {
loading = false
}
diff --git a/src/app/components/SpaceActionItems.svelte b/src/app/components/SpaceActionItems.svelte
new file mode 100644
index 00000000..55c45a24
--- /dev/null
+++ b/src/app/components/SpaceActionItems.svelte
@@ -0,0 +1,58 @@
+
+
+
+
+
+ Action Items
+ on
+
+
+ {#each $actionItems as event (event.id)}
+ {#if event.kind === REPORT}
+
+ {:else}
+
+ {/if}
+ {:else}
+
No action items found.
+ {/each}
+
+
+
+
+
+
diff --git a/src/app/components/SpaceMembersAdd.svelte b/src/app/components/SpaceMembersAdd.svelte
index 23dc5b4d..4df724c9 100644
--- a/src/app/components/SpaceMembersAdd.svelte
+++ b/src/app/components/SpaceMembersAdd.svelte
@@ -1,6 +1,5 @@