From 3d3ee3a087de20abaff68a67b23b309fa76fb4a1 Mon Sep 17 00:00:00 2001 From: Sebastian Korotkiewicz Date: Thu, 10 Apr 2025 12:23:10 +0200 Subject: [PATCH] cleanups --- package.json | 2 +- src/App.jsx | 20 +++--- src/components/Header.jsx | 23 +++--- src/main.jsx | 12 ++-- src/pages/AdminPanel.jsx | 117 +++++++++++++++++++------------ src/pages/Home.jsx | 97 +++++++++++++++----------- src/pages/Login.jsx | 17 ++--- src/pages/Mikroblog.jsx | 113 +++++++++++++++++------------- src/pages/Profile.jsx | 143 ++++++++++++++++++++++++-------------- src/store/useStore.js | 4 +- src/styles/main.scss | 8 +-- src/utils/nostr.js | 10 --- vite.config.ts | 4 +- 13 files changed, 332 insertions(+), 238 deletions(-) diff --git a/package.json b/package.json index 53277be..907e389 100644 --- a/package.json +++ b/package.json @@ -26,4 +26,4 @@ "globals": "^16.0.0", "vite": "^6.2.6" } -} \ No newline at end of file +} diff --git a/src/App.jsx b/src/App.jsx index 29710d1..67a6e11 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,13 +1,13 @@ -import React from 'react'; -import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; -import Header from './components/Header'; -import Home from './pages/Home'; -import Login from './pages/Login'; -import Mikroblog from './pages/Mikroblog'; -import Profile from './pages/Profile'; -import AdminPanel from './pages/AdminPanel'; +import React from "react"; +import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; +import Header from "./components/Header"; +import Home from "./pages/Home"; +import Login from "./pages/Login"; +import Mikroblog from "./pages/Mikroblog"; +import Profile from "./pages/Profile"; +import AdminPanel from "./pages/AdminPanel"; // import Settings from './pages/Settings'; -import './styles/main.scss'; +import "./styles/main.scss"; function App() { return ( @@ -29,4 +29,4 @@ function App() { ); } -export default App; \ No newline at end of file +export default App; diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 0696198..370573d 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -1,7 +1,14 @@ -import React from 'react'; -import { Link } from 'react-router-dom'; -import { LogIn, LogOut, Home, MessageSquare, Settings, Shield } from 'lucide-react'; -import { useStore } from '../store/useStore'; +import React from "react"; +import { Link } from "react-router-dom"; +import { + LogIn, + LogOut, + Home, + MessageSquare, + Settings, + Shield, +} from "lucide-react"; +import { useStore } from "../store/useStore"; function Header() { const { publicKey, profile, logout } = useStore(); @@ -20,11 +27,11 @@ function Header() { Mikroblog - +
{publicKey ? ( <> - {(profile?.role === 'admin' || profile?.role === 'moderator') && ( + {(profile?.role === "admin" || profile?.role === "moderator") && ( Panel @@ -33,7 +40,7 @@ function Header() { - @@ -49,4 +56,4 @@ function Header() { ); } -export default Header; \ No newline at end of file +export default Header; diff --git a/src/main.jsx b/src/main.jsx index ec52187..b48d3a0 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,9 +1,9 @@ -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './App'; +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App"; -createRoot(document.getElementById('root')).render( +createRoot(document.getElementById("root")).render( - -); \ No newline at end of file + , +); diff --git a/src/pages/AdminPanel.jsx b/src/pages/AdminPanel.jsx index 5f29a53..e3809d0 100644 --- a/src/pages/AdminPanel.jsx +++ b/src/pages/AdminPanel.jsx @@ -1,23 +1,40 @@ -import React, { useState, useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { Shield, User, MessageSquare, Ban, CheckCircle, XCircle } from 'lucide-react'; -import { useStore } from '../store/useStore'; -import { fetchAllPosts, fetchAllUsers, updateUserRole, banUser, removePost } from '../utils/nostr'; -import { formatDistanceToNow } from 'date-fns'; -import { pl } from 'date-fns/locale'; +import React, { useState, useEffect } from "react"; +import { useNavigate } from "react-router-dom"; +import { + Shield, + User, + MessageSquare, + Ban, + CheckCircle, + XCircle, +} from "lucide-react"; +import { useStore } from "../store/useStore"; +import { + fetchAllPosts, + fetchAllUsers, + updateUserRole, + banUser, + removePost, +} from "../utils/nostr"; +import { formatDistanceToNow } from "date-fns"; +import { pl } from "date-fns/locale"; function AdminPanel() { const navigate = useNavigate(); const { publicKey, profile } = useStore(); - const [activeTab, setActiveTab] = useState('users'); + const [activeTab, setActiveTab] = useState("users"); const [users, setUsers] = useState([]); const [posts, setPosts] = useState([]); const [loading, setLoading] = useState(true); const [processingAction, setProcessingAction] = useState({}); useEffect(() => { - if (!publicKey || !profile || (profile.role !== 'admin' && profile.role !== 'moderator')) { - navigate('/'); + if ( + !publicKey || + !profile || + (profile.role !== "admin" && profile.role !== "moderator") + ) { + navigate("/"); return; } @@ -29,12 +46,12 @@ function AdminPanel() { try { const [fetchedUsers, fetchedPosts] = await Promise.all([ fetchAllUsers(), - fetchAllPosts() + fetchAllPosts(), ]); setUsers(fetchedUsers); setPosts(fetchedPosts); } catch (error) { - console.error('Error loading admin data:', error); + console.error("Error loading admin data:", error); } finally { setLoading(false); } @@ -43,42 +60,42 @@ function AdminPanel() { async function handleUpdateRole(userId, newRole) { if (processingAction[userId]) return; - setProcessingAction(prev => ({ ...prev, [userId]: true })); + setProcessingAction((prev) => ({ ...prev, [userId]: true })); try { await updateUserRole(userId, newRole); await loadData(); } catch (error) { - console.error('Error updating user role:', error); + console.error("Error updating user role:", error); } finally { - setProcessingAction(prev => ({ ...prev, [userId]: false })); + setProcessingAction((prev) => ({ ...prev, [userId]: false })); } } async function handleBanUser(userId, isBanned) { if (processingAction[userId]) return; - setProcessingAction(prev => ({ ...prev, [userId]: true })); + setProcessingAction((prev) => ({ ...prev, [userId]: true })); try { await banUser(userId, isBanned); await loadData(); } catch (error) { - console.error('Error updating user ban status:', error); + console.error("Error updating user ban status:", error); } finally { - setProcessingAction(prev => ({ ...prev, [userId]: false })); + setProcessingAction((prev) => ({ ...prev, [userId]: false })); } } async function handleRemovePost(postId) { if (processingAction[postId]) return; - setProcessingAction(prev => ({ ...prev, [postId]: true })); + setProcessingAction((prev) => ({ ...prev, [postId]: true })); try { await removePost(postId); await loadData(); } catch (error) { - console.error('Error removing post:', error); + console.error("Error removing post:", error); } finally { - setProcessingAction(prev => ({ ...prev, [postId]: false })); + setProcessingAction((prev) => ({ ...prev, [postId]: false })); } } @@ -92,28 +109,30 @@ function AdminPanel() {

- Panel {profile?.role === 'admin' ? 'Administratora' : 'Moderatora'} + Panel {profile?.role === "admin" ? "Administratora" : "Moderatora"}

- {activeTab === 'users' ? ( + {activeTab === "users" ? (
@@ -125,8 +144,11 @@ function AdminPanel() { - {users.map(user => ( - + {users.map((user) => ( + - + - {posts.map(post => ( + {posts.map((post) => (
{user.picture ? ( @@ -140,7 +162,7 @@ function AdminPanel() {
{user.role || 'user'}{user.role || "user"} {user.banned ? ( @@ -156,10 +178,12 @@ function AdminPanel() {
- {profile?.role === 'admin' && ( + {profile?.role === "admin" && ( )}
{post.author.picture ? ( - {post.author.name} + {post.author.name} ) : ( )}
- {post.author.name || post.author.id.slice(0, 8)} + + {post.author.name || post.author.id.slice(0, 8)} + {post.author.id}
@@ -222,24 +252,21 @@ function AdminPanel() {

{post.content}

- - {post.votes.up - post.votes.down} punktów - + {post.votes.up - post.votes.down} punktów - - {post.comments} komentarzy - + {post.comments} komentarzy
{formatDistanceToNow(post.createdAt * 1000, { addSuffix: true, - locale: pl + locale: pl, })} @@ -130,7 +130,8 @@ function Home() {
{post.votes.up - post.votes.down}