kanban / src /components /editor /EditPanel.tsx
Leon4gr45's picture
Deploy magic-resume as Docker Space (port 3000)
c30ea2a verified
Raw
History Blame Contribute Delete
4.03 kB
import React from "react";
import { Pencil } from "lucide-react";
import { motion } from "framer-motion";
import { useResumeStore } from "@/store/useResumeStore";
import { cn } from "@/lib/utils";
import BasicPanel from "./basic/BasicPanel";
import EducationPanel from "./education/EducationPanel";
import ProjectPanel from "./project/ProjectPanel";
import ExperiencePanel from "./experience/ExperiencePanel";
import CustomPanel from "./custom/CustomPanel";
import SkillPanel from "./skills/SkillPanel";
import SelfEvaluationPanel from "./self-evaluation/SelfEvaluationPanel";
import CertificatesPanel from "./certificates/CertificatesPanel";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "../ui/tooltip";
export function EditPanel() {
const { activeResume, updateMenuSections } = useResumeStore();
if (!activeResume) return;
const { activeSection = "", menuSections = [] } = activeResume || {};
const renderFields = () => {
switch (activeSection) {
case "basic":
return <BasicPanel />;
case "projects":
return <ProjectPanel />;
case "education":
return <EducationPanel />;
case "experience":
return <ExperiencePanel />;
case "skills":
return <SkillPanel />;
case "selfEvaluation":
return <SelfEvaluationPanel />;
case "certificates":
return <CertificatesPanel />;
default:
if (activeSection?.startsWith("custom")) {
return <CustomPanel sectionId={activeSection} />;
} else {
return <BasicPanel />;
}
}
};
return (
<motion.div
className={cn(
"w-full h-full border-r overflow-y-auto",
"bg-background border-border"
)}
>
<div className="p-4">
<motion.div
className={cn(
"mb-4 p-4 rounded-lg border",
"bg-card border-border"
)}
>
<div className="flex items-center gap-2">
<span className="text-lg">
{menuSections?.find((s) => s.id === activeSection)?.icon}
</span>
{/* 如果是基本信息的展示话展示div */}
{activeSection === "basic" ? (
<div>
<span className="text-lg font-semibold text-primary">
{menuSections?.find((s) => s.id === activeSection)?.title}
</span>
</div>
) : (
<>
<input
className={cn(
"flex-1 text-lg font-medium text-primary border-black bg-transparent outline-none pb-1 text-primary"
)}
type="text"
value={
menuSections?.find((s) => s.id === activeSection)?.title
}
onChange={(e) => {
const newMenuSections = menuSections.map((s) => {
if (s.id === activeSection) {
return {
...s,
title: e.target.value,
};
}
return s;
});
updateMenuSections(newMenuSections);
}}
/>
<TooltipProvider delayDuration={300}>
<Tooltip>
<TooltipTrigger>
<Pencil size={16} className="text-primary" />
</TooltipTrigger>
<TooltipContent>
<p>点击文字部分即可聚焦编辑</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</>
)}
</div>
</motion.div>
<motion.div
className={cn(
"rounded-lg",
"bg-card border-border"
)}
>
{renderFields()}
</motion.div>
</div>
</motion.div>
);
}