// Copyright (c) 2025 Bytedance Ltd. and/or its affiliates // SPDX-License-Identifier: MIT import { useEffect, useRef, useState } from "react"; import { useReplay } from "../replay"; import { fetchReplayTitle } from "./chat"; export function useReplayMetadata() { const { isReplay } = useReplay(); const [title, setTitle] = useState(null); const isLoading = useRef(false); const [error, setError] = useState(false); useEffect(() => { if (!isReplay) { return; } if (title || isLoading.current) { return; } isLoading.current = true; fetchReplayTitle() .then((title) => { setError(false); setTitle(title ?? null); if (title) { document.title = `${title} - DeerFlow`; } }) .catch(() => { setError(true); setTitle("Error: the replay is not available."); document.title = "DeerFlow"; }) .finally(() => { isLoading.current = false; }); }, [isLoading, isReplay, title]); return { title, isLoading, hasError: error }; }