diff --git a/web/src/App.tsx b/web/src/App.tsx index 098bbf2..70258a5 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -487,6 +487,24 @@ export default function App() { return "New search"; }, [draftKind, selectedChat, selectedChatSummary, selectedItem, selectedSearch, selectedSearchSummary]); + const pageTitle = useMemo(() => { + if (draftKind || !selectedItem) return "Sybil"; + if (selectedItem.kind === "chat") { + if (selectedChat) return `${getChatTitle(selectedChat, selectedChat.messages)} — Sybil`; + if (selectedChatSummary) return `${getChatTitle(selectedChatSummary)} — Sybil`; + return "Sybil"; + } + const searchQuery = selectedSearch?.query?.trim() || selectedSearchSummary?.query?.trim(); + if (searchQuery) return `${searchQuery} — Sybil`; + if (selectedSearch) return `${getSearchTitle(selectedSearch)} — Sybil`; + if (selectedSearchSummary) return `${getSearchTitle(selectedSearchSummary)} — Sybil`; + return "Sybil"; + }, [draftKind, selectedChat, selectedChatSummary, selectedItem, selectedSearch, selectedSearchSummary]); + + useEffect(() => { + document.title = pageTitle; + }, [pageTitle]); + const handleCreateChat = () => { setError(null); setContextMenu(null); diff --git a/web/src/pages/search-route-page.tsx b/web/src/pages/search-route-page.tsx index 2b274ab..a3b660b 100644 --- a/web/src/pages/search-route-page.tsx +++ b/web/src/pages/search-route-page.tsx @@ -53,6 +53,16 @@ export default function SearchRoutePage() { return () => window.removeEventListener("popstate", onPopState); }, []); + useEffect(() => { + document.title = routeQuery ? `${routeQuery} — Sybil` : "Sybil"; + }, [routeQuery]); + + useEffect(() => { + return () => { + document.title = "Sybil"; + }; + }, []); + useEffect(() => { return () => { streamAbortRef.current?.abort();