/** * Layout API client — CRUD for user dashboard layouts */ import type { UserLayout, WidgetPlacement } from "@mosaic/shared"; import { apiGet, apiPost, apiPatch } from "./client"; export interface CreateLayoutPayload { name: string; isDefault?: boolean; layout: WidgetPlacement[]; metadata?: Record; } export interface UpdateLayoutPayload { name?: string; isDefault?: boolean; layout?: WidgetPlacement[]; metadata?: Record; } /** * Fetch the user's default layout for the active workspace. * Returns null if no layout exists (404). */ export async function fetchDefaultLayout(workspaceId: string): Promise { try { return await apiGet("/api/layouts/default", workspaceId); } catch { // 404 = no layout yet — not an error return null; } } /** * Create a new layout. */ export async function createLayout( workspaceId: string, payload: CreateLayoutPayload ): Promise { return apiPost("/api/layouts", payload, workspaceId); } /** * Update an existing layout (partial patch). */ export async function updateLayout( workspaceId: string, layoutId: string, payload: UpdateLayoutPayload ): Promise { return apiPatch(`/api/layouts/${layoutId}`, payload, workspaceId); }