diff --git a/src/components/AppProvider.tsx b/src/components/AppProvider.tsx index 8b72567..eb93434 100644 --- a/src/components/AppProvider.tsx +++ b/src/components/AppProvider.tsx @@ -25,6 +25,7 @@ const RelayMetadataSchema = z.object({ const AppConfigSchema = z.object({ theme: z.enum(['dark', 'light', 'system']), relayMetadata: RelayMetadataSchema, + hideLatestArticles: z.boolean().optional(), }) satisfies z.ZodType; export function AppProvider(props: AppProviderProps) { diff --git a/src/contexts/AppContext.ts b/src/contexts/AppContext.ts index 6af4057..2856c5f 100644 --- a/src/contexts/AppContext.ts +++ b/src/contexts/AppContext.ts @@ -14,6 +14,8 @@ export interface AppConfig { theme: Theme; /** NIP-65 relay list metadata */ relayMetadata: RelayMetadata; + /** Hide latest articles section on home page */ + hideLatestArticles?: boolean; } export interface AppContextType { diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index 7ba0fde..ebe7a84 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -6,10 +6,12 @@ import { TrendingTags } from '@/components/TrendingTags'; import { Music, Leaf, BrainCircuit, Bitcoin, Newspaper, Hash } from 'lucide-react'; import { useInterestSets } from '@/hooks/useInterestSets'; import { useCurrentUser } from '@/hooks/useCurrentUser'; +import { useAppContext } from '@/hooks/useAppContext'; export default function HomePage() { const { user } = useCurrentUser(); const { data: interestSets } = useInterestSets(); + const { config } = useAppContext(); useSeoMeta({ title: 'zelo.news - Decentralized News on Nostr', @@ -53,7 +55,7 @@ export default function HomePage() { {/* Latest Articles */} - + {!config.hideLatestArticles && } {/* Display interest sets or default hashtags */} {displaySets ? ( diff --git a/src/pages/SettingsPage.tsx b/src/pages/SettingsPage.tsx index 2337b1a..92b6d3a 100644 --- a/src/pages/SettingsPage.tsx +++ b/src/pages/SettingsPage.tsx @@ -5,16 +5,26 @@ import { Switch } from '@/components/ui/switch'; import { RelayListManager } from '@/components/RelayListManager'; import { InterestSetsManager } from '@/components/InterestSetsManager'; import { useTheme } from '@/hooks/useTheme'; +import { useAppContext } from '@/hooks/useAppContext'; export function SettingsPage() { const { theme, setTheme } = useTheme(); + const { config, updateConfig } = useAppContext(); const isDarkMode = theme === 'dark'; + const hideLatestArticles = config.hideLatestArticles ?? false; const handleThemeToggle = () => { setTheme(isDarkMode ? 'light' : 'dark'); }; + const handleHideLatestArticlesToggle = () => { + updateConfig((current) => ({ + ...current, + hideLatestArticles: !(current.hideLatestArticles ?? false), + })); + }; + return (
{/* Page Header */} @@ -42,20 +52,37 @@ export function SettingsPage() { -
-
- -

- Switch between light and dark themes -

+
+
+
+ +

+ Switch between light and dark themes +

+
+ +
+
+
+ +

+ Hide the latest articles section on the home page +

+
+
-