Skip to content

Commit f3e7e3e

Browse files
committed
feat: implement revoke access functionality for app, dataset, and workerpool orders
1 parent bdd7817 commit f3e7e3e

File tree

7 files changed

+126
-3
lines changed

7 files changed

+126
-3
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { useMutation, useQueryClient } from '@tanstack/react-query';
2+
import {
3+
PublishedApporder,
4+
PublishedDatasetorder,
5+
PublishedWorkerpoolorder,
6+
} from 'iexec/IExecOrderbookModule';
7+
import { LoaderCircle } from 'lucide-react';
8+
import { Button } from '@/components/ui/button';
9+
import { getIExec } from '@/externals/iexecSdkClient';
10+
import useUserStore from '@/stores/useUser.store';
11+
12+
export default function RevokeAccess({
13+
access,
14+
}: {
15+
access: PublishedApporder | PublishedDatasetorder | PublishedWorkerpoolorder;
16+
}) {
17+
const { chainId } = useUserStore();
18+
const queryClient = useQueryClient();
19+
20+
if (!access) return;
21+
22+
console.log('access to revoke', access);
23+
24+
const order = access.order;
25+
26+
const revokeAccessMutation = useMutation({
27+
mutationFn: async () => {
28+
const iexec = await getIExec();
29+
30+
if ('app' in order) {
31+
return await iexec.order.cancelApporder(order);
32+
} else if ('dataset' in order) {
33+
return await iexec.order.cancelDatasetorder(order);
34+
} else if ('workerpool' in order) {
35+
return await iexec.order.cancelWorkerpoolorder(order);
36+
} else {
37+
throw new Error('Unknown order type');
38+
}
39+
},
40+
onError: (err) => {
41+
console.error(err);
42+
},
43+
onSuccess: () => {
44+
let accessType = '';
45+
if ('app' in order) {
46+
accessType = 'App';
47+
} else if ('dataset' in order) {
48+
accessType = 'Dataset';
49+
} else {
50+
accessType = 'Workerpool';
51+
}
52+
queryClient.invalidateQueries({
53+
queryKey: [chainId, 'address', `${accessType}sGrantedAccess`],
54+
});
55+
},
56+
});
57+
58+
return (
59+
<Button
60+
variant="outline"
61+
size="sm"
62+
onClick={() => {
63+
revokeAccessMutation.mutate();
64+
}}
65+
>
66+
{revokeAccessMutation.isPending && (
67+
<LoaderCircle className="animate-spin" />
68+
)}
69+
Revoke access
70+
</Button>
71+
);
72+
}

src/modules/addresses/address/grantedAccess/AddressAppsGrantedAccessTable.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ export function AddressAppsGrantedAccessTable({
9696
currentPage: currentPage - 1,
9797
});
9898

