diff --git a/web/src/hooks/flow-hooks.ts b/web/src/hooks/flow-hooks.ts
index 5bb8af6cdf3..c56ccf75f70 100644
--- a/web/src/hooks/flow-hooks.ts
+++ b/web/src/hooks/flow-hooks.ts
@@ -80,9 +80,17 @@ export const useFetchFlowList = (): { data: IFlow[]; loading: boolean } => {
return { data, loading };
};
-export const useFetchFlow = (): { data: IFlow; loading: boolean } => {
+export const useFetchFlow = (): {
+ data: IFlow;
+ loading: boolean;
+ refetch: () => void;
+} => {
const { id } = useParams();
- const { data, isFetching: loading } = useQuery({
+ const {
+ data,
+ isFetching: loading,
+ refetch,
+ } = useQuery({
queryKey: ['flowDetail'],
initialData: {} as IFlow,
queryFn: async () => {
@@ -92,7 +100,7 @@ export const useFetchFlow = (): { data: IFlow; loading: boolean } => {
},
});
- return { data, loading };
+ return { data, loading, refetch };
};
export const useSetFlow = () => {
diff --git a/web/src/pages/flow/canvas/index.tsx b/web/src/pages/flow/canvas/index.tsx
index 08ab72d2b35..ed674b3576a 100644
--- a/web/src/pages/flow/canvas/index.tsx
+++ b/web/src/pages/flow/canvas/index.tsx
@@ -133,10 +133,12 @@ function FlowCanvas({ chatDrawerVisible, hideChatDrawer }: IProps) {
visible={drawerVisible}
hideModal={hideDrawer}
>
-
+ {chatDrawerVisible && (
+
+ )}
);
}
diff --git a/web/src/pages/flow/chat/drawer.tsx b/web/src/pages/flow/chat/drawer.tsx
index 99c413c07da..44c0078c899 100644
--- a/web/src/pages/flow/chat/drawer.tsx
+++ b/web/src/pages/flow/chat/drawer.tsx
@@ -10,7 +10,7 @@ const ChatDrawer = ({ visible, hideModal }: IModalProps) => {
onClose={hideModal}
open={visible}
getContainer={false}
- width={470}
+ width={window.innerWidth > 1278 ? '30%' : 470}
mask={false}
// zIndex={10000}
>
diff --git a/web/src/pages/flow/chat/hooks.ts b/web/src/pages/flow/chat/hooks.ts
index a44d27506e6..0916eb6acdb 100644
--- a/web/src/pages/flow/chat/hooks.ts
+++ b/web/src/pages/flow/chat/hooks.ts
@@ -48,19 +48,15 @@ export const useSelectCurrentMessages = () => {
const addNewestAnswer = useCallback((answer: IAnswer) => {
setCurrentMessages((pre) => {
- const latestMessage = pre?.at(-1);
-
- if (latestMessage) {
- return [
- ...pre.slice(0, -1),
- {
- ...latestMessage,
- content: answer.answer,
- reference: answer.reference,
- },
- ];
- }
- return pre;
+ return [
+ ...pre.slice(0, -1),
+ {
+ id: uuid(),
+ role: MessageType.Assistant,
+ content: answer.answer,
+ reference: answer.reference,
+ },
+ ];
});
}, []);
@@ -97,7 +93,7 @@ export const useSendMessage = (
) => {
const { id: flowId } = useParams();
const { handleInputChange, value, setValue } = useHandleMessageInputChange();
- const { data: flowDetail } = useFetchFlow();
+ const { data: flowDetail, refetch } = useFetchFlow();
const messages = flowDetail.dsl.messages;
const { send, answer, done } = useSendMessageWithSse(api.runCanvas);
@@ -118,9 +114,11 @@ export const useSendMessage = (
// cancel loading
setValue(message);
removeLatestMessage();
+ } else {
+ refetch(); // pull the message list after sending the message successfully
}
},
- [flowId, removeLatestMessage, setValue, send],
+ [flowId, removeLatestMessage, setValue, send, refetch],
);
const handleSendMessage = useCallback(