From 0b2702293124ddc4b1d9afa7582039ed371b7e5b Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 27 Nov 2025 16:15:29 +0000 Subject: [PATCH] Add backend theme selection based on URL parameter for embedded chat --- web/src/pages/agent/hooks/use-send-shared-message.ts | 1 + web/src/pages/agent/share/index.tsx | 10 ++++++++++ .../pages/next-chats/hooks/use-send-shared-message.ts | 1 + web/src/pages/next-chats/share/index.tsx | 11 +++++++++++ 4 files changed, 23 insertions(+) diff --git a/web/src/pages/agent/hooks/use-send-shared-message.ts b/web/src/pages/agent/hooks/use-send-shared-message.ts index ab7f7d2fc..fe1e34d62 100644 --- a/web/src/pages/agent/hooks/use-send-shared-message.ts +++ b/web/src/pages/agent/hooks/use-send-shared-message.ts @@ -29,6 +29,7 @@ export const useGetSharedChatSearchParams = () => { from: searchParams.get('from') as SharedFrom, sharedId: searchParams.get('shared_id'), locale: searchParams.get('locale'), + theme: searchParams.get('theme'), data: data, visibleAvatar: searchParams.get('visible_avatar') ? searchParams.get('visible_avatar') !== '1' diff --git a/web/src/pages/agent/share/index.tsx b/web/src/pages/agent/share/index.tsx index 24308ea66..08db6b96d 100644 --- a/web/src/pages/agent/share/index.tsx +++ b/web/src/pages/agent/share/index.tsx @@ -4,7 +4,9 @@ import { NextMessageInput } from '@/components/message-input/next'; import MessageItem from '@/components/next-message-item'; import PdfDrawer from '@/components/pdf-drawer'; import { useClickDrawer } from '@/components/pdf-drawer/hooks'; +import { useTheme } from '@/components/theme-provider'; import { MessageType } from '@/constants/chat'; +import { ThemeEnum } from '@/constants/common'; import { useUploadCanvasFileWithProgress } from '@/hooks/use-agent-request'; import { cn } from '@/lib/utils'; import i18n from '@/locales/config'; @@ -25,8 +27,10 @@ const ChatContainer = () => { const { sharedId: conversationId, locale, + theme, visibleAvatar, } = useGetSharedChatSearchParams(); + const { setTheme } = useTheme(); const { visible, hideModal, documentId, selectedChunk, clickDocumentButton } = useClickDrawer(); @@ -89,6 +93,12 @@ const ChatContainer = () => { } }, [locale, visibleAvatar]); + React.useEffect(() => { + if (theme && (theme === ThemeEnum.Light || theme === ThemeEnum.Dark)) { + setTheme(theme as ThemeEnum); + } + }, [theme, setTheme]); + React.useEffect(() => { if (!isTaskMode && inputsData.prologue) { addNewestOneAnswer({ diff --git a/web/src/pages/next-chats/hooks/use-send-shared-message.ts b/web/src/pages/next-chats/hooks/use-send-shared-message.ts index fb287ff7d..022998e70 100644 --- a/web/src/pages/next-chats/hooks/use-send-shared-message.ts +++ b/web/src/pages/next-chats/hooks/use-send-shared-message.ts @@ -33,6 +33,7 @@ export const useGetSharedChatSearchParams = () => { from: searchParams.get('from') as SharedFrom, sharedId: searchParams.get('shared_id'), locale: searchParams.get('locale'), + theme: searchParams.get('theme'), data: data, visibleAvatar: searchParams.get('visible_avatar') ? searchParams.get('visible_avatar') !== '1' diff --git a/web/src/pages/next-chats/share/index.tsx b/web/src/pages/next-chats/share/index.tsx index 648b22f72..59885cf40 100644 --- a/web/src/pages/next-chats/share/index.tsx +++ b/web/src/pages/next-chats/share/index.tsx @@ -3,7 +3,9 @@ import { NextMessageInput } from '@/components/message-input/next'; import MessageItem from '@/components/message-item'; import PdfDrawer from '@/components/pdf-drawer'; import { useClickDrawer } from '@/components/pdf-drawer/hooks'; +import { useTheme } from '@/components/theme-provider'; import { MessageType, SharedFrom } from '@/constants/chat'; +import { ThemeEnum } from '@/constants/common'; import { useFetchNextConversationSSE } from '@/hooks/chat-hooks'; import { useFetchFlowSSE } from '@/hooks/flow-hooks'; import { useFetchExternalChatInfo } from '@/hooks/use-chat-request'; @@ -22,8 +24,10 @@ const ChatContainer = () => { sharedId: conversationId, from, locale, + theme, visibleAvatar, } = useGetSharedChatSearchParams(); + const { setTheme } = useTheme(); const { visible, hideModal, documentId, selectedChunk, clickDocumentButton } = useClickDrawer(); @@ -52,6 +56,13 @@ const ChatContainer = () => { i18n.changeLanguage(locale); } }, [locale, visibleAvatar]); + + React.useEffect(() => { + if (theme && (theme === ThemeEnum.Light || theme === ThemeEnum.Dark)) { + setTheme(theme as ThemeEnum); + } + }, [theme, setTheme]); + const { data: avatarData } = useFetchAvatar(); if (!conversationId) {