From 87cec27c538d28e4c466184781158fa4e42f2c95 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Tue, 21 Oct 2025 08:42:23 +0200 Subject: [PATCH] restore right-side panel update discussion feed relay selection --- src/PageManager.tsx | 88 +++++++++---------- src/constants.ts | 7 +- src/i18n/locales/de.ts | 2 + src/i18n/locales/en.ts | 2 + src/pages/primary/DiscussionsPage/index.tsx | 5 +- .../secondary/GeneralSettingsPage/index.tsx | 15 +++- src/providers/UserPreferencesProvider.tsx | 18 ++-- src/services/local-storage.service.ts | 16 ++-- 8 files changed, 82 insertions(+), 71 deletions(-) diff --git a/src/PageManager.tsx b/src/PageManager.tsx index ac571d9..34ae472 100644 --- a/src/PageManager.tsx +++ b/src/PageManager.tsx @@ -13,7 +13,7 @@ import GeneralSettingsPage from '@/pages/secondary/GeneralSettingsPage' import TranslationPage from '@/pages/secondary/TranslationPage' import { CurrentRelaysProvider } from '@/providers/CurrentRelaysProvider' import { NotificationProvider } from '@/providers/NotificationProvider' -import { UserPreferencesProvider, useUserPreferences } from '@/providers/UserPreferencesProvider' +import { useUserPreferences } from '@/providers/UserPreferencesProvider' import { TPageRef } from '@/types' import { cloneElement, @@ -118,12 +118,12 @@ export function usePrimaryNoteView() { // Custom hook for intelligent note navigation export function useSmartNoteNavigation() { - const { hideRecommendedRelaysPanel } = useUserPreferences() + const { showRecommendedRelaysPanel } = useUserPreferences() const { push: pushSecondary } = useSecondaryPage() const { setPrimaryNoteView } = usePrimaryNoteView() const navigateToNote = (url: string) => { - if (hideRecommendedRelaysPanel) { + if (!showRecommendedRelaysPanel) { // When right panel is hidden, show note in primary area // Extract note ID from URL (e.g., "/notes/note1..." -> "note1...") const noteId = url.replace('/notes/', '') @@ -139,12 +139,12 @@ export function useSmartNoteNavigation() { // Custom hook for intelligent relay navigation export function useSmartRelayNavigation() { - const { hideRecommendedRelaysPanel } = useUserPreferences() + const { showRecommendedRelaysPanel } = useUserPreferences() const { push: pushSecondary } = useSecondaryPage() const { navigate: navigatePrimary } = usePrimaryPage() const navigateToRelay = (url: string) => { - if (hideRecommendedRelaysPanel) { + if (!showRecommendedRelaysPanel) { // When right panel is hidden, navigate to relay page in primary area // Extract relay URL from the path (e.g., "/relays/wss%3A%2F%2F..." -> "wss://...") const relayUrl = url.startsWith('/relays/') ? decodeURIComponent(url.replace('/relays/', '')) : url @@ -160,12 +160,12 @@ export function useSmartRelayNavigation() { // Custom hook for intelligent settings navigation export function useSmartSettingsNavigation() { - const { hideRecommendedRelaysPanel } = useUserPreferences() + const { showRecommendedRelaysPanel } = useUserPreferences() const { push: pushSecondary } = useSecondaryPage() const { setPrimaryNoteView } = usePrimaryNoteView() const navigateToSettings = (url: string) => { - if (hideRecommendedRelaysPanel) { + if (!showRecommendedRelaysPanel) { // When right panel is hidden, show settings page in primary area if (url === '/settings') { setPrimaryNoteView(, 'settings') @@ -190,9 +190,9 @@ export function useSmartSettingsNavigation() { } function ConditionalHomePage() { - const { hideRecommendedRelaysPanel } = useUserPreferences() + const { showRecommendedRelaysPanel } = useUserPreferences() - if (hideRecommendedRelaysPanel) { + if (!showRecommendedRelaysPanel) { return null } @@ -214,16 +214,16 @@ function MainContentArea({ primaryViewType: 'note' | 'settings' | 'settings-sub' | null setPrimaryNoteView: (view: ReactNode | null, type?: 'note' | 'settings' | 'settings-sub') => void }) { - const { hideRecommendedRelaysPanel } = useUserPreferences() + const { showRecommendedRelaysPanel } = useUserPreferences() - // If recommended relays panel is hidden, use single column layout - // Otherwise use two-column grid layout - const gridClass = hideRecommendedRelaysPanel ? "grid-cols-1" : "grid-cols-2" + // If recommended relays panel is shown, use two-column layout + // Otherwise use single column layout + const gridClass = showRecommendedRelaysPanel ? "grid-cols-2" : "grid-cols-1" return (
- {hideRecommendedRelaysPanel && primaryNoteView ? ( + {!showRecommendedRelaysPanel && primaryNoteView ? ( // Show note view with back button when right panel is hidden
@@ -262,7 +262,7 @@ function MainContentArea({ )) )}
- {!hideRecommendedRelaysPanel && ( + {showRecommendedRelaysPanel && (
{secondaryStack.map((item, index) => (
- - - - - {!!secondaryStack.length && - secondaryStack.map((item, index) => ( -
- {item.component} -
- ))} - {primaryPages.map(({ name, element, props }) => ( + + + + {!!secondaryStack.length && + secondaryStack.map((item, index) => (
- {props ? cloneElement(element as React.ReactElement, props) : element} + {item.component}
))} - - - -
-
-
-
+ {primaryPages.map(({ name, element, props }) => ( +
+ {props ? cloneElement(element as React.ReactElement, props) : element} +
+ ))} + + + + + + ) @@ -562,8 +560,7 @@ export function PageManager({ maxStackSize = 5 }: { maxStackSize?: number }) { > - - +
- - + diff --git a/src/constants.ts b/src/constants.ts index 003a93b..35d0591 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -45,7 +45,7 @@ export const StorageKey = { NOTIFICATION_LIST_STYLE: 'notificationListStyle', MEDIA_AUTO_LOAD_POLICY: 'mediaAutoLoadPolicy', SHOWN_CREATE_WALLET_GUIDE_TOAST_PUBKEYS: 'shownCreateWalletGuideToastPubkeys', - HIDE_RECOMMENDED_RELAYS_PANEL: 'hideRecommendedRelaysPanel', + SHOW_RECOMMENDED_RELAYS_PANEL: 'showRecommendedRelaysPanel', MEDIA_UPLOAD_SERVICE: 'mediaUploadService', // deprecated HIDE_UNTRUSTED_EVENTS: 'hideUntrustedEvents', // deprecated ACCOUNT_RELAY_LIST_EVENT_MAP: 'accountRelayListEventMap', // deprecated @@ -65,10 +65,7 @@ export const BIG_RELAY_URLS = [ 'wss://theforest.nostr1.com', 'wss://orly-relay.imwald.eu', 'wss://nostr.land', - 'wss://nostr.wine', - 'wss://nostr.sovbit.host', - 'wss://nostr21.com', - 'wss://thecitadel.nostr1.com' + 'wss://thecitadel.nostr1.com', ] // Optimized relay list for read operations (includes aggregator) diff --git a/src/i18n/locales/de.ts b/src/i18n/locales/de.ts index 22ba28c..5073c6b 100644 --- a/src/i18n/locales/de.ts +++ b/src/i18n/locales/de.ts @@ -296,6 +296,8 @@ export default { Article: 'Artikel', Unfavorite: 'Nicht mehr favorisieren', 'Recommended relays': 'Empfohlene Relays', + 'Show recommended relays panel': 'Empfohlene Relays-Panel anzeigen', + 'Display the right-side panel with recommended relays on desktop': 'Das rechte Panel mit empfohlenen Relays auf dem Desktop anzeigen', 'Blossom server URLs': 'Blossom-Server-URLs', 'You need to add at least one blossom server in order to upload media files.': 'Du musst mindestens einen Blossom-Server hinzufügen, um Mediendateien hochladen zu können.', diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts index 77b0628..2d4caa8 100644 --- a/src/i18n/locales/en.ts +++ b/src/i18n/locales/en.ts @@ -301,6 +301,8 @@ export default { Article: 'Article', Unfavorite: 'Unfavorite', 'Recommended relays': 'Recommended relays', + 'Show recommended relays panel': 'Show recommended relays panel', + 'Display the right-side panel with recommended relays on desktop': 'Display the right-side panel with recommended relays on desktop', 'Blossom server URLs': 'Blossom server URLs', 'You need to add at least one blossom server in order to upload media files.': 'You need to add at least one blossom server in order to upload media files.', diff --git a/src/pages/primary/DiscussionsPage/index.tsx b/src/pages/primary/DiscussionsPage/index.tsx index e8ffb24..89d4701 100644 --- a/src/pages/primary/DiscussionsPage/index.tsx +++ b/src/pages/primary/DiscussionsPage/index.tsx @@ -145,10 +145,11 @@ const DiscussionsPage = forwardRef((_, ref) => { } } - // Use favorite relays from provider (includes stored relay sets) + user's read relays or fast read relays + // Use favorite relays from provider (includes stored relay sets) + user's read relays + fast read relays const allRawRelays = [ ...favoriteRelays, - ...(userReadRelays.length > 0 ? userReadRelays : FAST_READ_RELAY_URLS) + ...userReadRelays, + ...FAST_READ_RELAY_URLS ] // Normalize and deduplicate all relays diff --git a/src/pages/secondary/GeneralSettingsPage/index.tsx b/src/pages/secondary/GeneralSettingsPage/index.tsx index a329930..f4a9059 100644 --- a/src/pages/secondary/GeneralSettingsPage/index.tsx +++ b/src/pages/secondary/GeneralSettingsPage/index.tsx @@ -30,7 +30,7 @@ const GeneralSettingsPage = forwardRef(({ index, hideTitlebar = false }: { index setMediaAutoLoadPolicy } = useContentPolicy() const { hideUntrustedNotes, updateHideUntrustedNotes } = useUserTrust() - const { notificationListStyle, updateNotificationListStyle } = useUserPreferences() + const { notificationListStyle, updateNotificationListStyle, showRecommendedRelaysPanel, updateShowRecommendedRelaysPanel } = useUserPreferences() const handleLanguageChange = (value: TLanguage) => { i18n.changeLanguage(value) @@ -151,6 +151,19 @@ const GeneralSettingsPage = forwardRef(({ index, hideTitlebar = false }: { index + + + +
void - hideRecommendedRelaysPanel: boolean - updateHideRecommendedRelaysPanel: (hide: boolean) => void + showRecommendedRelaysPanel: boolean + updateShowRecommendedRelaysPanel: (show: boolean) => void } const UserPreferencesContext = createContext(undefined) @@ -23,8 +23,8 @@ export function UserPreferencesProvider({ children }: { children: React.ReactNod const [notificationListStyle, setNotificationListStyle] = useState( storage.getNotificationListStyle() ) - const [hideRecommendedRelaysPanel, setHideRecommendedRelaysPanel] = useState( - storage.getHideRecommendedRelaysPanel() + const [showRecommendedRelaysPanel, setShowRecommendedRelaysPanel] = useState( + storage.getShowRecommendedRelaysPanel() ) const updateNotificationListStyle = (style: TNotificationStyle) => { @@ -32,9 +32,9 @@ export function UserPreferencesProvider({ children }: { children: React.ReactNod storage.setNotificationListStyle(style) } - const updateHideRecommendedRelaysPanel = (hide: boolean) => { - setHideRecommendedRelaysPanel(hide) - storage.setHideRecommendedRelaysPanel(hide) + const updateShowRecommendedRelaysPanel = (show: boolean) => { + setShowRecommendedRelaysPanel(show) + storage.setShowRecommendedRelaysPanel(show) } return ( @@ -42,8 +42,8 @@ export function UserPreferencesProvider({ children }: { children: React.ReactNod value={{ notificationListStyle, updateNotificationListStyle, - hideRecommendedRelaysPanel, - updateHideRecommendedRelaysPanel + showRecommendedRelaysPanel, + updateShowRecommendedRelaysPanel }} > {children} diff --git a/src/services/local-storage.service.ts b/src/services/local-storage.service.ts index f9b5107..50a050f 100644 --- a/src/services/local-storage.service.ts +++ b/src/services/local-storage.service.ts @@ -49,7 +49,7 @@ class LocalStorageService { private hideContentMentioningMutedUsers: boolean = false private notificationListStyle: TNotificationStyle = NOTIFICATION_LIST_STYLE.DETAILED private mediaAutoLoadPolicy: TMediaAutoLoadPolicy = MEDIA_AUTO_LOAD_POLICY.ALWAYS - private hideRecommendedRelaysPanel: boolean = false + private showRecommendedRelaysPanel: boolean = true private shownCreateWalletGuideToastPubkeys: Set = new Set() constructor() { @@ -165,8 +165,8 @@ class LocalStorageService { this.dismissedTooManyRelaysAlert = window.localStorage.getItem(StorageKey.DISMISSED_TOO_MANY_RELAYS_ALERT) === 'true' - this.hideRecommendedRelaysPanel = - window.localStorage.getItem(StorageKey.HIDE_RECOMMENDED_RELAYS_PANEL) === 'true' + const storedValue = window.localStorage.getItem(StorageKey.SHOW_RECOMMENDED_RELAYS_PANEL) + this.showRecommendedRelaysPanel = storedValue !== 'false' // Default to true if not explicitly set to false const showKindsStr = window.localStorage.getItem(StorageKey.SHOW_KINDS) if (!showKindsStr) { @@ -460,13 +460,13 @@ class LocalStorageService { window.localStorage.setItem(StorageKey.DISMISSED_TOO_MANY_RELAYS_ALERT, dismissed.toString()) } - getHideRecommendedRelaysPanel() { - return this.hideRecommendedRelaysPanel + getShowRecommendedRelaysPanel() { + return this.showRecommendedRelaysPanel } - setHideRecommendedRelaysPanel(hide: boolean) { - this.hideRecommendedRelaysPanel = hide - window.localStorage.setItem(StorageKey.HIDE_RECOMMENDED_RELAYS_PANEL, hide.toString()) + setShowRecommendedRelaysPanel(show: boolean) { + this.showRecommendedRelaysPanel = show + window.localStorage.setItem(StorageKey.SHOW_RECOMMENDED_RELAYS_PANEL, show.toString()) } getShowKinds() {