3e4c730860
This commit adds a complete gamification system with analytics dashboards, leaderboards, and enhanced badge tracking functionality. Backend Features: - Analytics API with overview, user stats, activity trends, top contributors, and street statistics endpoints - Leaderboard API supporting global, weekly, monthly, and friends views - Profile API for viewing and managing user profiles - Enhanced gamification service with badge progress tracking and user stats - Comprehensive test coverage for analytics and leaderboard endpoints - Profile validation middleware for secure profile updates Frontend Features: - Analytics dashboard with multiple tabs (Overview, Activity, Personal Stats) - Interactive charts for activity trends and street statistics - Leaderboard component with pagination and timeframe filtering - Badge collection display with progress tracking - Personal stats component showing user achievements - Contributors list for top performing users - Profile management components (View/Edit) - Toast notifications integrated throughout - Comprehensive test coverage for Leaderboard component Enhancements: - User model enhanced with stats tracking and badge management - Fixed express.Router() capitalization bug in users route - Badge service improvements for better criteria matching - Removed unused imports in Profile component This feature enables users to track their contributions, view community analytics, compete on leaderboards, and earn badges for achievements. 🤖 Generated with OpenCode Co-Authored-By: AI Assistant <noreply@opencode.ai>
67 lines
2.0 KiB
JavaScript
67 lines
2.0 KiB
JavaScript
import React, { useContext } from 'react';
|
|
import { Link } from 'react-router-dom';
|
|
import { AuthContext } from '../context/AuthContext';
|
|
|
|
const Navbar = () => {
|
|
const { auth, logout } = useContext(AuthContext);
|
|
|
|
const authLinks = (
|
|
<ul className="navbar-nav ml-auto">
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/map">Map</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/tasks">Tasks</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/feed">Feed</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/events">Events</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/rewards">Rewards</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/leaderboard">Leaderboard</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/analytics">Analytics</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/profile">Profile</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/premium">Premium</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<a onClick={logout} href="#!" className="nav-link">Logout</a>
|
|
</li>
|
|
</ul>
|
|
);
|
|
|
|
const guestLinks = (
|
|
<ul className="navbar-nav ml-auto">
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/register">Register</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link className="nav-link" to="/login">Login</Link>
|
|
</li>
|
|
</ul>
|
|
);
|
|
|
|
return (
|
|
<nav className="navbar navbar-expand-sm navbar-dark bg-dark mb-4">
|
|
<div className="container">
|
|
<Link className="navbar-brand" to="/">Adopt-a-Street</Link>
|
|
<div className="collapse navbar-collapse">
|
|
{auth.isAuthenticated ? authLinks : guestLinks}
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
);
|
|
};
|
|
|
|
export default Navbar;
|