Show latest message in console header (when closed)

This commit is contained in:
Will Chen
2025-04-18 14:29:58 -07:00
parent 0ca1b58005
commit 06869fb745

View File

@@ -1,5 +1,6 @@
import { useAtom, useAtomValue } from "jotai"; import { useAtom, useAtomValue } from "jotai";
import { import {
appOutputAtom,
previewModeAtom, previewModeAtom,
previewPanelKeyAtom, previewPanelKeyAtom,
selectedAppIdAtom, selectedAppIdAtom,
@@ -29,6 +30,12 @@ interface PreviewHeaderProps {
onRestart: () => void; onRestart: () => void;
} }
interface ConsoleHeaderProps {
isOpen: boolean;
onToggle: () => void;
latestMessage?: string;
}
// Preview Header component with preview mode toggle // Preview Header component with preview mode toggle
const PreviewHeader = ({ const PreviewHeader = ({
previewMode, previewMode,
@@ -81,16 +88,21 @@ const PreviewHeader = ({
const ConsoleHeader = ({ const ConsoleHeader = ({
isOpen, isOpen,
onToggle, onToggle,
}: { latestMessage,
isOpen: boolean; }: ConsoleHeaderProps) => (
onToggle: () => void;
}) => (
<div <div
onClick={onToggle} onClick={onToggle}
className="flex items-center gap-2 px-4 py-1.5 border-t border-border cursor-pointer hover:bg-[var(--background-darkest)] transition-colors" className="flex items-start gap-2 px-4 py-1.5 border-t border-border cursor-pointer hover:bg-[var(--background-darkest)] transition-colors"
> >
<Logs size={16} /> <Logs size={16} className="mt-0.5" />
<span className="text-sm font-medium">System Messages</span> <div className="flex flex-col">
<span className="text-sm font-medium">System Messages</span>
{!isOpen && latestMessage && (
<span className="text-xs text-gray-500 truncate max-w-[200px] md:max-w-[400px]">
{latestMessage}
</span>
)}
</div>
<div className="flex-1" /> <div className="flex-1" />
{isOpen ? <ChevronDown size={16} /> : <ChevronUp size={16} />} {isOpen ? <ChevronDown size={16} /> : <ChevronUp size={16} />}
</div> </div>
@@ -104,6 +116,11 @@ export function PreviewPanel() {
const { runApp, stopApp, restartApp, error, loading, app } = useRunApp(); const { runApp, stopApp, restartApp, error, loading, app } = useRunApp();
const runningAppIdRef = useRef<number | null>(null); const runningAppIdRef = useRef<number | null>(null);
const key = useAtomValue(previewPanelKeyAtom); const key = useAtomValue(previewPanelKeyAtom);
const appOutput = useAtomValue(appOutputAtom);
const messageCount = appOutput.length;
const latestMessage =
messageCount > 0 ? appOutput[messageCount - 1]?.message : undefined;
const handleRestart = useCallback(() => { const handleRestart = useCallback(() => {
restartApp(); restartApp();
@@ -183,6 +200,7 @@ export function PreviewPanel() {
<ConsoleHeader <ConsoleHeader
isOpen={true} isOpen={true}
onToggle={() => setIsConsoleOpen(false)} onToggle={() => setIsConsoleOpen(false)}
latestMessage={latestMessage}
/> />
<Console /> <Console />
</div> </div>
@@ -192,7 +210,11 @@ export function PreviewPanel() {
</PanelGroup> </PanelGroup>
</div> </div>
{!isConsoleOpen && ( {!isConsoleOpen && (
<ConsoleHeader isOpen={false} onToggle={() => setIsConsoleOpen(true)} /> <ConsoleHeader
isOpen={false}
onToggle={() => setIsConsoleOpen(true)}
latestMessage={latestMessage}
/>
)} )}
</div> </div>
); );