- {/* Sidebar — compose */}
Dataset
- {/* Main — preview */}
@@ -111,7 +119,6 @@ export default function ReportBuilderPage() {
- {/* Saved reports list */}
{savedReports.length > 0 && (
Saved Reports
@@ -126,7 +133,6 @@ export default function ReportBuilderPage() {
)}
- {/* Save dialog */}
{showSave && (
setShowSave(false)} />
@@ -142,4 +148,4 @@ export default function ReportBuilderPage() {
)}
);
-}
+}
\ No newline at end of file
diff --git a/frontend/app/(dashboard)/search/page.tsx b/frontend/app/(dashboard)/search/page.tsx
index 02a37db75..c8cac6f39 100644
--- a/frontend/app/(dashboard)/search/page.tsx
+++ b/frontend/app/(dashboard)/search/page.tsx
@@ -3,15 +3,7 @@
import { useState, useEffect } from "react";
import { useSearchParams, useRouter } from "next/navigation";
import { Search, Package, Users, FileText, X } from "lucide-react";
-import { Badge } from "@/components/ui/badge";
-
-interface SearchResult {
- id: string;
- type: "asset" | "user" | "document";
- title: string;
- subtitle: string;
- href: string;
-}
+import { searchApiClient, type SearchResult } from "@/lib/api/search";
const TYPE_ICONS: Record
= {
asset: Package,
@@ -36,16 +28,16 @@ export default function SearchPage() {
useEffect(() => {
if (!query.trim()) { setResults([]); return; }
+ const controller = new AbortController();
const timer = setTimeout(() => {
setLoading(true);
- // In real implementation, calls GET /api/search?q=...
- fetch(`/api/search?q=${encodeURIComponent(query)}`)
- .then((r) => r.json())
- .then((data) => setResults(data.results ?? []))
+ searchApiClient
+ .search(query)
+ .then((data) => setResults(data))
.catch(() => setResults([]))
.finally(() => setLoading(false));
}, 300);
- return () => clearTimeout(timer);
+ return () => { clearTimeout(timer); controller.abort(); };
}, [query]);
const filtered = activeType === "all" ? results : results.filter((r) => r.type === activeType);
@@ -135,4 +127,4 @@ export default function SearchPage() {
);
-}
+}
\ No newline at end of file
diff --git a/frontend/lib/api/saved-reports.ts b/frontend/lib/api/saved-reports.ts
new file mode 100644
index 000000000..2f33f7afc
--- /dev/null
+++ b/frontend/lib/api/saved-reports.ts
@@ -0,0 +1,35 @@
+import { api } from '../api';
+
+export interface SavedReport {
+ id: string;
+ name: string;
+ dataset: string;
+ filters: Record