- Created api-helpers.ts with shared getAccessToken() + createNotesApiClient() - Removed duplicate API client factory from notes-client.ts, review-client.ts, saved-views-client.ts (3 copies → 1 shared module) - Added reviewedBy/reviewedAt/reviewNote fields to review-client NoteAgentActionDoc type to match backend response shape - Search page: use crypto.randomUUID() for saved view IDs instead of Date.now() to prevent collisions on rapid saves Verification: web typecheck + 6/6 tests pass.
66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
"use client";
|
|
|
|
import { createNotesApiClient } from "@/lib/api-helpers";
|
|
|
|
export interface SavedView {
|
|
id: string;
|
|
name: string;
|
|
scope: "workspace" | "search" | "review";
|
|
description?: string;
|
|
query: string;
|
|
filters?: Record<string, string>;
|
|
sortOrder: number;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
interface SavedViewListResponse {
|
|
items: SavedView[];
|
|
total: number;
|
|
}
|
|
|
|
export async function listSavedViews(scope?: SavedView["scope"]): Promise<SavedView[]> {
|
|
const api = createNotesApiClient();
|
|
const params = new URLSearchParams();
|
|
if (scope) params.set("scope", scope);
|
|
const response = await api.fetch<SavedViewListResponse>(`/saved-views?${params.toString()}`);
|
|
return response.items;
|
|
}
|
|
|
|
export async function getSavedView(id: string): Promise<SavedView> {
|
|
const api = createNotesApiClient();
|
|
return api.fetch<SavedView>(`/saved-views/${encodeURIComponent(id)}`);
|
|
}
|
|
|
|
export async function createSavedView(input: {
|
|
id: string;
|
|
name: string;
|
|
scope: SavedView["scope"];
|
|
description?: string;
|
|
query: string;
|
|
filters?: Record<string, string>;
|
|
sortOrder?: number;
|
|
}): Promise<SavedView> {
|
|
const api = createNotesApiClient();
|
|
return api.fetch<SavedView>("/saved-views", {
|
|
method: "POST",
|
|
body: JSON.stringify(input),
|
|
});
|
|
}
|
|
|
|
export async function updateSavedView(
|
|
id: string,
|
|
updates: Partial<Pick<SavedView, "name" | "description" | "query" | "filters" | "sortOrder">>,
|
|
): Promise<SavedView> {
|
|
const api = createNotesApiClient();
|
|
return api.fetch<SavedView>(`/saved-views/${encodeURIComponent(id)}`, {
|
|
method: "PATCH",
|
|
body: JSON.stringify(updates),
|
|
});
|
|
}
|
|
|
|
export async function deleteSavedView(id: string): Promise<void> {
|
|
const api = createNotesApiClient();
|
|
await api.fetch(`/saved-views/${encodeURIComponent(id)}`, { method: "DELETE" });
|
|
}
|