mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-13 19:33:46 +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>
66 lines
1.5 KiB
TypeScript
66 lines
1.5 KiB
TypeScript
import { OntimeReport, OntimeEventReport, TimerLifeCycle } from 'ontime-types';
|
|
import { RuntimeState } from '../../stores/runtimeState.js';
|
|
import { sendRefetch } from '../../adapters/websocketAux.js';
|
|
import { DeepReadonly } from 'ts-essentials';
|
|
|
|
const report = new Map<string, OntimeEventReport>();
|
|
|
|
let formattedReport: OntimeReport | null = null;
|
|
|
|
/**
|
|
* generates a full report
|
|
* @returns full report
|
|
*/
|
|
export function generate(): OntimeReport {
|
|
if (formattedReport === null) {
|
|
formattedReport = Object.fromEntries(report);
|
|
}
|
|
return formattedReport;
|
|
}
|
|
|
|
/**
|
|
* clear report
|
|
* @param id optional id of a event report to clear
|
|
*/
|
|
export function clear(id?: string) {
|
|
formattedReport = null;
|
|
if (id) {
|
|
report.delete(id);
|
|
} else {
|
|
report.clear();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* trigger report entry
|
|
* @param cycle
|
|
* @param state
|
|
* @returns
|
|
*/
|
|
export function triggerReportEntry(
|
|
cycle: TimerLifeCycle.onStart | TimerLifeCycle.onStop,
|
|
state: DeepReadonly<RuntimeState>,
|
|
) {
|
|
if (!state.eventNow?.id) {
|
|
return;
|
|
}
|
|
|
|
const eventId = state.eventNow.id;
|
|
|
|
if (cycle === TimerLifeCycle.onStart) {
|
|
report.set(eventId, { startedAt: state.timer.startedAt, endedAt: null });
|
|
formattedReport = null;
|
|
return;
|
|
}
|
|
|
|
if (cycle === TimerLifeCycle.onStop) {
|
|
const startedAt = report.get(eventId)?.startedAt ?? null;
|
|
report.set(eventId, { startedAt, endedAt: state.clock });
|
|
formattedReport = null;
|
|
sendRefetch({
|
|
target: 'REPORT',
|
|
});
|
|
return;
|
|
}
|
|
}
|