aboutsummaryrefslogtreecommitdiff
path: root/web/src/app/components/Navbar.jsx
diff options
context:
space:
mode:
authorAndrew Lee <andrew@alee14.me>2025-03-25 17:23:30 -0400
committerAndrew Lee <andrew@alee14.me>2025-03-25 17:23:30 -0400
commit2c783bdb703e4ad69c9f3f846c2c9e6a527ccc80 (patch)
treee02587b4dca4bd7027b4cc012d458b18392643ea /web/src/app/components/Navbar.jsx
parent1c12d378d66b92b1674acd17640f2bac752da289 (diff)
downloadAleeBot-2c783bdb703e4ad69c9f3f846c2c9e6a527ccc80.tar.gz
AleeBot-2c783bdb703e4ad69c9f3f846c2c9e6a527ccc80.tar.bz2
AleeBot-2c783bdb703e4ad69c9f3f846c2c9e6a527ccc80.zip
Implemented admin dashboard
Diffstat (limited to 'web/src/app/components/Navbar.jsx')
-rw-r--r--web/src/app/components/Navbar.jsx83
1 files changed, 76 insertions, 7 deletions
diff --git a/web/src/app/components/Navbar.jsx b/web/src/app/components/Navbar.jsx
index 242175c..f07718c 100644
--- a/web/src/app/components/Navbar.jsx
+++ b/web/src/app/components/Navbar.jsx
@@ -1,25 +1,94 @@
+'use client';
+import { useState, useEffect } from 'react';
import SignOut from "@/app/components/sign-out";
+import Link from "next/link";
+import { fetchWithAuth } from '@/utils/api';
export default function Navbar() {
+ const [versionInfo, setVersionInfo] = useState({
+ ab_version: 'Loading...',
+ api_version: 'Loading...'
+ });
+ const [uptime, setUptime] = useState('Loading...');
+
+ useEffect(() => {
+ // Get the API URL
+ const apiUrl = localStorage.getItem('apiUrl');
+ if (!apiUrl) return;
+
+ // Fetch version information - no auth required
+ fetch(`${apiUrl}/api/version`)
+ .then(response => response.json())
+ .then(data => {
+ setVersionInfo({
+ ab_version: data.ab_version,
+ api_version: data.api_version
+ });
+ })
+ .catch(error => {
+ console.error('Failed to fetch version info:', error);
+ setVersionInfo({
+ ab_version: 'Error',
+ api_version: 'Error'
+ });
+ });
+
+ // Fetch uptime information - no auth required
+ fetch(`${apiUrl}/api/uptime`)
+ .then(response => response.json())
+ .then(data => {
+ // Convert milliseconds to a readable format
+ const ms = data.uptime;
+ const seconds = Math.floor(ms / 1000);
+ const minutes = Math.floor(seconds / 60);
+ const hours = Math.floor(minutes / 60);
+ const days = Math.floor(hours / 24);
+
+ let uptimeText = '';
+ if (days > 0) {
+ uptimeText = `${days} day${days !== 1 ? 's' : ''}`;
+ } else if (hours > 0) {
+ uptimeText = `${hours} hour${hours !== 1 ? 's' : ''}`;
+ } else if (minutes > 0) {
+ uptimeText = `${minutes} minute${minutes !== 1 ? 's' : ''}`;
+ } else {
+ uptimeText = `${seconds} second${seconds !== 1 ? 's' : ''}`;
+ }
+
+ setUptime(uptimeText);
+ })
+ .catch(error => {
+ console.error('Failed to fetch uptime:', error);
+ setUptime('Error');
+ });
+ }, []);
+
return (
<nav className="bg-gray-900 text-white">
<div className="max-w-screen-xl flex items-center justify-between mx-auto p-4">
<div className="flex items-center space-x-4">
<h1 className="text-xl font-medium">AleeBot</h1>
<ul>
- <li className="inline-block mx-2">Guilds</li>
- <li className="inline-block mx-2">Quotes</li>
- <li className="inline-block mx-2">Settings</li>
+ {[
+ ['Guilds', '/guilds'],
+ ['Quotes', '/quotes'],
+ ].map(([title, url]) => (
+ <li key={title} className="inline-block mx-2">
+ <Link href={url}>
+ {title}
+ </Link>
+ </li>
+ ))}
</ul>
</div>
<div className="flex items-center space-x-4">
- <span>Uptime: 1 day</span>
- <span>API v(version)</span>
- <span>4.0.0 Beta</span>
+ <span>Uptime: {uptime}</span>
+ <span>API v{versionInfo.api_version}</span>
+ <span>{versionInfo.ab_version}</span>
<SignOut />
</div>
</div>
</nav>
- )
+ );
}