fix: implement AI review feedback

This commit is contained in:
Nico 2026-04-28 19:54:32 +02:00 committed by Nicolas Meienberger
parent 98cff6709a
commit a0d5c5598f
No known key found for this signature in database
2 changed files with 51 additions and 27 deletions

View file

@ -84,38 +84,54 @@ export function PasskeysSection() {
return; return;
} }
setIsRenaming(true); setIsRenaming(true);
const { error } = await authClient.$fetch("/passkey/update-passkey", { try {
method: "POST", const { error } = await authClient.$fetch("/passkey/update-passkey", {
body: { id: renameTarget.id, name }, method: "POST",
}); body: { id: renameTarget.id, name },
setIsRenaming(false); });
if (error) { if (error) {
logger.error(error); logger.error(error);
toast.error("Failed to rename passkey", { description: error.message }); toast.error("Failed to rename passkey", { description: error.message });
return; return;
}
toast.success("Passkey renamed");
setRenameTarget(null);
setRenameValue("");
await refetch();
} catch (err) {
logger.error(err);
toast.error("Failed to rename passkey", {
description: err instanceof Error ? err.message : "Unknown error",
});
} finally {
setIsRenaming(false);
} }
toast.success("Passkey renamed");
setRenameTarget(null);
setRenameValue("");
await refetch();
}; };
const handleDelete = async () => { const handleDelete = async () => {
if (!deleteTarget) return; if (!deleteTarget) return;
setIsDeleting(true); setIsDeleting(true);
const { error } = await authClient.$fetch("/passkey/delete-passkey", { try {
method: "POST", const { error } = await authClient.$fetch("/passkey/delete-passkey", {
body: { id: deleteTarget.id }, method: "POST",
}); body: { id: deleteTarget.id },
setIsDeleting(false); });
if (error) { if (error) {
logger.error(error); logger.error(error);
toast.error("Failed to delete passkey", { description: error.message }); toast.error("Failed to delete passkey", { description: error.message });
return; return;
}
toast.success("Passkey deleted");
setDeleteTarget(null);
await refetch();
} catch (err) {
logger.error(err);
toast.error("Failed to delete passkey", {
description: err instanceof Error ? err.message : "Unknown error",
});
} finally {
setIsDeleting(false);
} }
toast.success("Passkey deleted");
setDeleteTarget(null);
await refetch();
}; };
const list = (passkeys ?? []) as PasskeyEntry[]; const list = (passkeys ?? []) as PasskeyEntry[];
@ -160,6 +176,8 @@ export function PasskeysSection() {
<Button <Button
variant="outline" variant="outline"
size="sm" size="sm"
aria-label={`Rename passkey ${p.name?.trim() || "Unnamed passkey"}`}
title={`Rename passkey ${p.name?.trim() || "Unnamed passkey"}`}
onClick={() => { onClick={() => {
setRenameTarget(p); setRenameTarget(p);
setRenameValue(p.name ?? ""); setRenameValue(p.name ?? "");
@ -167,7 +185,13 @@ export function PasskeysSection() {
> >
<Pencil className="h-4 w-4" /> <Pencil className="h-4 w-4" />
</Button> </Button>
<Button variant="destructive" size="sm" onClick={() => setDeleteTarget(p)}> <Button
variant="destructive"
size="sm"
aria-label={`Delete passkey ${p.name?.trim() || "Unnamed passkey"}`}
title={`Delete passkey ${p.name?.trim() || "Unnamed passkey"}`}
onClick={() => setDeleteTarget(p)}
>
<Trash2 className="h-4 w-4" /> <Trash2 className="h-4 w-4" />
</Button> </Button>
</div> </div>

View file

@ -14,4 +14,4 @@ CREATE TABLE `passkey` (
); );
--> statement-breakpoint --> statement-breakpoint
CREATE INDEX `passkey_userId_idx` ON `passkey` (`user_id`);--> statement-breakpoint CREATE INDEX `passkey_userId_idx` ON `passkey` (`user_id`);--> statement-breakpoint
CREATE INDEX `passkey_credentialID_idx` ON `passkey` (`credential_id`); CREATE UNIQUE INDEX `passkey_credentialID_idx` ON `passkey` (`credential_id`);