1
1
import { WorkflowTask } from '@/shared/middleware/platform/configuration' ;
2
2
import { BranchCaseType } from '@/shared/types' ;
3
3
4
+ function updateTaskParameter ( task : WorkflowTask , parameterKey : string , parameterValue : unknown ) : WorkflowTask {
5
+ return {
6
+ ...task ,
7
+ parameters : {
8
+ ...task . parameters ,
9
+ [ parameterKey ] : parameterValue ,
10
+ } ,
11
+ } ;
12
+ }
13
+
14
+ function updateTaskArray ( task : WorkflowTask , parameterKey : string , taskToReplace : WorkflowTask ) : WorkflowTask {
15
+ const tasks = task . parameters ?. [ parameterKey ] as WorkflowTask [ ] ;
16
+
17
+ if ( ! tasks ) {
18
+ return task ;
19
+ }
20
+
21
+ return updateTaskParameter ( task , parameterKey , getRecursivelyUpdatedTasks ( tasks , taskToReplace ) ) ;
22
+ }
23
+
4
24
export default function getRecursivelyUpdatedTasks (
5
25
tasks : Array < WorkflowTask > ,
6
26
taskToReplace : WorkflowTask
@@ -15,83 +35,60 @@ export default function getRecursivelyUpdatedTasks(
15
35
}
16
36
17
37
if ( task . parameters ?. caseTrue || task . parameters ?. caseFalse ) {
18
- const updatedTask = { ...task } ;
38
+ let updatedTask = { ...task } ;
19
39
20
40
if ( task . parameters . caseTrue ) {
21
- updatedTask . parameters = {
22
- ...updatedTask . parameters ,
23
- caseTrue : getRecursivelyUpdatedTasks ( task . parameters . caseTrue , taskToReplace ) ,
24
- } ;
41
+ updatedTask = updateTaskArray ( updatedTask , 'caseTrue' , taskToReplace ) ;
25
42
}
26
43
27
44
if ( task . parameters . caseFalse ) {
28
- updatedTask . parameters = {
29
- ...updatedTask . parameters ,
30
- caseFalse : getRecursivelyUpdatedTasks ( task . parameters . caseFalse , taskToReplace ) ,
31
- } ;
45
+ updatedTask = updateTaskArray ( updatedTask , 'caseFalse' , taskToReplace ) ;
32
46
}
33
47
34
48
return updatedTask ;
35
49
}
36
50
37
51
if ( task . parameters ?. iteratee ) {
38
- return {
39
- ...task ,
40
- parameters : {
41
- ...task . parameters ,
42
- iteratee : getRecursivelyUpdatedTasks ( task . parameters . iteratee , taskToReplace ) ,
43
- } ,
44
- } ;
52
+ if ( Array . isArray ( task . parameters . iteratee ) ) {
53
+ return updateTaskArray ( task , 'iteratee' , taskToReplace ) ;
54
+ } else {
55
+ return updateTaskParameter (
56
+ task ,
57
+ 'iteratee' ,
58
+ getRecursivelyUpdatedTasks ( [ task . parameters . iteratee ] , taskToReplace ) [ 0 ]
59
+ ) ;
60
+ }
45
61
}
46
62
47
63
if ( task . parameters ?. cases ) {
48
- const updatedTask = { ...task } ;
64
+ let updatedTask = { ...task } ;
49
65
50
66
if ( task . parameters . default ) {
51
- updatedTask . parameters = {
52
- ...updatedTask . parameters ,
53
- default : getRecursivelyUpdatedTasks ( task . parameters . default , taskToReplace ) ,
54
- } ;
67
+ updatedTask = updateTaskArray ( updatedTask , 'default' , taskToReplace ) ;
55
68
}
56
69
57
70
if ( task . parameters . cases ) {
58
- updatedTask . parameters = {
59
- ...updatedTask . parameters ,
60
- cases : ( task . parameters . cases as BranchCaseType [ ] ) . map ( ( caseItem ) => {
61
- const updatedCaseItem = { ...caseItem } ;
62
-
63
- if ( caseItem . tasks ) {
64
- updatedCaseItem . tasks = getRecursivelyUpdatedTasks ( caseItem . tasks , taskToReplace ) ;
65
- }
66
-
67
- return updatedCaseItem ;
68
- } ) ,
69
- } ;
71
+ const updatedCases = ( task . parameters . cases as BranchCaseType [ ] ) . map ( ( caseItem ) => ( {
72
+ ...caseItem ,
73
+ tasks : caseItem . tasks ? getRecursivelyUpdatedTasks ( caseItem . tasks , taskToReplace ) : caseItem . tasks ,
74
+ } ) ) ;
75
+
76
+ updatedTask = updateTaskParameter ( updatedTask , 'cases' , updatedCases ) ;
70
77
}
71
78
72
79
return updatedTask ;
73
80
}
74
81
75
82
if ( task . parameters ?. tasks ) {
76
- return {
77
- ...task ,
78
- parameters : {
79
- ...task . parameters ,
80
- tasks : getRecursivelyUpdatedTasks ( task . parameters . tasks , taskToReplace ) ,
81
- } ,
82
- } ;
83
+ return updateTaskArray ( task , 'tasks' , taskToReplace ) ;
83
84
}
84
85
85
86
if ( task . parameters ?. branches ) {
86
- return {
87
- ...task ,
88
- parameters : {
89
- ...task . parameters ,
90
- branches : ( ( task . parameters ?. branches as WorkflowTask [ ] [ ] ) || [ ] ) . map ( ( branch ) =>
91
- getRecursivelyUpdatedTasks ( branch , taskToReplace )
92
- ) ,
93
- } ,
94
- } ;
87
+ const updatedBranches = ( ( task . parameters ?. branches as WorkflowTask [ ] [ ] ) || [ ] ) . map ( ( branch ) =>
88
+ getRecursivelyUpdatedTasks ( branch , taskToReplace )
89
+ ) ;
90
+
91
+ return updateTaskParameter ( task , 'branches' , updatedBranches ) ;
95
92
}
96
93
97
94
return task ;
0 commit comments