import React from 'react'; import useSocket from '../utility/SocketProvider'; import axios from '../utility/axios'; import styled from 'styled-components'; import TableControl, { TableColumn } from '../utility/TableControl'; import formatFileSize from '../utility/formatFileSize'; import resolveApi from '../utility/resolveApi'; import getElectron from '../utility/getElectron'; import ErrorInfo from '../widgets/ErrorInfo'; export default function RunnerOutputFiles({ runnerId, executeNumber }) { const socket = useSocket(); const [files, setFiles] = React.useState([]); const handleRunnerDone = React.useCallback(async () => { const resp = await axios.get(`runners/files?runid=${runnerId}`); setFiles(resp.data); }, [runnerId]); React.useEffect(() => { if (runnerId && socket) { socket.on(`runner-done-${runnerId}`, handleRunnerDone); return () => { socket.off(`runner-done-${runnerId}`, handleRunnerDone); }; } }, [runnerId, socket]); React.useEffect(() => { setFiles([]); }, [executeNumber]); const electron = getElectron(); if (!files || files.length == 0) { return ; } return ( formatFileSize(row.size)} /> {!electron && ( ( download )} /> )} {electron && ( ( { const file = electron.remote.dialog.showSaveDialogSync(electron.remote.getCurrentWindow(), {}); if (file) { const fs = window.require('fs'); fs.copyFile(row.path, file, () => {}); } }} > save )} /> )} {electron && ( ( { electron.remote.shell.showItemInFolder(row.path); }} > show )} /> )} ); }