import { disconnectLanguage, useFileConnections, } from "@/store/file-connection"; import { useProjectSourcesStore } from "@/store/sources-store"; import { isTauriEnv } from "@/lib/is-tauri"; import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip"; import { Button } from "../ui/button"; import { cn } from "@/lib/utils"; type Props = { projectId: string; }; export function HeaderConnectionIndicator({ projectId }: Props) { const isTauri = isTauriEnv(); if (isTauri) { return ; } return ; } /** Tauri 模式:展示目前链接的所有语言文件地址 */ function TauriConnectionIndicator() { const { languages, baseDir } = useProjectSourcesStore(); const hasAny = languages.length > 0; const allExist = languages.every((lang) => lang.exists); const missingCount = languages.filter((lang) => !lang.exists).length; // 状态颜色:全部存在=绿色,部分缺失=黄色,无文件=红色 const statusColor = !hasAny ? "bg-red-500" : allExist ? "bg-green-500" : "bg-yellow-500"; return (
连接状态 (Tauri)
{languages.length === 0 ? (
暂无语言文件配置。请通过项目设置配置语言源目录。
) : (
{baseDir && (
基础目录:{baseDir}
)} {languages.map((lang) => (
{lang.language}
{lang.path}
{!lang.exists && (
文件不存在
)}
))}
Tauri 模式下文件自动连接,无需手动操作。
)}
); } /** 浏览器模式:使用 FileSystemFileHandle 管理连接 */ function BrowserConnectionIndicator({ projectId }: { projectId: string }) { const snap = useFileConnections(projectId); const list = Object.values(snap.connections); const hasAny = list.length > 0; return (
连线状态
{list.length === 0 ? (
暂无连线。通过"导入 JSON"选择文件后将建立连线。
) : (
{list.map((c) => (
{c.language}
{c.name}
))}
注:出于隐私,浏览器不提供完整路径,仅显示文件名;刷新页面后连线不会自动恢复。
)}
); }