-
+
diff --git a/apps/fabro-web/app/routes/runs.tsx b/apps/fabro-web/app/routes/runs.tsx
index a9f0c2fe3..4113c42c1 100644
--- a/apps/fabro-web/app/routes/runs.tsx
+++ b/apps/fabro-web/app/routes/runs.tsx
@@ -1,6 +1,6 @@
import { useState, useCallback, useEffect, useRef } from "react";
import { Link, useRevalidator } from "react-router";
-import { ChevronDownIcon, ChevronRightIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline";
+import { ChevronDownIcon, ChevronRightIcon, CommandLineIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline";
import {
DndContext,
closestCenter,
@@ -510,6 +510,107 @@ function SortableRunRow({ run }: { run: RunWithStatus }) {
);
}
+function TerminalLine({ prompt, command }: { prompt: string; command: string }) {
+ return (
+
+ {prompt}
+ {command}
+
+ );
+}
+
+const GETTING_STARTED_COMMANDS = "fabro repo init && fabro run hello";
+
+function CopyButton({ text }: { text: string }) {
+ const [copied, setCopied] = useState(false);
+
+ function handleCopy() {
+ navigator.clipboard.writeText(text);
+ setCopied(true);
+ setTimeout(() => setCopied(false), 2000);
+ }
+
+ return (
+
+ );
+}
+
+function EmptyState() {
+ return (
+
+
+
+ Workflow runs will appear here as you run them.
+
+
+
+
+
+
+
+ );
+}
+
export default function Runs({ loaderData }: any) {
const initialColumns = loaderData.columns;
const allRepos = [
@@ -575,6 +676,8 @@ export default function Runs({ loaderData }: any) {
);
}, []);
+ const totalRuns = columns.reduce((sum, col) => sum + col.items.length, 0);
+
const filteredColumns = columns.map((col) => ({
...col,
items: col.items.filter(
@@ -639,53 +742,63 @@ export default function Runs({ loaderData }: any) {
- {filteredColumns.map((col) => {
- const isCollapsed = collapsed.has(col.id);
- return (
-
-
- {!isCollapsed && (col.items.length > 0 ? (
-
item.id)} strategy={verticalListSortingStrategy}>
-
- {col.items.map((item) => (
-
- ))}
-
-
- ) : (
-
No runs
- ))}
+ <>
+
+ {filteredColumns.map((col) => (
+
+
- );
- })}
-
+ ))}
+
+ {totalRuns === 0 && (
+
+ )}
+ >
+ ) : (
+ <>
+
+ {filteredColumns.map((col) => {
+ const isCollapsed = collapsed.has(col.id);
+ return (
+
+
+ {!isCollapsed && (col.items.length > 0 ? (
+
item.id)} strategy={verticalListSortingStrategy}>
+
+ {col.items.map((item) => (
+
+ ))}
+
+
+ ) : (
+
No runs
+ ))}
+
+ );
+ })}
+
+ {totalRuns === 0 && (
+
+ )}
+ >
)}