Skip to content

Commit 68b3ee2

Browse files
committed
update the tasklist
1 parent 134388b commit 68b3ee2

File tree

5 files changed

+133
-4
lines changed

5 files changed

+133
-4
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import {
2+
Accordion,
3+
AccordionHeader,
4+
AccordionItem,
5+
AccordionPanel,
6+
Button,
7+
Menu,
8+
MenuList,
9+
MenuItem,
10+
MenuPopover,
11+
MenuTrigger,
12+
} from "@fluentui/react-components";
13+
import { MoreHorizontal20Regular } from "@fluentui/react-icons";
14+
import React from "react";
15+
import "../../styles/TaskList.css";
16+
17+
18+
19+
const TaskList: React.FC<TaskListProps> = ({
20+
inProgressTasks,
21+
completedTasks,
22+
onTaskSelect,
23+
}) => {
24+
const renderTaskItem = (task: Task) => (<div
25+
key={task.id}
26+
className="task-list-task-item"
27+
onClick={() => onTaskSelect(task.id)}
28+
>
29+
<div>
30+
<div>{task.name}</div>
31+
{task.date && (
32+
<div className="task-list-task-date">
33+
{task.date}
34+
</div>
35+
)}
36+
</div> <Menu>
37+
<MenuTrigger>
38+
<Button
39+
appearance="subtle"
40+
icon={<MoreHorizontal20Regular />}
41+
onClick={(e: React.MouseEvent) => e.stopPropagation()}
42+
/>
43+
</MenuTrigger>
44+
</Menu>
45+
</div>
46+
);
47+
48+
return (
49+
<Accordion defaultOpenItems={["inprogress"]} collapsible>
50+
<AccordionItem value="inprogress">
51+
<AccordionHeader>
52+
In progress
53+
</AccordionHeader>
54+
<AccordionPanel>
55+
{inProgressTasks.map(renderTaskItem)}
56+
</AccordionPanel>
57+
</AccordionItem>
58+
<AccordionItem value="completed">
59+
<AccordionHeader>
60+
Completed
61+
</AccordionHeader>
62+
<AccordionPanel>
63+
{completedTasks.map(renderTaskItem)}
64+
</AccordionPanel>
65+
</AccordionItem>
66+
</Accordion>
67+
);
68+
};
69+
70+
export default TaskList;

src/frontend_react/src/models/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ export * from './messages';
1111
export * from './inputTask';
1212
export * from './agentMessage';
1313
export * from './taskDetails';
14+
export * from './taskList';
1415

1516
// Add other model exports as needed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export interface Task {
2+
id: string;
3+
name: string;
4+
status: 'inprogress' | 'completed';
5+
date?: string;
6+
}
7+
8+
export interface TaskListProps {
9+
inProgressTasks: Task[];
10+
completedTasks: Task[];
11+
onTaskSelect: (taskId: string) => void;
12+
}

src/frontend_react/src/pages/PlanPage.tsx

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
CardHeader
88
} from '@fluentui/react-components';
99
import {
10+
Add20Regular,
1011
ArrowLeft24Regular,
1112
ErrorCircle24Regular
1213
} from '@fluentui/react-icons';
@@ -15,6 +16,9 @@ import '../styles/PlanPage.css';
1516
import CoralShellColumn from '../coral/components/Layout/CoralShellColumn';
1617
import CoralShellRow from '../coral/components/Layout/CoralShellRow';
1718
import Content from '../coral/components/Content/Content';
19+
import PanelLeft from '../coral/components/Panels/PanelLeft';
20+
import PanelLeftToolbar from '../coral/components/Panels/PanelLeftToolbar';
21+
import TaskList from '../components/content/TaskList';
1822

1923
/**
2024
* Page component for displaying a specific plan
@@ -28,17 +32,37 @@ const PlanPage: React.FC = () => {
2832
const handleBackClick = () => {
2933
navigate(-1);
3034
};
31-
35+
const handleTaskSelect = (taskId: string) => {
36+
setActiveTaskId(taskId);
37+
};
3238
// Show error if no planId is provided
3339

3440

3541
return (
3642
<CoralShellColumn>
3743
<CoralShellRow>
38-
<Content>
39-
40-
</Content>
44+
<div style={{ flexShrink: 0, display: "flex", overflow: "hidden" }}>
45+
<PanelLeft
46+
panelWidth={280}
47+
panelResize={true}>
48+
<PanelLeftToolbar panelTitle="" panelIcon={null}>
49+
<Button
50+
icon={<Add20Regular />}
51+
onClick={() => handleNewTask("New task")}
52+
>
53+
New task
54+
</Button>
55+
</PanelLeftToolbar>
56+
<TaskList
57+
inProgressTasks={inProgressTasks}
58+
completedTasks={completedTasks}
59+
onTaskSelect={handleTaskSelect}
60+
/>
61+
</PanelLeft>
62+
<Content>
4163

64+
</Content>
65+
</div>
4266
</CoralShellRow>
4367
</CoralShellColumn>
4468
);
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/* TaskList Component Styles */
2+
3+
.task-list-task-item {
4+
display: flex;
5+
align-items: center;
6+
justify-content: space-between;
7+
padding: 8px 16px;
8+
cursor: pointer;
9+
background-color: #fafafa; /* tokens.colorNeutralBackground1 */
10+
transition-property: background-color;
11+
transition-duration: 0.1s; /* tokens.durationFaster */
12+
transition-timing-function: cubic-bezier(0.33, 0.00, 0.67, 1.00); /* tokens.curveEasyEase */
13+
}
14+
15+
.task-list-task-item:hover {
16+
background-color: #f5f5f5; /* tokens.colorNeutralBackground1Hover */
17+
}
18+
19+
.task-list-task-date {
20+
font-size: 0.75rem; /* tokens.fontSizeBase200 */
21+
color: #616161; /* tokens.colorNeutralForeground2 */
22+
}

0 commit comments

Comments
 (0)