Skip to content

Commit 85c8269

Browse files
committed
add operators informations
1 parent 505d440 commit 85c8269

56 files changed

Lines changed: 1279 additions & 57 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

otoroshi/javascript/src/components/nginputs/inputs.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ export class NgStringRenderer extends Component {
368368
className="form-control"
369369
placeholder={props.placeholder}
370370
title={props.help}
371+
autoFocus={props.autoFocus}
371372
value={
372373
this.state.touched ? this.props.value || '' : this.props.value || defaultValue || ''
373374
}

otoroshi/javascript/src/extensions/workflows/Flow.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React from 'react';
22

33
import { Node } from './flow/Node'
44
import { GroupNode } from './flow/GroupNode'
5-
import { IfThenElseNode } from './flow/IfThenElseNode'
65
import { CustomEdge } from './flow/CustomEdge'
76
import { AddNode } from './nodes/AddNode'
87
import { ReactFlow, Background, Controls } from '@xyflow/react';
@@ -27,7 +26,6 @@ export function Flow({ nodes, onClick, edges, onNodesChange, onEdgesChange, onCo
2726
nodeTypes={{
2827
simple: Node,
2928
group: GroupNode,
30-
IfThenElse: IfThenElseNode,
3129
AddNode: AddNode
3230
}}
3331
edgeTypes={{

otoroshi/javascript/src/extensions/workflows/ModalEditor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export function ModalEditor({ node }) {
4848
console.log(node)
4949

5050
return <div className='modal-editor'>
51-
<p className='p-3 whats-next-title'>{node.name}</p>
51+
<p className='p-3 m-0 whats-next-title'>{node.name}</p>
5252
<div className='p-3'>
5353
<NgForm
5454
schema={schema}

otoroshi/javascript/src/extensions/workflows/Navbar.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export function Navbar({ workflow, save }) {
55

66
return <div className='workflow-navbar d-flex align-items-center justify-content-between'>
77
<div className='d-flex-center gap-3'>
8-
<p>{workflow.name}</p>
8+
<p className='m-0'>{workflow.name}</p>
99
<button className='add-tag'><i className='fas fa-plus' />Add tag</button>
1010
</div>
1111

otoroshi/javascript/src/extensions/workflows/WhatsNext.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ function Search({ query, onChange }) {
99
value={query}
1010
schema={{
1111
props: {
12-
placeholder: "Search nodes..."
13-
}
12+
placeholder: "Search nodes...",
13+
autoFocus: true
14+
},
1415
}}
1516
label={' '}
1617
ngOptions={{ spread: true }}

otoroshi/javascript/src/extensions/workflows/WhatsNextItemsSelector.js

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,47 @@ import { WaitNode } from "./nodes/WaitNode"
1414
import { ErrorNode } from "./nodes/ErrorNode"
1515
import { ValueNode } from "./nodes/ValueNode"
1616

17+
import { BasicAuthOperator } from './operators/BasicAuthOperator'
18+
import { EqOperator } from './operators/EqOperator'
19+
import { NowOperator } from './operators/NowOperator'
20+
import { IsFalsyOperator } from './operators/IsFalsyOperator'
21+
import { AddOperator } from './operators/AddOperator'
22+
import { ArrayAppendOperator } from './operators/ArrayAppendOperator'
23+
import { NeqOperator } from './operators/NeqOperator'
24+
import { ArrayAtOperator } from './operators/ArrayAtOperator'
25+
import { ParseDateOperator } from './operators/ParseDateOperator'
26+
import { ParseDateTimeOperator } from './operators/ParseDateTimeOperator'
27+
import { ArrayPageOperator } from './operators/ArrayPageOperator'
28+
import { MapGetOperator } from './operators/MapGetOperator'
29+
import { ParseTimeOperator } from './operators/ParseTimeOperator'
30+
import { MemRefOperator } from './operators/MemRefOperator'
31+
import { StrLowerCaseOperator } from './operators/StrLowerCaseOperator'
32+
import { EncodeBase64Operator } from './operators/EncodeBase64Operator'
33+
import { ExpressionLanguageOperator } from './operators/ExpressionLanguageOperator'
34+
import { NotOperator } from './operators/NotOperator'
35+
import { ProjectionOperator } from './operators/ProjectionOperator'
36+
import { LteOperator } from './operators/LteOperator'
37+
import { StrSplitOperator } from './operators/StrSplitOperator'
38+
import { ArrayPrependOperator } from './operators/ArrayPrependOperator'
39+
import { DecodeBase64Operator } from './operators/DecodeBase64Operator'
40+
import { SubtractOperator } from './operators/SubtractOperator'
41+
import { JsonParseOperator } from './operators/JsonParseOperator'
42+
import { ContainsOperator } from './operators/ContainsOperator'
43+
import { GteOperator } from './operators/GteOperator'
44+
import { LtOperator } from './operators/LtOperator'
45+
import { DivideOperator } from './operators/DivideOperator'
46+
import { MapPutOperator } from './operators/MapPutOperator'
47+
import { MultiplyOperator } from './operators/MultiplyOperator'
48+
import { StrConcatOperator } from './operators/StrConcatOperator'
49+
import { GtOperator } from './operators/GtOperator'
50+
import { StrUpperCaseOperator } from './operators/StrUpperCaseOperator'
51+
import { IsTruthyOperator } from './operators/IsTruthyOperator'
52+
import { MapDelOperator } from './operators/MapDelOperator'
53+
import { ArrayDelOperator } from './operators/ArrayDelOperator'
54+
import { DecrOperator } from './operators/DecrOperator'
55+
import { IncrOperator } from './operators/IncrOperator'
56+
57+
1758
const ITEMS_BY_CATEGORY = [
1859
{
1960
name: "Flow",
@@ -42,7 +83,7 @@ const ITEMS_BY_CATEGORY = [
4283
},
4384
{
4485
name: 'Predicate',
45-
description: 'Operators are one-key JSON objects (e.g. { "$eq": { ... } }) used to manipulate data',
86+
description: 'Operators are one-key JSON objects used to manipulate data',
4687
nodes: {
4788
"$mem_ref": MemRefOperator(),
4889
"$array_append": ArrayAppendOperator(),
@@ -70,13 +111,18 @@ const ITEMS_BY_CATEGORY = [
70111
"$basic_auth": BasicAuthOperator(),
71112
"$now": NowOperator(),
72113
"$not": NotOperator(),
73-
"$parse_datetime": ParseDatetimeOperator(),
114+
"$parse_datetime": ParseDateTimeOperator(),
74115
"$parse_date": ParseDateOperator(),
75116
"$parse_time": ParseTimeOperator(),
76117
"$add": AddOperator(),
77118
"$subtract": SubtractOperator(),
78119
"$multiply": MultiplyOperator(),
79120
"$divide": DivideOperator(),
121+
"$incr": IncrOperator(),
122+
"$decr": DecrOperator(),
123+
"$str_upper_case": StrUpperCaseOperator(),
124+
"$str_lower_case": StrLowerCaseOperator(),
125+
"$str_split": StrSplitOperator(),
80126
"$expression_language": ExpressionLanguageOperator(),
81127
}
82128
}
@@ -87,8 +133,8 @@ function Category(item) {
87133

88134
return <div className='whats-new-category d-flex-center justify-content-between px-3 py-2' onClick={() => onClick(item)}>
89135
<div className='whats-next-category-informations'>
90-
<p>{name}</p>
91-
<p>{description}</p>
136+
<p className='m-0'>{name}</p>
137+
<p className='m-0'>{description}</p>
92138
</div>
93139
<i className='fas fa-arrow-right' />
94140
</div>
@@ -102,7 +148,7 @@ function UnFoldedCategory({ nodes, onClick, query }) {
102148
node.description.toLowerCase().includes(query))
103149

104150
if (filteredNodes.length === 0)
105-
return <p className='text-center'>No results found</p>
151+
return <p className='text-center m-0'>No results found</p>
106152

107153
return filteredNodes
108154
.map(([_, node]) => <div
@@ -116,10 +162,10 @@ function UnFoldedCategory({ nodes, onClick, query }) {
116162
{node.label}
117163
</div>
118164
<div className=' d-flex flex-column px-2'>
119-
<p style={{
165+
<p className='m-0' style={{
120166
fontWeight: 'bold'
121167
}}>{node.name}</p>
122-
<p>{node.description}</p>
168+
<p className='m-0'>{node.description}</p>
123169
</div>
124170
</div>
125171
)
@@ -146,7 +192,7 @@ export function Items({ setTitle, handleSelectNode, isOpen, query }) {
146192
node.description.toLowerCase().includes(query)))
147193

148194
if (categories.length === 0)
149-
return <p className='text-center'>No results found</p>
195+
return <p className='text-center m-0'>No results found</p>
150196

151197
return categories.map(category => <Category {...category}
152198
id={category.name}

otoroshi/javascript/src/extensions/workflows/WorkflowsDesigner.js

Lines changed: 57 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
} from '@xyflow/react';
1919
import { NewTask } from './flow/NewTask';
2020
import { findNonOverlappingPosition } from './NewNodeSpawn';
21-
import { NODES } from './models/Functions';
21+
import { NODES, OPERATORS } from './models/Functions';
2222

2323
const queryClient = new QueryClient({
2424
defaultOptions: {
@@ -73,7 +73,13 @@ function Container(props) {
7373
}
7474

7575
export function defaultNode(nodes, node, firstStep) {
76-
const data = NODES[(node.kind || node.data.kind).toLowerCase()](node)
76+
let data = NODES[(node.kind || node.data.kind).toLowerCase()]
77+
78+
if (data)
79+
data = data(node)
80+
81+
if (!data)
82+
data = OPERATORS[(node.kind || node.data.kind).toLowerCase()](node)
7783

7884
return {
7985
id: uuid(),
@@ -99,6 +105,35 @@ function createNode(id, existingNodes, child, isFirst, addInformationsToNode) {
99105
}
100106
}
101107

108+
function createAndLinkChildNode(parentId, nodes, node, addInformationsToNode, handle) {
109+
let config = node
110+
111+
// create child operator node
112+
if (typeof node === "object" && node !== null && Object.keys(node).find(key => key.startsWith('$'))) {
113+
config = {
114+
kind: Object.keys(node).find(key => key.startsWith('$'))
115+
}
116+
}
117+
118+
// console.log(config)
119+
120+
const childNode = createNode(uuid(), nodes.map(r => r.position), config, false, addInformationsToNode)
121+
childNode.data.isInternal = true
122+
123+
return {
124+
node: childNode,
125+
edge: {
126+
id: uuid(),
127+
source: parentId,
128+
sourceHandle: `${handle}-${parentId}`,
129+
target: childNode.id,
130+
targetHandle: `input-${childNode.id}`,
131+
type: 'customEdge',
132+
animated: true,
133+
}
134+
}
135+
}
136+
102137
function getInitialNodesFromWorkflow(workflow, addInformationsToNode) {
103138
if (!workflow)
104139
return { edges: [], nodes: [] }
@@ -118,22 +153,28 @@ function getInitialNodesFromWorkflow(workflow, addInformationsToNode) {
118153

119154
const { workflow } = nodes[i].data
120155

121-
if (workflow.node) {
122-
const childNode = createNode(uuid(), nodes.map(r => r.position), workflow.node, false, addInformationsToNode)
123-
childNode.data.isInternal = true
124-
nodes.push(childNode)
156+
// console.log(workflow)
157+
const parentId = nodes[i].id
125158

126-
edges.push({
127-
id: uuid(),
128-
source: nodes[i].id,
129-
sourceHandle: `node-${nodes[i].id}`,
130-
target: childNode.id,
131-
targetHandle: `input-${childNode.id}`,
132-
type: 'customEdge',
133-
animated: true,
134-
})
159+
if (workflow.node) {
160+
const { node, edge } = createAndLinkChildNode(parentId, nodes, workflow.node, addInformationsToNode, 'node')
161+
nodes.push(node)
162+
edges.push(edge)
163+
} else if (workflow.kind === "if") {
164+
const ifOperator = createAndLinkChildNode(parentId, nodes, workflow.predicate, addInformationsToNode, 'predicate')
165+
nodes.push(ifOperator.node)
166+
edges.push(ifOperator.edge)
167+
168+
const elseOperator = createAndLinkChildNode(parentId, nodes, workflow.else, addInformationsToNode, 'else')
169+
nodes.push(elseOperator.node)
170+
edges.push(elseOperator.edge)
171+
172+
const thenOperator = createAndLinkChildNode(parentId, nodes, workflow.then, addInformationsToNode, 'then')
173+
nodes.push(thenOperator.node)
174+
edges.push(thenOperator.edge)
135175
}
136176

177+
137178
nodes[i] = {
138179
...nodes[i],
139180
data: {
@@ -392,7 +433,7 @@ function WorkflowsDesigner(props) {
392433
}
393434
});
394435

395-
console.log(edges)
436+
// console.log(edges)
396437

397438
return <div className='workflow'>
398439
<DesignerActions run={run} />

otoroshi/javascript/src/extensions/workflows/flow/IfThenElseNode.js

Lines changed: 0 additions & 20 deletions
This file was deleted.

otoroshi/javascript/src/extensions/workflows/flow/Node.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React, { useEffect } from 'react'
33

44
import Handles from './Handles';
55
import NodeTrashButton from './NodeTrashButton';
6-
import { Handle, NodeResizer, Position } from '@xyflow/react';
6+
import { NodeResizer } from '@xyflow/react';
77

88
export function Node(props) {
99
const { data } = props

0 commit comments

Comments
 (0)