import * as React from 'react'; import SwipeableDrawer from '@mui/material/SwipeableDrawer'; import Typography from '@mui/material/Typography'; import Radio from '@mui/material/Radio'; import RadioGroup from '@mui/material/RadioGroup'; import { Button, TextField } from '@mui/material'; import FormControlLabel from '@mui/material/FormControlLabel'; import FormControl from '@mui/material/FormControl'; import FormLabel from '@mui/material/FormLabel'; import Highlight from 'react-highlight'; import { useCallback, useEffect, useRef, useState } from "react"; import { useSocketStore } from "../../context/socket"; import { useBrowserDimensionsStore } from "../../context/browserDimensions"; import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableCell from '@mui/material/TableCell'; import TableContainer from '@mui/material/TableContainer'; import TableHead from '@mui/material/TableHead'; import TableRow from '@mui/material/TableRow'; import Paper from '@mui/material/Paper'; import StorageIcon from '@mui/icons-material/Storage'; interface InterpretationLogProps { isOpen: boolean; setIsOpen: (isOpen: boolean) => void; } export const InterpretationLog: React.FC = ({ isOpen, setIsOpen }) => { const [log, setLog] = useState(''); const [selectedOption, setSelectedOption] = useState('10'); const [customValue, setCustomValue] = useState(''); const [tableData, setTableData] = useState([]); const logEndRef = useRef(null); const { width } = useBrowserDimensionsStore(); const { socket } = useSocketStore(); const toggleDrawer = (newOpen: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { if ( event.type === 'keydown' && ((event as React.KeyboardEvent).key === 'Tab' || (event as React.KeyboardEvent).key === 'Shift') ) { return; } setIsOpen(newOpen); }; const scrollLogToBottom = () => { if (logEndRef.current) { logEndRef.current.scrollIntoView({ behavior: "smooth" }); } }; const handleLog = useCallback((msg: string, date: boolean = true) => { if (!date) { setLog((prevState) => prevState + '\n' + msg); } else { setLog((prevState) => prevState + '\n' + `[${new Date().toLocaleString()}] ` + msg); } scrollLogToBottom(); }, [log, scrollLogToBottom]); const handleSerializableCallback = useCallback((data: any) => { setLog((prevState) => prevState + '\n' + '---------- Serializable output data received ----------' + '\n' + JSON.stringify(data, null, 2) + '\n' + '--------------------------------------------------'); // Set table data if (Array.isArray(data)) { setTableData(data); } scrollLogToBottom(); }, [log, scrollLogToBottom]); const handleBinaryCallback = useCallback(({ data, mimetype }: any) => { setLog((prevState) => prevState + '\n' + '---------- Binary output data received ----------' + '\n' + `mimetype: ${mimetype}` + '\n' + `data: ${JSON.stringify(data)}` + '\n' + '------------------------------------------------'); scrollLogToBottom(); }, [log, scrollLogToBottom]); const handleRadioChange = (event: React.ChangeEvent) => { setSelectedOption(event.target.value); }; const handleCustomValueChange = (event: React.ChangeEvent) => { setCustomValue(event.target.value); }; useEffect(() => { socket?.on('log', handleLog); socket?.on('serializableCallback', handleSerializableCallback); socket?.on('binaryCallback', handleBinaryCallback); return () => { socket?.off('log', handleLog); socket?.off('serializableCallback', handleSerializableCallback); socket?.off('binaryCallback', handleBinaryCallback); }; }, [socket, handleLog, handleSerializableCallback, handleBinaryCallback]); // Extract columns dynamically from the first item of tableData const columns = tableData.length > 0 ? Object.keys(tableData[0]) : []; return (
Output Data Preview
{/* {log} */} {tableData.length > 0 && ( {columns.map((column) => ( {column} ))} {tableData.map((row, index) => ( {columns.map((column) => ( {row[column]} ))} ))}
)}

What is the maximum number of rows you want to extract?

} label="10" /> } label="100" /> } label="Custom" /> {selectedOption === 'custom' && ( )}

How can we find the next item?

Select and review the pagination setting this webpage is using

); }