Skip to content

Commit 4afb03f

Browse files
committed
feat: add revoke access button on user access granted page
1 parent 4c814f3 commit 4afb03f

File tree

5 files changed

+40
-15
lines changed

5 files changed

+40
-15
lines changed

src/modules/access/access/RevokeAccess.tsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { useMutation, useQueryClient } from '@tanstack/react-query';
2+
import { useNavigate } from '@tanstack/react-router';
23
import {
34
PublishedApporder,
45
PublishedDatasetorder,
@@ -8,14 +9,18 @@ import { LoaderCircle } from 'lucide-react';
89
import { Button } from '@/components/ui/button';
910
import { getIExec } from '@/externals/iexecSdkClient';
1011
import useUserStore from '@/stores/useUser.store';
12+
import { getChainFromId } from '@/utils/chain.utils';
1113

1214
export default function RevokeAccess({
1315
access,
16+
onRevoked,
1417
}: {
1518
access: PublishedApporder | PublishedDatasetorder | PublishedWorkerpoolorder;
19+
onRevoked?: () => void;
1620
}) {
17-
const { chainId } = useUserStore();
21+
const { chainId, address: userAddress } = useUserStore();
1822
const queryClient = useQueryClient();
23+
const navigate = useNavigate();
1924

2025
const order = access.order;
2126

@@ -48,6 +53,18 @@ export default function RevokeAccess({
4853
queryClient.invalidateQueries({
4954
queryKey: [chainId, 'address', `${accessType}sGrantedAccess`],
5055
});
56+
// Navigate to the user's granted access tab if we have user address
57+
if (userAddress) {
58+
const chainSlug = chainId ? getChainFromId(chainId)?.slug : undefined;
59+
if (chainSlug) {
60+
navigate({
61+
to: `/${chainSlug}/address/${userAddress}`,
62+
search: { addressTab: 'GRANTED ACCESS' },
63+
replace: true,
64+
});
65+
}
66+
}
67+
if (onRevoked) onRevoked();
5168
},
5269
});
5370

@@ -57,9 +74,8 @@ export default function RevokeAccess({
5774
<Button
5875
variant="outline"
5976
size="sm"
60-
onClick={() => {
61-
revokeAccessMutation.mutate();
62-
}}
77+
onClick={() => revokeAccessMutation.mutate()}
78+
disabled={revokeAccessMutation.isPending}
6379
>
6480
{revokeAccessMutation.isPending && (
6581
<LoaderCircle className="animate-spin" />

src/modules/access/access/buildAccessDetails.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,20 @@ import {
1212
formatElapsedTime,
1313
} from '@/utils/formatElapsedTime';
1414
import { nrlcToRlc } from '@/utils/nrlcToRlc';
15+
import RevokeAccess from './RevokeAccess';
1516

1617
export function buildAccessDetails({
1718
access,
1819
dataset,
1920
app,
2021
workerpool,
22+
userAddress,
2123
}: {
2224
access: PublishedApporder | PublishedDatasetorder | PublishedWorkerpoolorder;
2325
dataset?: Dataset;
2426
app?: App;
2527
workerpool?: Workerpool;
28+
userAddress?: string;
2629
}) {
2730
if (!access) return {};
2831

@@ -123,11 +126,17 @@ export function buildAccessDetails({
123126
}),
124127
...(access.signer && {
125128
Signer: (
126-
<SmartLinkGroup
127-
type="address"
128-
addressOrId={access.signer.toLowerCase()}
129-
label={access.signer.toLowerCase()}
130-
/>
129+
<div className="space-x-2">
130+
<SmartLinkGroup
131+
type="address"
132+
addressOrId={access.signer.toLowerCase()}
133+
label={access.signer.toLowerCase()}
134+
/>
135+
{userAddress &&
136+
access.signer?.toLowerCase() === userAddress.toLowerCase() && (
137+
<RevokeAccess access={access} />
138+
)}
139+
</div>
131140
),
132141
}),
133142
...(access.publicationTimestamp && {

src/routes/$chainSlug/_layout/access/app/$accessHash.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ function useAccessData(accessHash: string, chainId: number) {
4949
}
5050

5151
function AppAccessRoute() {
52-
const { chainId } = useUserStore();
52+
const { chainId, address: userAddress } = useUserStore();
5353
const { accessHash } = Route.useParams();
5454
const {
5555
access,
@@ -63,7 +63,7 @@ function AppAccessRoute() {
6363
} = useAccessData((accessHash as string).toLowerCase(), chainId!);
6464

6565
const accessDetails = access
66-
? buildAccessDetails({ access, app })
66+
? buildAccessDetails({ access, app, userAddress })
6767
: undefined;
6868

6969
if (!isValid) {

src/routes/$chainSlug/_layout/access/dataset/$accessHash.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function useAccessData(accessHash: string, chainId: number) {
5151
}
5252

5353
function DatasetAccessRoute() {
54-
const { chainId } = useUserStore();
54+
const { chainId, address: userAddress } = useUserStore();
5555
const { accessHash } = Route.useParams();
5656
const {
5757
access,
@@ -65,7 +65,7 @@ function DatasetAccessRoute() {
6565
} = useAccessData((accessHash as string).toLowerCase(), chainId!);
6666

6767
const accessDetails = access
68-
? buildAccessDetails({ access, dataset })
68+
? buildAccessDetails({ access, dataset, userAddress })
6969
: undefined;
7070

7171
if (!isValid) {

src/routes/$chainSlug/_layout/access/workerpool/$accessHash.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function useAccessData(accessHash: string, chainId: number) {
5151
}
5252

5353
function WorkerpoolAccessRoute() {
54-
const { chainId } = useUserStore();
54+
const { chainId, address: userAddress } = useUserStore();
5555
const { accessHash } = Route.useParams();
5656
const {
5757
access,
@@ -65,7 +65,7 @@ function WorkerpoolAccessRoute() {
6565
} = useAccessData((accessHash as string).toLowerCase(), chainId!);
6666

6767
const accessDetails = access
68-
? buildAccessDetails({ access, workerpool })
68+
? buildAccessDetails({ access, workerpool, userAddress })
6969
: undefined;
7070

7171
if (!isValid) {

0 commit comments

Comments
 (0)