import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { toast } from 'sonner'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { useSidebarData } from '@/app/home/components/home-sidebar/SidebarDataContext'; import { httpClient } from '@/app/infra/http/HttpClient'; import SkillForm from '@/app/home/skills/components/skill-form/SkillForm'; import { BoxUnavailableNotice } from '@/app/home/components/BoxUnavailableNotice'; import { useBoxStatus } from '@/app/infra/hooks/useBoxStatus'; import { Sparkles, Trash2 } from 'lucide-react'; import { useCurrentWorkspace } from '@/app/infra/http'; export default function SkillDetailContent({ id }: { id: string }) { const isCreateMode = id === 'new'; const navigate = useNavigate(); const { t } = useTranslation(); const currentWorkspace = useCurrentWorkspace(); const canManage = currentWorkspace?.permissions.includes('resource.manage') ?? false; const { refreshSkills, skills, setDetailEntityName } = useSidebarData(); const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); const skill = skills.find((item) => item.id === id); const { available: boxAvailable, hint: boxHint, reason: boxReason, } = useBoxStatus(); useEffect(() => { if (isCreateMode) { setDetailEntityName(t('skills.createSkill')); } else { setDetailEntityName(skill?.name ?? id); } return () => setDetailEntityName(null); }, [id, isCreateMode, setDetailEntityName, skill, t]); function handleImportedSkills(skillNames: string[]) { void refreshSkills(); const primarySkill = skillNames[0]; if (primarySkill) { navigate(`/home/skills?id=${encodeURIComponent(primarySkill)}`); return; } navigate('/home/skills'); } function handleSkillUpdated() { void refreshSkills(); } async function confirmDelete() { try { await httpClient.deleteSkill(id); toast.success(t('skills.deleteSuccess')); setShowDeleteConfirm(false); void refreshSkills(); navigate('/home/skills'); } catch (error) { toast.error(t('skills.deleteError') + String(error)); } } if (isCreateMode) { return (
{t('skills.delete')}
{t('skills.deleteConfirmation')}
{skill.description}
)}