From 99966a976e1624837a3d4a2d8f8e6593793146d8 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Wed, 11 Mar 2026 15:48:36 -0700 Subject: [PATCH] Overhaul relay settings page --- src/app/components/RelayAdd.svelte | 78 ++++- src/app/components/RelayList.svelte | 85 +++++ .../components/RelaySettingsActionItem.svelte | 27 ++ .../RelaySettingsActionItems.svelte | 58 ++++ src/app/components/RelaySettingsItem.svelte | 50 +++ src/app/core/state.ts | 7 +- src/lib/components/Collapse.svelte | 36 -- src/routes/settings/alerts/+page.svelte | 7 +- src/routes/settings/content/+page.svelte | 7 +- src/routes/settings/privacy/+page.svelte | 7 +- src/routes/settings/relays/+page.svelte | 316 +++++++++--------- src/routes/settings/wallet/+page.svelte | 4 +- 12 files changed, 470 insertions(+), 212 deletions(-) create mode 100644 src/app/components/RelayList.svelte create mode 100644 src/app/components/RelaySettingsActionItem.svelte create mode 100644 src/app/components/RelaySettingsActionItems.svelte create mode 100644 src/app/components/RelaySettingsItem.svelte delete mode 100644 src/lib/components/Collapse.svelte diff --git a/src/app/components/RelayAdd.svelte b/src/app/components/RelayAdd.svelte index 7b20f51b..97de1c71 100644 --- a/src/app/components/RelayAdd.svelte +++ b/src/app/components/RelayAdd.svelte @@ -1,30 +1,70 @@ + + + +

{title}

+

{subtitle}

