Skip to content

Commit c50a0ee

Browse files
committed
panel right actions css
1 parent 7e4149e commit c50a0ee

File tree

4 files changed

+108
-23
lines changed

4 files changed

+108
-23
lines changed

src/frontend_react/src/components/content/PlanPanelRight.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const PlanPanelRight: React.FC<TaskDetailsProps> = ({
1717

1818
return (
1919
<PanelRight
20-
panelWidth={400}
20+
panelWidth={350}
2121
defaultClosed={false}
2222
panelResize={true}
2323
panelType="first"

src/frontend_react/src/components/content/TaskDetails.tsx

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
import { Add20Regular, CheckmarkCircle20Regular, Dismiss20Regular, CircleHalfFill20Regular, CheckboxChecked20Regular, DismissSquare20Regular } from "@fluentui/react-icons";
1414
import React from "react";
1515
import "../../styles/TaskDetails.css";
16+
import { TaskService } from "@/services";
1617

1718
const TaskDetails: React.FC<TaskDetailsProps> = ({
1819
planData,
@@ -69,20 +70,34 @@ const TaskDetails: React.FC<TaskDetailsProps> = ({
6970
</div>
7071
</div>
7172
</div>
72-
73+
<Divider />
7374
<div className="task-details-subtask-list">
74-
{subTasks.map((subtask) => (
75-
<div key={subtask.id} className="task-details-subtask-item">
76-
<div className="task-details-status-icon">
77-
{renderStatusIcon(subtask.status)}
78-
</div>
79-
<div className="task-details-subtask-content">
80-
<span className="task-details-subtask-name">{subtask.action}</span>
81-
<CheckboxChecked20Regular onClick={() => OnApproveStep(subtask)} className="task-details-checkbox-icon" />
82-
<DismissSquare20Regular onClick={() => OnRejectStep(subtask)} className="task-details-dismiss-icon" />
75+
{subTasks.map((subtask) => {
76+
const { description, functionOrDetails } = TaskService.splitSubtaskAction(subtask.action);
77+
78+
79+
return (
80+
81+
<div key={subtask.id} className="task-details-subtask-item">
82+
<div className="task-details-status-icon">
83+
{renderStatusIcon(subtask.status)}
84+
</div>
85+
<div className="task-details-subtask-content">
86+
<span className="task-details-subtask-name">{description}</span>
87+
<div className="task-details-subtask-actions">
88+
<CheckboxChecked20Regular
89+
onClick={() => OnApproveStep(subtask)}
90+
className="task-details-checkbox-icon"
91+
/>
92+
<DismissSquare20Regular
93+
onClick={() => OnRejectStep(subtask)}
94+
className="task-details-dismiss-icon"
95+
/>
96+
</div>
97+
</div>
8398
</div>
84-
</div>
85-
))}
99+
);
100+
})}
86101
</div>
87102
</div>
88103

src/frontend_react/src/services/TaskService.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,46 @@ export class TaskService {
8888
const random = Math.floor(Math.random() * 10000);
8989
return `sid_${timestamp}_${random}`;
9090
}
91+
/**
92+
* Split subtask action into description and function/details parts
93+
* @param action The full action string to split
94+
* @returns Object containing description and functionOrDetails
95+
*/
96+
static splitSubtaskAction(action: string): { description: string; functionOrDetails: string | null } {
97+
// Check for "Function:" pattern
98+
// Check for "Function:" pattern
99+
const functionMatch = action.match(/^(.+?)\.\s*Function:\s*(.+)$/);
100+
if (functionMatch) {
101+
return {
102+
description: functionMatch[1].trim(),
103+
functionOrDetails: functionMatch[2].trim()
104+
};
105+
}
106+
107+
// Check for "Provide more details about:" pattern
108+
const detailsMatch = action.match(/^Provide more details about:\s*(.+)$/);
109+
if (detailsMatch) {
110+
return {
111+
description: "Provide more details about",
112+
functionOrDetails: detailsMatch[1].trim()
113+
};
114+
}
115+
116+
// Check for "Analyze the task:" pattern
117+
const analyzeMatch = action.match(/^Analyze the task:\s*(.+)$/);
118+
if (analyzeMatch) {
119+
return {
120+
description: "Analyze the task",
121+
functionOrDetails: analyzeMatch[1].trim()
122+
};
123+
}
124+
125+
// If no pattern matches, return the full action as description
126+
return {
127+
description: action,
128+
functionOrDetails: null
129+
};
130+
}
91131

92132
/**
93133
* Submit an input task to create a new plan

src/frontend_react/src/styles/TaskDetails.css

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
display: flex;
66
flex-direction: column;
77
height: 100%;
8-
background-color: var(--colorNeutralBackground1);
98
overflow: auto;
109
}
1110

@@ -57,16 +56,7 @@
5756
gap: 8px;
5857
}
5958

60-
.task-details-subtask-content {
61-
display: flex;
62-
flex-direction: column;
63-
flex: 1;
64-
}
6559

66-
.task-details-subtask-name {
67-
font-size: var(--fontSizeBase300);
68-
font-weight: var(--fontWeightSemibold);
69-
}
7060

7161
.task-details-subtask-details {
7262
font-size: var(--fontSizeBase200);
@@ -145,4 +135,44 @@
145135
display: flex;
146136
flex-direction: column;
147137
gap: 12px;
138+
}
139+
140+
/* ...existing styles... */
141+
142+
.task-details-subtask-content {
143+
display: flex;
144+
align-items: center;
145+
justify-content: space-between;
146+
flex: 1;
147+
gap: 8px;
148+
}
149+
150+
.task-details-subtask-name {
151+
font-size: var(--fontSizeBase300);
152+
font-weight: var(--fontWeightSemibold);
153+
flex: 1;
154+
}
155+
156+
.task-details-subtask-actions {
157+
display: flex;
158+
align-items: center;
159+
gap: 8px;
160+
}
161+
162+
.task-details-checkbox-icon,
163+
.task-details-dismiss-icon {
164+
cursor: pointer;
165+
padding: 4px;
166+
border-radius: var(--borderRadiusSmall);
167+
transition: background-color 0.2s ease, color 0.2s ease;
168+
}
169+
170+
.task-details-checkbox-icon:hover {
171+
background-color: var(--colorNeutralBackground2);
172+
color: var(--colorPaletteGreenForeground1);
173+
}
174+
175+
.task-details-dismiss-icon:hover {
176+
background-color: var(--colorNeutralBackground2);
177+
color: var(--colorPaletteRedForeground1);
148178
}

0 commit comments

Comments
 (0)