99+
const { address: userAddress } = useUserStore();
100+
const filteredColumns =
101+
userAddress === addressAddress
102+
? columns
103+
: columns.filter((c) => c.accessorKey !== 'revokeAccess');
104+
99105
return (
100106
<div className="space-y-6">
101107
<h2 className="flex items-center gap-2 font-extrabold">
@@ -113,7 +119,7 @@ export function AddressAppsGrantedAccessTable({
113119
<ErrorAlert message="An error occurred during address apps access loading." />
114120
) : (
115121
<DataTable
116-
columns={columns}
122+
columns={filteredColumns}
117123
data={access}
118124
tableLength={PREVIEW_TABLE_LENGTH}
119125
/>

src/modules/addresses/address/grantedAccess/AddressDatasetsGrantedAccessTable.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ export function AddressDatasetsGrantedAccessTable({
9797
addressAddress,
9898
currentPage: currentPage - 1,
9999
});
100+
const { address: userAddress } = useUserStore();
101+
102+
const filteredColumns =
103+
userAddress !== addressAddress
104+
? columns.filter((c) => c.accessorKey !== 'revokeAccess')
105+
: columns;
100106

101107
return (
102108
<div className="space-y-6">
@@ -115,7 +121,7 @@ export function AddressDatasetsGrantedAccessTable({
115121
<ErrorAlert message="An error occurred during address datasets access loading." />
116122
) : (
117123
<DataTable
118-
columns={columns}
124+
columns={filteredColumns}
119125
data={access}
120126
tableLength={PREVIEW_TABLE_LENGTH}
121127
/>

src/modules/addresses/address/grantedAccess/AddressWorkerpoolsGrantedAccessTable.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,12 @@ export function AddressWorkerpoolsGrantedAccessTable({
9999
currentPage: currentPage - 1,
100100
});
101101

102+
const { address: userAddress } = useUserStore();
103+
const filteredColumns =
104+
userAddress === addressAddress
105+
? columns
106+
: columns.filter((c) => c.accessorKey !== 'revokeAccess');
107+
102108
return (
103109
<div className="space-y-6">
104110
<h2 className="flex items-center gap-2 font-extrabold">
@@ -116,7 +122,7 @@ export function AddressWorkerpoolsGrantedAccessTable({
116122
<ErrorAlert message="An error occurred during address workerpools access loading." />
117123
) : (
118124
<DataTable
119-
columns={columns}
125+
columns={filteredColumns}
120126
data={access}
121127
tableLength={PREVIEW_TABLE_LENGTH}
122128
/>

src/modules/addresses/address/grantedAccess/addressAppColumns.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ColumnDef } from '@tanstack/react-table';
22
import { PublishedApporder } from 'iexec/IExecOrderbookModule';
33
import CopyButton from '@/components/CopyButton';
4+
import RevokeAccess from '@/modules/access/access/RevokeAccess';
45
import useUserStore from '@/stores/useUser.store';
56
import { getTokenSymbol } from '@/utils/chain.utils';
67
import { nrlcToRlc } from '@/utils/nrlcToRlc';
@@ -84,4 +85,14 @@ export const columns: ColumnDef<PublishedApporder>[] = [
8485
header: 'Remaining',
8586
cell: ({ row }) => <span>{row.original.remaining}</span>,
8687
},
88+
{
89+
id: 'revokeAccess',
90+
accessorKey: 'revokeAccess',
91+
header: 'Revoke Access',
92+
cell: ({ row }) => (
93+
<span className="py-3!">
94+
<RevokeAccess access={row.original} />
95+
</span>
96+
),
97+
},
8798
];

src/modules/addresses/address/grantedAccess/addressDatasetColumns.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ColumnDef } from '@tanstack/react-table';
22
import { PublishedDatasetorder } from 'iexec/IExecOrderbookModule';
33
import CopyButton from '@/components/CopyButton';
4+
import RevokeAccess from '@/modules/access/access/RevokeAccess';
45
import useUserStore from '@/stores/useUser.store';
56
import { getTokenSymbol } from '@/utils/chain.utils';
67
import { nrlcToRlc } from '@/utils/nrlcToRlc';
@@ -84,4 +85,14 @@ export const columns: ColumnDef<PublishedDatasetorder>[] = [
8485
header: 'Remaining',
8586
cell: ({ row }) => <span>{row.original.remaining}</span>,
8687
},
88+
{
89+
id: 'revokeAccess',
90+
accessorKey: 'revokeAccess',
91+
header: 'Revoke Access',
92+
cell: ({ row }) => (
93+
<span className="py-3!">
94+
<RevokeAccess access={row.original} />
95+
</span>
96+
),
97+
},
8798
];

src/modules/addresses/address/grantedAccess/addressWorkerpoolColumns.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ColumnDef } from '@tanstack/react-table';
22
import { PublishedWorkerpoolorder } from 'iexec/IExecOrderbookModule';
33
import CopyButton from '@/components/CopyButton';
4+
import RevokeAccess from '@/modules/access/access/RevokeAccess';
45
import useUserStore from '@/stores/useUser.store';
56
import { getTokenSymbol } from '@/utils/chain.utils';
67
import { nrlcToRlc } from '@/utils/nrlcToRlc';
@@ -87,4 +88,14 @@ export const columns: ColumnDef<PublishedWorkerpoolorder>[] = [
8788
header: 'Remaining',
8889
cell: ({ row }) => <span>{row.original.remaining}</span>,
8990
},
91+
{
92+
id: 'revokeAccess',
93+
accessorKey: 'revokeAccess',
94+
header: 'Revoke Access',
95+
cell: ({ row }) => (
96+
<span className="py-3!">
97+
<RevokeAccess access={row.original} />
98+
</span>
99+
),
100+
},
90101
];

0 commit comments

Comments
 (0)