0.3.3 外网下载修复

This commit is contained in:
liaibo
2026-01-21 18:21:10 +08:00
parent f13de35321
commit 71de56850b
45 changed files with 2499 additions and 476 deletions
@@ -3,6 +3,7 @@
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
import Link from "next/link";
import { useRouter, useSelectedLayoutSegments } from "next/navigation";
import { useAuthActions } from "@convex-dev/auth/react";
import {
ArrowRightLeft,
ArrowUpRight,
@@ -15,6 +16,7 @@ import {
LayoutGrid,
Library,
Link as LinkIcon,
LogOut,
MoreHorizontal,
PanelRightOpen,
Plus,
@@ -178,6 +180,7 @@ function SidebarContent({ initialData, sidebarQuery }: SidebarContentProps) {
const isLoading = sidebarQuery.isLoading;
const segments = useSelectedLayoutSegments();
const router = useRouter();
const { signOut } = useAuthActions();
const activeId = segments?.[1] ?? "";
const editorBridge = useEditorBridgeStore((state) => state.bridge);
@@ -186,6 +189,7 @@ function SidebarContent({ initialData, sidebarQuery }: SidebarContentProps) {
const [expanded, setExpanded] = useState<Set<string>>(() => collectNodeIds(tree));
const [contextMenu, setContextMenu] = useState<ContextMenuState | null>(null);
const [workspaceMenuOpen, setWorkspaceMenuOpen] = useState(false);
const [signingOut, setSigningOut] = useState(false);
const [trashOpen, setTrashOpen] = useState(false);
const [trashSearch, setTrashSearch] = useState("");
const [trashTab, setTrashTab] = useState<"documents" | "assets">("documents");
@@ -1729,6 +1733,26 @@ function SidebarContent({ initialData, sidebarQuery }: SidebarContentProps) {
[sidebarData.activeWorkspaceId, sidebarQuery],
);
const handleSignOut = useCallback(async () => {
if (signingOut) {
return;
}
if (!window.confirm("确认退出登录吗?")) {
return;
}
setSigningOut(true);
try {
await signOut();
setWorkspaceMenuOpen(false);
router.replace("/auth");
router.refresh();
} catch (error: any) {
window.alert(`退出登录失败:${error?.message ?? "请稍后再试"}`);
} finally {
setSigningOut(false);
}
}, [router, signOut, signingOut]);
const openContextMenu = useCallback((event: React.MouseEvent, node: DocumentNode) => {
event.preventDefault();
event.stopPropagation();
@@ -1826,6 +1850,17 @@ function SidebarContent({ initialData, sidebarQuery }: SidebarContentProps) {
)}
</button>
))}
<div className="border-t border-[#f1f1f1] p-1">
<button
type="button"
className="flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-sm text-red-600 hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-60"
onClick={() => void handleSignOut()}
disabled={signingOut}
>
<LogOut className="h-4 w-4" />
<span>{signingOut ? "正在退出..." : "退出登录"}</span>
</button>
</div>
</div>
)}
</div>