docuflow / src /components /document /SyncLogsPanel.tsx
Joedroid's picture
feat: add close buttons to Folder Sidebar, Sync Logs, AI Panel, and Live Preview
3720e61
Raw
History Blame Contribute Delete
1.62 kB
import React from "react";
import { SyncLog } from "../../types";
import { X } from "lucide-react";
interface SyncLogsPanelProps {
showLogs: boolean;
syncLogs: SyncLog[];
onClose?: () => void;
}
export default function SyncLogsPanel({
showLogs,
syncLogs,
onClose
}: SyncLogsPanelProps) {
if (!showLogs) return null;
return (
<div className="bg-[#15181E] border border-slate-800 rounded-xl p-4 space-y-3 shadow-md text-left">
<div className="flex items-center justify-between">
<span className="text-[10px] font-mono uppercase tracking-wider text-slate-500 block">Workspace Handshake Logs</span>
{onClose && (
<button
onClick={onClose}
className="p-0.5 text-slate-500 hover:text-white transition duration-150 cursor-pointer"
title="Hide Logs"
>
<X className="h-3 w-3" />
</button>
)}
</div>
<div className="bg-[#0F1115]/60 p-2.5 border border-slate-800 rounded-lg max-h-[140px] overflow-y-auto space-y-2 pr-1 scrollbar-thin">
{syncLogs.map((log) => (
<div key={log.id} className="text-[10px] leading-relaxed font-mono">
<span className="text-slate-600">[{log.timestamp.split("T")[1]?.slice(0, 8)}]</span>{" "}
<span className={
log.type === "success" ? "text-emerald-400" :
log.type === "error" ? "text-red-400" :
log.type === "sync" ? "text-blue-400" : "text-slate-400"
}>
{log.text}
</span>
</div>
))}
</div>
</div>
);
}