From 1a4c2e77c4cc52c1d7165d0d69d7a3341c75812e Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 6 Feb 2024 17:49:07 +0800 Subject: [PATCH] feat: nodes placeholder --- .../(commonLayout)/workflow/nodes/page.tsx | 49 +++++++++++++++++++ .../components/workflow/nodes/_base/panel.tsx | 12 ++--- .../components/workflow/nodes/code/node.tsx | 12 +++++ .../components/workflow/nodes/code/panel.tsx | 13 +++++ .../components/workflow/nodes/constants.ts | 40 +++++++++++++++ .../workflow/nodes/direct-answer/node.tsx | 12 +++++ .../workflow/nodes/direct-answer/panel.tsx | 13 +++++ .../components/workflow/nodes/end/node.tsx | 12 +++++ .../components/workflow/nodes/end/panel.tsx | 13 +++++ .../components/workflow/nodes/http/node.tsx | 12 +++++ .../components/workflow/nodes/http/panel.tsx | 13 +++++ .../workflow/nodes/if-else/node.tsx | 12 +++++ .../workflow/nodes/if-else/panel.tsx | 13 +++++ .../nodes/knowledge-retrieval/node.tsx | 12 +++++ .../nodes/knowledge-retrieval/panel.tsx | 13 +++++ .../components/workflow/nodes/llm/node.tsx | 12 +++++ .../components/workflow/nodes/llm/panel.tsx | 13 +++++ .../nodes/question-classifier/node.tsx | 12 +++++ .../nodes/question-classifier/panel.tsx | 13 +++++ .../components/workflow/nodes/start/panel.tsx | 2 +- .../nodes/template-transform/node.tsx | 12 +++++ .../nodes/template-transform/panel.tsx | 13 +++++ .../components/workflow/nodes/tool/node.tsx | 12 +++++ .../components/workflow/nodes/tool/panel.tsx | 13 +++++ 24 files changed, 346 insertions(+), 7 deletions(-) create mode 100644 web/app/(commonLayout)/workflow/nodes/page.tsx create mode 100644 web/app/components/workflow/nodes/code/node.tsx create mode 100644 web/app/components/workflow/nodes/code/panel.tsx create mode 100644 web/app/components/workflow/nodes/direct-answer/node.tsx create mode 100644 web/app/components/workflow/nodes/direct-answer/panel.tsx create mode 100644 web/app/components/workflow/nodes/end/node.tsx create mode 100644 web/app/components/workflow/nodes/end/panel.tsx create mode 100644 web/app/components/workflow/nodes/http/node.tsx create mode 100644 web/app/components/workflow/nodes/http/panel.tsx create mode 100644 web/app/components/workflow/nodes/if-else/node.tsx create mode 100644 web/app/components/workflow/nodes/if-else/panel.tsx create mode 100644 web/app/components/workflow/nodes/knowledge-retrieval/node.tsx create mode 100644 web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx create mode 100644 web/app/components/workflow/nodes/llm/node.tsx create mode 100644 web/app/components/workflow/nodes/llm/panel.tsx create mode 100644 web/app/components/workflow/nodes/question-classifier/node.tsx create mode 100644 web/app/components/workflow/nodes/question-classifier/panel.tsx create mode 100644 web/app/components/workflow/nodes/template-transform/node.tsx create mode 100644 web/app/components/workflow/nodes/template-transform/panel.tsx create mode 100644 web/app/components/workflow/nodes/tool/node.tsx create mode 100644 web/app/components/workflow/nodes/tool/panel.tsx diff --git a/web/app/(commonLayout)/workflow/nodes/page.tsx b/web/app/(commonLayout)/workflow/nodes/page.tsx new file mode 100644 index 0000000000..22e4804ab7 --- /dev/null +++ b/web/app/(commonLayout)/workflow/nodes/page.tsx @@ -0,0 +1,49 @@ +'use client' + +import type { FC } from 'react' +import { memo } from 'react' +import Workflow from '@/app/components/workflow' +const nodes = [ + 'start', 'directAnswer', 'llm', 'knowledgeRetrieval', 'questionClassifier', + 'questionClassifier', 'ifElse', 'code', 'templateTransform', 'http', + 'tool', +].map((item, i) => ({ + id: `${i + 1}`, + type: 'custom', + position: { x: 330, y: 30 + i * 200 }, + data: { type: item }, +})) +const initialNodes = nodes + +const initialEdges = [ + { + id: '1', + source: '1', + target: '2', + type: 'custom', + }, + { + id: '2', + source: '2', + target: '3', + type: 'custom', + }, + { + id: '3', + source: '2', + target: '4', + type: 'custom', + }, +] + +const Page: FC = () => { + return ( +
+ +
+ ) +} +export default memo(Page) diff --git a/web/app/components/workflow/nodes/_base/panel.tsx b/web/app/components/workflow/nodes/_base/panel.tsx index afcb536b2d..51d12214d1 100644 --- a/web/app/components/workflow/nodes/_base/panel.tsx +++ b/web/app/components/workflow/nodes/_base/panel.tsx @@ -14,15 +14,15 @@ enum TabEnum { type BasePanelProps = { defaultElement?: ReactNode inputsElement?: ReactNode - ouputsElement?: ReactNode + outputsElement?: ReactNode } const BasePanel: FC = ({ defaultElement, inputsElement, - ouputsElement, + outputsElement, }) => { - const initialActiveTab = inputsElement ? TabEnum.Inputs : ouputsElement ? TabEnum.Outputs : '' + const initialActiveTab = inputsElement ? TabEnum.Inputs : outputsElement ? TabEnum.Outputs : '' const [activeTab, setActiveTab] = useState(initialActiveTab) const { handleSelectedNodeIdChange } = useWorkflowContext() @@ -46,7 +46,7 @@ const BasePanel: FC = ({ { - (inputsElement || ouputsElement) && ( + (inputsElement || outputsElement) && (
{ inputsElement && ( @@ -59,7 +59,7 @@ const BasePanel: FC = ({ ) } { - ouputsElement && ( + outputsElement && (
setActiveTab(TabEnum.Outputs)} @@ -74,7 +74,7 @@ const BasePanel: FC = ({
{defaultElement} {activeTab === TabEnum.Inputs && inputsElement} - {activeTab === TabEnum.Outputs && ouputsElement} + {activeTab === TabEnum.Outputs && outputsElement}
next step diff --git a/web/app/components/workflow/nodes/code/node.tsx b/web/app/components/workflow/nodes/code/node.tsx new file mode 100644 index 0000000000..d9f80001b7 --- /dev/null +++ b/web/app/components/workflow/nodes/code/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
code
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/code/panel.tsx b/web/app/components/workflow/nodes/code/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/code/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs
} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/constants.ts b/web/app/components/workflow/nodes/constants.ts index 25ee51a6c2..66f1464eb1 100644 --- a/web/app/components/workflow/nodes/constants.ts +++ b/web/app/components/workflow/nodes/constants.ts @@ -1,11 +1,51 @@ import type { ComponentType } from 'react' import StartNode from './start/node' import StartPanel from './start/panel' +import EndNode from './end/node' +import EndPanel from './end/panel' +import DirectAnswerNode from './direct-answer/node' +import DirectAnswerPanel from './direct-answer/panel' +import LLMNode from './llm/node' +import LLMPanel from './llm/panel' +import KnowledgeRetrievalNode from './knowledge-retrieval/node' +import KnowledgeRetrievalPanel from './knowledge-retrieval/panel' +import QuestionClassifierNode from './question-classifier/node' +import QuestionClassifierPanel from './question-classifier/panel' +import IfElseNode from './if-else/node' +import IfElsePanel from './if-else/panel' +import CodeNode from './code/node' +import CodePanel from './code/panel' +import TemplateTransformNode from './template-transform/node' +import TemplateTransformPanel from './template-transform/panel' +import HttpNode from './http/node' +import HttpPanel from './http/panel' +import ToolNode from './tool/node' +import ToolPanel from './tool/panel' export const NodeMap: Record = { start: StartNode, + end: EndNode, + directAnswer: DirectAnswerNode, + llm: LLMNode, + knowledgeRetrieval: KnowledgeRetrievalNode, + questionClassifier: QuestionClassifierNode, + ifElse: IfElseNode, + code: CodeNode, + templateTransform: TemplateTransformNode, + http: HttpNode, + tool: ToolNode, } export const PanelMap: Record = { start: StartPanel, + end: EndPanel, + directAnswer: DirectAnswerPanel, + llm: LLMPanel, + knowledgeRetrieval: KnowledgeRetrievalPanel, + questionClassifier: QuestionClassifierPanel, + ifElse: IfElsePanel, + code: CodePanel, + templateTransform: TemplateTransformPanel, + http: HttpPanel, + tool: ToolPanel, } diff --git a/web/app/components/workflow/nodes/direct-answer/node.tsx b/web/app/components/workflow/nodes/direct-answer/node.tsx new file mode 100644 index 0000000000..c054a708a6 --- /dev/null +++ b/web/app/components/workflow/nodes/direct-answer/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
directAnswer
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/direct-answer/panel.tsx b/web/app/components/workflow/nodes/direct-answer/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/direct-answer/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs
} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/end/node.tsx b/web/app/components/workflow/nodes/end/node.tsx new file mode 100644 index 0000000000..dd7b5a3bdf --- /dev/null +++ b/web/app/components/workflow/nodes/end/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
end
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/end/panel.tsx b/web/app/components/workflow/nodes/end/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/end/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs
} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/http/node.tsx b/web/app/components/workflow/nodes/http/node.tsx new file mode 100644 index 0000000000..1231cefae6 --- /dev/null +++ b/web/app/components/workflow/nodes/http/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
http
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/http/panel.tsx b/web/app/components/workflow/nodes/http/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/http/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/if-else/node.tsx b/web/app/components/workflow/nodes/if-else/node.tsx new file mode 100644 index 0000000000..91ac8c96a2 --- /dev/null +++ b/web/app/components/workflow/nodes/if-else/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
if else
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/if-else/panel.tsx b/web/app/components/workflow/nodes/if-else/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/if-else/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/node.tsx b/web/app/components/workflow/nodes/knowledge-retrieval/node.tsx new file mode 100644 index 0000000000..25c14b4308 --- /dev/null +++ b/web/app/components/workflow/nodes/knowledge-retrieval/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
knowledge-retrieval
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx b/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/llm/node.tsx b/web/app/components/workflow/nodes/llm/node.tsx new file mode 100644 index 0000000000..d11b1aba28 --- /dev/null +++ b/web/app/components/workflow/nodes/llm/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
llm
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/llm/panel.tsx b/web/app/components/workflow/nodes/llm/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/llm/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/question-classifier/node.tsx b/web/app/components/workflow/nodes/question-classifier/node.tsx new file mode 100644 index 0000000000..0df8e60e5a --- /dev/null +++ b/web/app/components/workflow/nodes/question-classifier/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
question-classifier
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/question-classifier/panel.tsx b/web/app/components/workflow/nodes/question-classifier/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/question-classifier/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/start/panel.tsx b/web/app/components/workflow/nodes/start/panel.tsx index bed1dfe64c..ca61bbcc67 100644 --- a/web/app/components/workflow/nodes/start/panel.tsx +++ b/web/app/components/workflow/nodes/start/panel.tsx @@ -5,7 +5,7 @@ const Panel: FC = () => { return ( start panel inputs} - ouputsElement={
start panel outputs
} + outputsElement={
start panel outputs
} /> ) } diff --git a/web/app/components/workflow/nodes/template-transform/node.tsx b/web/app/components/workflow/nodes/template-transform/node.tsx new file mode 100644 index 0000000000..5fd7be022c --- /dev/null +++ b/web/app/components/workflow/nodes/template-transform/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
template-transform
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/template-transform/panel.tsx b/web/app/components/workflow/nodes/template-transform/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/template-transform/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel diff --git a/web/app/components/workflow/nodes/tool/node.tsx b/web/app/components/workflow/nodes/tool/node.tsx new file mode 100644 index 0000000000..bca392dc4d --- /dev/null +++ b/web/app/components/workflow/nodes/tool/node.tsx @@ -0,0 +1,12 @@ +import type { FC } from 'react' +import BaseNode from '../_base/node' + +const Node: FC = () => { + return ( + +
tool
+
+ ) +} + +export default Node diff --git a/web/app/components/workflow/nodes/tool/panel.tsx b/web/app/components/workflow/nodes/tool/panel.tsx new file mode 100644 index 0000000000..ca61bbcc67 --- /dev/null +++ b/web/app/components/workflow/nodes/tool/panel.tsx @@ -0,0 +1,13 @@ +import type { FC } from 'react' +import BasePanel from '../_base/panel' + +const Panel: FC = () => { + return ( + start panel inputs} + outputsElement={
start panel outputs
} + /> + ) +} + +export default Panel