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' && (