import React from "react"; import { observer } from "mobx-react"; import { IconAction } from "eez-studio-ui/action"; import { ProjectContext } from "project-editor/project/context"; import { dockerBuildState, PreviewLogType } from "./docker-build-state"; //////////////////////////////////////////////////////////////////////////////// export const PreviewLogsPanel = observer( class PreviewLogsPanel extends React.Component { static contextType = ProjectContext; declare context: React.ContextType; contentRef = React.createRef(); componentDidUpdate() { // Auto-scroll to bottom if (this.contentRef.current) { this.contentRef.current.scrollTop = this.contentRef.current.scrollHeight; } } get projectState() { return dockerBuildState.getProjectState(this.context?.filePath); } handleClear = () => { this.projectState.clearPreviewLogs(); }; getTypeClassName(type: PreviewLogType): string { switch (type) { case "error": return "EezStudio_PreviewLogsPanel_LogEntry_error"; case "warn": return "EezStudio_PreviewLogsPanel_LogEntry_warning"; case "info": return "EezStudio_PreviewLogsPanel_LogEntry_info"; case "debug": return "EezStudio_PreviewLogsPanel_LogEntry_debug"; default: return "EezStudio_PreviewLogsPanel_LogEntry_log"; } } render() { const projectState = this.projectState; return (
{projectState.previewLogs.map(log => (
{log.timestamp.toLocaleTimeString()} [{log.type.toUpperCase()}] {log.message}
))} {projectState.previewLogs.length === 0 && (
No logs yet.
)}
); } } );