SuperGradio / frontend /src /LogPanel.js
hadinicknam's picture
replace the logo , Add an option for HF_TOKEN
fe90915
import React, { useContext, useEffect, useRef, useState } from 'react';
import { LogContext } from './LogContext';
import './LogPanel.css';
const LogPanel = () => {
const { logs } = useContext(LogContext);
const panelRef = useRef(null);
const [isMinimized, setIsMinimized] = useState(false);
// Auto-scroll to the bottom when new logs arrive
useEffect(() => {
if (panelRef.current && !isMinimized) {
panelRef.current.scrollTop = panelRef.current.scrollHeight;
}
}, [logs, isMinimized]);
const getLogLevelClass = (level) => {
switch (level) {
case 'ERROR':
return 'log-error';
case 'SUCCESS':
return 'log-success';
case 'WARN':
return 'log-warn';
default:
return 'log-info';
}
};
const toggleMinimize = () => {
setIsMinimized(!isMinimized);
};
return (
<div className={`log-panel ${isMinimized ? 'minimized' : ''}`} ref={panelRef}>
<div className="log-header">
<span>Application Logs</span>
<button className="log-minimize-btn" onClick={toggleMinimize}>
{isMinimized ? '▲' : '▼'}
</button>
</div>
<div className="log-content">
{logs.map((log, index) => (
<div key={index} className={`log-entry ${getLogLevelClass(log.level)}`}>
<span className="log-timestamp">{new Date(log.timestamp).toLocaleTimeString()}</span>
<span className="log-level">{log.level}</span>
<span className="log-message">{log.message}</span>
</div>
))}
</div>
</div>
);
};
export default LogPanel;