1+ import { TaskDetailsProps } from "@/models" ;
12import {
23 Body1 ,
34 Button ,
@@ -7,73 +8,123 @@ import {
78 Persona ,
89 Text ,
910 Subtitle1 ,
11+ Avatar ,
1012} from "@fluentui/react-components" ;
11- import { Add20Regular } from "@fluentui/react-icons" ;
13+ import { Add20Regular , CheckmarkCircle20Regular , Dismiss20Regular , CircleHalfFill20Regular } from "@fluentui/react-icons" ;
1214import React from "react" ;
13- import { TaskDetailsProps } from "../../models" ;
1415import "../../styles/TaskDetails.css" ;
1516
1617const TaskDetails : React . FC < TaskDetailsProps > = ( {
17- PlanData ,
18+ planData ,
1819 OnApproveStep,
1920 OnRejectStep
20-
2121} ) => {
22- const completedCount = subTasks . filter ( t => t . status === 'completed' ) . length ;
23-
24- return (
22+ const completedCount = planData . plan . completed || 0 ;
23+ const total = planData . plan . total_steps || 1 ; // Avoid division by zero
24+ const subTasks = planData . steps || [ ] ;
25+ const progress = completedCount / total ;
26+ const agents = planData . agents || [ ] ;
27+ // Helper function to render the appropriate status icon
28+ const renderStatusIcon = ( status : string ) => {
29+ switch ( status ) {
30+ case 'completed' :
31+ return < CheckmarkCircle20Regular className = "task-details-status-completed" /> ;
32+ case 'working' :
33+ return < CircleHalfFill20Regular className = "task-details-status-working" /> ;
34+ case 'removed' :
35+ return < Dismiss20Regular className = "task-details-status-removed" /> ;
36+ default :
37+ return null ;
38+ }
39+ } ; return (
2540 < div className = "task-details-container" >
2641 < div className = "task-details-section" >
42+ < Subtitle1 className = "task-details-section-title" > Progress</ Subtitle1 >
43+
2744 < div className = "task-details-progress-header" >
28- < Subtitle1 > { PlanData . plan . initial_goal } </ Subtitle1 >
29- < Text size = { 200 } >
30- { completedCount } of { subTasks . length } completed
31- </ Text >
45+ < div style = { { display : "flex" , alignItems : "center" } } >
46+ < div className = "task-details-progress-ring" >
47+ { /* This is a simplified progress ring - in a real implementation you'd use a proper circular progress component */ }
48+ < svg width = "56" height = "56" viewBox = "0 0 56 56" >
49+ < circle cx = "28" cy = "28" r = "24" fill = "none" stroke = "#f0f0f0" strokeWidth = "4" />
50+ < circle
51+ cx = "28"
52+ cy = "28"
53+ r = "24"
54+ fill = "none"
55+ stroke = "#0078d4"
56+ strokeWidth = "4"
57+ strokeDasharray = { `${ progress * 150.8 } 150.8` }
58+ strokeDashoffset = "0"
59+ strokeLinecap = "round"
60+ transform = "rotate(-90 28 28)"
61+ />
62+ </ svg >
63+ < div className = "task-details-progress-text" > { completedCount } /{ total } </ div >
64+ </ div >
65+ < div >
66+ < div className = "task-details-task-title" > { planData . plan . initial_goal } </ div >
67+ < Text size = { 200 } > { planData . plan . completed } of { total } completed</ Text >
68+ </ div >
69+ </ div >
3270 </ div >
71+
3372 < div className = "task-details-subtask-list" >
3473 { subTasks . map ( ( subtask ) => (
35- < Checkbox
36- key = { subtask . id }
37- checked = { subtask . status === 'completed' }
38- disabled
39- label = { subtask . name }
40- />
74+ < div key = { subtask . id } className = "task-details-subtask-item" >
75+ < div className = "task-details-status-icon" >
76+ { renderStatusIcon ( subtask . status ) }
77+ </ div >
78+ < div className = "task-details-subtask-content" >
79+ < span className = "task-details-subtask-name" > { subtask . action } </ span >
80+ </ div >
81+ </ div >
4182 ) ) }
4283 </ div >
4384 </ div >
4485
4586 < Divider />
4687
4788 < div className = "task-details-section" >
48- < Subtitle1 > Agents</ Subtitle1 >
49- { agents . map ( ( agent ) => (
50- < Card key = { agent . id } className = "task-details-agent-card" >
51- < Persona
52- name = { agent . name }
53- secondaryText = { agent . description }
54- avatar = { { image : { src : agent . avatarUrl } } }
55- presence = { { status : "available" } }
56- />
57- </ Card >
58- ) ) }
59-
89+ < Subtitle1 className = "task-details-section-title" > Agents</ Subtitle1 >
90+ < div className = "task-details-agent-list" >
91+ { agents . map ( ( agent ) => (
92+ < div key = { agent } className = "task-details-agent-card" >
93+ < Avatar
94+ name = { agent }
95+ size = { 32 }
96+ badge = { { status : 'available' } }
97+ // image={{ src: agent.avatarUrl }}
98+ />
99+ < div className = "task-details-agent-details" >
100+ < span className = "task-details-agent-name" > { agent } </ span >
101+ < span className = "task-details-agent-description" > agent description</ span >
102+ </ div >
103+ </ div >
104+ ) ) }
105+ </ div >
60106 </ div >
61107
62108 < Divider />
63109
64- < div className = "task-details-section" >
65- < Subtitle1 > Humans</ Subtitle1 >
66- { humans . map ( ( human ) => (
67- < Card key = { human . id } className = "task-details-agent-card" >
68- < Persona
69- name = { human . name }
70- secondaryText = { human . email }
71- avatar = { { image : { src : human . avatarUrl } } }
72- presence = { { status : "available" } }
73- />
74- </ Card >
75- ) ) }
76- </ div >
110+ { /* <div className="task-details-section">
111+ <Subtitle1 className="task-details-section-title">Humans</Subtitle1>
112+ <div className="task-details-human-list">
113+ {humans.map((human) => (
114+ <div key={human.id} className="task-details-agent-card">
115+ <Avatar
116+ name={human.name}
117+ size={32}
118+ image={{ src: human.avatarUrl }}
119+ />
120+ <div className="task-details-agent-details">
121+ <span className="task-details-agent-name">{human.name}</span>
122+ <span className="task-details-agent-description">{human.email}</span>
123+ </div>
124+ </div>
125+ ))}
126+ </div>
127+ </div> */ }
77128 </ div >
78129 ) ;
79130} ;
0 commit comments