import { useEffect, useRef, useState } from "react"; import * as React from "react"; import TableRow from "@mui/material/TableRow"; import TableCell from "@mui/material/TableCell"; import { Box, Collapse, IconButton, Typography, Chip, TextField } from "@mui/material"; import { DeleteForever, KeyboardArrowDown, KeyboardArrowUp, Settings } from "@mui/icons-material"; import { deleteRunFromStorage } from "../../api/storage"; import { columns, Data } from "./RunsTable"; import { RunContent } from "./RunContent"; import { GenericModal } from "../atoms/GenericModal"; import { modalStyle } from "./AddWhereCondModal"; import { getUserById } from "../../api/auth"; interface RunTypeChipProps { runByUserId?: string; runByScheduledId?: string; runByAPI: boolean; } const RunTypeChip: React.FC = ({ runByUserId, runByScheduledId, runByAPI }) => { if (runByUserId) return ; if (runByScheduledId) return ; if (runByAPI) return ; return ; }; interface CollapsibleRowProps { row: Data; handleDelete: () => void; isOpen: boolean; currentLog: string; abortRunHandler: () => void; runningRecordingName: string; } export const CollapsibleRow = ({ row, handleDelete, isOpen, currentLog, abortRunHandler, runningRecordingName }: CollapsibleRowProps) => { const [open, setOpen] = useState(isOpen); const [openSettingsModal, setOpenSettingsModal] = useState(false); const [userEmail, setUserEmail] = useState(null); const runByLabel = row.runByUserId ? `${userEmail}` : row.runByScheduleId ? `${row.runByScheduleId}` : row.runByAPI ? 'API' : 'Unknown'; const logEndRef = useRef(null); const scrollToLogBottom = () => { if (logEndRef.current) { logEndRef.current.scrollIntoView({ behavior: "smooth" }); } } const handleAbort = () => { abortRunHandler(); } useEffect(() => { scrollToLogBottom(); }, [currentLog]) useEffect(() => { const fetchUserEmail = async () => { if (row.runByUserId) { const userData = await getUserById(row.runByUserId); if (userData && userData.user) { setUserEmail(userData.user.email); } } }; fetchUserEmail(); }, [row.runByUserId]); return ( *': { borderBottom: 'unset' } }} hover role="checkbox" tabIndex={-1} key={row.id}> { setOpen(!open); scrollToLogBottom(); }} > {open ? : } {columns.map((column) => { // @ts-ignore const value: any = row[column.id]; if (value !== undefined) { return ( {value} ); } else { switch (column.id) { case 'runStatus': return ( {row.status === 'success' && } {row.status === 'running' && } {row.status === 'scheduled' && } {row.status === 'failed' && } ) case 'delete': return ( { deleteRunFromStorage(`${row.runId}`).then((result: boolean) => { if (result) { handleDelete(); } }) }}> ); case 'settings': return ( setOpenSettingsModal(true)}> setOpenSettingsModal(false)} modalStyle={modalStyle} > <> Run Settings Run Type: ) default: return null; } } })} ); }