mirror of
https://litchi.icu/ngc2207/judge.git
synced 2025-05-18 22:46:45 +00:00
feat(playground): extend runCode function to include output in message props and update terminal components for output display
This commit is contained in:
parent
f20fbabba4
commit
dbfcc8dfce
@ -107,7 +107,7 @@ function mapResultTypeToMessageType(type: ResultType): MessageType {
|
|||||||
export async function runCode(
|
export async function runCode(
|
||||||
language: string,
|
language: string,
|
||||||
code: string
|
code: string
|
||||||
): Promise<MessageProps> {
|
): Promise<MessageProps & { output: string }> {
|
||||||
const docker = new Dockerode({ socketPath: "/var/run/docker.sock" });
|
const docker = new Dockerode({ socketPath: "/var/run/docker.sock" });
|
||||||
const imageGCC = "gcc:latest";
|
const imageGCC = "gcc:latest";
|
||||||
let container: Dockerode.Container | undefined;
|
let container: Dockerode.Container | undefined;
|
||||||
@ -126,6 +126,7 @@ export async function runCode(
|
|||||||
return {
|
return {
|
||||||
type: mapResultTypeToMessageType(result.type),
|
type: mapResultTypeToMessageType(result.type),
|
||||||
message: result.message,
|
message: result.message,
|
||||||
|
output: result.output,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`不支持的语言: ${language}`);
|
throw new Error(`不支持的语言: ${language}`);
|
||||||
@ -135,6 +136,7 @@ export async function runCode(
|
|||||||
return {
|
return {
|
||||||
type: "error",
|
type: "error",
|
||||||
message: error instanceof Error ? error.message : "未知错误",
|
message: error instanceof Error ? error.message : "未知错误",
|
||||||
|
output: "",
|
||||||
};
|
};
|
||||||
} finally {
|
} finally {
|
||||||
if (container) {
|
if (container) {
|
||||||
|
@ -8,7 +8,7 @@ import { useTerminalStore } from "@/store/useTerminalStore";
|
|||||||
|
|
||||||
export default function Run() {
|
export default function Run() {
|
||||||
const { language, code } = useEditorStore();
|
const { language, code } = useEditorStore();
|
||||||
const { setType, setMessage } = useTerminalStore();
|
const { setType, setMessage, setOutput } = useTerminalStore();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="inline-flex -space-x-px rounded-lg shadow-sm shadow-black/5 rtl:space-x-reverse">
|
<div className="inline-flex -space-x-px rounded-lg shadow-sm shadow-black/5 rtl:space-x-reverse">
|
||||||
@ -20,6 +20,7 @@ export default function Run() {
|
|||||||
const result = runCode(language, code);
|
const result = runCode(language, code);
|
||||||
setType((await result).type);
|
setType((await result).type);
|
||||||
setMessage((await result).message);
|
setMessage((await result).message);
|
||||||
|
setOutput((await result).output);
|
||||||
} else {
|
} else {
|
||||||
console.error("Language or code is null");
|
console.error("Language or code is null");
|
||||||
}
|
}
|
||||||
|
@ -48,15 +48,15 @@ export default function Terminal() {
|
|||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
</TabsList>
|
</TabsList>
|
||||||
<div className="grow rounded-lg border border-border text-start bg-[#3e4452]">
|
<div className="grow rounded-lg border border-border text-start bg-[#3e4452]">
|
||||||
<TabsContent value="terminal">
|
<TabsContent value="terminal" className="h-full">
|
||||||
<Result />
|
<Result />
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
<TabsContent value="comment">
|
<TabsContent value="comment" className="h-full">
|
||||||
<p className="px-4 py-1.5 text-xs text-muted-foreground">
|
<p className="px-4 py-1.5 text-xs text-muted-foreground">
|
||||||
Content for Tab 2
|
Content for Tab 2
|
||||||
</p>
|
</p>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
<TabsContent value="case">
|
<TabsContent value="case" className="h-full">
|
||||||
<p className="px-4 py-1.5 text-xs text-muted-foreground">
|
<p className="px-4 py-1.5 text-xs text-muted-foreground">
|
||||||
Content for Tab 3
|
Content for Tab 3
|
||||||
</p>
|
</p>
|
||||||
|
@ -1,9 +1,21 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { Message } from "./components/message";
|
import { Message } from "./components/message";
|
||||||
|
import { ScrollArea } from "@/components/ui/scroll-area";
|
||||||
import { useTerminalStore } from "@/store/useTerminalStore";
|
import { useTerminalStore } from "@/store/useTerminalStore";
|
||||||
|
|
||||||
export default function ResultPage() {
|
export default function ResultPage() {
|
||||||
const { type, message } = useTerminalStore();
|
const { type, message, output } = useTerminalStore();
|
||||||
return <>{type && message && <Message type={type} message={message} />}</>;
|
return (
|
||||||
|
<>
|
||||||
|
{type && message && (
|
||||||
|
<ScrollArea className="h-full bg-[#3e4452]">
|
||||||
|
<Message type={type} message={message} />
|
||||||
|
{output && (
|
||||||
|
<pre className="flex-grow px-4 text-sm text-white">{output}</pre>
|
||||||
|
)}
|
||||||
|
</ScrollArea>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import { TerminalState } from "@/types/terminal";
|
|||||||
export const useTerminalStore = create<TerminalState>((set) => ({
|
export const useTerminalStore = create<TerminalState>((set) => ({
|
||||||
type: null,
|
type: null,
|
||||||
message: null,
|
message: null,
|
||||||
|
output: null,
|
||||||
setType: (type) => set({ type }),
|
setType: (type) => set({ type }),
|
||||||
setMessage: (message) => set({ message }),
|
setMessage: (message) => set({ message }),
|
||||||
|
setOutput: (output) => set({ output }),
|
||||||
}));
|
}));
|
||||||
|
@ -3,6 +3,8 @@ import { MessageType } from "@/app/playground/layout/terminal/components/message
|
|||||||
export interface TerminalState {
|
export interface TerminalState {
|
||||||
type: MessageType | null;
|
type: MessageType | null;
|
||||||
message: string | null;
|
message: string | null;
|
||||||
|
output: string | null;
|
||||||
setType: (type: MessageType) => void;
|
setType: (type: MessageType) => void;
|
||||||
setMessage: (message: string) => void;
|
setMessage: (message: string) => void;
|
||||||
|
setOutput: (output: string) => void;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user