+
)
}
-export default Popup
+export default memo(Popup)
diff --git a/web/app/components/rag-pipeline/hooks/use-workflow-run.ts b/web/app/components/rag-pipeline/hooks/use-workflow-run.ts
index fc3fc3ecb2..1e04d1dfbb 100644
--- a/web/app/components/rag-pipeline/hooks/use-workflow-run.ts
+++ b/web/app/components/rag-pipeline/hooks/use-workflow-run.ts
@@ -279,6 +279,7 @@ export const useWorkflowRun = () => {
const handleStopRun = useCallback((taskId: string) => {
const { pipelineId } = workflowStore.getState()
+ return
stopWorkflowRun(`/rag/pipeline/${pipelineId}/workflow-runs/tasks/${taskId}/stop`)
}, [workflowStore])
diff --git a/web/app/components/workflow-app/components/workflow-header/index.tsx b/web/app/components/workflow-app/components/workflow-header/index.tsx
index 4eb8df7162..69d0759274 100644
--- a/web/app/components/workflow-app/components/workflow-header/index.tsx
+++ b/web/app/components/workflow-app/components/workflow-header/index.tsx
@@ -1,14 +1,41 @@
-import { useMemo } from 'react'
+import {
+ memo,
+ useCallback,
+ useMemo,
+} from 'react'
+import { useShallow } from 'zustand/react/shallow'
import type { HeaderProps } from '@/app/components/workflow/header'
import Header from '@/app/components/workflow/header'
import { useStore as useAppStore } from '@/app/components/app/store'
+import {
+ fetchWorkflowRunHistory,
+} from '@/service/workflow'
import ChatVariableTrigger from './chat-variable-trigger'
import FeaturesTrigger from './features-trigger'
import { useResetWorkflowVersionHistory } from '@/service/use-workflow'
+import { useIsChatMode } from '../../hooks'
const WorkflowHeader = () => {
- const appDetail = useAppStore(s => s.appDetail)
+ const { appDetail, setCurrentLogItem, setShowMessageLogModal } = useAppStore(useShallow(state => ({
+ appDetail: state.appDetail,
+ setCurrentLogItem: state.setCurrentLogItem,
+ setShowMessageLogModal: state.setShowMessageLogModal,
+ })))
const resetWorkflowVersionHistory = useResetWorkflowVersionHistory(appDetail!.id)
+ const isChatMode = useIsChatMode()
+
+ const handleClearLogAndMessageModal = useCallback(() => {
+ setCurrentLogItem()
+ setShowMessageLogModal(false)
+ }, [setCurrentLogItem, setShowMessageLogModal])
+
+ const viewHistoryProps = useMemo(() => {
+ return {
+ onClearLogAndMessageModal: handleClearLogAndMessageModal,
+ historyUrl: isChatMode ? `/apps/${appDetail!.id}/advanced-chat/workflow-runs` : `/apps/${appDetail!.id}/workflow-runs`,
+ historyFetcher: fetchWorkflowRunHistory,
+ }
+ }, [appDetail, isChatMode, handleClearLogAndMessageModal])
const headerProps: HeaderProps = useMemo(() => {
return {
@@ -17,15 +44,23 @@ const WorkflowHeader = () => {
left:
,
middle:
,
},
+ runAndHistoryProps: {
+ showRunButton: !isChatMode,
+ showPreviewButton: isChatMode,
+ viewHistoryProps,
+ },
+ },
+ viewHistory: {
+ viewHistoryProps,
},
restoring: {
onRestoreSettled: resetWorkflowVersionHistory,
},
}
- }, [resetWorkflowVersionHistory])
+ }, [resetWorkflowVersionHistory, isChatMode, viewHistoryProps])
return (
)
}
-export default WorkflowHeader
+export default memo(WorkflowHeader)
diff --git a/web/app/components/workflow-app/components/workflow-panel.tsx b/web/app/components/workflow-app/components/workflow-panel.tsx
index dd368660ce..d6da70cf21 100644
--- a/web/app/components/workflow-app/components/workflow-panel.tsx
+++ b/web/app/components/workflow-app/components/workflow-panel.tsx
@@ -1,4 +1,7 @@
-import { useMemo } from 'react'
+import {
+ memo,
+ useMemo,
+} from 'react'
import { useShallow } from 'zustand/react/shallow'
import { useStore } from '@/app/components/workflow/store'
import {
@@ -106,4 +109,4 @@ const WorkflowPanel = () => {
)
}
-export default WorkflowPanel
+export default memo(WorkflowPanel)
diff --git a/web/app/components/workflow/header/header-in-normal.tsx b/web/app/components/workflow/header/header-in-normal.tsx
index ec016b1b65..eea3031f5b 100644
--- a/web/app/components/workflow/header/header-in-normal.tsx
+++ b/web/app/components/workflow/header/header-in-normal.tsx
@@ -13,6 +13,7 @@ import {
useWorkflowRun,
} from '../hooks'
import Divider from '../../base/divider'
+import type { RunAndHistoryProps } from './run-and-history'
import RunAndHistory from './run-and-history'
import EditingTitle from './editing-title'
import EnvButton from './env-button'
@@ -23,9 +24,11 @@ export type HeaderInNormalProps = {
left?: React.ReactNode
middle?: React.ReactNode
}
+ runAndHistoryProps?: RunAndHistoryProps
}
const HeaderInNormal = ({
components,
+ runAndHistoryProps,
}: HeaderInNormalProps) => {
const workflowStore = useWorkflowStore()
const { nodesReadOnly } = useNodesReadOnly()
@@ -58,7 +61,7 @@ const HeaderInNormal = ({
{components?.left}
-
+
{components?.middle}
diff --git a/web/app/components/workflow/header/header-in-view-history.tsx b/web/app/components/workflow/header/header-in-view-history.tsx
index 81858ccc89..70189a9469 100644
--- a/web/app/components/workflow/header/header-in-view-history.tsx
+++ b/web/app/components/workflow/header/header-in-view-history.tsx
@@ -10,11 +10,17 @@ import {
} from '../hooks'
import Divider from '../../base/divider'
import RunningTitle from './running-title'
+import type { ViewHistoryProps } from './view-history'
import ViewHistory from './view-history'
import Button from '@/app/components/base/button'
import { ArrowNarrowLeft } from '@/app/components/base/icons/src/vender/line/arrows'
-const HeaderInHistory = () => {
+export type HeaderInHistoryProps = {
+ viewHistoryProps?: ViewHistoryProps
+}
+const HeaderInHistory = ({
+ viewHistoryProps,
+}: HeaderInHistoryProps) => {
const { t } = useTranslation()
const workflowStore = useWorkflowStore()
@@ -33,7 +39,7 @@ const HeaderInHistory = () => {