diff --git a/src/components/robot/RecordingsTable.tsx b/src/components/robot/RecordingsTable.tsx
index 4bbcb6543..87327b7e9 100644
--- a/src/components/robot/RecordingsTable.tsx
+++ b/src/components/robot/RecordingsTable.tsx
@@ -11,7 +11,7 @@ import TableRow from '@mui/material/TableRow';
import { useEffect } from "react";
import { WorkflowFile } from "maxun-core";
import SearchIcon from '@mui/icons-material/Search';
-import { IconButton, Button, Box, Typography, TextField, MenuItem, Menu, ListItemIcon, ListItemText } from "@mui/material";
+import { IconButton, Button, Box, Typography, TextField, MenuItem, Menu, ListItemIcon, ListItemText, CircularProgress } from "@mui/material";
import { Schedule, DeleteForever, Edit, PlayCircle, Settings, Power, ContentCopy, MoreHoriz } from "@mui/icons-material";
import { useGlobalInfoStore } from "../../context/globalInfo";
import { checkRunsForRecording, deleteRecordingFromStorage, getStoredRecordings } from "../../api/storage";
@@ -200,101 +200,107 @@ export const RecordingsTable = ({ handleEditRecording, handleRunRecording, handl
-
-
-
-
- {columns.map((column) => (
-
- {column.label}
-
- ))}
-
-
-
- {filteredRows.length !== 0 ? filteredRows
- .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
- .map((row) => {
- return (
-
- {columns.map((column) => {
- // @ts-ignore
- const value: any = row[column.id];
- if (value !== undefined) {
- return (
-
- {value}
-
- );
- } else {
- switch (column.id) {
- case 'interpret':
- return (
-
- handleRunRecording(row.id, row.name, row.params || [])} />
-
- );
- case 'schedule':
- return (
-
- handleScheduleRecording(row.id, row.name, row.params || [])} />
-
- );
- case 'integrate':
- return (
-
- handleIntegrateRecording(row.id, row.name, row.params || [])} />
-
- );
- case 'options':
- return (
-
- handleEditRobot(row.id, row.name, row.params || [])}
- handleDuplicate={() => {
- handleDuplicateRobot(row.id, row.name, row.params || []);
- }}
- handleDelete={() => {
-
- checkRunsForRecording(row.id).then((result: boolean) => {
- if (result) {
- notify('warning', t('recordingtable.notifications.delete_warning'));
- }
- })
-
- deleteRecordingFromStorage(row.id).then((result: boolean) => {
- if (result) {
- setRows([]);
- notify('success', t('recordingtable.notifications.delete_success'));
- fetchRecordings();
- }
- })
- }}
- />
-
- );
- case 'settings':
- return (
-
- handleSettingsRecording(row.id, row.name, row.params || [])} />
-
- );
- default:
- return null;
+ {rows.length === 0 ? (
+
+
+
+ ) : (
+
+
+
+
+ {columns.map((column) => (
+
+ {column.label}
+
+ ))}
+
+
+
+ {filteredRows.length !== 0 ? filteredRows
+ .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
+ .map((row) => {
+ return (
+
+ {columns.map((column) => {
+ // @ts-ignore
+ const value: any = row[column.id];
+ if (value !== undefined) {
+ return (
+
+ {value}
+
+ );
+ } else {
+ switch (column.id) {
+ case 'interpret':
+ return (
+
+ handleRunRecording(row.id, row.name, row.params || [])} />
+
+ );
+ case 'schedule':
+ return (
+
+ handleScheduleRecording(row.id, row.name, row.params || [])} />
+
+ );
+ case 'integrate':
+ return (
+
+ handleIntegrateRecording(row.id, row.name, row.params || [])} />
+
+ );
+ case 'options':
+ return (
+
+ handleEditRobot(row.id, row.name, row.params || [])}
+ handleDuplicate={() => {
+ handleDuplicateRobot(row.id, row.name, row.params || []);
+ }}
+ handleDelete={() => {
+
+ checkRunsForRecording(row.id).then((result: boolean) => {
+ if (result) {
+ notify('warning', t('recordingtable.notifications.delete_warning'));
+ }
+ })
+
+ deleteRecordingFromStorage(row.id).then((result: boolean) => {
+ if (result) {
+ setRows([]);
+ notify('success', t('recordingtable.notifications.delete_success'));
+ fetchRecordings();
+ }
+ })
+ }}
+ />
+
+ );
+ case 'settings':
+ return (
+
+ handleSettingsRecording(row.id, row.name, row.params || [])} />
+
+ );
+ default:
+ return null;
+ }
}
- }
- })}
-
- );
- })
- : null}
-
-
-
+ })}
+
+ );
+ })
+ : null}
+
+
+
+ )}
= ({
const { t } = useTranslation();
const navigate = useNavigate();
- // Update column labels using translation if needed
const translatedColumns = columns.map(column => ({
...column,
label: t(`runstable.${column.id}`, column.label)
@@ -162,48 +160,54 @@ export const RunsTable: React.FC = ({
sx={{ width: '250px' }}
/>
-
- {Object.entries(groupedRows).map(([id, data]) => (
- handleAccordionChange(id, isExpanded)}>
- }>
- {data[data.length - 1].name}
-
-
-
-
-
-
- {translatedColumns.map((column) => (
-
- {column.label}
-
- ))}
-
-
-
- {data
- .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
- .map((row) => (
-
- ))}
-
-
-
-
- ))}
-
+ {rows.length === 0 ? (
+
+
+
+ ) : (
+
+ {Object.entries(groupedRows).map(([id, data]) => (
+ handleAccordionChange(id, isExpanded)}>
+ }>
+ {data[data.length - 1].name}
+
+
+
+
+
+
+ {translatedColumns.map((column) => (
+
+ {column.label}
+
+ ))}
+
+
+
+ {data
+ .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
+ .map((row) => (
+
+ ))}
+
+
+
+
+ ))}
+
+ )}