+ {#each $relays.toSorted() as url (url)} + + + + {/each} +
+ + + + +
diff --git a/src/app/components/RelaySettingsActionItem.svelte b/src/app/components/RelaySettingsActionItem.svelte new file mode 100644 index 00000000..260ab870 --- /dev/null +++ b/src/app/components/RelaySettingsActionItem.svelte @@ -0,0 +1,27 @@ + + + + +
+
+ {title} +

{subtitle}

+
+ +
diff --git a/src/app/components/RelaySettingsActionItems.svelte b/src/app/components/RelaySettingsActionItems.svelte new file mode 100644 index 00000000..d228433a --- /dev/null +++ b/src/app/components/RelaySettingsActionItems.svelte @@ -0,0 +1,58 @@ + + + + +
+ + Action Items +
+

+ Below are recommendations for adjustments to your relay selections that you might consider. +

+ {#each $actionItems as actionItem} + + {/each} +
+ + + + +
diff --git a/src/app/components/RelaySettingsItem.svelte b/src/app/components/RelaySettingsItem.svelte new file mode 100644 index 00000000..039c2105 --- /dev/null +++ b/src/app/components/RelaySettingsItem.svelte @@ -0,0 +1,50 @@ + + + diff --git a/src/app/core/state.ts b/src/app/core/state.ts index d3fd03f3..7e64a12f 100644 --- a/src/app/core/state.ts +++ b/src/app/core/state.ts @@ -577,7 +577,7 @@ export const makeRoomId = (url: string, h: string) => `${url}'${h}` export const splitRoomId = (id: string) => id.split("'") export const hasNip29 = (relay?: RelayProfile) => - relay?.supported_nips?.map?.(String)?.includes?.("29") + Boolean(relay?.supported_nips?.map?.(String)?.includes?.("29")) export const roomMetaEventsByIdByUrl = deriveEventsByIdByUrl({ tracker, @@ -1224,3 +1224,8 @@ export const shouldNotify = (url: string, h?: string) => getShouldNotify(getSett export const deriveShouldNotify = (url: string, h?: string) => derived(userSettingsValues, $settings => getShouldNotify($settings, url, h)) + +// Whatever who cares + +export const hasNip50 = (relay?: RelayProfile) => + Boolean(relay?.supported_nips?.map?.(String)?.includes?.("50")) diff --git a/src/lib/components/Collapse.svelte b/src/lib/components/Collapse.svelte deleted file mode 100644 index 5a827d51..00000000 --- a/src/lib/components/Collapse.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - -
- - {@render props.title?.()} - {@render props.description?.()} - {#if isOpen} -
- {@render props.children?.()} -
- {/if} -
diff --git a/src/routes/settings/alerts/+page.svelte b/src/routes/settings/alerts/+page.svelte index 487e70c0..1f4ed3bd 100644 --- a/src/routes/settings/alerts/+page.svelte +++ b/src/routes/settings/alerts/+page.svelte @@ -3,8 +3,10 @@ import {sleep} from "@welshman/lib" import {Capacitor} from "@capacitor/core" import {Badge} from "@capawesome/capacitor-badge" + import Bell from "@assets/icons/bell.svg?dataurl" import {preventDefault} from "@lib/html" import Spinner from "@lib/components/Spinner.svelte" + import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import {pushToast} from "@app/util/toast" import {Push, clearBadges} from "@app/util/notifications" @@ -51,7 +53,10 @@
- Alert Settings + + + Alert Settings + {#await Badge.isSupported()} {:then { isSupported }} diff --git a/src/routes/settings/content/+page.svelte b/src/routes/settings/content/+page.svelte index 0312a006..3c86cd03 100644 --- a/src/routes/settings/content/+page.svelte +++ b/src/routes/settings/content/+page.svelte @@ -10,10 +10,12 @@ } from "@welshman/util" import {Router} from "@welshman/router" import {userMuteList, tagPubkey, publishThunk, userBlossomServerList} from "@welshman/app" + import NotesMinimalistic from "@assets/icons/notes-minimalistic.svg?dataurl" import {preventDefault} from "@lib/html" import Field from "@lib/components/Field.svelte" import FieldInline from "@lib/components/FieldInline.svelte" import InputList from "@lib/components/InputList.svelte" + import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte" import {pushToast} from "@app/util/toast" @@ -49,7 +51,10 @@
- Content Settings + + + Content Settings + {#snippet label()}

Hide sensitive content?

diff --git a/src/routes/settings/privacy/+page.svelte b/src/routes/settings/privacy/+page.svelte index ad585127..4ab74fa6 100644 --- a/src/routes/settings/privacy/+page.svelte +++ b/src/routes/settings/privacy/+page.svelte @@ -1,5 +1,7 @@ -
- - {#snippet title()} -

- - Outbox Relays -

- {/snippet} - {#snippet description()} -

- These relays will be advertised on your profile as places where you send your public notes. - Be sure to select relays that will accept your notes, and which will let people who follow - you read them. -

- {/snippet} -
- {#each $writeRelayUrls.sort() as url (url)} - - - - {:else} -

No relays found

- {/each} - +
+
+
+ + + Your Relays + + {#if $actionItems.length > 0} + + {/if}
- - - {#snippet title()} -

- - Inbox Relays -

- {/snippet} - {#snippet description()} -

- These relays will be advertised on your profile as places where other people should send - notes intended for you. Be sure to select relays that will accept notes that tag you. -

- {/snippet} -
- {#each $readRelayUrls.sort() as url (url)} - - - - {:else} -

No relays found

- {/each} - -
-
- - {#snippet title()} -

- - Messaging Relays -

- {/snippet} - {#snippet description()} -

- These relays will be advertised on your profile as places you use to send and receive direct - messages. Be sure to select relays that will accept your messages and messages from people - you'd like to be in contact with. -

- {/snippet} -
- {#each $messagingRelayUrls.sort() as url (url)} - - - - {:else} -

No relays found

- {/each} - -
-
- - {#snippet title()} -

- - Blocked Relays -

- {/snippet} - {#snippet description()} -

- These relays will never be connected to by clients supporting this policy. -

- {/snippet} -
- {#each $blockedRelayUrls.sort() as url (url)} - - - - {:else} -

No relays found

- {/each} - -
-
+

+ Relays are servers which store your data, or allow you to find data from across the Nostr + network. We've set you up with some reasonable defaults, but if you're a power user, you can + customize your relay selections below. +

+ + + + hasNip50(getRelay(url))} /> + +
diff --git a/src/routes/settings/wallet/+page.svelte b/src/routes/settings/wallet/+page.svelte index e3b0611b..e9089a83 100644 --- a/src/routes/settings/wallet/+page.svelte +++ b/src/routes/settings/wallet/+page.svelte @@ -83,9 +83,9 @@
- + - Wallet + Your Wallet {#if $session?.wallet}