0.3.1 UI修复

This commit is contained in:
liaibo
2026-01-18 19:01:31 +08:00
parent 90a38b48cf
commit 8a5b915002
86 changed files with 1160 additions and 2867 deletions
+6 -68
View File
@@ -5,14 +5,10 @@ import { Breadcrumb } from "@/components/breadcrumb";
import { BottomToolbar } from "@/components/bottom-toolbar";
import { MobileSidebarTrigger } from "@/components/mobile-sidebar-trigger";
import type { DocumentRecord } from "@/lib/documents";
import { createSupabaseServerClient } from "@/lib/supabase/server";
import { ensureDefaultWorkspace, fetchWorkspaceSummaries } from "@/lib/workspaces";
import { fetchSidebarDataset } from "@/lib/sidebar-tree";
import type { SidebarInitialData } from "@/components/sidebar/types";
import { SearchPalette } from "@/components/search/search-palette";
import { isConvexEnabled } from "@/lib/convex/enabled";
import { requireAuthContext } from "@/lib/auth/authContext";
import { getConvexHttpClient } from "@/lib/convex/server";
import { getAuthedConvexClient } from "@/lib/convex/route";
import { api } from "@/lib/convex/api";
import type { MediaAsset } from "@/types/media";
@@ -66,11 +62,9 @@ function makeId(): string {
export default async function AppLayout({ children }: { children: ReactNode }) {
if (isConvexEnabled()) {
const auth = await requireAuthContext();
const client = getConvexHttpClient();
const { auth, client } = await getAuthedConvexClient();
const ensured = await client.mutation(api.workspaces.ensureDefaultWorkspace, {
userId: auth.userId,
fallbackName: auth.name ?? auth.email ?? "我的空间",
workspaceIdIfCreate: makeId(),
});
@@ -84,11 +78,9 @@ export default async function AppLayout({ children }: { children: ReactNode }) {
if (activeWorkspaceId) {
const [docRows, trashedDocs] = await Promise.all([
client.query(api.documents.listByWorkspace, {
userId: auth.userId,
workspaceId: activeWorkspaceId,
}),
client.query(api.documents.listTrashedByWorkspace, {
userId: auth.userId,
workspaceId: activeWorkspaceId,
}),
]);
@@ -96,7 +88,6 @@ export default async function AppLayout({ children }: { children: ReactNode }) {
documents = docRows as unknown as DocumentRecord[];
const mindmapRows = await client.query(api.mindmaps.listByWorkspace, {
userId: auth.userId,
workspaceId: activeWorkspaceId,
includeDeleted: true,
});
@@ -178,10 +169,10 @@ export default async function AppLayout({ children }: { children: ReactNode }) {
}
return (
<div className="flex h-screen bg-white">
<div className="flex h-screen w-full overflow-hidden bg-wolai-bg text-wolai-text-primary">
{sidebarInitialData && <Sidebar initialData={sidebarInitialData} />}
<div className="flex min-w-0 flex-1 flex-col">
<header className="flex h-10 items-center gap-4 border-b border-[#eeeeee] px-4">
<div className="flex min-w-0 flex-1 flex-col h-full bg-white relative overflow-hidden">
<header className="h-[44px] w-full flex items-center px-4 text-wolai-text-secondary text-sm bg-white/80 backdrop-blur-sm sticky top-0 z-50">
<MobileSidebarTrigger />
<Breadcrumb documents={documents} />
</header>
@@ -193,58 +184,5 @@ export default async function AppLayout({ children }: { children: ReactNode }) {
);
}
const supabase = await createSupabaseServerClient();
const {
data: { session },
} = await supabase.auth.getSession();
if (!session) {
redirect("/login");
}
await ensureDefaultWorkspace(supabase, session.user.id, session.user.email ?? "我的空间");
const { workspaces, activeWorkspaceId } = await fetchWorkspaceSummaries(supabase, session.user.id);
let documents: DocumentRecord[] = [];
let sidebarInitialData: SidebarInitialData | null = null;
if (activeWorkspaceId) {
const dataset = await fetchSidebarDataset(supabase, activeWorkspaceId);
documents = dataset.documents;
const localMindmaps = await detectLocalMindmapDocs(
dataset.documents.map((d) => d.id),
);
const mindmapDocs = Array.from(
new Set([...(dataset.mindmapDocs ?? []), ...localMindmaps]),
);
const trashedMindmapAssets = await detectLocalTrashedMindmapAssets(
activeWorkspaceId,
dataset.documents.map((d) => d.id),
);
sidebarInitialData = {
activeWorkspaceId,
workspaces,
documents: dataset.documents,
trashedDocuments: dataset.trashedDocuments,
trashedMediaAssets: dataset.trashedMediaAssets ?? [],
trashedMindmapAssets,
mediaAssets: dataset.mediaAssets,
mindmapDocs,
};
}
return (
<div className="flex h-screen bg-white">
{sidebarInitialData && <Sidebar initialData={sidebarInitialData} />}
<div className="flex min-w-0 flex-1 flex-col">
<header className="flex h-10 items-center gap-4 border-b border-[#eeeeee] px-4">
<MobileSidebarTrigger />
<Breadcrumb documents={documents} />
</header>
<main className="flex-1 overflow-hidden bg-white">{children}</main>
<BottomToolbar />
<SearchPalette workspaceId={sidebarInitialData?.activeWorkspaceId ?? null} />
</div>
</div>
);
redirect("/login");
}