Skip to content

Commit d25fcc2

Browse files
committed
update swarm handoff orders
1 parent 984b654 commit d25fcc2

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

src/waldiez/containers/nodes/agent/modal/tabs/swarm/handoffs.tsx

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,31 @@ export const WaldiezAgentSwarmHandoffs = (props: WaldiezAgentSwarmHandoffsProps)
1717
const onConditionHandoffsCount = agentOnConditionHandoffs.length;
1818
const afterWorkHandoffs = agentHandoffs.filter(isAfterWork);
1919
const onMoveAgentHandoffUp = (index: number) => {
20-
const onConditions = [...agentOnConditionHandoffs];
21-
const temp = onConditions[index];
22-
onConditions[index - 1].target.order = index;
23-
onConditions[index] = onConditions[index - 1];
24-
onConditions[index - 1] = temp;
20+
const tmpConditions = [...agentOnConditionHandoffs] as WaldiezSwarmOnCondition[];
21+
//swap the members and sort by .order
22+
const prev = tmpConditions[index - 1];
23+
const thisCondition = tmpConditions[index];
24+
tmpConditions[index - 1] = thisCondition;
25+
tmpConditions[index] = prev;
26+
const onConditions = tmpConditions.map((condition, i) => {
27+
condition.target.order = i;
28+
return condition;
29+
});
2530
setToSort([...onConditions]);
2631
const allHandoffs = [...onConditions, ...afterWorkHandoffs];
2732
onDataChange({ handoffs: allHandoffs });
2833
};
2934
const onMoveAgentHandoffDown = (index: number) => {
30-
const onConditions = [...agentOnConditionHandoffs];
31-
const temp = onConditions[index];
32-
onConditions[index + 1].target.order = index;
33-
onConditions[index] = onConditions[index + 1];
34-
onConditions[index + 1] = temp;
35+
const tmpConditions = [...agentOnConditionHandoffs];
36+
//swap the members and sort by .order
37+
const next = tmpConditions[index + 1];
38+
const thisCondition = tmpConditions[index];
39+
tmpConditions[index + 1] = thisCondition;
40+
tmpConditions[index] = next;
41+
const onConditions = tmpConditions.map((condition, i) => {
42+
condition.target.order = i;
43+
return condition;
44+
});
3545
setToSort([...onConditions]);
3646
const allHandoffs = [...onConditions, ...afterWorkHandoffs];
3747
onDataChange({ handoffs: allHandoffs });

src/waldiez/models/mappers/agent/utils/swarm.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { WaldiezSwarmAfterWork, WaldiezSwarmUpdateSystemMessage } from "@waldiez/models";
1+
import {
2+
WaldiezSwarmAfterWork,
3+
WaldiezSwarmHandoff,
4+
WaldiezSwarmOnCondition,
5+
WaldiezSwarmUpdateSystemMessage,
6+
} from "@waldiez/models";
27

38
export const getSwarmFunctions = (jsonData: any): string[] => {
49
const functions: string[] = [];
@@ -47,10 +52,9 @@ export const getIsInitial = (jsonData: any): boolean => {
4752
};
4853

4954
export const getSwarmHandoffs = (jsonData: any): any[] => {
50-
// split into two functions
51-
const handoffs: any[] = [];
55+
const afterWorkHandoffs: WaldiezSwarmAfterWork[] = [];
56+
const onConditionHandoffs: WaldiezSwarmOnCondition[] = [];
5257
if (jsonData && jsonData.handoffs && Array.isArray(jsonData.handoffs)) {
53-
// export type WaldiezSwarmHandoff = WaldiezSwarmAfterWork | WaldiezSwarmOnCondition;
5458
jsonData.handoffs.forEach((handoff: any) => {
5559
if (typeof handoff === "object") {
5660
if (
@@ -63,7 +67,7 @@ export const getSwarmHandoffs = (jsonData: any): any[] => {
6367
// afterWork?
6468
const afterWork = getSwarmAfterWorkHandoff(handoff);
6569
if (afterWork) {
66-
handoffs.push(afterWork);
70+
afterWorkHandoffs.push(afterWork);
6771
}
6872
} else if (
6973
"target" in handoff &&
@@ -74,12 +78,14 @@ export const getSwarmHandoffs = (jsonData: any): any[] => {
7478
// onCondition ?
7579
const onCondition = getSwarmOnConditionHandoff(handoff);
7680
if (onCondition) {
77-
handoffs.push(onCondition);
81+
onConditionHandoffs.push(onCondition);
7882
}
7983
}
8084
}
8185
});
8286
}
87+
const sortedOnConditions = onConditionHandoffs.sort((a, b) => a.target.order - b.target.order);
88+
const handoffs: WaldiezSwarmHandoff[] = [...afterWorkHandoffs, ...sortedOnConditions];
8389
return handoffs;
8490
};
8591

0 commit comments

Comments
 (0)