Files
ontime/apps/client/src/views/timer/useTimerData.ts
T
Carlos Valente 48c76947c5 refactor(rundown): bind each surface to its data source
Editable panels now share a rundown scope for data, selection, and mutations; runtime-only views resolve the loaded rundown explicitly. This also prevents stale data while switching scopes and provides the Operator editor with its mutation scope.
2026-09-13 20:23:53 +02:00

50 lines
1.6 KiB
TypeScript

import { CustomFields, ProjectData, RundownEntries, Settings, ViewSettings } from 'ontime-types';
import useCustomFields from '../../common/hooks-query/useCustomFields';
import { useLoadedRundown } from '../../common/hooks-query/useLoadedRundown';
import useProjectData from '../../common/hooks-query/useProjectData';
import useSettings from '../../common/hooks-query/useSettings';
import useViewSettings from '../../common/hooks-query/useViewSettings';
import { useViewOptionsStore } from '../../common/stores/viewOptions';
import { ViewData, aggregateQueryStatus } from '../utils/viewLoader.utils';
export interface TimerData {
customFields: CustomFields;
projectData: ProjectData;
isMirrored: boolean;
settings: Settings;
viewSettings: ViewSettings;
entries: RundownEntries;
}
export function useTimerData(): ViewData<TimerData> {
// persisted app state
const isMirrored = useViewOptionsStore((state) => state.mirror);
// HTTP API data
const { data: projectData, status: projectDataStatus } = useProjectData();
const { data: viewSettings, status: viewSettingsStatus } = useViewSettings();
const { data: settings, status: settingsStatus } = useSettings();
const { data: customFields, status: customFieldsStatus } = useCustomFields();
const { data: rundown, status: rundownStatus } = useLoadedRundown();
const { entries } = rundown;
return {
data: {
customFields,
projectData,
isMirrored,
settings,
viewSettings,
entries,
},
status: aggregateQueryStatus([
projectDataStatus,
viewSettingsStatus,
settingsStatus,
customFieldsStatus,
rundownStatus,
]),
};
}