Files
ember-market-frontend/app/dashboard/admin/settings/page.tsx
NotII f0d18a9e67 Add dashboard navigation and request timeouts
Added 'Back to Dashboard' buttons to all admin dashboard pages for improved navigation. Introduced AbortSignal timeouts to API client and middleware requests to prevent hanging network calls. Also enabled messaging customers from the order details page if Telegram info is available.
2025-10-30 18:35:09 +00:00

340 lines
12 KiB
TypeScript

import React from "react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Switch } from "@/components/ui/switch";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Textarea } from "@/components/ui/textarea";
import { Separator } from "@/components/ui/separator";
import { Settings, Shield, Bell, Database, Globe, Key, Save } from "lucide-react";
import Link from "next/link";
export default function AdminSettingsPage() {
return (
<div className="space-y-6">
<div className="flex items-center justify-between">
<div>
<h1 className="text-2xl font-semibold tracking-tight">Admin Settings</h1>
<p className="text-sm text-muted-foreground mt-1">Configure system settings and preferences</p>
</div>
<Button asChild variant="outline" size="sm">
<Link href="/dashboard">Back to Dashboard</Link>
</Button>
</div>
<div className="grid gap-6 lg:grid-cols-2">
{/* General Settings */}
<Card>
<CardHeader>
<CardTitle className="flex items-center">
<Settings className="h-5 w-5 mr-2" />
General Settings
</CardTitle>
<CardDescription>
Basic platform configuration and preferences
</CardDescription>
</CardHeader>
<CardContent className="space-y-6">
<div className="space-y-2">
<Label htmlFor="siteName">Site Name</Label>
<Input id="siteName" defaultValue="Ember Market" />
</div>
<div className="space-y-2">
<Label htmlFor="siteDescription">Site Description</Label>
<Textarea
id="siteDescription"
defaultValue="A secure cryptocurrency marketplace for vendors and customers"
rows={3}
/>
</div>
<div className="space-y-2">
<Label htmlFor="defaultCurrency">Default Currency</Label>
<Select defaultValue="btc">
<SelectTrigger>
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="btc">Bitcoin (BTC)</SelectItem>
<SelectItem value="eth">Ethereum (ETH)</SelectItem>
<SelectItem value="ltc">Litecoin (LTC)</SelectItem>
<SelectItem value="usdt">Tether (USDT)</SelectItem>
</SelectContent>
</Select>
</div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>Maintenance Mode</Label>
<p className="text-sm text-muted-foreground">
Temporarily disable public access
</p>
</div>
<Switch />
</div>
</CardContent>
</Card>
{/* Security Settings */}
<Card>
<CardHeader>
<CardTitle className="flex items-center">
<Shield className="h-5 w-5 mr-2" />
Security Settings
</CardTitle>
<CardDescription>
Configure security policies and authentication
</CardDescription>
</CardHeader>
<CardContent className="space-y-6">
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>Two-Factor Authentication</Label>
<p className="text-sm text-muted-foreground">
Require 2FA for all admin accounts
</p>
</div>
<Switch defaultChecked />
</div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>Session Timeout</Label>
<p className="text-sm text-muted-foreground">
Auto-logout after inactivity
</p>
</div>
<Switch defaultChecked />
</div>
<div className="space-y-2">
<Label htmlFor="sessionDuration">Session Duration (minutes)</Label>
<Input id="sessionDuration" type="number" defaultValue="60" />
</div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>IP Whitelist</Label>
<p className="text-sm text-muted-foreground">
Restrict admin access to specific IPs
</p>
</div>
<Switch />
</div>
<div className="space-y-2">
<Label htmlFor="allowedIPs">Allowed IP Addresses</Label>
<Textarea
id="allowedIPs"
placeholder="192.168.1.100&#10;10.0.0.50"
rows={3}
/>
</div>
</CardContent>
</Card>
{/* Notification Settings */}
<Card>
<CardHeader>
<CardTitle className="flex items-center">
<Bell className="h-5 w-5 mr-2" />
Notification Settings
</CardTitle>
<CardDescription>
Configure alert and notification preferences
</CardDescription>
</CardHeader>
<CardContent className="space-y-6">
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>Email Notifications</Label>
<p className="text-sm text-muted-foreground">
Send alerts via email
</p>
</div>
<Switch defaultChecked />
</div>
<div className="space-y-2">
<Label htmlFor="adminEmail">Admin Email</Label>
<Input id="adminEmail" type="email" defaultValue="admin@ember-market.com" />
</div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>Security Alerts</Label>
<p className="text-sm text-muted-foreground">
Notify on security events
</p>
</div>
<Switch defaultChecked />
</div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>System Alerts</Label>
<p className="text-sm text-muted-foreground">
Notify on system issues
</p>
</div>
<Switch defaultChecked />
</div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>Order Alerts</Label>
<p className="text-sm text-muted-foreground">
Notify on high-value orders
</p>
</div>
<Switch />
</div>
</CardContent>
</Card>
{/* Database Settings */}
<Card>
<CardHeader>
<CardTitle className="flex items-center">
<Database className="h-5 w-5 mr-2" />
Database Settings
</CardTitle>
<CardDescription>
Database configuration and maintenance
</CardDescription>
</CardHeader>
<CardContent className="space-y-6">
<div className="space-y-2">
<Label htmlFor="backupFrequency">Backup Frequency</Label>
<Select defaultValue="daily">
<SelectTrigger>
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="hourly">Hourly</SelectItem>
<SelectItem value="daily">Daily</SelectItem>
<SelectItem value="weekly">Weekly</SelectItem>
<SelectItem value="monthly">Monthly</SelectItem>
</SelectContent>
</Select>
</div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>Auto Backup</Label>
<p className="text-sm text-muted-foreground">
Automatically backup database
</p>
</div>
<Switch defaultChecked />
</div>
<div className="space-y-2">
<Label htmlFor="retentionPeriod">Backup Retention (days)</Label>
<Input id="retentionPeriod" type="number" defaultValue="30" />
</div>
<Separator />
<div className="space-y-2">
<Label>Database Actions</Label>
<div className="flex space-x-2">
<Button variant="outline" size="sm">
Create Backup
</Button>
<Button variant="outline" size="sm">
Optimize Database
</Button>
</div>
</div>
</CardContent>
</Card>
{/* API Settings */}
<Card>
<CardHeader>
<CardTitle className="flex items-center">
<Key className="h-5 w-5 mr-2" />
API Settings
</CardTitle>
<CardDescription>
API configuration and rate limiting
</CardDescription>
</CardHeader>
<CardContent className="space-y-6">
<div className="space-y-2">
<Label htmlFor="apiVersion">API Version</Label>
<Input id="apiVersion" defaultValue="v1" />
</div>
<div className="space-y-2">
<Label htmlFor="rateLimit">Rate Limit (requests/minute)</Label>
<Input id="rateLimit" type="number" defaultValue="1000" />
</div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label>API Logging</Label>
<p className="text-sm text-muted-foreground">
Log all API requests
</p>
</div>
<Switch defaultChecked />
</div>
<div className="space-y-2">
<Label htmlFor="apiKey">Master API Key</Label>
<Input id="apiKey" type="password" defaultValue="••••••••••••••••" />
</div>
</CardContent>
</Card>
{/* System Information */}
<Card>
<CardHeader>
<CardTitle className="flex items-center">
<Globe className="h-5 w-5 mr-2" />
System Information
</CardTitle>
<CardDescription>
Platform version and system details
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="flex justify-between">
<span className="text-sm font-medium">Platform Version</span>
<span className="text-sm text-muted-foreground">v2.1.0</span>
</div>
<div className="flex justify-between">
<span className="text-sm font-medium">Database Version</span>
<span className="text-sm text-muted-foreground">MongoDB 6.0</span>
</div>
<div className="flex justify-between">
<span className="text-sm font-medium">Node.js Version</span>
<span className="text-sm text-muted-foreground">v18.17.0</span>
</div>
<div className="flex justify-between">
<span className="text-sm font-medium">Last Updated</span>
<span className="text-sm text-muted-foreground">2024-01-15</span>
</div>
<div className="flex justify-between">
<span className="text-sm font-medium">Uptime</span>
<span className="text-sm text-muted-foreground">15 days, 3 hours</span>
</div>
</CardContent>
</Card>
</div>
{/* Save Button */}
<div className="flex justify-end">
<Button className="w-full sm:w-auto">
<Save className="h-4 w-4 mr-2" />
Save All Settings
</Button>
</div>
</div>
);
}