diff --git a/web/app/components/workflow/operator/index.tsx b/web/app/components/workflow/operator/index.tsx
index 702f94184b..63d048bcea 100644
--- a/web/app/components/workflow/operator/index.tsx
+++ b/web/app/components/workflow/operator/index.tsx
@@ -2,7 +2,8 @@ import { memo, useEffect, useMemo, useRef } from 'react'
import { MiniMap } from 'reactflow'
import UndoRedo from '../header/undo-redo'
import ZoomInOut from './zoom-in-out'
-import Trigger from '../variable-inspect/trigger'
+import VariableTrigger from '../variable-inspect/trigger'
+import VariableInspectPanel from '../variable-inspect'
import { useStore } from '../store'
export type OperatorProps = {
@@ -50,7 +51,7 @@ const Operator = ({ handleUndo, handleRedo }: OperatorProps) => {
>
+
)
}
diff --git a/web/app/components/workflow/panel/index.tsx b/web/app/components/workflow/panel/index.tsx
index b5bbe16bf1..f687eb034b 100644
--- a/web/app/components/workflow/panel/index.tsx
+++ b/web/app/components/workflow/panel/index.tsx
@@ -80,7 +80,7 @@ const Panel: FC = () => {
{
diff --git a/web/app/components/workflow/store/workflow/layout-slice.ts b/web/app/components/workflow/store/workflow/layout-slice.ts
index ea691670ae..e41a9ed083 100644
--- a/web/app/components/workflow/store/workflow/layout-slice.ts
+++ b/web/app/components/workflow/store/workflow/layout-slice.ts
@@ -14,8 +14,10 @@ export type LayoutSliceShape = {
setOtherPanelWidth: (width: number) => void
bottomPanelWidth: number // min-width = 400px; default-width = auto || 480px;
setBottomPanelWidth: (width: number) => void
- bottomPanelHeight: number // min-height = 120px; max-height = 480px; default-height = 320px;
+ bottomPanelHeight: number
setBottomPanelHeight: (height: number) => void
+ variableInspectPanelHeight: number // min-height = 120px; default-height = 320px;
+ setVariableInspectPanelHeight: (height: number) => void
}
export const createLayoutSlice: StateCreator
= set => ({
@@ -31,6 +33,8 @@ export const createLayoutSlice: StateCreator = set => ({
setOtherPanelWidth: width => set(() => ({ otherPanelWidth: width })),
bottomPanelWidth: 480,
setBottomPanelWidth: width => set(() => ({ bottomPanelWidth: width })),
- bottomPanelHeight: 320,
+ bottomPanelHeight: 324,
setBottomPanelHeight: height => set(() => ({ bottomPanelHeight: height })),
+ variableInspectPanelHeight: localStorage.getItem('workflow-variable-inpsect-panel-height') ? Number.parseFloat(localStorage.getItem('workflow-variable-inpsect-panel-height')!) : 320,
+ setVariableInspectPanelHeight: height => set(() => ({ variableInspectPanelHeight: height })),
})
diff --git a/web/app/components/workflow/store/workflow/panel-slice.ts b/web/app/components/workflow/store/workflow/panel-slice.ts
index 06a5f45e11..3005197bf3 100644
--- a/web/app/components/workflow/store/workflow/panel-slice.ts
+++ b/web/app/components/workflow/store/workflow/panel-slice.ts
@@ -15,6 +15,8 @@ export type PanelSliceShape = {
left: number
}
setPanelMenu: (panelMenu: PanelSliceShape['panelMenu']) => void
+ showVariableInspectPanel: boolean
+ setShowVariableInspectPanel: (showVariableInspectPanel: boolean) => void
}
export const createPanelSlice: StateCreator = set => ({
@@ -29,4 +31,6 @@ export const createPanelSlice: StateCreator = set => ({
setShowDebugAndPreviewPanel: showDebugAndPreviewPanel => set(() => ({ showDebugAndPreviewPanel })),
panelMenu: undefined,
setPanelMenu: panelMenu => set(() => ({ panelMenu })),
+ showVariableInspectPanel: true,
+ setShowVariableInspectPanel: showVariableInspectPanel => set(() => ({ showVariableInspectPanel })),
})
diff --git a/web/app/components/workflow/variable-inspect/index.tsx b/web/app/components/workflow/variable-inspect/index.tsx
new file mode 100644
index 0000000000..c51429b882
--- /dev/null
+++ b/web/app/components/workflow/variable-inspect/index.tsx
@@ -0,0 +1,60 @@
+import type { FC } from 'react'
+import {
+ useCallback,
+ useMemo,
+} from 'react'
+import { debounce } from 'lodash-es'
+import { useStore } from '../store'
+import { useResizePanel } from '../nodes/_base/hooks/use-resize-panel'
+import Panel from './panel'
+import cn from '@/utils/classnames'
+
+const VariableInspectPanel: FC = () => {
+ const showVariableInspectPanel = useStore(s => s.showVariableInspectPanel)
+ const workflowCanvasHeight = useStore(s => s.workflowCanvasHeight)
+ const variableInspectPanelHeight = useStore(s => s.variableInspectPanelHeight)
+ const setVariableInspectPanelHeight = useStore(s => s.setVariableInspectPanelHeight)
+
+ const maxHeight = useMemo(() => {
+ if (!workflowCanvasHeight)
+ return 480
+ return workflowCanvasHeight - 60
+ }, [workflowCanvasHeight])
+
+ const handleResize = useCallback((width: number) => {
+ setVariableInspectPanelHeight(width)
+ }, [setVariableInspectPanelHeight])
+
+ const {
+ triggerRef,
+ containerRef,
+ } = useResizePanel({
+ direction: 'vertical',
+ triggerDirection: 'top',
+ minHeight: 120,
+ maxHeight,
+ onResize: debounce(handleResize),
+ })
+
+ if (!showVariableInspectPanel)
+ return null
+
+ return (
+
+ )
+}
+
+export default VariableInspectPanel
diff --git a/web/app/components/workflow/variable-inspect/panel.tsx b/web/app/components/workflow/variable-inspect/panel.tsx
new file mode 100644
index 0000000000..b148456f24
--- /dev/null
+++ b/web/app/components/workflow/variable-inspect/panel.tsx
@@ -0,0 +1,19 @@
+import type { FC } from 'react'
+
+// import {
+// RiLoader2Line,
+// RiStopCircleFill,
+// } from '@remixicon/react'
+import { useStore } from '../store'
+import cn from '@/utils/classnames'
+
+const Panel: FC = () => {
+ const workflowCanvasHeight = useStore(s => s.workflowCanvasHeight)
+
+ return (
+
+
+ )
+}
+
+export default Panel
diff --git a/web/app/components/workflow/variable-inspect/trigger.tsx b/web/app/components/workflow/variable-inspect/trigger.tsx
index 27a06d5f0f..fc9e994c9c 100644
--- a/web/app/components/workflow/variable-inspect/trigger.tsx
+++ b/web/app/components/workflow/variable-inspect/trigger.tsx
@@ -1,22 +1,29 @@
import type { FC } from 'react'
import { RiLoader2Line, RiStopCircleFill } from '@remixicon/react'
import Tooltip from '@/app/components/base/tooltip'
+import { useStore } from '../store'
import cn from '@/utils/classnames'
const VariableInspectTrigger: FC = () => {
+ const showVariableInspectPanel = useStore(s => s.showVariableInspectPanel)
+ const setShowVariableInspectPanel = useStore(s => s.setShowVariableInspectPanel)
+
+ if (showVariableInspectPanel)
+ return null
+
return (
{/* view button */}
{}}
+ onClick={() => setShowVariableInspectPanel(true)}
>
Variable inspect
{/* caching button */}
{}}
+ onClick={() => setShowVariableInspectPanel(true)}
>
Caching running status
@@ -35,7 +42,7 @@ const VariableInspectTrigger: FC = () => {
{/* finish button */}
{}}
+ onClick={() => setShowVariableInspectPanel(true)}
>
View cached variables