Skip to content

Commit 5a4924b

Browse files
committed
Simplify agent flow chart node side container positioning
1 parent 0d207ed commit 5a4924b

File tree

9 files changed

+57
-98
lines changed

9 files changed

+57
-98
lines changed

src/components/Agentic/IncidentDetails/AgentFlowChart/AgentFlowChartNodeToolbar/index.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Position } from "@xyflow/react";
22
import { PlusIcon } from "../../../../common/icons/16px/PlusIcon";
3-
import { MCPServersSideContainer } from "../MCPServersSideContainer";
3+
import { MCPServersContainer } from "../MCPServersSideContainer";
44
import { MCPServersToolbar } from "../MCPServersToolbar";
55
import * as s from "./styles";
66
import type { AgentFlowChartNodeToolbarProps } from "./types";
@@ -15,15 +15,15 @@ export const AgentFlowChartNodeToolbar = ({
1515
showPlusButton
1616
}: AgentFlowChartNodeToolbarProps) => {
1717
const handleAddMCPServer = () => {
18-
onAddMCPServer(position);
18+
onAddMCPServer();
1919
};
2020

2121
const handleEditMCPServer = (server: string) => {
22-
onEditMCPServer(server, position);
22+
onEditMCPServer(server);
2323
};
2424

2525
const handleDeleteMCPServer = (server: string) => {
26-
onDeleteMCPServer(server, position);
26+
onDeleteMCPServer(server);
2727
};
2828

2929
const toolbarItems = [
@@ -55,11 +55,9 @@ export const AgentFlowChartNodeToolbar = ({
5555
return (
5656
<>
5757
{isEditMode ? (
58-
[Position.Top, Position.Bottom].includes(position) && (
59-
<s.NodeToolbarContainer>{sortedToolbarItems}</s.NodeToolbarContainer>
60-
)
58+
<s.NodeToolbarContainer>{sortedToolbarItems}</s.NodeToolbarContainer>
6159
) : (
62-
<MCPServersSideContainer servers={servers} />
60+
<MCPServersContainer servers={servers} />
6361
)}
6462
</>
6563
);

src/components/Agentic/IncidentDetails/AgentFlowChart/AgentFlowChartNodeToolbar/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ export interface AgentFlowChartNodeToolbarProps {
55
isEditMode?: boolean;
66
position: Position;
77
servers: ExtendedAgentMCPServer[];
8-
onAddMCPServer: (position: Position) => void;
9-
onEditMCPServer: (server: string, position: Position) => void;
10-
onDeleteMCPServer: (server: string, position: Position) => void;
8+
onAddMCPServer: () => void;
9+
onEditMCPServer: (server: string) => void;
10+
onDeleteMCPServer: (server: string) => void;
1111
showPlusButton?: boolean;
1212
}

src/components/Agentic/IncidentDetails/AgentFlowChart/MCPServersSideContainer/index.tsx renamed to src/components/Agentic/IncidentDetails/AgentFlowChart/MCPServersContainer/index.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@ import { useViewport } from "@xyflow/react";
22
import { Tooltip } from "../../../../common/v3/Tooltip";
33
import { MCPServerIcon } from "../MCPServerIcon";
44
import * as s from "./styles";
5-
import type { MCPServersSideContainerProps } from "./types";
5+
import type { MCPServersContainerProps } from "./types";
66

77
const DEFAULT_ICON_SIZE = 27; // in pixels
88

9-
export const MCPServersSideContainer = ({
10-
servers
11-
}: MCPServersSideContainerProps) => {
9+
export const MCPServersContainer = ({ servers }: MCPServersContainerProps) => {
1210
const viewport = useViewport();
1311
const zoomLevel = viewport.zoom;
1412

src/components/Agentic/IncidentDetails/AgentFlowChart/MCPServersSideContainer/styles.ts renamed to src/components/Agentic/IncidentDetails/AgentFlowChart/MCPServersContainer/styles.ts

File renamed without changes.

src/components/Agentic/IncidentDetails/AgentFlowChart/MCPServersSideContainer/types.ts renamed to src/components/Agentic/IncidentDetails/AgentFlowChart/MCPServersContainer/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { ExtendedAgentMCPServer } from "../types";
22

3-
export interface MCPServersSideContainerProps {
3+
export interface MCPServersContainerProps {
44
servers: ExtendedAgentMCPServer[];
55
}
66

src/components/Agentic/IncidentDetails/AgentFlowChart/index.tsx

Lines changed: 31 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Position, type Edge } from "@xyflow/react";
22
import { sendUserActionTrackingEvent } from "../../../../utils/actions/sendUserActionTrackingEvent";
3-
import { groupBy } from "../../../../utils/groupBy";
43
import { FlowChart } from "../../common/FlowChart";
54
import type {
65
FlowChartNode,
@@ -23,54 +22,43 @@ const getFlowChartNodeData = ({
2322
isInteractive?: boolean;
2423
isSelected?: boolean;
2524
isEditMode?: boolean;
26-
onAddMCPServer?: (agentName: string, position: Position) => void;
27-
onEditMCPServer?: (
28-
agentName: string,
29-
server: string,
30-
position: Position
31-
) => void;
32-
onDeleteMCPServer?: (
33-
agentName: string,
34-
server: string,
35-
position: Position
36-
) => void;
25+
onAddMCPServer?: (agentName: string) => void;
26+
onEditMCPServer?: (agentName: string, server: string) => void;
27+
onDeleteMCPServer?: (agentName: string, server: string) => void;
3728
}): Partial<FlowChartNodeData> => {
38-
const handleAddMCPServer = (position: Position) => () => {
29+
const handleAddMCPServer = () => {
3930
sendUserActionTrackingEvent(
4031
trackingEvents.AGENT_FLOW_CHART_NODE_ADD_MCP_SERVER_BUTTON_CLICKED,
4132
{
42-
agentName: agent?.name,
43-
position
33+
agentName: agent?.name
4434
}
4535
);
4636

4737
if (!agent) {
4838
return;
4939
}
5040

51-
onAddMCPServer?.(agent.name, position);
41+
onAddMCPServer?.(agent.name);
5242
};
5343

54-
const handleEditMCPServer = (position: Position) => (server: string) => {
44+
const handleEditMCPServer = (server: string) => {
5545
if (!agent) {
5646
return;
5747
}
5848

59-
onEditMCPServer?.(agent.name, server, position);
49+
onEditMCPServer?.(agent.name, server);
6050
};
6151

62-
const handleDeleteMCPServer = (position: Position) => (server: string) => {
52+
const handleDeleteMCPServer = (server: string) => {
6353
if (!agent) {
6454
return;
6555
}
6656

67-
onDeleteMCPServer?.(agent.name, server, position);
57+
onDeleteMCPServer?.(agent.name, server);
6858
};
6959

70-
const serverGroups = groupBy(
71-
agent?.mcp_servers ?? [],
72-
(server) => server.position ?? Position.Top
73-
);
60+
const sideContainerPosition =
61+
agent?.name === "code_resolver" ? Position.Bottom : Position.Top;
7462

7563
return agent
7664
? {
@@ -79,32 +67,24 @@ const getFlowChartNodeData = ({
7967
isRunning: agent.running,
8068
isInteractive,
8169
isDisabled: agent.status === "inactive",
82-
sideContainers: Object.values(Position).map((position) => ({
83-
isVisible: Boolean(
84-
serverGroups[position]?.length > 0 ||
85-
(isEditMode && [Position.Top, Position.Bottom].includes(position))
86-
),
87-
position,
88-
element: (
89-
<AgentFlowChartNodeToolbar
90-
isEditMode={isEditMode}
91-
position={position}
92-
servers={serverGroups[position] ?? []}
93-
onAddMCPServer={handleAddMCPServer(position)}
94-
onEditMCPServer={handleEditMCPServer(position)}
95-
onDeleteMCPServer={handleDeleteMCPServer(position)}
96-
showPlusButton={
97-
isEditMode &&
98-
(["watchman", "triager"].includes(agent.name) ||
99-
(agent.name === "code_resolver" &&
100-
position === Position.Bottom) ||
101-
(agent.name === "infra_resolver" &&
102-
position === Position.Top))
103-
}
104-
/>
105-
),
106-
isKebabMenuVisible: isEditMode
107-
}))
70+
sideContainers: [
71+
{
72+
isVisible: Boolean(agent.mcp_servers.length > 0 || isEditMode),
73+
position: sideContainerPosition,
74+
element: (
75+
<AgentFlowChartNodeToolbar
76+
isEditMode={isEditMode}
77+
position={sideContainerPosition}
78+
servers={agent.mcp_servers}
79+
onAddMCPServer={handleAddMCPServer}
80+
onEditMCPServer={handleEditMCPServer}
81+
onDeleteMCPServer={handleDeleteMCPServer}
82+
showPlusButton={isEditMode}
83+
/>
84+
)
85+
}
86+
],
87+
isKebabMenuVisible: isEditMode
10888
}
10989
: {};
11090
};
@@ -131,11 +111,7 @@ export const AgentFlowChart = ({
131111
...agents.map((agent) => ({
132112
...agent,
133113
mcp_servers: agent.mcp_servers.map((server) => ({
134-
...server,
135-
position:
136-
agent.name === "code_resolver" && !isEditMode
137-
? Position.Bottom
138-
: server.position
114+
...server
139115
}))
140116
})),
141117
{

src/components/Agentic/IncidentDetails/AgentFlowChart/types.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { Position } from "@xyflow/react";
21
import type { Agent, AgentMCPServer } from "../../../../redux/services/types";
32

43
export interface AgentFlowChartProps {
@@ -7,21 +6,12 @@ export interface AgentFlowChartProps {
76
selectedAgentId: string | null;
87
className?: string;
98
isEditMode?: boolean;
10-
onAddMCPServer?: (agentId: string, position: Position) => void;
11-
onEditMCPServer?: (
12-
agentId: string,
13-
server: string,
14-
position: Position
15-
) => void;
16-
onDeleteMCPServer?: (
17-
agentId: string,
18-
server: string,
19-
position: Position
20-
) => void;
9+
onAddMCPServer?: (agentId: string) => void;
10+
onEditMCPServer?: (agentId: string, server: string) => void;
11+
onDeleteMCPServer?: (agentId: string, server: string) => void;
2112
}
2213

2314
export interface ExtendedAgentMCPServer extends AgentMCPServer {
24-
position?: Position;
2515
isEditable?: boolean;
2616
}
2717

src/components/Agentic/IncidentTemplate/index.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { Position } from "@xyflow/react";
21
import { useEffect, useState } from "react";
32
import {
43
useDeleteIncidentAgentMCPServerMutation,
@@ -149,9 +148,7 @@ export const IncidentTemplate = () => {
149148
name: x.name,
150149
display_name: x.name,
151150
active: true,
152-
isEditable: x.editable,
153-
position:
154-
agent.name === "code_resolver" ? Position.Bottom : Position.Top
151+
isEditable: x.editable
155152
}))
156153
};
157154
})

src/components/Agentic/Sidebar/index.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,12 @@ export const Sidebar = () => {
6060
dispatch(setIsCreateIncidentChatOpen(true));
6161
};
6262

63-
// const handleDirectivesButtonClick = () => {
64-
// sendUserActionTrackingEvent(
65-
// trackingEvents.SIDEBAR_DIRECTIVES_BUTTON_CLICKED
66-
// );
67-
// void navigate("/incidents/directives");
68-
// };
63+
const handleDirectivesButtonClick = () => {
64+
sendUserActionTrackingEvent(
65+
trackingEvents.SIDEBAR_DIRECTIVES_BUTTON_CLICKED
66+
);
67+
void navigate("/incidents/directives");
68+
};
6969

7070
const handleTemplateButtonClick = () => {
7171
sendUserActionTrackingEvent(trackingEvents.SIDEBAR_TEMPLATE_BUTTON_CLICKED);
@@ -118,8 +118,8 @@ export const Sidebar = () => {
118118
const userInitial = (user?.email[0] ?? "").toLocaleUpperCase();
119119
const isTemplateButtonHighlighted =
120120
location.pathname === "/incidents/template";
121-
// const isDirectivesButtonHighlighted =
122-
// location.pathname === "/incidents/directives";
121+
const isDirectivesButtonHighlighted =
122+
location.pathname === "/incidents/directives";
123123

124124
return (
125125
<s.Container>
@@ -151,11 +151,11 @@ export const Sidebar = () => {
151151
))}
152152
</s.IncidentsList>
153153
</s.IncidentsListContainer>
154-
{/* <s.LinkButton
154+
<s.LinkButton
155155
buttonType={isDirectivesButtonHighlighted ? "primary" : "secondary"}
156156
label={"Directives"}
157157
onClick={handleDirectivesButtonClick}
158-
/> */}
158+
/>
159159
<s.LinkButton
160160
buttonType={isTemplateButtonHighlighted ? "primary" : "secondary"}
161161
label={"Template"}

0 commit comments

Comments
 (0)