import { useEffect, useState } from "react"; import { useTranslations } from "@/i18n/compat/client"; import { AlertCircle, ShieldCheck, ShieldAlert, Edit2 } from "lucide-react"; import { motion } from "framer-motion"; import { useRouter } from "@/lib/navigation"; import { Input } from "@/components/ui/input"; import PdfExport from "../shared/PdfExport"; import ThemeToggle from "../shared/ThemeToggle"; import { useResumeStore } from "@/store/useResumeStore"; import { getThemeConfig } from "@/theme/themeConfig"; import { useGrammarCheck } from "@/hooks/useGrammarCheck"; import { HoverCard, HoverCardTrigger, HoverCardContent } from "@/components/ui/hover-card"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { Button } from "@/components/ui/button"; import { GrammarCheckDrawer } from "./grammar/GrammarCheckDrawer"; import { getFileHandle, getConfig } from "@/utils/fileSystem"; interface EditorHeaderProps { isMobile?: boolean; } export function EditorHeader({ isMobile }: EditorHeaderProps) { const { activeResume, setActiveSection, updateResumeTitle } = useResumeStore(); const { menuSections = [], activeSection } = activeResume || {}; const themeConfig = getThemeConfig(); const { errors, selectError } = useGrammarCheck(); const router = useRouter(); const t = useTranslations(); const visibleSections = menuSections ?.filter((section) => section.enabled) .sort((a, b) => a.order - b.order); const [backupConfigured, setBackupConfigured] = useState(null); const [backupPath, setBackupPath] = useState(""); useEffect(() => { const checkBackup = async () => { try { const handle = await getFileHandle("syncDirectory"); const path = await getConfig("syncDirectoryPath"); setBackupConfigured(!!handle); setBackupPath(path || ""); } catch { setBackupConfigured(false); } }; checkBackup(); }, []); return (
{ router.push("/app/dashboard"); }} > {t("common.title")} /
{ updateResumeTitle(e.target.value || "未命名简历"); }} className="w-56 text-sm h-8 bg-muted/30 border-transparent hover:bg-muted/60 focus:bg-background transition-colors px-2.5 py-1 pr-8 shadow-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-border rounded-md font-medium text-foreground/90 hover:text-foreground" placeholder="简历名称" />
{/* Backup Status Badge */} {backupConfigured !== null && ( {backupConfigured ? (
{t("previewDock.backup.configured")} {backupPath}
) : (
{t("previewDock.backup.notConfigured")} {t("previewDock.backup.clickToConfigure")}
)}
)}
{errors.length > 0 && (
document.dispatchEvent(new CustomEvent('open-grammar-drawer'))} > {t("grammarCheck.found_issues", { count: errors.length })}
)}
); }