Agent Details
diff --git a/ui/src/pages/ProjectDetail.tsx b/ui/src/pages/ProjectDetail.tsx
index 2a568445..b1dcfd39 100644
--- a/ui/src/pages/ProjectDetail.tsx
+++ b/ui/src/pages/ProjectDetail.tsx
@@ -16,15 +16,13 @@ import { InlineEditor } from "../components/InlineEditor";
import { StatusBadge } from "../components/StatusBadge";
import { IssuesList } from "../components/IssuesList";
import { PageSkeleton } from "../components/PageSkeleton";
+import { PageTabBar } from "../components/PageTabBar";
import { projectRouteRef, cn } from "../lib/utils";
-import { Button } from "@/components/ui/button";
-import { Sheet, SheetContent, SheetHeader, SheetTitle } from "@/components/ui/sheet";
-import { ScrollArea } from "@/components/ui/scroll-area";
-import { SlidersHorizontal } from "lucide-react";
+import { Tabs } from "@/components/ui/tabs";
/* ── Top-level tab types ── */
-type ProjectTab = "overview" | "list";
+type ProjectTab = "overview" | "list" | "configuration";
function resolveProjectTab(pathname: string, projectId: string): ProjectTab | null {
const segments = pathname.split("/").filter(Boolean);
@@ -32,6 +30,7 @@ function resolveProjectTab(pathname: string, projectId: string): ProjectTab | nu
if (projectsIdx === -1 || segments[projectsIdx + 1] !== projectId) return null;
const tab = segments[projectsIdx + 2];
if (tab === "overview") return "overview";
+ if (tab === "configuration") return "configuration";
if (tab === "issues") return "list";
return null;
}
@@ -198,9 +197,8 @@ export function ProjectDetail() {
filter?: string;
}>();
const { companies, selectedCompanyId, setSelectedCompanyId } = useCompany();
- const { openPanel, closePanel, panelVisible, setPanelVisible } = usePanel();
+ const { closePanel } = usePanel();
const { setBreadcrumbs } = useBreadcrumbs();
- const [mobilePropsOpen, setMobilePropsOpen] = useState(false);
const queryClient = useQueryClient();
const navigate = useNavigate();
const location = useLocation();
@@ -264,6 +262,10 @@ export function ProjectDetail() {
navigate(`/projects/${canonicalProjectRef}/overview`, { replace: true });
return;
}
+ if (activeTab === "configuration") {
+ navigate(`/projects/${canonicalProjectRef}/configuration`, { replace: true });
+ return;
+ }
if (activeTab === "list") {
if (filter) {
navigate(`/projects/${canonicalProjectRef}/issues/${filter}`, { replace: true });
@@ -276,11 +278,9 @@ export function ProjectDetail() {
}, [project, routeProjectRef, canonicalProjectRef, activeTab, filter, navigate]);
useEffect(() => {
- if (project) {
- openPanel(
updateProject.mutate(data)} />);
- }
+ closePanel();
return () => closePanel();
- }, [project]); // eslint-disable-line react-hooks/exhaustive-deps
+ }, [closePanel]);
// Redirect bare /projects/:id to /projects/:id/issues
if (routeProjectRef && activeTab === null) {
@@ -294,6 +294,8 @@ export function ProjectDetail() {
const handleTabChange = (tab: ProjectTab) => {
if (tab === "overview") {
navigate(`/projects/${canonicalProjectRef}/overview`);
+ } else if (tab === "configuration") {
+ navigate(`/projects/${canonicalProjectRef}/configuration`);
} else {
navigate(`/projects/${canonicalProjectRef}/issues`);
}
@@ -314,54 +316,20 @@ export function ProjectDetail() {
as="h2"
className="text-xl font-bold"
/>
-
-