Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions apps/web/src/components/Sidebar.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,12 @@ describe("Sidebar file tree shortcut", () => {
expect(src).toContain('useRightPanelStore.getState().open("workspace")');
expect(src).not.toContain("<WorkspaceFileTree");
});

it("uses the project context menu for renaming instead of double click", () => {
const src = readFileSync(resolve(import.meta.dirname, "./Sidebar.tsx"), "utf8");

expect(src).toContain('{ id: "rename", label: "Rename project" }');
expect(src).toContain("onContextMenu={(event) => {");
expect(src).not.toContain("onDoubleClick={(e) => {");
});
});
7 changes: 0 additions & 7 deletions apps/web/src/components/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1343,13 +1343,6 @@ export default function Sidebar() {
? { color: isDark ? pColor.textDark : pColor.text }
: undefined
}
onDoubleClick={(e) => {
e.stopPropagation();
startProjectEditing({
projectId: project.id,
title: project.name,
});
}}
>
{project.name}
</span>
Expand Down
39 changes: 14 additions & 25 deletions apps/web/src/components/chat/ErrorNotificationBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ export const ErrorNotificationBar = memo(function ErrorNotificationBar({
technicalDetails: presentation.technicalDetails,
severity: "error",
dismissible: !!onDismissThreadError,
onDismiss: onDismissThreadError,
...(onDismissThreadError ? { onDismiss: onDismissThreadError } : {}),
});
}
}
Expand Down Expand Up @@ -167,15 +167,12 @@ export const ErrorNotificationBar = memo(function ErrorNotificationBar({

const visibleNotifications = notifications.filter((n) => !dismissedIds.has(n.id));

const handleDismiss = useCallback(
(notif: NotificationItem) => {
if (notif.onDismiss) {
notif.onDismiss();
}
setDismissedIds((prev) => new Set(prev).add(notif.id));
},
[],
);
const handleDismiss = useCallback((notif: NotificationItem) => {
if (notif.onDismiss) {
notif.onDismiss();
}
setDismissedIds((prev) => new Set(prev).add(notif.id));
}, []);

const handleDismissAll = useCallback(() => {
for (const notif of visibleNotifications) {
Expand Down Expand Up @@ -207,14 +204,11 @@ export const ErrorNotificationBar = memo(function ErrorNotificationBar({
} as const;

// Find the highest severity across all notifications
const highestSeverity = visibleNotifications.reduce<"error" | "warning" | "info">(
(acc, n) => {
if (acc === "error" || n.severity === "error") return "error";
if (acc === "warning" || n.severity === "warning") return "warning";
return "info";
},
"info",
);
const highestSeverity = visibleNotifications.reduce<"error" | "warning" | "info">((acc, n) => {
if (acc === "error" || n.severity === "error") return "error";
if (acc === "warning" || n.severity === "warning") return "warning";
return "info";
}, "info");

return (
<div className="mx-auto w-full max-w-7xl px-3 pt-2 sm:px-5">
Expand Down Expand Up @@ -290,13 +284,8 @@ export const ErrorNotificationBar = memo(function ErrorNotificationBar({
{visibleNotifications.map((notif) => {
const Icon = notif.icon;
return (
<div
key={notif.id}
className="flex items-start gap-2 py-1.5 text-xs"
>
<Icon
className={cn("mt-0.5 size-3 shrink-0", severityColor[notif.severity])}
/>
<div key={notif.id} className="flex items-start gap-2 py-1.5 text-xs">
<Icon className={cn("mt-0.5 size-3 shrink-0", severityColor[notif.severity])} />
<div className="min-w-0 flex-1">
<p className="font-medium text-foreground/90">{notif.title}</p>
<p className="text-muted-foreground">{notif.description}</p>
Expand Down
Loading