mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-17 05:13:32 +00:00
b6507c27a6
* create report service * write report from runtimeState * use in UI * clear report * update types * clear all from settings menu * rearence rightclik menu * refactor styling * also report roll events * ontime/under time is same colour * refactor reporter * add target to ontime-refetch * remove menu * fectch only on message from server * memo useGetEventReport * refactor * use staleTime * dont add to menu yet * implement review * clear all from menu * fix merge * start end show * combine test for the go button text and action * add report to menu * extract csv utility * report management * unneeded async * small refacort of triggerReportEntry --------- Co-authored-by: Carlos Valente <carlosvalente@pm.me>
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import { isOntimeEvent, MaybeNumber, NormalisedRundown, OntimeReport } from 'ontime-types';
|
|
|
|
import { makeCSVFromArrayOfArrays } from '../../../../common/utils/csv';
|
|
import { formatTime } from '../../../../common/utils/time';
|
|
|
|
export type CombinedReport = {
|
|
index: number;
|
|
title: string;
|
|
cue: string;
|
|
scheduledStart: number;
|
|
actualStart: MaybeNumber;
|
|
scheduledEnd: number;
|
|
actualEnd: MaybeNumber;
|
|
};
|
|
|
|
/**
|
|
* Creates a combined report with the rundown data
|
|
*/
|
|
export function getCombinedReport(report: OntimeReport, rundown: NormalisedRundown, order: string[]): CombinedReport[] {
|
|
if (Object.keys(report).length === 0) return [];
|
|
if (order.length === 0) return [];
|
|
|
|
const combinedReport: CombinedReport[] = [];
|
|
|
|
for (const [key, value] of Object.entries(report)) {
|
|
if (!rundown[key] || !isOntimeEvent(rundown[key])) continue;
|
|
|
|
combinedReport.push({
|
|
index: order.findIndex((id) => id === key),
|
|
title: rundown[key].title,
|
|
cue: rundown[key].cue,
|
|
scheduledStart: rundown[key].timeStart,
|
|
actualEnd: value.endedAt,
|
|
scheduledEnd: rundown[key].timeEnd,
|
|
actualStart: value.startedAt,
|
|
});
|
|
}
|
|
|
|
return combinedReport;
|
|
}
|
|
|
|
const csvHeader = ['Index', 'Title', 'Cue', 'Scheduled Start', 'Actual Start', 'Scheduled End', 'Actual End'];
|
|
|
|
/**
|
|
* Transforms a CombinedReport into a CSV string
|
|
*/
|
|
export function makeReportCSV(combinedReport: CombinedReport[]) {
|
|
const csv: string[][] = [];
|
|
csv.push(csvHeader);
|
|
|
|
for (const entry of combinedReport) {
|
|
csv.push([
|
|
String(entry.index),
|
|
entry.title,
|
|
entry.cue,
|
|
formatTime(entry.scheduledStart),
|
|
formatTime(entry.actualStart),
|
|
formatTime(entry.scheduledEnd),
|
|
formatTime(entry.actualEnd),
|
|
]);
|
|
}
|
|
|
|
return makeCSVFromArrayOfArrays(csv);
|
|
}
|