9b44af9675
Los botones del foro usaban un dorado propio; ahora comparten el lenguaje del <button> del tema (fondo translúcido, texto crema en mayúsculas, aclara al hover), el mismo que sale como «Editar» en el resto de la web. Arreglos de maquetación: - Altura fija (42px) con inline-flex en .nice_button: los <button> heredaban height:50px del tema y los <a> no, y en la misma fila quedaban a distinta altura (se notaba sobre todo en «Borrar», que es un <button>). - Se quita el height:20px del <li> de post_controls, que aplastaba los botones. - Texto de los enlaces-botón forzado a crema: el a:link/:visited del tema (más específico) pintaba de azul el texto de «Crear tema». - «Editar», «Borrar» y «Desbloquear» pasan a .nice_button para que toda la fila de acciones sea homogénea. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
67 lines
1.6 KiB
TypeScript
67 lines
1.6 KiB
TypeScript
'use client'
|
|
|
|
import { useState } from 'react'
|
|
import { useTranslations } from 'next-intl'
|
|
import { useRouter } from '@/i18n/navigation'
|
|
|
|
/**
|
|
* Acciones de moderación de un post o tema (borrar/restaurar y, en temas,
|
|
* cerrar/abrir). Reemplaza los enlaces GET del forum.js original por POST a
|
|
* /api/forum/moderate, para no mutar estado con peticiones GET.
|
|
*/
|
|
export function ForumModActions({
|
|
kind,
|
|
id,
|
|
deleted = false,
|
|
locked = false,
|
|
}: {
|
|
kind: 'post' | 'topic'
|
|
id: number
|
|
deleted?: boolean
|
|
locked?: boolean
|
|
}) {
|
|
const t = useTranslations('Forum')
|
|
const router = useRouter()
|
|
const [busy, setBusy] = useState(false)
|
|
|
|
async function act(action: string) {
|
|
if (busy) return
|
|
setBusy(true)
|
|
try {
|
|
const res = await fetch('/api/forum/moderate', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
credentials: 'same-origin',
|
|
body: JSON.stringify({ kind, id, action }),
|
|
})
|
|
const data: { success?: boolean } = await res.json()
|
|
if (data.success) router.refresh()
|
|
} finally {
|
|
setBusy(false)
|
|
}
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<button
|
|
type="button"
|
|
className="nice_button"
|
|
onClick={() => act(deleted ? 'undelete' : 'delete')}
|
|
disabled={busy}
|
|
>
|
|
{deleted ? t('undelete') : t('delete')}
|
|
</button>
|
|
{kind === 'topic' && (
|
|
<button
|
|
type="button"
|
|
className="nice_button"
|
|
onClick={() => act(locked ? 'unlock' : 'lock')}
|
|
disabled={busy}
|
|
>
|
|
{locked ? t('unlock') : t('lock')}
|
|
</button>
|
|
)}
|
|
</>
|
|
)
|
|
}
|