/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ import { CaseFileStatus } from '@aws/dea-app/lib/models/case-file-status'; import { Button, ColumnLayout, Container, ContentLayout, Header, SpaceBetween, Spinner, StatusIndicator, TextContent, } from '@cloudscape-design/components'; import { useState } from 'react'; import { getCaseFileAuditCSV, useGetCaseActions, useGetFileDetailsById } from '../../api/cases'; import { auditLogLabels, breadcrumbLabels, caseStatusLabels, commonLabels, fileDetailLabels, } from '../../common/labels'; import { useNotifications } from '../../context/NotificationsContext'; import { formatFileSize } from '../../helpers/fileHelper'; import { canDownloadCaseAudit } from '../../helpers/userActionSupport'; export interface FileDetailsBodyProps { readonly caseId: string; readonly fileId: string; } function FileDetailsBody(props: FileDetailsBodyProps): JSX.Element { const [auditDownloadInProgress, setAuditDownloadInProgress] = useState(false); const { data, isLoading } = useGetFileDetailsById(props.caseId, props.fileId); const userActions = useGetCaseActions(props.caseId); const { pushNotification } = useNotifications(); function getStatusIcon(status: string) { if (status == CaseFileStatus.ACTIVE) { return {caseStatusLabels.active}; } else { return {caseStatusLabels.inactive}; } } async function downloadCaseFileAuditHandler() { try { setAuditDownloadInProgress(true); try { const csv = await getCaseFileAuditCSV(props.caseId, props.fileId); const blob = new Blob([csv], { type: 'text/csv' }); const fileUrl = window.URL.createObjectURL(blob); const alink = document.createElement('a'); alink.href = fileUrl; alink.download = `${data?.fileName}_Audit_${new Date().toLocaleString()}`; alink.click(); } catch (e) { pushNotification('error', auditLogLabels.downloadCaseAuditFail(data?.fileName ?? 'file')); console.log(`failed to download case file audit for ${data?.fileName ?? 'unknown file'}`, e); } } finally { setAuditDownloadInProgress(false); } } if (isLoading) { return

{commonLabels.loadingLabel}

; } else { if (!data) { return

{commonLabels.notFoundLabel}

; } return (
{data.fileName}
} > } > {breadcrumbLabels.fileDetailsLabel} {auditDownloadInProgress ? : null} } >
{' '}
{fileDetailLabels.uploadDateLabel}

{data.created ? new Date(data.created).toLocaleString([], { year: 'numeric', month: 'long', day: 'numeric', }) : '-'}

{fileDetailLabels.fileSizeLabel}

{formatFileSize(data.fileSizeBytes)}

{commonLabels.description}

{data.details}

{commonLabels.statusLabel}

{getStatusIcon(data.status)}

{fileDetailLabels.shaHashLabel}

{data.sha256Hash}

); } } export default FileDetailsBody;