kanban / src /components /editor /custom /CustomPanel.tsx
Leon4gr45's picture
Deploy magic-resume as Docker Space (port 3000)
c30ea2a verified
Raw
History Blame Contribute Delete
1.38 kB
import { memo } from "react";
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { Reorder } from "framer-motion";
import { PlusCircle } from "lucide-react";
import CustomItem from "./CustomItem";
import { useResumeStore } from "@/store/useResumeStore";
import { CustomItem as CustomItemType } from "@/types/resume";
const CustomPanel = memo(({ sectionId }: { sectionId: string }) => {
const { addCustomItem, updateCustomData, activeResume } = useResumeStore();
const { customData } = activeResume || {};
const items = customData?.[sectionId] || [];
const handleCreateItem = () => {
addCustomItem(sectionId);
};
return (
<div
className={cn(
"space-y-4 px-4 py-4 rounded-lg",
"bg-card"
)}
>
<Reorder.Group
axis="y"
values={items}
onReorder={(newOrder) => {
updateCustomData(sectionId, newOrder);
}}
className="space-y-3"
>
{items.map((item: CustomItemType) => (
<CustomItem key={item.id} item={item} sectionId={sectionId} />
))}
<Button onClick={handleCreateItem} className={cn("w-full")}>
<PlusCircle className="w-4 h-4 mr-2" />
添加
</Button>
</Reorder.Group>
</div>
);
});
CustomPanel.displayName = "CustomPanel";
export default CustomPanel;