// modules/admin/components/courses/AchievementsBuilder.jsx // The "Achievements" sub-section of the Rewards step: pick an existing // achievement from the registry or define a new one — same New/Attach // pattern as RoadmapBuilder's Units section. A course carries at most one // achievement. import { useState } from "react"; import * as LucideIcons from "lucide-react"; import { Plus, Link2, Trophy, BadgeCheck, Trash2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import AttachAchievementDialog from "./AttachAchievementDialog"; import CreateAchievementDialog from "./CreateAchievementDialog"; export default function AchievementsBuilder({ achievementKeys, onAchievementKeysChange, registry, onRegistryChange }) { const [attachOpen, setAttachOpen] = useState(false); const [createOpen, setCreateOpen] = useState(false); const selected = registry.find((a) => a.key === achievementKeys[0]) ?? null; const handleAttach = (key) => onAchievementKeysChange([key]); const handleCreated = (achievement) => { onRegistryChange([...registry, achievement]); onAchievementKeysChange([achievement.key]); }; const declineAchievement = () => { onAchievementKeysChange([]); }; return (
Attach an existing achievement from the registry, or define a new one from scratch.
No achievement selected
{selected.label}
{selected.description && ({selected.description}
)}