diff --git a/src/app/(frontend)/PastorsTable.tsx b/src/app/(frontend)/PastorsTable.tsx index d9228b6..a369402 100644 --- a/src/app/(frontend)/PastorsTable.tsx +++ b/src/app/(frontend)/PastorsTable.tsx @@ -3,7 +3,7 @@ import React, { useRef, useState, useTransition } from 'react' import { useRouter } from 'next/navigation' -import { createPastor, deleteLetter, updatePastor, uploadLetter } from './actions' +import { createPastor, deleteLetter, deletePastor, updatePastor, uploadLetter } from './actions' export type PastorRow = { id: number @@ -243,23 +243,7 @@ export function PastorsTable({ rows }: { rows: PastorRow[] }) { ))} - + setEditing(p)} /> ))} @@ -283,6 +267,96 @@ export function PastorsTable({ rows }: { rows: PastorRow[] }) { ) } +function RowActions({ pastor, onEdit }: { pastor: PastorRow; onEdit: () => void }) { + const router = useRouter() + const [pending, startTransition] = useTransition() + const menuId = `row-menu-${pastor.id}` + const anchor = `--row-anchor-${pastor.id}` + + const close = () => document.getElementById(menuId)?.hidePopover?.() + + const onDelete = () => { + close() + if (!window.confirm(`¿Eliminar a ${pastor.name}? Esta acción no se puede deshacer.`)) return + startTransition(async () => { + await deletePastor(pastor.id) + router.refresh() + }) + } + + return ( + <> + + + + ) +} + function LetterActions({ pastor, onUpload }: { pastor: PastorRow; onUpload: () => void }) { const router = useRouter() const [pending, startTransition] = useTransition() diff --git a/src/app/(frontend)/actions.ts b/src/app/(frontend)/actions.ts index c2e8eb0..312ede9 100644 --- a/src/app/(frontend)/actions.ts +++ b/src/app/(frontend)/actions.ts @@ -88,6 +88,31 @@ export async function updatePastor(id: number, data: PastorUpdateInput) { return { ok: true } } +/** + * Elimina un pastor por completo. También borra su carta asociada (si existe) + * para no dejar archivos huérfanos. + */ +export async function deletePastor(id: number) { + const payload = await getPayload({ config: await config }) + + const pastor = await payload.findByID({ collection: 'pastors', id, depth: 0 }) + const letterId = + pastor.letter && typeof pastor.letter === 'object' ? pastor.letter.id : pastor.letter + + await payload.delete({ collection: 'pastors', id }) + + if (letterId) { + try { + await payload.delete({ collection: 'pastor-letters', id: letterId }) + } catch { + // The upload doc may already be gone; deleting the pastor is enough. + } + } + + revalidatePath('/') + return { ok: true } +} + /** * Elimina la carta asociada a un pastor: desvincula el campo `letter` y borra * el documento de subida, de modo que se pueda subir uno nuevo en su lugar.