Commit 89225d79 by Xianquan Committed by GitHub

fix: align mobile chat headers (#7100)

* fix: align mobile chat headers

* fix: declare share header data after load state
parent 8f177a0f
...@@ -375,6 +375,7 @@ ...@@ -375,6 +375,7 @@
"core.chat.Send Message": "Send", "core.chat.Send Message": "Send",
"core.chat.Speaking": "I'm Listening, Please Speak...", "core.chat.Speaking": "I'm Listening, Please Speak...",
"core.chat.Type a message": "Enter a Question, Press [Enter] to Send / Press [Ctrl(Alt/Shift) + Enter] for New Line", "core.chat.Type a message": "Enter a Question, Press [Enter] to Send / Press [Ctrl(Alt/Shift) + Enter] for New Line",
"core.chat.Type a message to app": "Message {{appName}}",
"core.chat.Unpin": "Unpin", "core.chat.Unpin": "Unpin",
"core.chat.error.Chat error": "Chat Error", "core.chat.error.Chat error": "Chat Error",
"core.chat.error.Messages empty": "API Content is Empty, Possibly Due to Text Being Too Long", "core.chat.error.Messages empty": "API Content is Empty, Possibly Due to Text Being Too Long",
......
...@@ -375,6 +375,7 @@ ...@@ -375,6 +375,7 @@
"core.chat.Send Message": "发送", "core.chat.Send Message": "发送",
"core.chat.Speaking": "我在听,请说...", "core.chat.Speaking": "我在听,请说...",
"core.chat.Type a message": "发消息给FastGPT", "core.chat.Type a message": "发消息给FastGPT",
"core.chat.Type a message to app": "发消息给{{appName}}",
"core.chat.Unpin": "取消置顶", "core.chat.Unpin": "取消置顶",
"core.chat.error.Chat error": "对话出现异常", "core.chat.error.Chat error": "对话出现异常",
"core.chat.error.Messages empty": "接口内容为空,可能文本超长了~", "core.chat.error.Messages empty": "接口内容为空,可能文本超长了~",
......
...@@ -371,6 +371,7 @@ ...@@ -371,6 +371,7 @@
"core.chat.Send Message": "傳送", "core.chat.Send Message": "傳送",
"core.chat.Speaking": "我在聽,請說...", "core.chat.Speaking": "我在聽,請說...",
"core.chat.Type a message": "輸入問題,按 [Enter] 傳送 / 按 [Ctrl(Alt/Shift) + Enter] 換行", "core.chat.Type a message": "輸入問題,按 [Enter] 傳送 / 按 [Ctrl(Alt/Shift) + Enter] 換行",
"core.chat.Type a message to app": "傳送訊息給{{appName}}",
"core.chat.Unpin": "取消釘選", "core.chat.Unpin": "取消釘選",
"core.chat.error.Chat error": "對話發生錯誤", "core.chat.error.Chat error": "對話發生錯誤",
"core.chat.error.Messages empty": "API 內容為空,可能是文字過長", "core.chat.error.Messages empty": "API 內容為空,可能是文字過長",
......
...@@ -11,13 +11,14 @@ import { ...@@ -11,13 +11,14 @@ import {
type SendPromptFnType, type SendPromptFnType,
type StopChatFnResult type StopChatFnResult
} from '../type'; } from '../type';
import { ChatInputDefaultHeight, textareaMinH } from '../constants'; import { ChatInputDefaultHeight, ChatTypeEnum, textareaMinH } from '../constants';
import { useFieldArray, type UseFormReturn } from 'react-hook-form'; import { useFieldArray, type UseFormReturn } from 'react-hook-form';
import { ChatBoxContext } from '../Provider'; import { ChatBoxContext } from '../Provider';
import dynamic from 'next/dynamic'; import dynamic from 'next/dynamic';
import { useContextSelector } from 'use-context-selector'; import { useContextSelector } from 'use-context-selector';
import { WorkflowRuntimeContext } from '../../context/workflowRuntimeContext'; import { WorkflowRuntimeContext } from '../../context/workflowRuntimeContext';
import { useSystem } from '@fastgpt/web/hooks/useSystem'; import { useSystem } from '@fastgpt/web/hooks/useSystem';
import { ChatItemContext } from '@/web/core/chat/context/chatItemContext';
import { documentFileType } from '@fastgpt/global/common/file/constants'; import { documentFileType } from '@fastgpt/global/common/file/constants';
import FilePreview from '../../components/FilePreview'; import FilePreview from '../../components/FilePreview';
import { useFileUpload } from '../hooks/useFileUpload'; import { useFileUpload } from '../hooks/useFileUpload';
...@@ -82,6 +83,10 @@ const ChatInput = ({ ...@@ -82,6 +83,10 @@ const ChatInput = ({
const fileSelectConfig = useContextSelector(ChatBoxContext, (v) => v.fileSelectConfig); const fileSelectConfig = useContextSelector(ChatBoxContext, (v) => v.fileSelectConfig);
const dialogTips = useContextSelector(ChatBoxContext, (v) => v.dialogTips); const dialogTips = useContextSelector(ChatBoxContext, (v) => v.dialogTips);
const autoTTSResponse = useContextSelector(ChatBoxContext, (v) => v.autoTTSResponse); const autoTTSResponse = useContextSelector(ChatBoxContext, (v) => v.autoTTSResponse);
const chatType = useContextSelector(ChatBoxContext, (v) => v.chatType);
const appName = useContextSelector(ChatItemContext, (v) => v.chatBoxData.app.name);
const placeholderAppName =
chatType === ChatTypeEnum.home ? 'FastGPT' : appName || 'FastGPT';
const fileCtrl = useFieldArray({ const fileCtrl = useFieldArray({
control, control,
...@@ -174,7 +179,7 @@ const ChatInput = ({ ...@@ -174,7 +179,7 @@ const ChatInput = ({
}} }}
placeholder={ placeholder={
dialogTips || dialogTips ||
(isPc ? t('common:core.chat.Type a message') : t('chat:input_placeholder_phone')) t('common:core.chat.Type a message to app', { appName: placeholderAppName })
} }
resize={'none'} resize={'none'}
rows={1} rows={1}
......
...@@ -33,6 +33,7 @@ import MyIcon from '@fastgpt/web/components/common/Icon'; ...@@ -33,6 +33,7 @@ import MyIcon from '@fastgpt/web/components/common/Icon';
import ToolMenu from '@/pageComponents/chat/ToolMenu'; import ToolMenu from '@/pageComponents/chat/ToolMenu';
import { mobileChatHeaderIconButtonStyle } from './headerIconButtonStyle'; import { mobileChatHeaderIconButtonStyle } from './headerIconButtonStyle';
import { useSandboxEditor, useSandboxStatus } from '@/pageComponents/chat/SandboxEditor/hook'; import { useSandboxEditor, useSandboxStatus } from '@/pageComponents/chat/SandboxEditor/hook';
import Avatar from '@fastgpt/web/components/common/Avatar';
const CustomPluginRunBox = dynamic(() => import('@/pageComponents/chat/CustomPluginRunBox')); const CustomPluginRunBox = dynamic(() => import('@/pageComponents/chat/CustomPluginRunBox'));
...@@ -57,6 +58,9 @@ const AppChatWindow = () => { ...@@ -57,6 +58,9 @@ const AppChatWindow = () => {
isCurrentChatReady && chatBoxData.title?.trim() isCurrentChatReady && chatBoxData.title?.trim()
? chatBoxData.title ? chatBoxData.title
: t('common:core.chat.New Chat', { defaultValue: '新对话' }); : t('common:core.chat.New Chat', { defaultValue: '新对话' });
const mobileHeaderTitle = isCurrentChatReady
? chatBoxData.app.name
: t('common:core.chat.New Chat', { defaultValue: '新对话' });
const datasetCiteData = useContextSelector(ChatItemContext, (v) => v.datasetCiteData); const datasetCiteData = useContextSelector(ChatItemContext, (v) => v.datasetCiteData);
const setChatBoxData = useContextSelector(ChatItemContext, (v) => v.setChatBoxData); const setChatBoxData = useContextSelector(ChatItemContext, (v) => v.setChatBoxData);
const resetVariables = useContextSelector(ChatItemContext, (v) => v.resetVariables); const resetVariables = useContextSelector(ChatItemContext, (v) => v.resetVariables);
...@@ -239,8 +243,18 @@ const AppChatWindow = () => { ...@@ -239,8 +243,18 @@ const AppChatWindow = () => {
onClick={onOpenSlider} onClick={onOpenSlider}
/> />
<Flex alignItems="center" minW={0} flex="1" justifyContent="center" px={3}> <Flex alignItems="center" minW={0} flex="1" justifyContent="center" px={3} gap={2}>
{isCurrentChatReady && (
<Avatar
src={chatBoxData.app.avatar}
w="24px"
h="24px"
borderRadius="6px"
flexShrink={0}
/>
)}
<Box <Box
minW={0}
fontSize="16px" fontSize="16px"
fontWeight={500} fontWeight={500}
color="myGray.900" color="myGray.900"
...@@ -248,7 +262,7 @@ const AppChatWindow = () => { ...@@ -248,7 +262,7 @@ const AppChatWindow = () => {
whiteSpace="nowrap" whiteSpace="nowrap"
textOverflow="clip" textOverflow="clip"
> >
{chatWindowTitle} {mobileHeaderTitle}
</Box> </Box>
</Flex> </Flex>
......
...@@ -46,6 +46,7 @@ import ChatWindowHeader from '@/pageComponents/chat/ChatWindow/ChatWindowHeader' ...@@ -46,6 +46,7 @@ import ChatWindowHeader from '@/pageComponents/chat/ChatWindow/ChatWindowHeader'
import MyIcon from '@fastgpt/web/components/common/Icon'; import MyIcon from '@fastgpt/web/components/common/Icon';
import ToolMenu from '@/pageComponents/chat/ToolMenu'; import ToolMenu from '@/pageComponents/chat/ToolMenu';
import { mobileChatHeaderIconButtonStyle } from '@/pageComponents/chat/ChatWindow/headerIconButtonStyle'; import { mobileChatHeaderIconButtonStyle } from '@/pageComponents/chat/ChatWindow/headerIconButtonStyle';
import Avatar from '@fastgpt/web/components/common/Avatar';
const logger = getLogger(LogCategories.MODULE.CHAT.ITEM); const logger = getLogger(LogCategories.MODULE.CHAT.ITEM);
...@@ -148,6 +149,9 @@ const OutLink = (props: Props) => { ...@@ -148,6 +149,9 @@ const OutLink = (props: Props) => {
} }
} }
); );
const mobileHeaderAppName = props.appName || data?.app?.name || chatBoxData.app.name;
const mobileHeaderAppAvatar = props.appAvatar || data?.app?.avatar || chatBoxData.app.avatar;
useEffect(() => { useEffect(() => {
if (initSign.current === false && data && isChatRecordsLoaded) { if (initSign.current === false && data && isChatRecordsLoaded) {
initSign.current = true; initSign.current = true;
...@@ -346,14 +350,33 @@ const OutLink = (props: Props) => { ...@@ -346,14 +350,33 @@ const OutLink = (props: Props) => {
<Box minW="36px" /> <Box minW="36px" />
)} )}
<Flex alignItems="center" minW={0} flex="1" justifyContent="center" px={3}> <Flex
alignItems="center"
minW={0}
flex="1"
justifyContent="center"
px={3}
gap={2}
>
{!!mobileHeaderAppAvatar && (
<Avatar
src={mobileHeaderAppAvatar}
w="24px"
h="24px"
borderRadius="6px"
flexShrink={0}
/>
)}
<Box <Box
minW={0}
fontSize="16px" fontSize="16px"
fontWeight={500} fontWeight={500}
color="myGray.900" color="myGray.900"
className="textEllipsis" overflow="hidden"
whiteSpace="nowrap"
textOverflow="clip"
> >
{chatWindowTitle} {mobileHeaderAppName}
</Box> </Box>
</Flex> </Flex>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment