mirror of
https://gitee.com/wanwujie/deer-flow
synced 2026-04-19 04:14:46 +08:00
feat: dynamic title
This commit is contained in:
@@ -9,7 +9,7 @@ import { I18nProvider } from "@/core/i18n/context";
|
|||||||
import { detectLocaleServer } from "@/core/i18n/server";
|
import { detectLocaleServer } from "@/core/i18n/server";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Welcome to DeerFlow",
|
title: "DeerFlow",
|
||||||
description: "A LangChain-based framework for building super agents.",
|
description: "A LangChain-based framework for building super agents.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,26 @@ export default function ChatPage() {
|
|||||||
return result;
|
return result;
|
||||||
}, [thread, isNewThread]);
|
}, [thread, isNewThread]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const pageTitle = isNewThread
|
||||||
|
? t.pages.newChat
|
||||||
|
: thread.values?.title && thread.values.title !== "Untitled"
|
||||||
|
? thread.values.title
|
||||||
|
: t.pages.untitled;
|
||||||
|
if (thread.isThreadLoading) {
|
||||||
|
document.title = `Loading... - ${t.pages.appName}`;
|
||||||
|
} else {
|
||||||
|
document.title = `${pageTitle} - ${t.pages.appName}`;
|
||||||
|
}
|
||||||
|
}, [
|
||||||
|
isNewThread,
|
||||||
|
t.pages.newChat,
|
||||||
|
t.pages.untitled,
|
||||||
|
t.pages.appName,
|
||||||
|
thread.values.title,
|
||||||
|
thread.isThreadLoading,
|
||||||
|
]);
|
||||||
|
|
||||||
const [autoSelectFirstArtifact, setAutoSelectFirstArtifact] = useState(true);
|
const [autoSelectFirstArtifact, setAutoSelectFirstArtifact] = useState(true);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setArtifacts(thread.values.artifacts);
|
setArtifacts(thread.values.artifacts);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useMemo, useState } from "react";
|
import { useEffect, useMemo, useState } from "react";
|
||||||
|
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { ScrollArea } from "@/components/ui/scroll-area";
|
import { ScrollArea } from "@/components/ui/scroll-area";
|
||||||
@@ -19,6 +19,11 @@ export default function ChatsPage() {
|
|||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const { data: threads } = useThreads();
|
const { data: threads } = useThreads();
|
||||||
const [search, setSearch] = useState("");
|
const [search, setSearch] = useState("");
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = `${t.pages.chats} - ${t.pages.appName}`;
|
||||||
|
}, [t.pages.chats, t.pages.appName]);
|
||||||
|
|
||||||
const filteredThreads = useMemo(() => {
|
const filteredThreads = useMemo(() => {
|
||||||
return threads?.filter((thread) => {
|
return threads?.filter((thread) => {
|
||||||
return titleOfThread(thread).toLowerCase().includes(search.toLowerCase());
|
return titleOfThread(thread).toLowerCase().includes(search.toLowerCase());
|
||||||
|
|||||||
@@ -100,6 +100,14 @@ export const enUS: Translations = {
|
|||||||
searchChats: "Search chats",
|
searchChats: "Search chats",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Page titles (document title)
|
||||||
|
pages: {
|
||||||
|
appName: "DeerFlow",
|
||||||
|
chats: "Chats",
|
||||||
|
newChat: "New chat",
|
||||||
|
untitled: "Untitled",
|
||||||
|
},
|
||||||
|
|
||||||
// Tool calls
|
// Tool calls
|
||||||
toolCalls: {
|
toolCalls: {
|
||||||
moreSteps: (count: number) => `${count} more step${count === 1 ? "" : "s"}`,
|
moreSteps: (count: number) => `${count} more step${count === 1 ? "" : "s"}`,
|
||||||
|
|||||||
@@ -94,6 +94,14 @@ export interface Translations {
|
|||||||
searchChats: string;
|
searchChats: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Page titles (document title)
|
||||||
|
pages: {
|
||||||
|
appName: string;
|
||||||
|
chats: string;
|
||||||
|
newChat: string;
|
||||||
|
untitled: string;
|
||||||
|
};
|
||||||
|
|
||||||
// Tool calls
|
// Tool calls
|
||||||
toolCalls: {
|
toolCalls: {
|
||||||
moreSteps: (count: number) => string;
|
moreSteps: (count: number) => string;
|
||||||
|
|||||||
@@ -98,6 +98,14 @@ export const zhCN: Translations = {
|
|||||||
searchChats: "搜索对话",
|
searchChats: "搜索对话",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Page titles (document title)
|
||||||
|
pages: {
|
||||||
|
appName: "DeerFlow",
|
||||||
|
chats: "对话",
|
||||||
|
newChat: "新对话",
|
||||||
|
untitled: "未命名",
|
||||||
|
},
|
||||||
|
|
||||||
// Tool calls
|
// Tool calls
|
||||||
toolCalls: {
|
toolCalls: {
|
||||||
moreSteps: (count: number) => `查看其他 ${count} 个步骤`,
|
moreSteps: (count: number) => `查看其他 ${count} 个步骤`,
|
||||||
|
|||||||
Reference in New Issue
Block a user