updates
This commit is contained in:
@@ -192,6 +192,7 @@ export function AdminPanel({ open, onClose, bare }: { open: boolean; onClose: ()
|
||||
const [editTarget, setEditTarget] = useState<User | null>(null);
|
||||
const [resetTarget, setResetTarget] = useState<User | null>(null);
|
||||
const [resetSent, setResetSent] = useState<{ username: string; email: string } | null>(null);
|
||||
const [regenTarget, setRegenTarget] = useState<User | null>(null);
|
||||
// Listing: search + sort + filter + pagination (server-side).
|
||||
const [q, setQ] = useState("");
|
||||
const [debouncedQ, setDebouncedQ] = useState("");
|
||||
@@ -264,6 +265,7 @@ export function AdminPanel({ open, onClose, bare }: { open: boolean; onClose: ()
|
||||
|
||||
async function regenerate(u: User) {
|
||||
setError("");
|
||||
setFreshKey(null);
|
||||
try {
|
||||
const res = await api.adminRegenerate(u.id);
|
||||
setFreshKey({ username: u.username, key: res.key });
|
||||
@@ -390,7 +392,7 @@ export function AdminPanel({ open, onClose, bare }: { open: boolean; onClose: ()
|
||||
{!u.isAdmin && (
|
||||
<div className="flex shrink-0 gap-1">
|
||||
<button title={t("admin.editProfile")} onClick={() => setEditTarget(u)} className="rounded-full p-2 transition hover:bg-stone-100 dark:hover:bg-zinc-800"><Pencil size={15} /></button>
|
||||
<button title={t("admin.regenKey")} onClick={() => regenerate(u)} className="rounded-full p-2 transition hover:bg-stone-100 dark:hover:bg-zinc-800"><RefreshCw size={15} /></button>
|
||||
<button title={t("admin.regenKey")} onClick={() => setRegenTarget(u)} className="rounded-full p-2 transition hover:bg-stone-100 dark:hover:bg-zinc-800"><RefreshCw size={15} /></button>
|
||||
<button title={t("admin.resetLink")} onClick={() => setResetTarget(u)} className="rounded-full p-2 transition hover:bg-stone-100 dark:hover:bg-zinc-800"><Mail size={15} /></button>
|
||||
<button title={t("admin.deleteAccount")} onClick={() => setDeleteTarget(u)} className="rounded-full p-2 text-red-600 transition hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950/40"><Trash2 size={15} /></button>
|
||||
</div>
|
||||
@@ -443,6 +445,19 @@ export function AdminPanel({ open, onClose, bare }: { open: boolean; onClose: ()
|
||||
}}
|
||||
/>
|
||||
|
||||
<ConfirmDialog
|
||||
open={regenTarget !== null}
|
||||
onClose={() => setRegenTarget(null)}
|
||||
title={t("admin.regenTitle", { user: regenTarget?.username ?? "" })}
|
||||
message={t("admin.regenMsg")}
|
||||
confirmLabel={t("admin.regenConfirm")}
|
||||
onConfirm={() => {
|
||||
const u = regenTarget;
|
||||
setRegenTarget(null);
|
||||
if (u) void regenerate(u);
|
||||
}}
|
||||
/>
|
||||
|
||||
<EditUserDialog user={editTarget} onClose={() => setEditTarget(null)} onSaved={refresh} />
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -245,6 +245,9 @@ const en = {
|
||||
"admin.createFailed": "Create failed",
|
||||
"admin.regenFailed": "Regenerate failed",
|
||||
"admin.resetLink": "Email a password reset link",
|
||||
"admin.regenTitle": "Regenerate the key for @{user}?",
|
||||
"admin.regenMsg": "Their sessions will be revoked immediately and the new key is shown only once — make sure you can reach them.",
|
||||
"admin.regenConfirm": "Regenerate",
|
||||
"admin.resetTitle": "Email a reset link to @{user}?",
|
||||
"admin.resetMsg": "A one-time key-recovery link will be sent to {email}.",
|
||||
"admin.resetConfirm": "Send link",
|
||||
@@ -964,6 +967,9 @@ const es: Dict = {
|
||||
"admin.createFailed": "No se pudo crear",
|
||||
"admin.regenFailed": "No se pudo regenerar",
|
||||
"admin.resetLink": "Email a password reset link",
|
||||
"admin.regenTitle": "Regenerate the key for @{user}?",
|
||||
"admin.regenMsg": "Their sessions will be revoked immediately and the new key is shown only once — make sure you can reach them.",
|
||||
"admin.regenConfirm": "Regenerate",
|
||||
"admin.resetTitle": "Email a reset link to @{user}?",
|
||||
"admin.resetMsg": "A one-time key-recovery link will be sent to {email}.",
|
||||
"admin.resetConfirm": "Send link",
|
||||
@@ -1675,6 +1681,9 @@ const fr: Dict = {
|
||||
"admin.createFailed": "Création impossible",
|
||||
"admin.regenFailed": "Régénération impossible",
|
||||
"admin.resetLink": "Email a password reset link",
|
||||
"admin.regenTitle": "Regenerate the key for @{user}?",
|
||||
"admin.regenMsg": "Their sessions will be revoked immediately and the new key is shown only once — make sure you can reach them.",
|
||||
"admin.regenConfirm": "Regenerate",
|
||||
"admin.resetTitle": "Email a reset link to @{user}?",
|
||||
"admin.resetMsg": "A one-time key-recovery link will be sent to {email}.",
|
||||
"admin.resetConfirm": "Send link",
|
||||
@@ -2380,6 +2389,9 @@ const ru: Dict = {
|
||||
"admin.createFailed": "Не создалось",
|
||||
"admin.regenFailed": "Не сменилось",
|
||||
"admin.resetLink": "Email a password reset link",
|
||||
"admin.regenTitle": "Regenerate the key for @{user}?",
|
||||
"admin.regenMsg": "Their sessions will be revoked immediately and the new key is shown only once — make sure you can reach them.",
|
||||
"admin.regenConfirm": "Regenerate",
|
||||
"admin.resetTitle": "Email a reset link to @{user}?",
|
||||
"admin.resetMsg": "A one-time key-recovery link will be sent to {email}.",
|
||||
"admin.resetConfirm": "Send link",
|
||||
@@ -3080,6 +3092,9 @@ const it: Dict = {
|
||||
"admin.createFailed": "Creazione fallita",
|
||||
"admin.regenFailed": "Rigenerazione fallita",
|
||||
"admin.resetLink": "Email a password reset link",
|
||||
"admin.regenTitle": "Regenerate the key for @{user}?",
|
||||
"admin.regenMsg": "Their sessions will be revoked immediately and the new key is shown only once — make sure you can reach them.",
|
||||
"admin.regenConfirm": "Regenerate",
|
||||
"admin.resetTitle": "Email a reset link to @{user}?",
|
||||
"admin.resetMsg": "A one-time key-recovery link will be sent to {email}.",
|
||||
"admin.resetConfirm": "Send link",
|
||||
@@ -3781,6 +3796,9 @@ const pt: Dict = {
|
||||
"admin.createFailed": "Falha ao criar",
|
||||
"admin.regenFailed": "Falha ao regenerar",
|
||||
"admin.resetLink": "Email a password reset link",
|
||||
"admin.regenTitle": "Regenerate the key for @{user}?",
|
||||
"admin.regenMsg": "Their sessions will be revoked immediately and the new key is shown only once — make sure you can reach them.",
|
||||
"admin.regenConfirm": "Regenerate",
|
||||
"admin.resetTitle": "Email a reset link to @{user}?",
|
||||
"admin.resetMsg": "A one-time key-recovery link will be sent to {email}.",
|
||||
"admin.resetConfirm": "Send link",
|
||||
|
||||
Reference in New Issue
Block a user