2 lines
18 KiB
JavaScript
2 lines
18 KiB
JavaScript
|
|
import{a as l,j as e}from"./vendor-react-C9dYU-TK.js";import{g as T,l as R,u as I,B as h,c as p,C as o,S as r,h as U}from"./index-BMBS6scK.js";import{am as _,R as z,s as B,an as M,ao as H,ap as D,aq as V,V as G,a as K,ar as $,b as F,U as Y,D as Q,h as q,as as W}from"./vendor-icons-BSV6HBy1.js";import{A as J}from"./AnimatedNumber-C7V3zEin.js";import{T as X,a as Z,b as w,c as S}from"./Tabs-CJTCBu5-.js";import{m as E}from"./vendor-motion-CbAtAbUE.js";import"./vendor-CjLUfV8Y.js";import"./vendor-security-DsrNJhpn.js";import"./vendor-router-Dr0ZB7zf.js";import"./vendor-tanstack-C4XaEYj2.js";import"./vendor-http-CctT3C58.js";import"./vendor-utils-D0JLFg89.js";import"./vendor-i18n-PN7w4axr.js";const ee=[{id:"r1",targetId:"u3",targetType:"user",targetName:"Bot_User_99",reason:"Spam",description:"Posting same link in 50 channels.",reportedBy:"Admin_Dave",status:"pending",timestamp:"2023-10-25 10:30 AM"},{id:"r2",targetId:"t105",targetType:"track",targetName:"Untitled Track",reason:"Copyright",description:"Direct rip of Skrillex track.",reportedBy:"Sarah Connor",status:"pending",timestamp:"2023-10-25 09:15 AM"},{id:"r3",targetId:"c88",targetType:"comment",targetName:"Comment #8821",reason:"Hate Speech",description:"Offensive language.",reportedBy:"Cyber_Producer",status:"reviewed",timestamp:"2023-10-24 04:20 PM"}],se=[{id:"u1",name:"Bass_Drop.wav",user:"Skrillex",size:"12MB",date:"5 mins ago"},{id:"u2",name:"Project_Alpha.zip",user:"Deadmau5",size:"450MB",date:"12 mins ago"},{id:"u3",name:"Cover_Art.png",user:"Grimes",size:"4MB",date:"20 mins ago"}],g={getDashboardStats:async()=>{try{const s=await T.get("/audit/stats");return!s.data||Object.keys(s.data).length===0?{totalUsers:12450,monthlyRevenue:45290,activeSessions:1840,pendingReports:14,trends:{users:5.2,revenue:12.8,sessions:-2.4,reports:0}}:{totalUsers:s.data.total_users||12450,monthlyRevenue:s.data.total_revenue||45290,activeSessions:s.data.active_sessions||1840,pendingReports:s.data.pending_reports||14,trends:s.data.trends||{users:0,revenue:0,sessions:0,reports:0}}}catch(s){return R.error("[Admin] Failed to fetch dashboard stats",{error:s}),{totalUsers:12450,monthlyRevenue:45290,activeSessions:1840,pendingReports:14,trends:{users:5.2,revenue:12.8,sessions:-2.4,reports:0}}}},getModerationQueue:async(s="pending")=>(await new Promise(t=>setTimeout(t,600)),ee.filter(t=>s==="all"||t.status===s)),resolveReport:async(s,t)=>(await new Promise(n=>setTimeout(n,400)),{success:!0}),getRecentUploads:async()=>(await new Promise(s=>setTimeout(s,400)),se),getAuditLogs:async s=>(await T.get("/audit/logs",{params:s})).data};function ae(){const{addToast:s}=I(),[t,n]=l.useState({}),[d,a]=l.useState([]),[m,v]=l.useState([]),[f,u]=l.useState([]),[b,c]=l.useState(!0),[k,A]=l.useState(null),[L,C]=l.useState(null),N=l.useCallback(async()=>{c(!0),A(null);try{const[i,x,j,y]=await Promise.all([g.getDashboardStats(),g.getModerationQueue("pending"),g.getRecentUploads(),g.getAuditLogs({limit:10})]);n(i),a(x||[]),v(j||[]),u(y?.logs||[])}catch(i){R.error("Error loading admin dashboard",{error:i}),A(i instanceof Error?i:new Error(String(i)))}finally{c(!1)}},[]);l.useEffect(()=>{N()},[N]);const P=l.useCallback(async(i,x)=>{await g.resolveReport(i,x),a(j=>j.filter(y=>y.id!==i)),s(`Protocol "${x.toUpperCase()}" executed successfully.`,"success")},[s]),O=l.useCallback((i,x)=>{C(i),s(`INITIALIZING ${i.toUpperCase()}...`,"info"),setTimeout(()=>{s(`${i.toUpperCase()} DEPLOYED`,x),C(null)},2e3)},[s]);return{stats:t,reports:d,uploads:m,auditLogs:f,loading:b,error:k,protocolActive:L,handleAction:P,triggerProtocol:O,retry:N}}function te({protocolActive:s,onRescan:t,onLockdown:n}){return e.jsxs("div",{className:"flex flex-col md:flex-row items-start md:items-end justify-between gap-6",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-4xl font-heading font-bold text-foreground mb-2 flex items-center gap-3",children:[e.jsx(_,{className:"text-primary w-10 h-10"})," COMMAND CENTER"]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(
|