Ctrl K
ComunidadGuías…

lib/app-tabs-api.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"use client";

import type { AppTab, AppTabPatch } from "./app-tabs";
import { fetchClientRead } from "./client-read";

export class AppTabRequestError extends Error {
  constructor(public code: string, public tab?: AppTab) { super(code); }
}

async function request<T>(path: string, init?: RequestInit): Promise<T> {
  const requestFetch = init?.method ? fetch : fetchClientRead;
  const response = await requestFetch(`/api/me/app-tabs${path}`, { ...init, headers: { "Content-Type": "application/json" } });
  const data = await response.json();
  if (!response.ok) throw new AppTabRequestError(data.code ?? "database", data.tab);
  return data as T;
}
export const fetchAppTabs = (signal?: AbortSignal) => request<AppTab[]>("", { signal });
export async function createAppTab(ensure: boolean, id = crypto.randomUUID(), signal?: AbortSignal): Promise<AppTab> {
  return (await request<{ tab: AppTab }>("", { method: "POST", body: JSON.stringify({ ensure, id }), signal })).tab;
}
export async function patchAppTab(tab: AppTab, patch: AppTabPatch, signal?: AbortSignal): Promise<AppTab> {
  return (await request<{ tab: AppTab }>(`/${tab.id}`, { method: "PATCH", body: JSON.stringify({ revision: tab.revision, patch }), signal })).tab;
}
export async function deleteAppTab(tab: AppTab, signal?: AbortSignal): Promise<void> {
  await request(`/${tab.id}`, { method: "DELETE", body: JSON.stringify({ revision: tab.revision }), signal });
}
export async function moveAppTab(tab: AppTab, beforeId: string | null, signal?: AbortSignal): Promise<AppTab[]> {
  return (await request<{ tabs: AppTab[] }>(`/${tab.id}/move`, {
    method: "POST", body: JSON.stringify({ revision: tab.revision, beforeId }), signal,
  })).tabs;
}