mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 09:31:20 -04:00
34 lines
1.5 KiB
React
34 lines
1.5 KiB
React
// Admin Ip Log Panel
|
|
// Purpose: Defines the Admin Ip Log Panel module and the local helpers/components used in this file.
|
|
// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.
|
|
export default function AdminIpLogPanel({ entries }) {
|
|
const logs = entries || [];
|
|
return (
|
|
<div className="panel-section space-y-0.5 text-base">
|
|
<div className="flex items-center justify-between text-sm text-slate-400">
|
|
<span>Admin IP log</span>
|
|
<span>{logs.length}</span>
|
|
</div>
|
|
<div className="surface h-64 overflow-y-auto font-mono text-xs">
|
|
{logs.length === 0 ? (
|
|
<p>No admin log entries yet.</p>
|
|
) : (
|
|
logs
|
|
.slice()
|
|
.reverse()
|
|
.map((entry) => (
|
|
<div key={entry.id} className="surface">
|
|
<span className="text-amber-400">{entry.ts ? new Date(entry.ts).toLocaleTimeString() : '--'}</span>{' '}
|
|
{entry.label && <span className="text-teal-400">[{entry.label}]</span>}{' '}
|
|
<span className="text-slate-200">{entry.message}</span>{' '}
|
|
{entry.ip && <span className="text-cyan-300">{entry.ip}</span>}{' '}
|
|
{entry.meta && <span className="text-slate-500">{JSON.stringify(entry.meta)}</span>}
|
|
</div>
|
|
))
|
|
)}
|
|
</div>
|
|
<p className="text-xs text-slate-500">Admin-only log stream; IPs never appear in user data.</p>
|
|
</div>
|
|
);
|
|
}
|