import { useState } from 'react'; import { Send, Pencil, Trash2, Save, X } from 'lucide-react'; import { useUi } from '../context/ui-context.jsx'; import { useAuth } from '../context/auth-context.jsx'; import { useAsync, useAction } from '../hooks/useAsync.js'; import { listComments, createComment, updateComment, deleteComment } from '../services/comments.js'; import { Button } from './Button.jsx'; const MANAGE_ROLES = ['superadmin', 'admin']; export function CommentsPanel({ entityType, entityId, onChanged }) { const { t, openDialog } = useUi(); const { user: currentUser } = useAuth(); const runAction = useAction(); const { data: comments, reload } = useAsync(() => listComments(entityType, entityId), [entityType, entityId]); const [message, setMessage] = useState(''); const [editingId, setEditingId] = useState(null); const [editingText, setEditingText] = useState(''); async function send() { if (!message.trim()) return; await runAction(async () => { await createComment(entityType, entityId, message.trim()); setMessage(''); await reload(); onChanged?.(); // refresca el contador de la pestaña "Comentarios" en el padre }); } function canManage(c) { return c.user_id === currentUser?.id || MANAGE_ROLES.includes(currentUser?.roleCode); } function startEdit(c) { setEditingId(c.id); setEditingText(c.message); } function cancelEdit() { setEditingId(null); setEditingText(''); } async function saveEdit(id) { if (!editingText.trim()) return; await runAction(async () => { await updateComment(id, editingText.trim()); cancelEdit(); await reload(); }); } function confirmDelete(c) { openDialog({ tone: 'warning', title: t('common_confirm_delete_title'), message: t('common_confirm_delete_msg'), actions: [ { label: t('common_cancel'), variant: 'standard' }, { label: t('common_delete'), variant: 'danger', onClick: () => runAction(async () => { await deleteComment(c.id); await reload(); onChanged?.(); }), }, ], }); } if (!comments) return