diff --git a/apps/client/src/common/api/rundown.ts b/apps/client/src/common/api/rundown.ts index 1bfe7db56..42852d1fa 100644 --- a/apps/client/src/common/api/rundown.ts +++ b/apps/client/src/common/api/rundown.ts @@ -21,7 +21,23 @@ export async function fetchProjectRundownList(): Promise { */ export async function fetchCurrentRundown(): Promise { const res = await axios.get(`${rundownPath}/current`); + if (!isValidRundown(res.data)) { + throw new Error('Invalid rundown payload'); + } return res.data; + + function isValidRundown(x: any): x is Rundown { + return ( + x && + typeof x === 'object' && + typeof x.id === 'string' && + Array.isArray(x.order) && + Array.isArray(x.flatOrder) && + x.entries && + typeof x.entries === 'object' && + typeof x.revision === 'number' + ); + } } /** diff --git a/apps/client/src/common/hooks-query/useRundown.ts b/apps/client/src/common/hooks-query/useRundown.ts index 4d95659b1..9124e4615 100644 --- a/apps/client/src/common/hooks-query/useRundown.ts +++ b/apps/client/src/common/hooks-query/useRundown.ts @@ -27,18 +27,10 @@ export default function useRundown() { const { data, status, isError, refetch, isFetching } = useQuery({ queryKey: RUNDOWN, queryFn: fetchCurrentRundown, - placeholderData: (previousData, _previousQuery) => previousData, refetchInterval: queryRefetchIntervalSlow, }); - const returnData = useMemo(() => { - if (data && Array.isArray(data.flatOrder)) { - return data; - } - return cachedRundownPlaceholder; - }, [data]); - - return { data: returnData, status, isError, refetch, isFetching }; + return { data: data ?? cachedRundownPlaceholder, status, isError, refetch, isFetching }; } export function useRundownWithMetadata() {