From 535717fa90a749519c6d7ebb59c372af355ad539 Mon Sep 17 00:00:00 2001 From: alex-arc Date: Sun, 26 Jul 2026 16:07:13 +0200 Subject: [PATCH] the rundown title list should also folow the runown selection --- .../common/hooks-query/useContextRundown.ts | 24 +++++- apps/client/src/views/editor/Editor.tsx | 78 ++++++++++--------- .../src/views/editor/title-list/TitleList.tsx | 4 +- 3 files changed, 68 insertions(+), 38 deletions(-) diff --git a/apps/client/src/common/hooks-query/useContextRundown.ts b/apps/client/src/common/hooks-query/useContextRundown.ts index 0dfb3b69d..be8a17b55 100644 --- a/apps/client/src/common/hooks-query/useContextRundown.ts +++ b/apps/client/src/common/hooks-query/useContextRundown.ts @@ -1,8 +1,9 @@ +import { isOntimeEvent, OntimeEvent } from 'ontime-types'; import { useMemo } from 'react'; import { useRundownSelectionContext } from '../context/RundownSelectionContext'; import { useSelectedEventId } from '../hooks/useSocket'; -import { getFlatRundownMetadata, getRundownMetadata } from '../utils/rundownMetadata'; +import { ExtendedEntry, getFlatRundownMetadata, getRundownMetadata } from '../utils/rundownMetadata'; import { useFlatRundown, useRundown } from './useRundown'; export function useContextRundownEditModal() { @@ -42,6 +43,27 @@ export function useContextRundownList() { ); } +export function useContextRundownTitleList() { + 'use memo'; + const { effectiveRundownId, isLoadedRundown } = useRundownSelectionContext(); + const loadedEventId = useSelectedEventId(); + const effectiveSelectedEventId = isLoadedRundown ? loadedEventId : null; + const { data: rundown, status } = useRundown(effectiveRundownId); + const flatRundown = useMemo(() => { + const flatData = getFlatRundownMetadata(rundown, effectiveSelectedEventId); + return flatData.filter(isOntimeEvent) as ExtendedEntry[]; + }, [effectiveSelectedEventId, rundown]); + + return useMemo( + () => ({ + flatRundown, + status, + isLoadedRundown, + }), + [status, isLoadedRundown, flatRundown], + ); +} + export function useContextRundownTable() { 'use memo'; const { effectiveRundownId, isLoadedRundown } = useRundownSelectionContext(); diff --git a/apps/client/src/views/editor/Editor.tsx b/apps/client/src/views/editor/Editor.tsx index 66d848c65..4d2a83c6b 100644 --- a/apps/client/src/views/editor/Editor.tsx +++ b/apps/client/src/views/editor/Editor.tsx @@ -1,5 +1,6 @@ import { lazy } from 'react'; +import { RundownSelectionContextProvider } from '../../common/context/RundownSelectionContext'; import TrackingPlaybackBar from '../../features/control/playback/tracking-playback-bar/TrackingPlaybackBar'; import { AppMode } from '../../ontimeConfig'; import TitleList from './title-list/TitleList'; @@ -14,44 +15,51 @@ const MessageControl = lazy(() => import('../../features/control/message/Message export default function Editor() { const { layoutMode } = useEditorLayout(); - if (layoutMode === EditorLayoutMode.CONTROL) { - return ( -
-
- - -
- -
- ); - } - - if (layoutMode === EditorLayoutMode.TRACKING) { - return ( -
-
-
- + switch (layoutMode) { + case EditorLayoutMode.TRACKING: { + return ( +
+
+
+ + + +
+
+ +
-
- + +
+ ); + } + case EditorLayoutMode.PLANNING: { + return ( +
+
+
+ + + +
+
+ +
- -
- ); - } - - return ( -
-
-
- -
-
+ ); + } + case EditorLayoutMode.CONTROL: + default: { + return ( +
+
+ + +
-
-
- ); + ); + } + } } diff --git a/apps/client/src/views/editor/title-list/TitleList.tsx b/apps/client/src/views/editor/title-list/TitleList.tsx index 8f2abd894..17b3d3385 100644 --- a/apps/client/src/views/editor/title-list/TitleList.tsx +++ b/apps/client/src/views/editor/title-list/TitleList.tsx @@ -3,7 +3,7 @@ import { useCallback, useEffect, useMemo, useRef } from 'react'; import { Virtuoso, VirtuosoHandle } from 'react-virtuoso'; import ScrollArea from '../../../common/components/scroll-area/ScrollArea'; -import { useRundown } from '../../../common/hooks-query/useRundown'; +import { useContextRundownList } from '../../../common/hooks-query/useContextRundown'; import { useSelectedEventId } from '../../../common/hooks/useSocket'; import { ExtendedEntry, getFlatRundownMetadata } from '../../../common/utils/rundownMetadata'; import { useEventSelection } from '../../../features/rundown/useEventSelection'; @@ -20,7 +20,7 @@ interface TitleListProps { } export default function TitleList({ mode }: TitleListProps) { - const { data: rundown } = useRundown(null); + const { rundown } = useContextRundownList(); const selectedEventId = useSelectedEventId(); const cursor = useEventSelection((state) => state.cursor);