import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import React, { useCallback } from 'react'; import { useParams } from 'react-router-dom'; import { useServerLog } from 'apps/dashboard/features/logs/api/useServerLog'; import { Alert, Box, Button, ButtonGroup, Card, CardContent, Container, Typography } from '@mui/material'; import { ContentCopy, FileDownload } from '@mui/icons-material'; import globalize from 'lib/globalize'; export const Component = () => { const { file: fileName } = useParams(); const { isError: error, isPending: loading, data: log, refetch } = useServerLog(fileName ?? ''); const retry = useCallback(() => refetch(), [refetch]); const copyToClipboard = useCallback(async () => { if ('clipboard' in navigator && log) { await navigator.clipboard.writeText(log); } }, [log]); const downloadFile = useCallback(() => { if ('URL' in globalThis && log && fileName) { const blob = new Blob([log], { type: 'text/plain' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = fileName; a.click(); URL.revokeObjectURL(url); } }, [log, fileName]); return ( {fileName} {error && ( Retry } > {globalize.translate('LogLoadFailure')} )} {loading && } {!error && !loading && ( <>
{log}
)}
); }; Component.displayName = 'LogPage';