fix simple snapshot init & auto excute when change app (#3293)

This commit is contained in:
heheer
2024-12-02 21:40:31 +08:00
committed by GitHub
parent 1cef206c13
commit c506442993
8 changed files with 49 additions and 36 deletions

View File

@@ -845,7 +845,15 @@ const ChatBox = ({
hideInUI: true hideInUI: true
}); });
} }
}, [isReady, chatStarted, autoExecute?.open, chatRecords, isChatRecordsLoaded]); }, [
chatStarted,
chatRecords,
isChatRecordsLoaded,
sendPrompt,
isReady,
autoExecute.open,
autoExecute.defaultPrompt
]);
// output data // output data
useImperativeHandle(ChatBoxRef, () => ({ useImperativeHandle(ChatBoxRef, () => ({

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Box } from '@chakra-ui/react'; import { Box } from '@chakra-ui/react';
import { useLocalStorageState, useMount } from 'ahooks'; import { useDebounceEffect, useLocalStorageState, useMount } from 'ahooks';
import { useDatasetStore } from '@/web/core/dataset/store/dataset'; import { useDatasetStore } from '@/web/core/dataset/store/dataset';
import { appWorkflow2Form } from '@fastgpt/global/core/app/utils'; import { appWorkflow2Form } from '@fastgpt/global/core/app/utils';
@@ -62,12 +62,23 @@ const Edit = ({
const { appDetail } = useContextSelector(AppContext, (v) => v); const { appDetail } = useContextSelector(AppContext, (v) => v);
const { t } = useTranslation(); const { t } = useTranslation();
// 旧的编辑记录,直接重置到新的变量中 // Reset old edit history to new variables
const [oldPast, setOldPast] = useLocalStorageState<SimpleAppSnapshotType[]>( const [oldPast, setOldPast] = useLocalStorageState<SimpleAppSnapshotType[]>(
`${appDetail._id}-past-simple`, `${appDetail._id}-past-simple`,
{} {}
); );
// Save snapshot to local
useDebounceEffect(
() => {
saveSnapshot({
appForm
});
},
[appForm],
{ wait: 500 }
);
// Init app form // Init app form
useMount(() => { useMount(() => {
// show selected dataset // show selected dataset

View File

@@ -9,7 +9,6 @@ import { useRouter } from 'next/router';
import RouteTab from '../RouteTab'; import RouteTab from '../RouteTab';
import { useTranslation } from 'next-i18next'; import { useTranslation } from 'next-i18next';
import { AppSimpleEditFormType } from '@fastgpt/global/core/app/type'; import { AppSimpleEditFormType } from '@fastgpt/global/core/app/type';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { form2AppWorkflow } from '@/web/core/app/utils'; import { form2AppWorkflow } from '@/web/core/app/utils';
import { TabEnum } from '../context'; import { TabEnum } from '../context';
import MyIcon from '@fastgpt/web/components/common/Icon'; import MyIcon from '@fastgpt/web/components/common/Icon';

View File

@@ -23,16 +23,6 @@ const SimpleEdit = () => {
); );
const [appForm, setAppForm] = useState(getDefaultAppForm()); const [appForm, setAppForm] = useState(getDefaultAppForm());
// Save snapshot to local
useDebounceEffect(
() => {
saveSnapshot({
appForm
});
},
[appForm],
{ wait: 500 }
);
useBeforeunload({ useBeforeunload({
tip: t('common:core.common.tip.leave page') tip: t('common:core.common.tip.leave page')

View File

@@ -34,11 +34,9 @@ export const compareSimpleAppSnapshot = (
questionGuide: appForm1.chatConfig?.questionGuide || false, questionGuide: appForm1.chatConfig?.questionGuide || false,
ttsConfig: appForm1.chatConfig?.ttsConfig || undefined, ttsConfig: appForm1.chatConfig?.ttsConfig || undefined,
whisperConfig: appForm1.chatConfig?.whisperConfig || undefined, whisperConfig: appForm1.chatConfig?.whisperConfig || undefined,
scheduledTriggerConfig: appForm1.chatConfig?.scheduledTriggerConfig || undefined,
chatInputGuide: appForm1.chatConfig?.chatInputGuide || undefined, chatInputGuide: appForm1.chatConfig?.chatInputGuide || undefined,
fileSelectConfig: appForm1.chatConfig?.fileSelectConfig || undefined, fileSelectConfig: appForm1.chatConfig?.fileSelectConfig || undefined,
instruction: appForm1.chatConfig?.instruction || '', instruction: appForm1.chatConfig?.instruction || ''
autoExecute: appForm1.chatConfig?.autoExecute || undefined
}, },
{ {
welcomeText: appForm2.chatConfig?.welcomeText || '', welcomeText: appForm2.chatConfig?.welcomeText || '',
@@ -46,11 +44,9 @@ export const compareSimpleAppSnapshot = (
questionGuide: appForm2.chatConfig?.questionGuide || false, questionGuide: appForm2.chatConfig?.questionGuide || false,
ttsConfig: appForm2.chatConfig?.ttsConfig || undefined, ttsConfig: appForm2.chatConfig?.ttsConfig || undefined,
whisperConfig: appForm2.chatConfig?.whisperConfig || undefined, whisperConfig: appForm2.chatConfig?.whisperConfig || undefined,
scheduledTriggerConfig: appForm2.chatConfig?.scheduledTriggerConfig || undefined,
chatInputGuide: appForm2.chatConfig?.chatInputGuide || undefined, chatInputGuide: appForm2.chatConfig?.chatInputGuide || undefined,
fileSelectConfig: appForm2.chatConfig?.fileSelectConfig || undefined, fileSelectConfig: appForm2.chatConfig?.fileSelectConfig || undefined,
instruction: appForm2.chatConfig?.instruction || '', instruction: appForm2.chatConfig?.instruction || ''
autoExecute: appForm2.chatConfig?.autoExecute || undefined
} }
) )
) { ) {
@@ -58,7 +54,7 @@ export const compareSimpleAppSnapshot = (
return false; return false;
} }
return isEqual(appForm1, appForm2); return isEqual({ ...appForm1, chatConfig: undefined }, { ...appForm2, chatConfig: undefined });
}; };
export const useSimpleAppSnapshots = (appId: string) => { export const useSimpleAppSnapshots = (appId: string) => {

View File

@@ -63,15 +63,20 @@ const Chat = ({ myApps }: { myApps: AppListItemType[] }) => {
// Load chat init data // Load chat init data
const [chatData, setChatData] = useState<InitChatResponse>(defaultChatData); const [chatData, setChatData] = useState<InitChatResponse>(defaultChatData);
const { loading: isLoading } = useRequest2( const { loading } = useRequest2(
async () => { async () => {
if (!appId || forbidLoadChat.current) return; if (!appId || forbidLoadChat.current) return;
const res = await getInitChatInfo({ appId, chatId }); const res = await getInitChatInfo({ appId, chatId });
res.userAvatar = userInfo?.avatar; res.userAvatar = userInfo?.avatar;
setChatData(res); // Wait for state update to complete
setChatBoxData(res); await new Promise((resolve) => {
setChatData(res);
setChatBoxData(res);
setTimeout(resolve, 0);
});
// reset chat variables // reset chat variables
resetVariables({ resetVariables({
variables: res.variables variables: res.variables
@@ -136,8 +141,6 @@ const Chat = ({ myApps }: { myApps: AppListItemType[] }) => {
}, },
[chatId, appId, onUpdateHistoryTitle, forbidLoadChat] [chatId, appId, onUpdateHistoryTitle, forbidLoadChat]
); );
const loading = isLoading;
const RenderHistorySlider = useMemo(() => { const RenderHistorySlider = useMemo(() => {
const Children = ( const Children = (
<ChatHistorySlider confirmClearText={t('common:core.chat.Confirm to clear history')} /> <ChatHistorySlider confirmClearText={t('common:core.chat.Confirm to clear history')} />
@@ -210,6 +213,7 @@ const Chat = ({ myApps }: { myApps: AppListItemType[] }) => {
feedbackType={'user'} feedbackType={'user'}
onStartChat={onStartChat} onStartChat={onStartChat}
chatType={'chat'} chatType={'chat'}
isReady={!loading}
showRawSource showRawSource
showNodeStatus showNodeStatus
/> />

View File

@@ -88,7 +88,7 @@ const OutLink = (props: Props) => {
const initSign = useRef(false); const initSign = useRef(false);
const [chatData, setChatData] = useState<InitChatResponse>(defaultChatData); const [chatData, setChatData] = useState<InitChatResponse>(defaultChatData);
const { data, loading: isLoading } = useRequest2( const { data, loading } = useRequest2(
async () => { async () => {
const shareId = outLinkAuthData.shareId; const shareId = outLinkAuthData.shareId;
const outLinkUid = outLinkAuthData.outLinkUid; const outLinkUid = outLinkAuthData.outLinkUid;
@@ -100,8 +100,12 @@ const OutLink = (props: Props) => {
outLinkUid outLinkUid
}); });
setChatData(res); await new Promise((resolve) => {
setChatBoxData(res); setChatData(res);
setChatBoxData(res);
setTimeout(resolve, 0);
});
resetVariables({ resetVariables({
variables: res.variables variables: res.variables
}); });
@@ -231,8 +235,6 @@ const OutLink = (props: Props) => {
); );
}, [isOpenSlider, isPc, onCloseSlider, showHistory, t]); }, [isOpenSlider, isPc, onCloseSlider, showHistory, t]);
const loading = isLoading;
return ( return (
<> <>
<NextHead title={props.appName || 'AI'} desc={props.appIntro} icon={props.appAvatar} /> <NextHead title={props.appName || 'AI'} desc={props.appIntro} icon={props.appAvatar} />
@@ -280,6 +282,7 @@ const OutLink = (props: Props) => {
feedbackType={'user'} feedbackType={'user'}
onStartChat={startChat} onStartChat={startChat}
chatType="share" chatType="share"
isReady={!loading}
showRawSource={showRawSource} showRawSource={showRawSource}
showNodeStatus={showNodeStatus} showNodeStatus={showNodeStatus}
/> />

View File

@@ -69,14 +69,17 @@ const Chat = ({ myApps }: { myApps: AppListItemType[] }) => {
// get chat app info // get chat app info
const [chatData, setChatData] = useState<InitChatResponse>(defaultChatData); const [chatData, setChatData] = useState<InitChatResponse>(defaultChatData);
const { loading: isLoading } = useRequest2( const { loading } = useRequest2(
async () => { async () => {
if (!appId || forbidLoadChat.current) return; if (!appId || forbidLoadChat.current) return;
const res = await getTeamChatInfo({ teamId, appId, chatId, teamToken }); const res = await getTeamChatInfo({ teamId, appId, chatId, teamToken });
setChatData(res); await new Promise((resolve) => {
setChatBoxData(res); setChatData(res);
setChatBoxData(res);
setTimeout(resolve, 0);
});
// reset chat records // reset chat records
resetVariables({ resetVariables({
variables: res.variables variables: res.variables
@@ -177,8 +180,6 @@ const Chat = ({ myApps }: { myApps: AppListItemType[] }) => {
); );
}, [appId, isOpenSlider, isPc, onCloseSlider, t]); }, [appId, isOpenSlider, isPc, onCloseSlider, t]);
const loading = isLoading;
return ( return (
<Flex h={'100%'}> <Flex h={'100%'}>
<NextHead title={chatData.app.name} icon={chatData.app.avatar}></NextHead> <NextHead title={chatData.app.name} icon={chatData.app.avatar}></NextHead>
@@ -226,6 +227,7 @@ const Chat = ({ myApps }: { myApps: AppListItemType[] }) => {
feedbackType={'user'} feedbackType={'user'}
onStartChat={startChat} onStartChat={startChat}
chatType="team" chatType="team"
isReady={!loading}
showRawSource showRawSource
showNodeStatus showNodeStatus
/> />