fix: remove unused TS imports, fix icon size type, use prisma db push

This commit is contained in:
NixReaper
2026-04-05 12:03:33 -05:00
parent 5f42fe1ef0
commit f369732f6f
12 changed files with 20 additions and 23 deletions
+2 -2
View File
@@ -1,8 +1,8 @@
import React, { useState } from 'react' import { useState } from 'react'
import { Outlet, NavLink, useNavigate } from 'react-router-dom' import { Outlet, NavLink, useNavigate } from 'react-router-dom'
import { import {
LayoutDashboard, Users, Package, UserCog, Globe, Mail, Shield, LayoutDashboard, Users, Package, UserCog, Globe, Mail, Shield,
Server, Database, HardDrive, Settings, LogOut, Menu, X, Server, HardDrive, Settings, LogOut, Menu, X,
Activity, Lock, BarChart3, Cpu Activity, Lock, BarChart3, Cpu
} from 'lucide-react' } from 'lucide-react'
import { useAuth } from '../contexts/AuthContext' import { useAuth } from '../contexts/AuthContext'
+1 -1
View File
@@ -1,4 +1,4 @@
import React, { useEffect, useState, useCallback } from 'react' import { useEffect, useState, useCallback } from 'react'
import { Link } from 'react-router-dom' import { Link } from 'react-router-dom'
import { Plus, Search, MoreVertical, UserX, UserCheck, Trash2, RefreshCw } from 'lucide-react' import { Plus, Search, MoreVertical, UserX, UserCheck, Trash2, RefreshCw } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
+2 -2
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { HardDrive, Download, Trash2, RefreshCw, Play } from 'lucide-react' import { HardDrive, Trash2, RefreshCw, Play } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
interface Backup { path: string; filename: string; size: number; createdAt: string } interface Backup { path: string; filename: string; size: number; createdAt: string }
+2 -2
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { RefreshCw, Globe, Plus, Trash2, Pencil } from 'lucide-react' import { RefreshCw, Globe, Plus, Trash2 } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
interface Zone { id: number; domain: string; status: string; account: { username: string }; _count: { records: number } } interface Zone { id: number; domain: string; status: string; account: { username: string }; _count: { records: number } }
+2 -2
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useState, useRef } from 'react' import React, { useEffect, useState, useRef } from 'react'
import { Users, Globe, Server, HardDrive, Activity, AlertTriangle } from 'lucide-react' import { Users, Server, HardDrive, Activity } from 'lucide-react'
import { AreaChart, Area, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts' import { AreaChart, Area, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts'
import { api } from '../api/client' import { api } from '../api/client'
@@ -22,7 +22,7 @@ interface StatCard {
label: string label: string
value: string | number value: string | number
sub?: string sub?: string
icon: React.ComponentType<{ size?: number; className?: string }> icon: React.ComponentType<{ size?: number | string; className?: string }>
color: string color: string
} }
+2 -2
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { Mail, Plus, Trash2, RefreshCw } from 'lucide-react' import { Plus, Trash2, RefreshCw } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
interface EmailAccount { id: number; address: string; domain: string; quotaMb: number; usedMb: number; status: string } interface EmailAccount { id: number; address: string; domain: string; quotaMb: number; usedMb: number; status: string }
+1 -1
View File
@@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { Cpu, CheckCircle, XCircle, RefreshCw } from 'lucide-react' import { Cpu, CheckCircle, XCircle, RefreshCw } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
+2 -5
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react' import React, { useEffect, useState } from 'react'
import { Shield, Plus, Trash2, CheckCircle } from 'lucide-react' import { Plus, Trash2, CheckCircle } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
interface BlockedIp { id: number; ip: string; reason: string | null; createdAt: string } interface BlockedIp { id: number; ip: string; reason: string | null; createdAt: string }
@@ -16,10 +16,7 @@ export default function Security() {
const [events, setEvents] = useState<SecurityEvent[]>([]) const [events, setEvents] = useState<SecurityEvent[]>([])
const [newIp, setNewIp] = useState('') const [newIp, setNewIp] = useState('')
const [reason, setReason] = useState('') const [reason, setReason] = useState('')
const [loading, setLoading] = useState(false)
const fetch = async () => { const fetch = async () => {
setLoading(true)
try { try {
const [b, e] = await Promise.all([ const [b, e] = await Promise.all([
api.get('/nixserver/security/blocked-ips'), api.get('/nixserver/security/blocked-ips'),
@@ -27,7 +24,7 @@ export default function Security() {
]) ])
setBlocked(b.data.data) setBlocked(b.data.data)
setEvents(e.data.data.items ?? e.data.data) setEvents(e.data.data.items ?? e.data.data)
} finally { setLoading(false) } } catch {}
} }
useEffect(() => { fetch() }, []) useEffect(() => { fetch() }, [])
+2 -2
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { Play, Square, RefreshCw, AlertCircle, CheckCircle, MinusCircle } from 'lucide-react' import { RefreshCw, AlertCircle, CheckCircle, MinusCircle } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
interface Service { name: string; status: 'running' | 'stopped' | 'failed' | 'unknown'; enabled: boolean } interface Service { name: string; status: 'running' | 'stopped' | 'failed' | 'unknown'; enabled: boolean }
+1 -1
View File
@@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { RefreshCw } from 'lucide-react' import { RefreshCw } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
+2 -2
View File
@@ -1,10 +1,10 @@
import React, { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { Server, RefreshCw, RotateCcw, CheckCircle, XCircle } from 'lucide-react' import { Server, RefreshCw, RotateCcw, CheckCircle, XCircle } from 'lucide-react'
import { api } from '../api/client' import { api } from '../api/client'
export default function WebServer() { export default function WebServer() {
const [status, setStatus] = useState<{ nginx: { active: boolean }; apache: { active: boolean } } | null>(null) const [status, setStatus] = useState<{ nginx: { active: boolean }; apache: { active: boolean } } | null>(null)
const [vhosts, setVhosts] = useState<{ domain: string; path: string }[]>([]) const [, setVhosts] = useState<{ domain: string; path: string }[]>([])
const [logs, setLogs] = useState<{ lines: string[] } | null>(null) const [logs, setLogs] = useState<{ lines: string[] } | null>(null)
const [logType, setLogType] = useState<'access' | 'error'>('access') const [logType, setLogType] = useState<'access' | 'error'>('access')
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
+1 -1
View File
@@ -396,7 +396,7 @@ step "Running database migrations"
cd "$INSTALL_DIR/server" cd "$INSTALL_DIR/server"
npx prisma generate npx prisma generate
DATABASE_URL="mysql://${NIXPANEL_DB_USER}:${NIXPANEL_DB_PASS}@localhost:3306/${NIXPANEL_DB_NAME}" \ DATABASE_URL="mysql://${NIXPANEL_DB_USER}:${NIXPANEL_DB_PASS}@localhost:3306/${NIXPANEL_DB_NAME}" \
npx prisma migrate deploy npx prisma db push
success "Database schema applied" success "Database schema applied"
# ── Seed default data ───────────────────────────────────────────────────────── # ── Seed default data ─────────────────────────────────────────────────────────