diff --git a/web/app/components/workflow/block-selector/tools/index.tsx b/web/app/components/workflow/block-selector/tools/index.tsx index da4db0ec64..c0f0e928fe 100644 --- a/web/app/components/workflow/block-selector/tools/index.tsx +++ b/web/app/components/workflow/block-selector/tools/index.tsx @@ -19,7 +19,8 @@ const Tools = ({ isCustom, onSelect, }: ToolsProps) => { - const toolsets = useStore(state => state.toolsets).filter(toolset => toolset.type === (isCustom ? 'api' : 'builtin')) + const totalToolsets = useStore(state => state.toolsets) + const toolsets = totalToolsets.filter(toolset => toolset.type === (isCustom ? 'api' : 'builtin')) const setToolsets = useStore(state => state.setToolsets) const toolsMap = useStore(state => state.toolsMap) const setToolsMap = useStore(state => state.setToolsMap) diff --git a/web/app/components/workflow/nodes/_base/components/node-control.tsx b/web/app/components/workflow/nodes/_base/components/node-control.tsx index 2cbbc76231..0b1a6c4690 100644 --- a/web/app/components/workflow/nodes/_base/components/node-control.tsx +++ b/web/app/components/workflow/nodes/_base/components/node-control.tsx @@ -1,52 +1,77 @@ import type { FC } from 'react' -import { memo } from 'react' -import { useWorkflow } from '../../../hooks' import { - DotsHorizontal, - Loading02, -} from '@/app/components/base/icons/src/vender/line/general' + memo, + useCallback, + useState, +} from 'react' +import { useWorkflow } from '../../../hooks' +import type { Node } from '../../../types' +import { canRunBySingle } from '../../../utils' +import PanelOperator from './panel-operator' +import { Loading02 } from '@/app/components/base/icons/src/vender/line/general' import { Play, Stop, } from '@/app/components/base/icons/src/vender/line/mediaAndDevices' -type NodeControlProps = { - isRunning?: boolean - nodeId: string -} +type NodeControlProps = Pick const NodeControl: FC = ({ - isRunning, - nodeId, + id, + data, }) => { + const [open, setOpen] = useState(false) const { handleNodeDataUpdate } = useWorkflow() + const handleOpenChange = useCallback((newOpen: boolean) => { + setOpen(newOpen) + }, []) + return ( -
- { - isRunning && ( -
- - RUNNING -
- ) - } + ) diff --git a/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx b/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx index 19a536f1bd..247368ec16 100644 --- a/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx +++ b/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx @@ -9,6 +9,7 @@ import produce from 'immer' import { useContext } from 'use-context-selector' import { useTranslation } from 'react-i18next' import { useEdges } from 'reactflow' +import type { OffsetOptions } from '@floating-ui/react' import ChangeBlock from './change-block' import { useStore } from '@/app/components/workflow/store' import { @@ -33,10 +34,19 @@ import { type PanelOperatorProps = { id: string data: Node['data'] + triggerClassName?: string + offset?: OffsetOptions + onOpenChange?: (open: boolean) => void } const PanelOperator = ({ id, data, + triggerClassName, + offset = { + mainAxis: 4, + crossAxis: 53, + }, + onOpenChange, }: PanelOperatorProps) => { const { t } = useTranslation() const { locale } = useContext(I18n) @@ -86,22 +96,27 @@ const PanelOperator = ({ return tool?.description[language] || '' }, [data, nodesExtraData, toolsMap, language]) + const handleOpenChange = useCallback((newOpen: boolean) => { + setOpen(newOpen) + + if (onOpenChange) + onOpenChange(newOpen) + }, [onOpenChange]) + return ( - setOpen(v => !v)}> + handleOpenChange(!open)}>
@@ -110,10 +125,14 @@ const PanelOperator = ({
- + { + data.type !== BlockEnum.Start && ( + + ) + }
{t('workflow.panel.helpLink')}
@@ -124,7 +143,10 @@ const PanelOperator = ({
handleNodeDelete(id)} > {t('common.operation.delete')} diff --git a/web/app/components/workflow/nodes/_base/node.tsx b/web/app/components/workflow/nodes/_base/node.tsx index 8fa6f3827e..9569657f53 100644 --- a/web/app/components/workflow/nodes/_base/node.tsx +++ b/web/app/components/workflow/nodes/_base/node.tsx @@ -8,7 +8,6 @@ import { } from 'react' import type { NodeProps } from '../../types' import { BlockEnum } from '../../types' -import { canRunBySingle } from '../../utils' import { NodeSourceHandle, NodeTargetHandle, @@ -59,17 +58,10 @@ const BaseNode: FC = ({ /> ) } - { - canRunBySingle(data.type) - && ( -
- -
- ) - } +