Skip to content

Commit 5dff284

Browse files
Merge pull request #299 from microsoft/Bugs-fixing
fix: Bugs fixing for 19597,19553,19524,19330,19278,19238
2 parents c1c41ba + 4089d85 commit 5dff284

File tree

11 files changed

+439
-211
lines changed

11 files changed

+439
-211
lines changed

src/backend/context/cosmos_memory_kernel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ async def get_plan(self, plan_id: str) -> Optional[Plan]:
268268

269269
async def get_all_plans(self) -> List[Plan]:
270270
"""Retrieve all plans."""
271-
query = "SELECT * FROM c WHERE c.user_id=@user_id AND c.data_type=@data_type ORDER BY c._ts DESC OFFSET 0 LIMIT 10"
271+
query = "SELECT * FROM c WHERE c.user_id=@user_id AND c.data_type=@data_type ORDER BY c._ts DESC"
272272
parameters = [
273273
{"name": "@data_type", "value": "plan"},
274274
{"name": "@user_id", "value": self.user_id},

src/frontend/package-lock.json

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,4 @@
6767
"vite": "^5.4.19",
6868
"vitest": "^1.6.1"
6969
}
70-
}
70+
}

src/frontend/src/assets/WebWarning.svg

Lines changed: 14 additions & 0 deletions
Loading
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import React from "react";
2+
import {
3+
Button,
4+
Image,
5+
Text,
6+
Title2,
7+
makeStyles,
8+
tokens,
9+
} from "@fluentui/react-components";
10+
import NotFound from "../../assets/WebWarning.svg";
11+
12+
type ContentNotFoundProps = {
13+
imageSrc?: string;
14+
title?: string;
15+
subtitle?: string;
16+
primaryButtonText?: string;
17+
onPrimaryButtonClick?: () => void;
18+
secondaryButtonText?: string;
19+
onSecondaryButtonClick?: () => void;
20+
};
21+
22+
const DEFAULT_IMAGE = NotFound;
23+
const DEFAULT_TITLE = "";
24+
25+
const useStyles = makeStyles({
26+
root: {
27+
minHeight: "80vh",
28+
display: "flex",
29+
flexDirection: "column",
30+
alignItems: "center",
31+
justifyContent: "center",
32+
textAlign: "center",
33+
gap: tokens.spacingVerticalL,
34+
padding: tokens.spacingVerticalXXL,
35+
},
36+
image: {
37+
width: "80px",
38+
height: "80px",
39+
objectFit: "contain",
40+
},
41+
buttonGroup: {
42+
display: "flex",
43+
gap: tokens.spacingHorizontalM,
44+
justifyContent: "center",
45+
marginTop: tokens.spacingVerticalM,
46+
},
47+
});
48+
49+
const ContentNotFound: React.FC<ContentNotFoundProps> = ({
50+
imageSrc = DEFAULT_IMAGE,
51+
title = DEFAULT_TITLE,
52+
subtitle,
53+
primaryButtonText,
54+
onPrimaryButtonClick,
55+
secondaryButtonText,
56+
onSecondaryButtonClick,
57+
}) => {
58+
const styles = useStyles();
59+
60+
return (
61+
<div className={styles.root}>
62+
<Image src={imageSrc} alt="Content Not Found" className={styles.image} />
63+
<Title2>{title}</Title2>
64+
{subtitle && (
65+
<Text style={{ color: "gray", fontSize: 16, fontFamily: "sans-serif" }}>
66+
{subtitle}
67+
</Text>
68+
)}
69+
{(primaryButtonText || secondaryButtonText) && (
70+
<div className={styles.buttonGroup}>
71+
{primaryButtonText && (
72+
<Button appearance="primary" onClick={onPrimaryButtonClick}>
73+
{primaryButtonText}
74+
</Button>
75+
)}
76+
{secondaryButtonText && (
77+
<Button appearance="outline" onClick={onSecondaryButtonClick}>
78+
{secondaryButtonText}
79+
</Button>
80+
)}
81+
</div>
82+
)}
83+
</div>
84+
);
85+
};
86+
87+
export default ContentNotFound;

