Files
mnote/wolai-frontend/src/lib/server/sidebar-data.ts
T

74 lines
2.3 KiB
TypeScript
Raw Normal View History

2026-04-14 13:22:29 +08:00
import { randomUUID } from "crypto";
import type { ConvexHttpClient } from "convex/browser";
import type { FunctionReference } from "convex/server";
2026-04-14 13:22:29 +08:00
import type { SidebarInitialData } from "@/components/sidebar/types";
import type { DocumentRecord } from "@/lib/documents";
import { api } from "@/lib/convex/api";
import {
mapSidebarDatasetListQueryResultToInitialData,
type SidebarDatasetListQueryResult,
} from "@/lib/sidebar-data";
2026-04-14 13:22:29 +08:00
import type { WorkspaceSummary } from "@/lib/workspaces";
type LoadSidebarDataFromConvexInput = {
client: ConvexHttpClient;
fallbackName: string;
requestedWorkspaceId?: string | null;
};
type LoadSidebarDataFromConvexResult = {
workspaces: WorkspaceSummary[];
activeWorkspaceId: string;
targetWorkspaceId: string | null;
sidebarDataset: SidebarDatasetListQueryResult | null;
2026-04-14 13:22:29 +08:00
sidebarInitialData: SidebarInitialData | null;
documents: DocumentRecord[];
};
const sidebarDatasetListQuery = ((api as unknown as Record<string, unknown>).sidebar as
| Record<string, unknown>
| undefined)?.datasetList as FunctionReference<
"query",
"public",
{ workspaceId: string },
SidebarDatasetListQueryResult
>;
2026-04-14 13:22:29 +08:00
export async function loadSidebarDataFromConvex(
input: LoadSidebarDataFromConvexInput,
): Promise<LoadSidebarDataFromConvexResult> {
const bootstrap = await input.client.mutation(api.workspaces.ensureDefaultWorkspace, {
fallbackName: input.fallbackName,
workspaceIdIfCreate: randomUUID(),
});
const workspaces = bootstrap.workspaces;
const activeWorkspaceId = bootstrap.activeWorkspaceId;
2026-04-14 13:22:29 +08:00
const targetWorkspaceId = input.requestedWorkspaceId?.trim() || activeWorkspaceId || null;
if (!targetWorkspaceId) {
return {
workspaces,
activeWorkspaceId,
targetWorkspaceId: null,
sidebarDataset: null,
2026-04-14 13:22:29 +08:00
sidebarInitialData: null,
documents: [],
};
}
const sidebarDataset = (await input.client.query(sidebarDatasetListQuery, {
workspaceId: targetWorkspaceId,
})) as SidebarDatasetListQueryResult;
const normalizedDocuments = (sidebarDataset.documents ?? []) as DocumentRecord[];
2026-04-14 13:22:29 +08:00
return {
workspaces: sidebarDataset.workspaces ?? workspaces,
2026-04-14 13:22:29 +08:00
activeWorkspaceId,
targetWorkspaceId,
sidebarDataset,
sidebarInitialData: mapSidebarDatasetListQueryResultToInitialData(sidebarDataset),
2026-04-14 13:22:29 +08:00
documents: normalizedDocuments,
};
}