feat(dashboard): bulk enable/disable selected API keys on provider page

This commit is contained in:
2026-08-22 14:33:20 +07:00
parent 6770f6ba0b
commit bc9719fac7

View File

@@ -863,6 +863,28 @@ export default function ProviderDetailPage() {
});
};
// Enable/disable all selected connections in parallel, keeping the selection.
const handleBulkToggleActive = async (newActive) => {
const idsToUpdate = [...selectedConnectionIds];
if (idsToUpdate.length === 0) return;
const settled = await Promise.allSettled(
idsToUpdate.map((id) =>
fetch(`/api/providers/${id}`, {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ isActive: newActive }),
}).then((res) => {
if (!res.ok) throw new Error(`HTTP ${res.status}`);
}),
),
);
const failed = settled.filter((r) => r.status === "rejected").length;
setConnections((prev) =>
prev.map((c) => (idsToUpdate.includes(c.id) ? { ...c, isActive: newActive } : c)),
);
if (failed > 0) alert(`Updated ${idsToUpdate.length - failed} connection(s), ${failed} failed.`);
};
const handleOAuthSuccess = () => {
fetchConnections();
setShowOAuthModal(false);
@@ -960,6 +982,9 @@ export default function ProviderDetailPage() {
const selectedConnections = connections.filter((conn) => selectedConnectionIds.includes(conn.id));
const allSelected = connections.length > 0 && selectedConnectionIds.length === connections.length;
const allSelectedDisabled =
selectedConnections.length > 0 &&
selectedConnections.every((c) => (c.isActive ?? true) === false);
const toggleSelectConnection = (connectionId) => {
setSelectedConnectionIds((prev) => (
@@ -1676,6 +1701,16 @@ export default function ProviderDetailPage() {
Delete Selected ({selectedConnectionIds.length})
</Button>
)}
{selectedConnectionIds.length > 0 && (
<Button
size="sm"
variant="secondary"
icon={allSelectedDisabled ? "toggle_on" : "toggle_off"}
onClick={() => handleBulkToggleActive(!allSelectedDisabled)}
>
{allSelectedDisabled ? "Enable" : "Disable"} Selected ({selectedConnectionIds.length})
</Button>
)}
{selectedConnectionIds.length > 0 && (
<Button
size="sm"