From 45647781c0c917122593553d087a8eab536cd6c7 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Mon, 20 Oct 2025 22:30:01 +0200 Subject: [PATCH] fix settings button --- src/PageManager.tsx | 60 +++++++++++++++++-- src/components/AboutInfoDialog/index.tsx | 10 +++- src/components/ClientSelect/index.tsx | 6 +- .../PullRelaySetsButton.tsx | 2 +- src/components/NoteOptions/RawEventDialog.tsx | 2 +- src/components/NoteOptions/ReportDialog.tsx | 12 ++-- src/components/ReplyNoteList/index.tsx | 14 +---- src/components/Sidebar/SettingsButton.tsx | 6 +- .../secondary/GeneralSettingsPage/index.tsx | 4 +- .../secondary/PostSettingsPage/index.tsx | 4 +- .../secondary/RelaySettingsPage/index.tsx | 4 +- src/pages/secondary/SettingsPage/index.tsx | 18 +++--- src/pages/secondary/TranslationPage/index.tsx | 4 +- src/pages/secondary/WalletPage/index.tsx | 4 +- 14 files changed, 98 insertions(+), 52 deletions(-) diff --git a/src/PageManager.tsx b/src/PageManager.tsx index 195ab6d..ac571d9 100644 --- a/src/PageManager.tsx +++ b/src/PageManager.tsx @@ -5,6 +5,12 @@ import { ChevronLeft } from 'lucide-react' import NoteListPage from '@/pages/primary/NoteListPage' import HomePage from '@/pages/secondary/HomePage' import NotePage from '@/pages/secondary/NotePage' +import SettingsPage from '@/pages/secondary/SettingsPage' +import RelaySettingsPage from '@/pages/secondary/RelaySettingsPage' +import WalletPage from '@/pages/secondary/WalletPage' +import PostSettingsPage from '@/pages/secondary/PostSettingsPage' +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' @@ -83,7 +89,7 @@ const PrimaryPageContext = createContext(undefi const SecondaryPageContext = createContext(undefined) const PrimaryNoteViewContext = createContext<{ - setPrimaryNoteView: (view: ReactNode | null) => void + setPrimaryNoteView: (view: ReactNode | null, type?: 'note' | 'settings' | 'settings-sub') => void } | undefined>(undefined) export function usePrimaryPage() { @@ -121,7 +127,7 @@ export function useSmartNoteNavigation() { // 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/', '') - setPrimaryNoteView() + setPrimaryNoteView(, 'note') } else { // Normal behavior - use secondary navigation pushSecondary(url) @@ -152,6 +158,37 @@ export function useSmartRelayNavigation() { return { navigateToRelay } } +// Custom hook for intelligent settings navigation +export function useSmartSettingsNavigation() { + const { hideRecommendedRelaysPanel } = useUserPreferences() + const { push: pushSecondary } = useSecondaryPage() + const { setPrimaryNoteView } = usePrimaryNoteView() + + const navigateToSettings = (url: string) => { + if (hideRecommendedRelaysPanel) { + // When right panel is hidden, show settings page in primary area + if (url === '/settings') { + setPrimaryNoteView(, 'settings') + } else if (url === '/settings/relays') { + setPrimaryNoteView(, 'settings-sub') + } else if (url === '/settings/wallet') { + setPrimaryNoteView(, 'settings-sub') + } else if (url === '/settings/posts') { + setPrimaryNoteView(, 'settings-sub') + } else if (url === '/settings/general') { + setPrimaryNoteView(, 'settings-sub') + } else if (url === '/settings/translation') { + setPrimaryNoteView(, 'settings-sub') + } + } else { + // Normal behavior - use secondary navigation + pushSecondary(url) + } + } + + return { navigateToSettings } +} + function ConditionalHomePage() { const { hideRecommendedRelaysPanel } = useUserPreferences() @@ -167,13 +204,15 @@ function MainContentArea({ currentPrimaryPage, secondaryStack, primaryNoteView, + primaryViewType, setPrimaryNoteView }: { primaryPages: { name: TPrimaryPageName; element: ReactNode; props?: any }[] currentPrimaryPage: TPrimaryPageName secondaryStack: { index: number; component: ReactNode }[] primaryNoteView: ReactNode | null - setPrimaryNoteView: (view: ReactNode | null) => void + primaryViewType: 'note' | 'settings' | 'settings-sub' | null + setPrimaryNoteView: (view: ReactNode | null, type?: 'note' | 'settings' | 'settings-sub') => void }) { const { hideRecommendedRelaysPanel } = useUserPreferences() @@ -197,7 +236,10 @@ function MainContentArea({ onClick={() => setPrimaryNoteView(null)} > -
Note
+
+ {primaryViewType === 'settings' ? 'Settings' : + primaryViewType === 'settings-sub' ? 'Settings' : 'Note'} +
@@ -256,7 +298,13 @@ export function PageManager({ maxStackSize = 5 }: { maxStackSize?: number }) { } ]) const [secondaryStack, setSecondaryStack] = useState([]) - const [primaryNoteView, setPrimaryNoteView] = useState(null) + const [primaryNoteView, setPrimaryNoteViewState] = useState(null) + const [primaryViewType, setPrimaryViewType] = useState<'note' | 'settings' | 'settings-sub' | null>(null) + + const setPrimaryNoteView = (view: ReactNode | null, type?: 'note' | 'settings' | 'settings-sub') => { + setPrimaryNoteViewState(view) + setPrimaryViewType(type || null) + } const ignorePopStateRef = useRef(false) useEffect(() => { @@ -529,11 +577,11 @@ export function PageManager({ maxStackSize = 5 }: { maxStackSize?: number }) { currentPrimaryPage={currentPrimaryPage} secondaryStack={secondaryStack} primaryNoteView={primaryNoteView} + primaryViewType={primaryViewType} setPrimaryNoteView={setPrimaryNoteView} /> - diff --git a/src/components/AboutInfoDialog/index.tsx b/src/components/AboutInfoDialog/index.tsx index f8bdbcf..57b0ce0 100644 --- a/src/components/AboutInfoDialog/index.tsx +++ b/src/components/AboutInfoDialog/index.tsx @@ -1,4 +1,4 @@ -import { Dialog, DialogContent, DialogTrigger } from '@/components/ui/dialog' +import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog' import { Drawer, DrawerContent, DrawerTrigger } from '@/components/ui/drawer' import { CODY_PUBKEY, SILBERENGEL_PUBKEY } from '@/constants' import { useScreenSize } from '@/providers/ScreenSizeProvider' @@ -96,7 +96,13 @@ export default function AboutInfoDialog({ children }: { children: React.ReactNod return ( {children} - {content} + + + About + Information about the application + + {content} + ) } diff --git a/src/components/ClientSelect/index.tsx b/src/components/ClientSelect/index.tsx index 2efe939..7c100c9 100644 --- a/src/components/ClientSelect/index.tsx +++ b/src/components/ClientSelect/index.tsx @@ -1,5 +1,5 @@ import { Button, ButtonProps } from '@/components/ui/button' -import { Dialog, DialogContent, DialogTrigger } from '@/components/ui/dialog' +import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog' import { Drawer, DrawerContent, DrawerOverlay, DrawerTrigger } from '@/components/ui/drawer' import { Separator } from '@/components/ui/separator' import { ExtendedKind } from '@/constants' @@ -187,6 +187,10 @@ export default function ClientSelect({ {trigger} e.preventDefault()}> + + Client Selection + Select a client for this action + {content} diff --git a/src/components/FavoriteRelaysSetting/PullRelaySetsButton.tsx b/src/components/FavoriteRelaysSetting/PullRelaySetsButton.tsx index 6d4ddbb..aa7f59e 100644 --- a/src/components/FavoriteRelaysSetting/PullRelaySetsButton.tsx +++ b/src/components/FavoriteRelaysSetting/PullRelaySetsButton.tsx @@ -71,7 +71,7 @@ export default function PullRelaySetsButton() { {t('Select the relay sets you want to pull')} - + Choose relay sets to import setOpen(false)} /> diff --git a/src/components/NoteOptions/RawEventDialog.tsx b/src/components/NoteOptions/RawEventDialog.tsx index 0f31900..05c73e6 100644 --- a/src/components/NoteOptions/RawEventDialog.tsx +++ b/src/components/NoteOptions/RawEventDialog.tsx @@ -22,7 +22,7 @@ export default function RawEventDialog({ Raw Event - + View the raw event data
diff --git a/src/components/NoteOptions/ReportDialog.tsx b/src/components/NoteOptions/ReportDialog.tsx
index ffd9a74..f1c329d 100644
--- a/src/components/NoteOptions/ReportDialog.tsx
+++ b/src/components/NoteOptions/ReportDialog.tsx
@@ -46,9 +46,9 @@ export default function ReportDialog({
         }}
       >
         
-          
-            
-            
+          
+            Report Content
+            Report inappropriate content
           
           
@@ -68,9 +68,9 @@ export default function ReportDialog({ }} > - - - + + Report Content + Report inappropriate content diff --git a/src/components/ReplyNoteList/index.tsx b/src/components/ReplyNoteList/index.tsx index 5a85819..3d91f88 100644 --- a/src/components/ReplyNoteList/index.tsx +++ b/src/components/ReplyNoteList/index.tsx @@ -96,38 +96,26 @@ function ReplyNoteList({ index, event, sort = 'oldest' }: { index?: number; even if (isReplaceableEvent(event.kind) && currentEventKey !== eventIdKey) { parentEventKeys.push(eventIdKey) } - - console.log('🔍 ReplyNoteList debug:', { - eventId: event.id, - currentEventKey, - repliesMapSize: repliesMap.size, - repliesMapKeys: Array.from(repliesMap.keys()), - repliesForEvent: repliesMap.get(currentEventKey)?.events?.length || 0 - }) + while (parentEventKeys.length > 0) { const events = parentEventKeys.flatMap((id) => repliesMap.get(id)?.events || []) - console.log('🔍 Processing events for keys:', parentEventKeys, 'found:', events.length) events.forEach((evt) => { if (replyIdSet.has(evt.id)) return if (mutePubkeySet.has(evt.pubkey)) { - console.log('🔍 Filtered out muted user:', evt.pubkey) return } if (hideContentMentioningMutedUsers && isMentioningMutedUsers(evt, mutePubkeySet)) { - console.log('🔍 Filtered out content mentioning muted users') return } replyIdSet.add(evt.id) replyEvents.push(evt) - console.log('🔍 Added reply:', evt.id, 'kind:', evt.kind) }) parentEventKeys = events.map((evt) => evt.id) } - console.log('🔍 Final replies count:', replyEvents.length) // Apply sorting based on the sort parameter diff --git a/src/components/Sidebar/SettingsButton.tsx b/src/components/Sidebar/SettingsButton.tsx index e373a3a..6df5af0 100644 --- a/src/components/Sidebar/SettingsButton.tsx +++ b/src/components/Sidebar/SettingsButton.tsx @@ -1,13 +1,13 @@ import { toSettings } from '@/lib/link' -import { useSecondaryPage } from '@/PageManager' +import { useSmartSettingsNavigation } from '@/PageManager' import { Settings } from 'lucide-react' import SidebarItem from './SidebarItem' export default function SettingsButton() { - const { push } = useSecondaryPage() + const { navigateToSettings } = useSmartSettingsNavigation() return ( - push(toSettings())}> + navigateToSettings(toSettings())}> ) diff --git a/src/pages/secondary/GeneralSettingsPage/index.tsx b/src/pages/secondary/GeneralSettingsPage/index.tsx index 33cdf14..a329930 100644 --- a/src/pages/secondary/GeneralSettingsPage/index.tsx +++ b/src/pages/secondary/GeneralSettingsPage/index.tsx @@ -15,7 +15,7 @@ import { ExternalLink } from 'lucide-react' import { forwardRef, HTMLProps, useState } from 'react' import { useTranslation } from 'react-i18next' -const GeneralSettingsPage = forwardRef(({ index }: { index?: number }, ref) => { +const GeneralSettingsPage = forwardRef(({ index, hideTitlebar = false }: { index?: number; hideTitlebar?: boolean }, ref) => { const { t, i18n } = useTranslation() const [language, setLanguage] = useState(i18n.language as TLanguage) const { themeSetting, setThemeSetting } = useTheme() @@ -38,7 +38,7 @@ const GeneralSettingsPage = forwardRef(({ index }: { index?: number }, ref) => { } return ( - +