src/frontend/src/components/content/PlanChat.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import "../../styles/Chat.css";
1919
import "../../styles/prism-material-oceanic.css";
2020
import { TaskService } from "@/services/TaskService";
2121
import InlineToaster from "../toast/InlineToaster";
22+
import ContentNotFound from "../NotFound/ContentNotFound";
2223

2324
const PlanChat: React.FC<PlanChatProps> = ({
2425
planData,
@@ -62,8 +63,6 @@ const PlanChat: React.FC<PlanChatProps> = ({
6263
}
6364
}, [input]); // or [inputValue, submittingChatDisableInput]
6465

65-
66-
6766
const scrollToBottom = () => {
6867
messagesContainerRef.current?.scrollTo({
6968
top: messagesContainerRef.current.scrollHeight,
@@ -72,7 +71,10 @@ const PlanChat: React.FC<PlanChatProps> = ({
7271
setShowScrollButton(false);
7372
};
7473

75-
if (!planData) return <Spinner size="large" />;
74+
if (!planData)
75+
return (
76+
<ContentNotFound subtitle="The requested page could not be found." />
77+
);
7678
return (
7779
<div className="chat-container">
7880
<div className="messages" ref={messagesContainerRef}>
@@ -126,10 +128,13 @@ const PlanChat: React.FC<PlanChatProps> = ({
126128
style={{ height: 28, width: 28 }}
127129
icon={<Copy />}
128130
/>
129-
130131
</div>
131132

132-
<Tag icon={<DiamondRegular />} appearance="filled" size="extra-small">
133+
<Tag
134+
icon={<DiamondRegular />}
135+
appearance="filled"
136+
size="extra-small"
137+
>
133138
Sample data for demonstration purposes only.
134139
</Tag>
135140
</div>
@@ -151,13 +156,12 @@ const PlanChat: React.FC<PlanChatProps> = ({
151156
style={{
152157
bottom: inputHeight,
153158
position: "absolute", // ensure this or your class handles it
154-
right: 16, // optional, for right alignment
159+
right: 16, // optional, for right alignment
155160
zIndex: 5,
156161
}}
157162
>
158163
Back to bottom
159164
</Tag>
160-
161165
)}
162166
<InlineToaster />
163167
<div ref={inputContainerRef} className="plan-chat-input-container">
@@ -167,15 +171,17 @@ const PlanChat: React.FC<PlanChatProps> = ({
167171
onChange={setInput}
168172
onEnter={() => OnChatSubmit(input)}
169173
disabledChat={
170-
planData.enableChat ? submittingChatDisableInput : true
174+
planData?.enableChat ? submittingChatDisableInput : true
171175
}
172176
placeholder="Add more info to this task..."
173177
>
174178
<Button
175179
appearance="transparent"
176180
onClick={() => OnChatSubmit(input)}
177181
icon={<Send />}
178-
disabled={planData.enableChat ? submittingChatDisableInput : true}
182+
disabled={
183+
planData?.enableChat ? submittingChatDisableInput : true
184+
}
179185
/>
180186
</ChatInput>
181187
</div>

src/frontend/src/components/content/TaskList.tsx

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import { MoreHorizontal20Regular } from "@fluentui/react-icons";
1010
import React from "react";
1111
import "../../styles/TaskList.css";
1212
import { Task, TaskListProps } from "@/models";
13-
import CoralAccordion from "@/coral/components/CoralAccordion/CoralAccordion";
14-
import CoralAccordionItem from "@/coral/components/CoralAccordion/CoralAccordionItem";
15-
import CoralAccordionHeader from "@/coral/components/CoralAccordion/CoralAccordionHeader";
16-
import CoralAccordionPanel from "@/coral/components/CoralAccordion/CoralAccordionPanel";
13+
import {
14+
Accordion,
15+
AccordionHeader,
16+
AccordionItem,
17+
AccordionPanel,
18+
} from "@fluentui/react-components";
1719

1820
const TaskList: React.FC<TaskListProps> = ({
1921
inProgressTasks,
@@ -39,16 +41,15 @@ const TaskList: React.FC<TaskListProps> = ({
3941
}
4042
}}
4143
>
42-
4344
<div className="sideNavTick" />
4445
<div className="left">
4546
<div className="task-name-truncated" title={task.name}>
4647
{task.name}
4748
</div>
48-
{task.date && task.status == "completed" &&(
49+
{task.date && task.status == "completed" && (
4950
<Caption1 className="task-list-task-date">{task.date}</Caption1>
5051
)}
51-
{task.status == "inprogress" &&(
52+
{task.status == "inprogress" && (
5253
<Caption1 className="task-list-task-date">{`${task?.completed_steps} of ${task?.total_steps} completed`}</Caption1>
5354
)}
5455
</div>
@@ -70,40 +71,39 @@ const TaskList: React.FC<TaskListProps> = ({
7071
<div key={key} className="task-skeleton-container">
7172
<Skeleton aria-label="Loading task">
7273
<div className="task-skeleton-wrapper">
73-
<SkeletonItem
74-
shape="rectangle"
75-
animation="wave"
76-
size={24}
77-
/>
74+
<SkeletonItem shape="rectangle" animation="wave" size={24} />
7875
</div>
7976
</Skeleton>
8077
</div>
8178
);
8279

8380
return (
84-
<CoralAccordion>
85-
<CoralAccordionItem defaultOpen>
86-
<CoralAccordionHeader chevron>In progress</CoralAccordionHeader>
87-
88-
<CoralAccordionPanel>
89-
{loading && inProgressTasks.length === 0
90-
? [...Array(3)].map((_, i) =>
91-
renderSkeleton(`inprogress-skel-${i}`)
92-
)
93-
: inProgressTasks.map(renderTaskItem)}
94-
</CoralAccordionPanel>
95-
</CoralAccordionItem>
96-
97-
<CoralAccordionItem defaultOpen>
98-
<CoralAccordionHeader chevron>Completed</CoralAccordionHeader>
99-
100-
<CoralAccordionPanel>
101-
{loading && completedTasks.length === 0
102-
? [...Array(2)].map((_, i) => renderSkeleton(`completed-skel-${i}`))
103-
: completedTasks.map(renderTaskItem)}
104-
</CoralAccordionPanel>
105-
</CoralAccordionItem>
106-
</CoralAccordion>
81+
<div className="task-list-container">
82+
<Accordion defaultOpenItems="1" collapsible>
83+
<AccordionItem value="1">
84+
<AccordionHeader expandIconPosition="end">
85+
In progress
86+
</AccordionHeader>
87+
<AccordionPanel>
88+
{loading
89+
? Array.from({ length: 5 }, (_, i) =>
90+
renderSkeleton(`in-progress-${i}`)
91+
)
92+
: inProgressTasks.map(renderTaskItem)}
93+
</AccordionPanel>
94+
</AccordionItem>
95+
<AccordionItem value="2">
96+
<AccordionHeader expandIconPosition="end">Completed</AccordionHeader>
97+
<AccordionPanel>
98+
{loading
99+
? Array.from({ length: 5 }, (_, i) =>
100+
renderSkeleton(`completed-${i}`)
101+
)
102+
: completedTasks.map(renderTaskItem)}
103+
</AccordionPanel>
104+
</AccordionItem>
105+
</Accordion>
106+
</div>
107107
);
108108
};
109109

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
import React from "react";
22

3-
const CoralAccordionPanel: React.FC<{ children: React.ReactNode }> = ({ children }) => {
4-
return <div style={{ margin: "8px" }}>{children}</div>;
3+
const CoralAccordionPanel: React.FC<{ children: React.ReactNode }> = ({
4+
children,
5+
}) => {
6+
return (
7+
<div style={{ margin: "8px", maxHeight: 280, overflowY: "auto" }}>
8+
{children}
9+
</div>
10+
);
511
};
6-
12+
CoralAccordionPanel.displayName = "CoralAccordionPanel";
713
export default CoralAccordionPanel;

0 commit comments

Comments
 (0)