diff --git a/web/src/components/CopyButton.tsx b/web/src/components/CopyButton.tsx
index 049574f..1c54de5 100644
--- a/web/src/components/CopyButton.tsx
+++ b/web/src/components/CopyButton.tsx
@@ -7,10 +7,12 @@ import { toast } from "sonner";
export function CopyButton({
className,
+ children,
...props
}: {
text: string;
className?: string;
+ children?: React.ReactNode;
}) {
return (
);
}
diff --git a/web/src/components/LogsViewer.tsx b/web/src/components/LogsViewer.tsx
index b1e13b9..0ece1f8 100644
--- a/web/src/components/LogsViewer.tsx
+++ b/web/src/components/LogsViewer.tsx
@@ -1,6 +1,7 @@
"use client";
import React, { useEffect, useRef } from "react";
+import { toast } from "sonner";
export type LogsType = {
machine_id?: string;
@@ -36,10 +37,24 @@ export function LogsViewer({ logs }: { logs: LogsType }) {
}
container.current = ref;
}}
- className="flex flex-col text-xs p-2 overflow-y-scroll max-h-[400px] whitespace-break-spaces"
+ className="flex flex-col text-xs p-2 overflow-y-scroll whitespace-break-spaces"
>
{logs.map((x, i) => (
-
{x.logs}
+ {
+ toast.success("Copied to clipboard");
+ navigator.clipboard.writeText(x.logs);
+ }}
+ >
+
+ {new Date(x.timestamp).toLocaleString()}
+
+
+ {/* Display timestamp */}
+
{x.logs}
+
))}
);
diff --git a/web/src/components/RunDisplay.tsx b/web/src/components/RunDisplay.tsx
index 79e7624..022d86d 100644
--- a/web/src/components/RunDisplay.tsx
+++ b/web/src/components/RunDisplay.tsx
@@ -3,8 +3,10 @@ import { RunOutputs } from "@/components/RunOutputs";
import { Badge } from "@/components/ui/badge";
import {
Dialog,
+ DialogClose,
DialogContent,
DialogDescription,
+ DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
@@ -20,6 +22,8 @@ import { type findAllRuns } from "@/server/findAllRuns";
import { Suspense } from "react";
import { LiveStatus } from "./LiveStatus";
import { LogsType, LogsViewer } from "@/components/LogsViewer";
+import { Button } from "@/components/ui/button";
+import { Edit, ExternalLink } from "lucide-react";
export async function RunDisplay({
run,
@@ -75,8 +79,7 @@ export async function RunDisplay({
-
- {run.run_log && }
+
{/* {view}
*/}
diff --git a/web/src/components/RunOutputs.tsx b/web/src/components/RunOutputs.tsx
index f65e4a9..14523cb 100644
--- a/web/src/components/RunOutputs.tsx
+++ b/web/src/components/RunOutputs.tsx
@@ -1,3 +1,13 @@
+import {
+ Dialog,
+ DialogClose,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+ DialogTrigger,
+} from "@/components/ui/dialog";
import { OutputRender } from "./OutputRender";
import { CodeBlock } from "@/components/CodeBlock";
import {
@@ -8,10 +18,17 @@ import {
TableHeader,
TableRow,
} from "@/components/ui/table";
+import type { findAllRuns } from "@/server/findAllRuns";
import { getRunsOutput } from "@/server/getRunsOutput";
+import { Button } from "@/components/ui/button";
+import { ExternalLink } from "lucide-react";
+import { LogsViewer } from "@/components/LogsViewer";
+import { CopyButton } from "@/components/CopyButton";
-export async function RunOutputs({ run_id }: { run_id: string }) {
- const outputs = await getRunsOutput(run_id);
+export async function RunOutputs({
+ run,
+}: { run: Awaited>[0] }) {
+ const outputs = await getRunsOutput(run.id);
return (
@@ -21,6 +38,42 @@ export async function RunOutputs({ run_id }: { run_id: string }) {
+
+ Run log
+
+ {run.run_log ? (
+
+ ) : (
+ "No log available"
+ )}
+
+
+
{outputs?.map((run) => {
const fileName =
run.data.images?.[0].filename ||
@@ -45,7 +98,7 @@ export async function RunOutputs({ run_id }: { run_id: string }) {
{fileName}
-
+
);
diff --git a/web/src/server/getRunsOutput.tsx b/web/src/server/getRunsOutput.tsx
index e76ef7b..785a580 100644
--- a/web/src/server/getRunsOutput.tsx
+++ b/web/src/server/getRunsOutput.tsx
@@ -5,9 +5,9 @@ import { db } from "@/db/db";
import { workflowRunOutputs } from "@/db/schema";
import { eq } from "drizzle-orm";
-export async function getRunsOutputDisplay(run_id: string) {
- return ;
-}
+// export async function getRunsOutputDisplay(run_id: string) {
+// return ;
+// }
export async function getRunsOutput(run_id: string) {
// throw new Error("Not implemented");