import { useMemo } from 'react'; import { IoTrashBin } from 'react-icons/io5'; import { deleteAllReport } from '../../../../common/api/report'; import { createBlob, downloadBlob } from '../../../../common/api/utils'; import Button from '../../../../common/components/buttons/Button'; import useReport from '../../../../common/hooks-query/useReport'; import useRundown from '../../../../common/hooks-query/useRundown'; import { cx } from '../../../../common/utils/styleUtils'; import { formatTime } from '../../../../common/utils/time'; import * as Panel from '../../panel-utils/PanelUtils'; import { CombinedReport, getCombinedReport, makeReportCSV } from './reportSettings.utils'; import style from './ReportSettings.module.scss'; export default function ReportSettings() { const { data: reportData } = useReport(); const { data } = useRundown(); const clearReport = async () => await deleteAllReport(); const downloadCSV = (combinedReport: CombinedReport[]) => { if (!combinedReport) { return; } const csv = makeReportCSV(combinedReport); const blob = createBlob(csv, 'text/csv;charset=utf-8;'); downloadBlob(blob, 'ontime-report.csv'); }; const combinedReport = useMemo(() => { return getCombinedReport(reportData, data.entries, data.flatOrder); }, [reportData, data.entries, data.flatOrder]); return ( Report Manage report # Cue Title Scheduled Start Actual Start Scheduled End Actual End {combinedReport.length === 0 && ( )} {combinedReport.map((entry) => { const start = (() => { if (entry.actualStart === null) return null; if (entry.actualStart <= entry.scheduledStart) return 'under'; return 'over'; })(); const end = (() => { if (entry.actualEnd === null) return null; if (entry.actualEnd <= entry.scheduledEnd) return 'under'; return 'over'; })(); return ( {entry.index} {entry.cue} {entry.title} {formatTime(entry.scheduledStart)} {formatTime(entry.actualStart)} {formatTime(entry.scheduledEnd)} {formatTime(entry.actualEnd)} ); })} ); }