diff --git a/src/blog/Blog.tsx b/src/blog/Blog.tsx index a98268a..e189fa1 100644 --- a/src/blog/Blog.tsx +++ b/src/blog/Blog.tsx @@ -13,6 +13,8 @@ import Register from './components/Register'; import { useArticles } from './providers/Article'; import { useAuth } from './providers/Author'; +type View = 'home' | 'login' | 'register' | 'article'; + export default function Blog(props: { disableCustomTheme?: boolean }) { const { articles, loading, error } = useArticles(); const { currentUser } = useAuth(); @@ -30,10 +32,69 @@ export default function Blog(props: { disableCustomTheme?: boolean }) { const handleShowLogin = () => { setShowLogin(true); + setShowRegister(false); window.scrollTo({ top: 0, behavior: 'smooth' }); }; + const handleShowRegister = () => { + setShowRegister(true); + setShowLogin(false); + window.scrollTo({ top: 0, behavior: 'smooth' }); + }; + const handleHideAuth = () => { + setShowLogin(false); + setShowRegister(false); + }; - const handleHideLogin = () => setShowLogin(false); + // derive a single source of truth for view + const view: View = React.useMemo(() => { + if (selectedArticle !== null) return 'article'; + if (showRegister) return 'register'; + if (showLogin) return 'login'; + return 'home'; + }, [selectedArticle, showLogin, showRegister]); + + // render function keeps JSX tidy + const renderView = () => { + switch (view) { + case 'register': + return ; + case 'login': + return ( + { + handleShowRegister(); + }} + /> + ); + case 'article': + if (selectedArticle == null || !articles[selectedArticle]) return null; + return
; + case 'home': + default: + return ( + <> + {!currentUser && ( + + + + )} + + + {}} + /> + + ); + } + }; if (loading) { return ( @@ -89,51 +150,13 @@ export default function Blog(props: { disableCustomTheme?: boolean }) { flexDirection: 'column', my: 4, gap: 4, - pb: selectedArticle === null && !showLogin && !showRegister ? 24 : 0, // ✅ adjusted footer padding + pb: view === 'home' ? 24 : 0, }} > - {showRegister ? ( - { - setShowRegister(false); - setShowLogin(false); - }} - /> - ) : showLogin ? ( - setShowLogin(false)} - onRegister={() => { - setShowLogin(false); - setShowRegister(true); - }} - /> - ) : selectedArticle !== null ? ( -
- ) : ( - <> - {!currentUser && ( - - - - )} - - - {}} - /> - - )} + {renderView()} - {selectedArticle === null && !showLogin && ( + {view === 'home' && (