Skip to content

Commit 49ba91a

Browse files
committed
add toast for the subtask behavior
1 parent 938da5b commit 49ba91a

File tree

3 files changed

+37
-16
lines changed

3 files changed

+37
-16
lines changed

src/frontend_react/src/components/content/PlanChat.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import ReactMarkdown from "react-markdown";
1111
import "../../styles/PlanChat.css"; // Assuming you have a CSS file for additional styles
1212
import "../../styles/Chat.css"; // Assuming you have a CSS file for additional styles
1313
import "../../styles/prism-material-oceanic.css"
14+
import InlineToaster from "../toast/InlineToaster";
1415
const PlanChat: React.FC<PlanChatProps> = ({
1516
planData,
1617
OnChatSubmit
@@ -77,6 +78,7 @@ const PlanChat: React.FC<PlanChatProps> = ({
7778
</Tag>
7879
)}
7980

81+
<InlineToaster />
8082
<div ref={inputContainerRef} className="plan-chat-input-container">
8183
<div className="plan-chat-input-wrapper">
8284
<ChatInput

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,13 @@ const TaskDetails: React.FC<TaskDetailsProps> = ({
3838
switch (status) {
3939
case "completed":
4040
case 'accepted':
41-
return (<CheckmarkCircle20Regular
42-
className="status-icon-completed"
43-
/>
41+
return (<CheckmarkCircle20Regular className="status-icon-completed" />
4442
);
4543
case "planned":
46-
return (<CircleHalfFill20Regular
47-
className="status-icon-planned"
48-
/>
44+
return (<CircleHalfFill20Regular className="status-icon-planned" />
4945
);
5046
case "rejected":
51-
return (<Dismiss20Regular
52-
className="status-icon-rejected"
53-
/>
47+
return (<Dismiss20Regular className="status-icon-rejected" />
5448
);
5549
default:
5650
return null;

src/frontend_react/src/pages/PlanPage.tsx

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,15 @@ import PlanPanelLeft from '@/components/content/PlanPanelLeft';
2929
import ContentToolbar from '@/coral/components/Content/ContentToolbar';
3030
import PlanChat from '@/components/content/PlanChat';
3131
import PlanPanelRight from '@/components/content/PlanPanelRight';
32-
32+
import InlineToaster, { useInlineToaster } from "../components/toast/InlineToaster";
3333
/**
3434
* Page component for displaying a specific plan
3535
* Accessible via the route /plan/{plan_id}
3636
*/
3737
const PlanPage: React.FC = () => {
3838
const { planId } = useParams<{ planId: string }>();
3939
const navigate = useNavigate();
40+
const { showToast } = useInlineToaster();
4041

4142
// State for plan data
4243
const [planData, setPlanData] = useState<ProcessedPlanData | any>(null);
@@ -64,45 +65,69 @@ const PlanPage: React.FC = () => {
6465
}
6566
}, [planId]);
6667

68+
const loadPlanData2 = useCallback(async () => {
69+
if (!planId) return;
70+
71+
try {
72+
73+
setError(null);
74+
75+
const data = await PlanDataService.fetchPlanData(planId);
76+
console.log('Fetched plan data:', data);
77+
setPlanData(data);
78+
} catch (err) {
79+
console.error('Failed to load plan data:', err);
80+
setError(err instanceof Error ? err : new Error('Failed to load plan data'));
81+
} finally {
82+
83+
}
84+
}, [planId]);
85+
6786
// Accept chat input and submit clarification
6887
const handleOnchatSubmit = useCallback(
6988
async (chatInput: string) => {
7089
if (!planData?.plan) return;
90+
showToast("Submitting clarification...", "info", { dismissible: false });
7191
try {
7292
await PlanDataService.submitClarification(
7393
planData.plan.id, // plan_id
7494
planData.plan.session_id, // session_id
7595
chatInput // human_clarification
7696
);
77-
await loadPlanData();
97+
await loadPlanData2();
7898
} catch (error) {
7999
console.error('Failed to submit clarification:', error);
80100
}
81101
},
82-
[planData, loadPlanData]
102+
[planData, loadPlanData2]
83103
);
84104

85105
// Move handlers here to fix dependency order
86106
const handleApproveStep = useCallback(async (step: Step) => {
87107
setProcessingSubtaskId(step.id);
108+
showToast("Submitting approval...", "info", { dismissible: false });
88109
try {
89110
await PlanDataService.approveStep(step);
90-
await loadPlanData();
111+
await loadPlanData2();
91112
} catch (error) {
92113
console.error('Failed to reject step:', error);
93114
} finally {
94115
setProcessingSubtaskId(null);
95116
}
96-
}, [loadPlanData]);
117+
}, [loadPlanData2]);
97118

98119
const handleRejectStep = useCallback(async (step: Step) => {
120+
setProcessingSubtaskId(step.id);
121+
showToast("Submitting rejection...", "info", { dismissible: false });
99122
try {
100123
await PlanDataService.rejectStep(step);
101-
await loadPlanData();
124+
await loadPlanData2();
102125
} catch (error) {
103126
console.error('Failed to reject step:', error);
127+
} finally {
128+
setProcessingSubtaskId(null);
104129
}
105-
}, [loadPlanData]);
130+
}, [loadPlanData2]);
106131

107132
// Load plan data on mount and when planId changes
108133
useEffect(() => {

0 commit comments

Comments
 (0)