Skip to content

Commit 0e72a8e

Browse files
committed
bulk select for service accounts
1 parent b67c4bb commit 0e72a8e

File tree

11 files changed

+59
-128
lines changed

11 files changed

+59
-128
lines changed

src/app/settings/service-accounts/ButtonGroup.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { DeleteServiceAccountAlert } from "./DeleteAlert";
2-
import { useServiceAccountSelectorContext } from "./SelectorContext";
2+
import { useServiceAccountDataTableContext } from "./ServiceAccountDataTableContext";
33

44
export function ServiceAccountsButtonGroup() {
5-
const { selectedServiceAccounts } = useServiceAccountSelectorContext();
5+
const { selectedRowCount } = useServiceAccountDataTableContext();
66
return (
77
<div className="flex items-center divide-x divide-theme-border-moderate overflow-hidden rounded-md border border-theme-border-moderate">
88
<div className="bg-primary-25 px-2 py-1 font-semibold text-theme-text-brand">{`${
9-
selectedServiceAccounts?.length
10-
} Service Account${selectedServiceAccounts?.length > 1 ? "s" : ""} selected`}</div>
9+
selectedRowCount
10+
} Service Account${selectedRowCount > 1 ? "s" : ""} selected`}</div>
1111
<DeleteServiceAccountAlert />
1212
</div>
1313
);

src/app/settings/service-accounts/DeleteAlert.tsx

+6-4
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@ import {
66
} from "@zenml-io/react-component-library/components/client";
77
import { Button } from "@zenml-io/react-component-library/components/server";
88
import { useState } from "react";
9-
import { useServiceAccountSelectorContext } from "./SelectorContext";
9+
import { useBulkDeleteServiceAccounts } from "./bulk";
10+
import { useServiceAccountDataTableContext } from "./ServiceAccountDataTableContext";
1011

1112
export function DeleteServiceAccountAlert() {
1213
const [isOpen, setIsOpen] = useState(false);
13-
const { bulkDeleteServiceAccounts, selectedServiceAccounts } = useServiceAccountSelectorContext();
14+
const { bulkDelete } = useBulkDeleteServiceAccounts();
15+
const { selectedRowIDs } = useServiceAccountDataTableContext();
1416

1517
async function handleDelete() {
16-
await bulkDeleteServiceAccounts(selectedServiceAccounts);
18+
await bulkDelete(selectedRowIDs);
1719
setIsOpen(false);
1820
}
1921

@@ -31,7 +33,7 @@ export function DeleteServiceAccountAlert() {
3133
</Button>
3234
</AlertDialogTrigger>
3335
<DeleteAlertContent
34-
title={`Delete Service Account${selectedServiceAccounts.length >= 2 ? "s" : ""}`}
36+
title={`Delete Service Account${selectedRowIDs.length >= 2 ? "s" : ""}`}
3537
handleDelete={handleDelete}
3638
>
3739
<DeleteAlertContentBody>

src/app/settings/service-accounts/Dropdown.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
DropdownMenuTrigger
1010
} from "@zenml-io/react-component-library";
1111
import { ElementRef, useRef, useState } from "react";
12-
import { useServiceAccountSelectorContext } from "./SelectorContext";
12+
import { useBulkDeleteServiceAccounts } from "./bulk";
1313

1414
export default function ServiceAccountsDropdown({
1515
serviceAccountId
@@ -18,7 +18,7 @@ export default function ServiceAccountsDropdown({
1818
}) {
1919
const [dropdownOpen, setDropdownOpen] = useState(false);
2020
const [hasOpenDialog, setHasOpenDialog] = useState(false);
21-
const { bulkDeleteServiceAccounts } = useServiceAccountSelectorContext();
21+
const { bulkDelete } = useBulkDeleteServiceAccounts();
2222

2323
const dropdownTriggerRef = useRef<ElementRef<typeof AlertDialogTrigger> | null>(null);
2424
const focusRef = useRef<HTMLElement | null>(null);
@@ -28,7 +28,7 @@ export default function ServiceAccountsDropdown({
2828
}
2929

3030
async function handleDelete() {
31-
await bulkDeleteServiceAccounts([serviceAccountId]);
31+
await bulkDelete([serviceAccountId]);
3232
handleDialogItemOpenChange(false);
3333
}
3434

src/app/settings/service-accounts/Selector.tsx

-28
This file was deleted.

src/app/settings/service-accounts/SelectorContext.tsx

-76
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { createDataTableConsumerContext } from "@/components/table/DataTableConsumerContext";
2+
3+
export const {
4+
Context: ServiceAccountDataTableContext,
5+
ContextProvider: ServiceAccountDataTableContextProvider,
6+
useContext: useServiceAccountDataTableContext
7+
} = createDataTableConsumerContext();

src/app/settings/service-accounts/Table.tsx

+7-7
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import { ServiceAccountsButtonGroup } from "./ButtonGroup";
1010
import { getServiceAccountColumns } from "./columns";
1111
import ServiceAccountFallback from "./Fallback";
1212
import {
13-
ServiceAccountsSelectorProvider,
14-
useServiceAccountSelectorContext
15-
} from "./SelectorContext";
13+
ServiceAccountDataTableContextProvider,
14+
useServiceAccountDataTableContext
15+
} from "./ServiceAccountDataTableContext";
1616
import { useServiceAccountOverviewSearchParams } from "./service";
1717
import { AddServiceAccountDialog } from "./AddServiceAccount";
1818

@@ -41,7 +41,7 @@ export default function ServiceAccountsTable() {
4141
return <ServiceAccountFallback />;
4242
}
4343
return (
44-
<ServiceAccountsSelectorProvider>
44+
<ServiceAccountDataTableContextProvider>
4545
<Header />
4646
<div className="flex flex-col items-center gap-5">
4747
<div className="w-full">
@@ -59,17 +59,17 @@ export default function ServiceAccountsTable() {
5959
<Skeleton className="h-[36px] w-[300px]" />
6060
)}
6161
</div>
62-
</ServiceAccountsSelectorProvider>
62+
</ServiceAccountDataTableContextProvider>
6363
);
6464
}
6565

6666
function Header() {
6767
const queryParams = useServiceAccountOverviewSearchParams();
68-
const { selectedServiceAccounts } = useServiceAccountSelectorContext();
68+
const { selectedRowCount } = useServiceAccountDataTableContext();
6969

7070
return (
7171
<div className="flex flex-wrap items-center justify-between gap-2">
72-
{selectedServiceAccounts.length ? (
72+
{selectedRowCount ? (
7373
<ServiceAccountsButtonGroup />
7474
) : (
7575
<div className="flex items-center gap-2">

src/app/settings/service-accounts/[service-account-id]/DeleteApiKeyDialog.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
import { Button } from "@zenml-io/react-component-library/components/server";
77
import { useState } from "react";
88
import { DeleteAlertContent, DeleteAlertContentBody } from "@/components/DeleteAlertDialog";
9-
import { useBulkDeleteApiKeys } from "@/data/service-accounts/bulk-delete-api-keys";
9+
import { useBulkDeleteApiKeys } from "./bulk";
1010

1111
type Props = {
1212
serviceAccountId: string;

src/app/settings/service-accounts/[service-account-id]/bulk.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useApiKeyDataTableContext } from "@/app/settings/service-accounts/[service-account-id]/ApiKeyDataTableContext";
1+
import { useApiKeyDataTableContext } from "./ApiKeyDataTableContext";
22
import { createUseBulkDelete } from "@/lib/bulk-delete";
33
import { serviceAccountQueryKeys } from "@/data/service-accounts";
44
import { useDeleteApiKey } from "@/data/service-accounts/delete-api-key";
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { createUseBulkDelete } from "@/lib/bulk-delete";
2+
import { useDeleteServiceAccount } from "../../../data/service-accounts/delete-service-account";
3+
import { serviceAccountQueryKeys } from "../../../data/service-accounts";
4+
import { useServiceAccountDataTableContext } from "./ServiceAccountDataTableContext";
5+
6+
export const useBulkDeleteServiceAccounts = createUseBulkDelete({
7+
useMutation: useDeleteServiceAccount,
8+
useQueryKeys: () => ({
9+
all: serviceAccountQueryKeys.serviceAccountsKey
10+
}),
11+
getParams: (serviceAccountId: string) => serviceAccountId,
12+
useDataTableContext: useServiceAccountDataTableContext
13+
});

src/app/settings/service-accounts/columns.tsx

+17-4
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,32 @@ import { ColumnDef } from "@tanstack/react-table";
55
import { Link } from "react-router-dom";
66
import ToggleActiveServiceAccount from "./ToggleServiceAccount";
77
import ServiceAccountsDropdown from "./Dropdown";
8-
import { ServiceAccountsSelector } from "./Selector";
8+
import { Checkbox } from "@zenml-io/react-component-library";
99

1010
export function getServiceAccountColumns(): ColumnDef<ServiceAccount>[] {
1111
return [
1212
{
1313
id: "check",
14-
header: "",
14+
header: ({ table }) => (
15+
<Checkbox
16+
id="check-all"
17+
checked={table.getIsAllRowsSelected()}
18+
onCheckedChange={(state) =>
19+
table.toggleAllRowsSelected(state === "indeterminate" ? true : state)
20+
}
21+
/>
22+
),
1523
meta: {
1624
width: "1%"
1725
},
18-
accessorFn: (row) => row.id,
1926
cell: ({ row }) => {
20-
return <ServiceAccountsSelector id={row.original.id} />;
27+
return (
28+
<Checkbox
29+
id={`check-${row.id}`}
30+
checked={row.getIsSelected()}
31+
onCheckedChange={row.getToggleSelectedHandler()}
32+
/>
33+
);
2134
}
2235
},
2336
{

0 commit comments

Comments
 (0)