Commit 1a4c2e77 authored by Joel's avatar Joel

feat: nodes placeholder

parent f3c78fe7
'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 (
<div className='min-w-[720px] w-full h-full overflow-x-auto'>
<Workflow
nodes={initialNodes}
edges={initialEdges}
/>
</div>
)
}
export default memo(Page)
......@@ -14,15 +14,15 @@ enum TabEnum {
type BasePanelProps = {
defaultElement?: ReactNode
inputsElement?: ReactNode
ouputsElement?: ReactNode
outputsElement?: ReactNode
}
const BasePanel: FC<BasePanelProps> = ({
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<BasePanelProps> = ({
</div>
</div>
{
(inputsElement || ouputsElement) && (
(inputsElement || outputsElement) && (
<div className='flex items-center px-4 h-[42px]'>
{
inputsElement && (
......@@ -59,7 +59,7 @@ const BasePanel: FC<BasePanelProps> = ({
)
}
{
ouputsElement && (
outputsElement && (
<div
className='ml-4 cursor-pointer'
onClick={() => setActiveTab(TabEnum.Outputs)}
......@@ -74,7 +74,7 @@ const BasePanel: FC<BasePanelProps> = ({
<div className='py-2 border-t-[0.5px] border-b-[0.5px] border-black/5'>
{defaultElement}
{activeTab === TabEnum.Inputs && inputsElement}
{activeTab === TabEnum.Outputs && ouputsElement}
{activeTab === TabEnum.Outputs && outputsElement}
</div>
<div className='p-4'>
next step
......
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>code</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
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<string, ComponentType> = {
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<string, ComponentType> = {
start: StartPanel,
end: EndPanel,
directAnswer: DirectAnswerPanel,
llm: LLMPanel,
knowledgeRetrieval: KnowledgeRetrievalPanel,
questionClassifier: QuestionClassifierPanel,
ifElse: IfElsePanel,
code: CodePanel,
templateTransform: TemplateTransformPanel,
http: HttpPanel,
tool: ToolPanel,
}
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>directAnswer</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>end</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>http</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>if else</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>knowledge-retrieval</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>llm</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>question-classifier</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
......@@ -5,7 +5,7 @@ const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
ouputsElement={<div>start panel outputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
......
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>template-transform</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
import type { FC } from 'react'
import BaseNode from '../_base/node'
const Node: FC = () => {
return (
<BaseNode>
<div>tool</div>
</BaseNode>
)
}
export default Node
import type { FC } from 'react'
import BasePanel from '../_base/panel'
const Panel: FC = () => {
return (
<BasePanel
inputsElement={<div>start panel inputs</div>}
outputsElement={<div>start panel outputs</div>}
/>
)
}
export default Panel
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment