Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
dify
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ai-tech
dify
Commits
1a4c2e77
Commit
1a4c2e77
authored
Feb 06, 2024
by
Joel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: nodes placeholder
parent
f3c78fe7
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
346 additions
and
7 deletions
+346
-7
page.tsx
web/app/(commonLayout)/workflow/nodes/page.tsx
+49
-0
panel.tsx
web/app/components/workflow/nodes/_base/panel.tsx
+6
-6
node.tsx
web/app/components/workflow/nodes/code/node.tsx
+12
-0
panel.tsx
web/app/components/workflow/nodes/code/panel.tsx
+13
-0
constants.ts
web/app/components/workflow/nodes/constants.ts
+40
-0
node.tsx
web/app/components/workflow/nodes/direct-answer/node.tsx
+12
-0
panel.tsx
web/app/components/workflow/nodes/direct-answer/panel.tsx
+13
-0
node.tsx
web/app/components/workflow/nodes/end/node.tsx
+12
-0
panel.tsx
web/app/components/workflow/nodes/end/panel.tsx
+13
-0
node.tsx
web/app/components/workflow/nodes/http/node.tsx
+12
-0
panel.tsx
web/app/components/workflow/nodes/http/panel.tsx
+13
-0
node.tsx
web/app/components/workflow/nodes/if-else/node.tsx
+12
-0
panel.tsx
web/app/components/workflow/nodes/if-else/panel.tsx
+13
-0
node.tsx
...pp/components/workflow/nodes/knowledge-retrieval/node.tsx
+12
-0
panel.tsx
...p/components/workflow/nodes/knowledge-retrieval/panel.tsx
+13
-0
node.tsx
web/app/components/workflow/nodes/llm/node.tsx
+12
-0
panel.tsx
web/app/components/workflow/nodes/llm/panel.tsx
+13
-0
node.tsx
...pp/components/workflow/nodes/question-classifier/node.tsx
+12
-0
panel.tsx
...p/components/workflow/nodes/question-classifier/panel.tsx
+13
-0
panel.tsx
web/app/components/workflow/nodes/start/panel.tsx
+1
-1
node.tsx
...app/components/workflow/nodes/template-transform/node.tsx
+12
-0
panel.tsx
...pp/components/workflow/nodes/template-transform/panel.tsx
+13
-0
node.tsx
web/app/components/workflow/nodes/tool/node.tsx
+12
-0
panel.tsx
web/app/components/workflow/nodes/tool/panel.tsx
+13
-0
No files found.
web/app/(commonLayout)/workflow/nodes/page.tsx
0 → 100644
View file @
1a4c2e77
'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
)
web/app/components/workflow/nodes/_base/panel.tsx
View file @
1a4c2e77
...
...
@@ -14,15 +14,15 @@ enum TabEnum {
type
BasePanelProps
=
{
defaultElement
?:
ReactNode
inputsElement
?:
ReactNode
ouputsElement
?:
ReactNode
ou
t
putsElement
?:
ReactNode
}
const
BasePanel
:
FC
<
BasePanelProps
>
=
({
defaultElement
,
inputsElement
,
ouputsElement
,
ou
t
putsElement
,
})
=>
{
const
initialActiveTab
=
inputsElement
?
TabEnum
.
Inputs
:
ouputsElement
?
TabEnum
.
Outputs
:
''
const
initialActiveTab
=
inputsElement
?
TabEnum
.
Inputs
:
ou
t
putsElement
?
TabEnum
.
Outputs
:
''
const
[
activeTab
,
setActiveTab
]
=
useState
(
initialActiveTab
)
const
{
handleSelectedNodeIdChange
}
=
useWorkflowContext
()
...
...
@@ -46,7 +46,7 @@ const BasePanel: FC<BasePanelProps> = ({
</
div
>
</
div
>
{
(
inputsElement
||
ouputsElement
)
&&
(
(
inputsElement
||
ou
t
putsElement
)
&&
(
<
div
className=
'flex items-center px-4 h-[42px]'
>
{
inputsElement
&&
(
...
...
@@ -59,7 +59,7 @@ const BasePanel: FC<BasePanelProps> = ({
)
}
{
ouputsElement
&&
(
ou
t
putsElement
&&
(
<
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
&&
ou
t
putsElement
}
</
div
>
<
div
className=
'p-4'
>
next step
...
...
web/app/components/workflow/nodes/code/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
code
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/code/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/constants.ts
View file @
1a4c2e77
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
,
}
web/app/components/workflow/nodes/direct-answer/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
directAnswer
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/direct-answer/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/end/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
end
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/end/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/http/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
http
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/http/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/if-else/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
if else
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/if-else/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/knowledge-retrieval/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
knowledge-retrieval
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/llm/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
llm
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/llm/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/question-classifier/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
question-classifier
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/question-classifier/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/start/panel.tsx
View file @
1a4c2e77
...
...
@@ -5,7 +5,7 @@ const Panel: FC = () => {
return
(
<
BasePanel
inputsElement=
{
<
div
>
start panel inputs
</
div
>
}
ouputsElement=
{
<
div
>
start panel outputs
</
div
>
}
ou
t
putsElement=
{
<
div
>
start panel outputs
</
div
>
}
/>
)
}
...
...
web/app/components/workflow/nodes/template-transform/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
template-transform
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/template-transform/panel.tsx
0 → 100644
View file @
1a4c2e77
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
web/app/components/workflow/nodes/tool/node.tsx
0 → 100644
View file @
1a4c2e77
import
type
{
FC
}
from
'react'
import
BaseNode
from
'../_base/node'
const
Node
:
FC
=
()
=>
{
return
(
<
BaseNode
>
<
div
>
tool
</
div
>
</
BaseNode
>
)
}
export
default
Node
web/app/components/workflow/nodes/tool/panel.tsx
0 → 100644
View file @
1a4c2e77
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment