0.6 rust重构01
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
import { randomUUID } from "crypto";
|
||||
import type { ConvexHttpClient } from "convex/browser";
|
||||
import type { SidebarInitialData } from "@/components/sidebar/types";
|
||||
import type { DocumentRecord } from "@/lib/documents";
|
||||
import { api } from "@/lib/convex/api";
|
||||
import { buildSidebarInitialData } from "@/lib/sidebar-data";
|
||||
import type { WorkspaceSummary } from "@/lib/workspaces";
|
||||
|
||||
type LoadSidebarDataFromConvexInput = {
|
||||
client: ConvexHttpClient;
|
||||
userId: string;
|
||||
fallbackName: string;
|
||||
requestedWorkspaceId?: string | null;
|
||||
};
|
||||
|
||||
type LoadSidebarDataFromConvexResult = {
|
||||
workspaces: WorkspaceSummary[];
|
||||
activeWorkspaceId: string;
|
||||
targetWorkspaceId: string | null;
|
||||
sidebarInitialData: SidebarInitialData | null;
|
||||
documents: DocumentRecord[];
|
||||
};
|
||||
|
||||
export async function loadSidebarDataFromConvex(
|
||||
input: LoadSidebarDataFromConvexInput,
|
||||
): Promise<LoadSidebarDataFromConvexResult> {
|
||||
const bootstrap = await input.client.mutation(api.workspaces.ensureDefaultWorkspace, {
|
||||
fallbackName: input.fallbackName,
|
||||
workspaceIdIfCreate: randomUUID(),
|
||||
});
|
||||
|
||||
const summaries = await input.client.query(api.workspaces.fetchWorkspaceSummaries, {});
|
||||
const workspaces = summaries.workspaces.length > 0 ? summaries.workspaces : bootstrap.workspaces;
|
||||
const activeWorkspaceId = summaries.activeWorkspaceId || bootstrap.activeWorkspaceId;
|
||||
const targetWorkspaceId = input.requestedWorkspaceId?.trim() || activeWorkspaceId || null;
|
||||
|
||||
if (!targetWorkspaceId) {
|
||||
return {
|
||||
workspaces,
|
||||
activeWorkspaceId,
|
||||
targetWorkspaceId: null,
|
||||
sidebarInitialData: null,
|
||||
documents: [],
|
||||
};
|
||||
}
|
||||
|
||||
const [documents, trashedDocuments, mindmaps, mediaAssets, trashedMediaAssets, tables] = await Promise.all([
|
||||
input.client.query(api.documents.listByWorkspace, {
|
||||
workspaceId: targetWorkspaceId,
|
||||
}),
|
||||
input.client.query(api.documents.listTrashedByWorkspace, {
|
||||
workspaceId: targetWorkspaceId,
|
||||
}),
|
||||
input.client.query(api.mindmaps.listByWorkspace, {
|
||||
workspaceId: targetWorkspaceId,
|
||||
includeDeleted: true,
|
||||
}),
|
||||
input.client.query(api.mediaAssets.listByWorkspace, {
|
||||
userId: input.userId,
|
||||
workspaceId: targetWorkspaceId,
|
||||
limit: 200,
|
||||
}),
|
||||
input.client.query(api.mediaAssets.listDeletedByWorkspace, {
|
||||
userId: input.userId,
|
||||
workspaceId: targetWorkspaceId,
|
||||
limit: 2000,
|
||||
}),
|
||||
input.client.query(api.tables.listByWorkspaceForSearch, {
|
||||
userId: input.userId,
|
||||
workspaceId: targetWorkspaceId,
|
||||
includeArchived: true,
|
||||
limit: 3000,
|
||||
}),
|
||||
]);
|
||||
|
||||
const normalizedDocuments = documents as DocumentRecord[];
|
||||
|
||||
return {
|
||||
workspaces,
|
||||
activeWorkspaceId,
|
||||
targetWorkspaceId,
|
||||
sidebarInitialData: buildSidebarInitialData({
|
||||
activeWorkspaceId: targetWorkspaceId,
|
||||
workspaces,
|
||||
documents: normalizedDocuments,
|
||||
trashedDocuments,
|
||||
mindmaps: mindmaps ?? [],
|
||||
mediaAssets: mediaAssets ?? [],
|
||||
trashedMediaAssets: trashedMediaAssets ?? [],
|
||||
tables: tables ?? [],
|
||||
}),
|
||||
documents: normalizedDocuments,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user