diff --git a/src/app/iq/SubtaskDetails.tsx b/src/app/iq/SubtaskDetails.tsx index 5d1e381..7139a1a 100644 --- a/src/app/iq/SubtaskDetails.tsx +++ b/src/app/iq/SubtaskDetails.tsx @@ -6,6 +6,7 @@ import { Badge } from "@/app/shadcn_components/ui/badge"; import { ScrollArea } from "@/app/shadcn_components/ui/scroll-area"; import { Card } from "@/app/shadcn_components/ui/card"; import { Button } from "@/app/shadcn_components/ui/button"; +import { ChevronDown } from "lucide-react"; interface SubtaskDetailsProps { selectedTaskId: string; @@ -76,11 +77,131 @@ function CopyableCodeBlock({ ); } +interface ExpandedSubtask { + [key: string]: boolean; +} + +function ExpandableSubtaskTile({ + subtask, + index, + isExpanded, + onToggle, +}: { + subtask: SubTask; + index: number; + isExpanded: boolean; + onToggle: () => void; +}) { + return ( + + {/* Tile Header */} + + + {/* Expanded Content */} + {isExpanded && ( +
+ {/* Timeline */} + {(subtask.jobStarted || subtask.jobCompleted) && ( +
+ {subtask.jobStarted && ( +
+

Started

+

+ {new Date(subtask.jobStarted).toLocaleString()} +

+
+ )} + {subtask.jobCompleted && ( +
+

Completed

+

+ {new Date(subtask.jobCompleted).toLocaleString()} +

+
+ )} +
+ )} + + {/* Inputs */} + {subtask.inputs && ( + + )} + + {/* Outputs */} + {subtask.outputs && ( + + )} + + {/* Cloud Logs */} + {subtask.cloudLogsURL && ( +
+

+ Cloud Logs +

+ + {subtask.cloudLogsURL} + +
+ )} + + {/* Updated */} +

+ Updated: {new Date(subtask.updatedAt).toLocaleString()} +

+
+ )} +
+ ); +} + export default function SubtaskDetails({ selectedTaskId, subtasks, task, }: SubtaskDetailsProps) { + const [expandedSubtasks, setExpandedSubtasks] = useState({}); + + const toggleSubtask = (subtaskId: string) => { + setExpandedSubtasks((prev) => ({ + ...prev, + [subtaskId]: !prev[subtaskId], + })); + }; + return (
{/* Task Header */} @@ -149,84 +270,15 @@ export default function SubtaskDetails({
)} -
+
{subtasks.map((subtask, index) => ( - -
- {/* Header */} -
-
-

- Subtask {index + 1} -

- - {subtask.id} - -
- - {subtask.status} - -
- - {/* Timeline */} -
- {subtask.jobStarted && ( -
-

Started

-

- {new Date(subtask.jobStarted).toLocaleString()} -

-
- )} - {subtask.jobCompleted && ( -
-

Completed

-

- {new Date(subtask.jobCompleted).toLocaleString()} -

-
- )} -
- - {/* Inputs */} - {subtask.inputs && ( - - )} - - {/* Outputs */} - {subtask.outputs && ( - - )} - - {/* Cloud Logs */} - {subtask.cloudLogsURL && ( -
-

- Cloud Logs -

- - {subtask.cloudLogsURL} - -
- )} - - {/* Updated */} -

- Updated: {new Date(subtask.updatedAt).toLocaleString()} -

-
-
+ toggleSubtask(subtask.id)} + /> ))}