Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | 18x 18x 18x 4x 18x 3x 3x 3x 1x 1x 1x 2x 2x 2x 1x 18x 1x 18x 1x 18x 18x | import { useCallback } from "react";
import { useOutputPanel } from "@/hooks/use-output-panel";
import type { ParserMessage } from "@shared/schema";
interface UseSimulatorOutputPanelProps {
hasCompilationErrors: boolean;
cliOutput: string;
parserMessages: ParserMessage[];
lastCompilationResult: string | null;
parserMessagesContainerRef: React.RefObject<HTMLDivElement>;
showCompilationOutput: boolean;
setShowCompilationOutput: (show: boolean | ((prev: boolean) => boolean)) => void;
setParserPanelDismissed: (dismissed: boolean) => void;
setActiveOutputTab: (tab: "compiler" | "messages" | "registry" | "debug") => void;
code: string;
}
export function useSimulatorOutputPanel({
hasCompilationErrors,
cliOutput,
parserMessages,
lastCompilationResult,
parserMessagesContainerRef,
showCompilationOutput,
setShowCompilationOutput,
setParserPanelDismissed,
setActiveOutputTab,
code,
}: UseSimulatorOutputPanelProps) {
const compilationState: "success" | "error" | null =
lastCompilationResult === "success" || lastCompilationResult === "error"
? lastCompilationResult
: null;
const {
outputPanelRef,
outputTabsHeaderRef,
compilationPanelSize,
setCompilationPanelSize,
outputPanelMinPercent,
outputPanelManuallyResizedRef,
openOutputPanel,
} = useOutputPanel(
hasCompilationErrors,
cliOutput,
parserMessages,
compilationState,
parserMessagesContainerRef,
{ showCompilationOutput, setShowCompilationOutput, setParserPanelDismissed, setActiveOutputTab },
code,
);
const handleOutputTabChange = useCallback(
(v: "compiler" | "messages" | "registry" | "debug") => {
setActiveOutputTab(v);
},
[setActiveOutputTab],
);
const handleOutputCloseOrMinimize = useCallback(() => {
const currentSize = outputPanelRef.current?.getSize?.() ?? 0;
const isMinimized = currentSize <= outputPanelMinPercent + 1;
if (isMinimized) {
setShowCompilationOutput(false);
setParserPanelDismissed(true);
outputPanelManuallyResizedRef.current = false;
} else {
setCompilationPanelSize(3);
outputPanelManuallyResizedRef.current = false;
if (outputPanelRef.current?.resize) {
outputPanelRef.current.resize(outputPanelMinPercent);
}
}
}, [
outputPanelMinPercent,
setShowCompilationOutput,
setParserPanelDismissed,
setCompilationPanelSize,
]);
const handleParserMessagesClear = useCallback(
() => setParserPanelDismissed(true),
[setParserPanelDismissed],
);
const handleParserGoToLine = useCallback((line: number) => {
// Handled by editor ref logic in parent
console.debug(`Go to line: ${line}`);
}, []);
const handleRegistryClear = useCallback(() => {
// No-op for now
}, []);
return {
outputPanelRef,
outputTabsHeaderRef,
compilationPanelSize,
setCompilationPanelSize,
outputPanelMinPercent,
outputPanelManuallyResizedRef,
openOutputPanel,
handleOutputTabChange,
handleOutputCloseOrMinimize,
handleParserMessagesClear,
handleParserGoToLine,
handleRegistryClear,
};
}
|