import { del, get, post, put } from "./shared"; import type { BuiltinWidgetKindInfo, WidgetDataResponse, WidgetInstance, WidgetInstanceInput, } from "../types"; export interface WidgetReference { id: string; dashboard_scope: string; widget_id: string; sort_order: number; created_at: number; widget: WidgetInstance; } export interface WidgetReferenceInput { dashboard_scope: string; widget_id: string; sort_order?: number; } export async function fetchBuiltinWidgetKinds(): Promise< BuiltinWidgetKindInfo[] > { return get("/api/widgets/builtin"); } export async function fetchWidgetInstances( serviceId?: string, scope?: "dashboard" | "service", ): Promise { const params: Record = {}; if (serviceId) params.service_id = serviceId; if (scope) params.scope = scope; return get("/api/widgets/instances", params); } export async function createWidgetInstance( input: WidgetInstanceInput, ): Promise { return post("/api/widgets/instances", input); } export async function updateWidgetInstance( input: WidgetInstanceInput, ): Promise { if (!input.id) throw new Error("Widget ID is required for update"); return put(`/api/widgets/instances/${input.id}`, input); } export async function deleteWidgetInstance( widgetId: string, ): Promise<{ status: string }> { return del<{ status: string }>(`/api/widgets/instances/${widgetId}`); } export async function fetchWidgetData( widgetId: string, ): Promise { return get(`/api/widgets/instances/${widgetId}/data`); } export async function fetchWidgetReferences( dashboardScope: string, ): Promise { return get("/api/widgets/references", { dashboard_scope: dashboardScope, }); } export async function createWidgetReference( input: WidgetReferenceInput, ): Promise { return post("/api/widgets/references", input); } export async function deleteWidgetReference( referenceId: string, ): Promise<{ status: string }> { return del<{ status: string }>(`/api/widgets/references/${referenceId}`); } export async function detachWidgetReference( referenceId: string, ): Promise { return post(`/api/widgets/references/${referenceId}/detach`); } export async function updateWidgetReference( referenceId: string, sortOrder: number, ): Promise { return put( `/api/widgets/references/${referenceId}?sort_order=${sortOrder}`, {}, ); }