Skip to content

Commit b86e485

Browse files
committed
feat: implement access assets details
1 parent 44a5bd7 commit b86e485

File tree

6 files changed

+184
-28
lines changed

6 files changed

+184
-28
lines changed

src/components/SmartLinkGroup.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export default function SmartLinkGroup({
9090
? truncateAddress(label)
9191
: truncateAddress(addressOrId)) ?? addressOrId}
9292
</span>
93-
{showAddressOrIdAndLabel ? `(${label})` : ''}
93+
{showAddressOrIdAndLabel && label ? `(${label})` : ''}
9494
{ens ? `(${ens})` : ''}
9595
</Link>
9696
</Button>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { graphql } from '@/graphql/poco/gql';
2+
3+
export const accessAssetsDetailsQuery = graphql(`
4+
query AccessAssetsDetails(
5+
$datasetAddress: ID!
6+
$appAddress: ID!
7+
$workerpoolAddress: ID!
8+
$categoryId: ID!
9+
) {
10+
dataset(id: $datasetAddress) {
11+
name
12+
}
13+
app(id: $appAddress) {
14+
name
15+
}
16+
workerpool(id: $workerpoolAddress) {
17+
description
18+
}
19+
category(id: $categoryId) {
20+
description
21+
id
22+
name
23+
workClockTimeRef
24+
}
25+
}
26+
`);

src/modules/access/access/buildAccessDetails.tsx

Lines changed: 65 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import { App } from 'iexec/IExecAppModule';
2-
import { Dataset } from 'iexec/IExecDatasetModule';
31
import {
42
PublishedApporder,
53
PublishedDatasetorder,
64
PublishedWorkerpoolorder,
75
} from 'iexec/IExecOrderbookModule';
8-
import { Workerpool } from 'iexec/IExecWorkerpoolModule';
96
import SmartLinkGroup from '@/components/SmartLinkGroup';
107
import {
118
formatDateCompact,
@@ -16,15 +13,23 @@ import RevokeAccess from './RevokeAccess';
1613

1714
export function buildAccessDetails({
1815
access,
19-
dataset,
20-
app,
21-
workerpool,
16+
datasetName,
17+
appName,
18+
workerpoolDescription,
19+
datasetRestrictName,
20+
appRestrictName,
21+
workerpoolRestrictDescription,
22+
category,
2223
userAddress,
2324
}: {
2425
access: PublishedApporder | PublishedDatasetorder | PublishedWorkerpoolorder;
25-
dataset?: Dataset;
26-
app?: App;
27-
workerpool?: Workerpool;
26+
datasetName?: string;
27+
appName?: string;
28+
workerpoolDescription?: string;
29+
datasetRestrictName?: string;
30+
appRestrictName?: string;
31+
workerpoolRestrictDescription?: string;
32+
category?: { name: string; description: string; workClockTimeRef: number };
2833
userAddress?: string;
2934
}) {
3035
if (!access) return {};
@@ -48,7 +53,7 @@ export function buildAccessDetails({
4853
<SmartLinkGroup
4954
type="dataset"
5055
addressOrId={order.dataset.toLowerCase()}
51-
label={dataset?.datasetName}
56+
label={datasetName}
5257
showAddressOrIdAndLabel={true}
5358
/>
5459
),
@@ -63,7 +68,7 @@ export function buildAccessDetails({
6368
<SmartLinkGroup
6469
type="app"
6570
addressOrId={order.app.toLowerCase()}
66-
label={app?.appName}
71+
label={appName}
6772
showAddressOrIdAndLabel={true}
6873
/>
6974
),
@@ -78,7 +83,7 @@ export function buildAccessDetails({
7883
<SmartLinkGroup
7984
type="workerpool"
8085
addressOrId={order.workerpool.toLowerCase()}
81-
label={workerpool?.workerpoolDescription}
86+
label={workerpoolDescription}
8287
showAddressOrIdAndLabel={true}
8388
/>
8489
),
@@ -102,7 +107,8 @@ export function buildAccessDetails({
102107
<SmartLinkGroup
103108
type="app"
104109
addressOrId={order.apprestrict.toLowerCase()}
105-
label={order.apprestrict.toLowerCase()}
110+
label={appRestrictName}
111+
showAddressOrIdAndLabel={true}
106112
/>
107113
),
108114
}),
@@ -115,16 +121,61 @@ export function buildAccessDetails({
115121
/>
116122
),
117123
}),
124+
...('datasetrestrict' in order &&
125+
order.datasetrestrict && {
126+
'Dataset Restrict': (
127+
<SmartLinkGroup
128+
type="address"
129+
addressOrId={order.datasetrestrict.toLowerCase()}
130+
label={datasetRestrictName}
131+
showAddressOrIdAndLabel={true}
132+
/>
133+
),
134+
}),
118135
...('workerpoolrestrict' in order &&
119136
order.workerpoolrestrict && {
120137
'Workerpool Restrict': (
121138
<SmartLinkGroup
122139
type="workerpool"
123140
addressOrId={order.workerpoolrestrict.toLowerCase()}
124-
label={order.workerpoolrestrict.toLowerCase()}
141+
label={workerpoolRestrictDescription}
142+
showAddressOrIdAndLabel={true}
125143
/>
126144
),
127145
}),
146+
...('trust' in order &&
147+
order.trust && {
148+
Signer: (
149+
<div className="space-x-2">
150+
<SmartLinkGroup
151+
type="address"
152+
addressOrId={access.signer.toLowerCase()}
153+
label={access.signer.toLowerCase()}
154+
/>
155+
{userAddress &&
156+
access.signer?.toLowerCase() === userAddress.toLowerCase() && (
157+
<RevokeAccess access={access} />
158+
)}
159+
</div>
160+
),
161+
}),
162+
...(category && {
163+
Category: {
164+
tooltip: (
165+
<>
166+
Indicates execution parameters: includes a name, an optional
167+
description, and a reference time.
168+
</>
169+
),
170+
value: (
171+
<p>
172+
{category?.name}{' '}
173+
{category?.description.length > 0 ? category?.description : ''} (
174+
{Number(category?.workClockTimeRef) * 10} sec)
175+
</p>
176+
),
177+
},
178+
}),
128179
...(access.signer && {
129180
Signer: (
130181
<div className="space-x-2">

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

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { execute } from '@/graphql/poco/execute';
12
import { useQuery } from '@tanstack/react-query';
23
import { createFileRoute } from '@tanstack/react-router';
34
import { LoaderCircle } from 'lucide-react';
@@ -7,6 +8,7 @@ import { getIExec } from '@/externals/iexecSdkClient';
78
import { DetailsTable } from '@/modules/DetailsTable';
89
import { ErrorAlert } from '@/modules/ErrorAlert';
910
import { AccessBreadcrumbs } from '@/modules/access/access/AccessBreadcrumbs';
11+
import { accessAssetsDetailsQuery } from '@/modules/access/access/accessAssetsDetailsQuery';
1012
import { buildAccessDetails } from '@/modules/access/access/buildAccessDetails';
1113
import { SearcherBar } from '@/modules/search/SearcherBar';
1214
import useUserStore from '@/stores/useUser.store';
@@ -30,15 +32,31 @@ function useAccessData(accessHash: string, chainId: number) {
3032
queryFn: async () => {
3133
const iexec = await getIExec();
3234
const access = await iexec.orderbook.fetchApporder(accessHash);
33-
const { app } = await iexec.app.showApp(access.order.app);
34-
return { access, app };
35+
const datasetRestrict = access.order.datasetrestrict;
36+
const workerpoolRestrict = access.order.workerpoolrestrict;
37+
38+
const result = await execute(accessAssetsDetailsQuery, chainId, {
39+
datasetAddress: datasetRestrict.toLowerCase() || '',
40+
appAddress: access.order.app.toLowerCase() || '',
41+
workerpoolAddress: workerpoolRestrict.toLowerCase() || '',
42+
categoryId: '',
43+
});
44+
45+
return {
46+
access,
47+
app: result.app,
48+
dataset: result.dataset,
49+
workerpool: result.workerpool,
50+
};
3551
},
3652
placeholderData: createPlaceholderDataFnForQueryKey(queryKey),
3753
});
3854

3955
return {
4056
access: data?.access,
4157
app: data?.app,
58+
datasetRestrictName: data?.dataset?.name,
59+
workerpoolRestrictDescription: data?.workerpool?.description,
4260
isLoading,
4361
isRefetching,
4462
isError,
@@ -54,6 +72,8 @@ function AppAccessRoute() {
5472
const {
5573
access,
5674
app,
75+
datasetRestrictName,
76+
workerpoolRestrictDescription,
5777
isLoading,
5878
isRefetching,
5979
isError,
@@ -63,7 +83,13 @@ function AppAccessRoute() {
6383
} = useAccessData((accessHash as string).toLowerCase(), chainId!);
6484

6585
const accessDetails = access
66-
? buildAccessDetails({ access, app, userAddress })
86+
? buildAccessDetails({
87+
access,
88+
appName: app?.name,
89+
datasetRestrictName,
90+
workerpoolRestrictDescription,
91+
userAddress,
92+
})
6793
: undefined;
6894

6995
if (!isValid) {

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

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { execute } from '@/graphql/poco/execute';
12
import { useQuery } from '@tanstack/react-query';
23
import { createFileRoute } from '@tanstack/react-router';
34
import { LoaderCircle } from 'lucide-react';
@@ -7,6 +8,7 @@ import { getIExec } from '@/externals/iexecSdkClient';
78
import { DetailsTable } from '@/modules/DetailsTable';
89
import { ErrorAlert } from '@/modules/ErrorAlert';
910
import { AccessBreadcrumbs } from '@/modules/access/access/AccessBreadcrumbs';
11+
import { accessAssetsDetailsQuery } from '@/modules/access/access/accessAssetsDetailsQuery';
1012
import { buildAccessDetails } from '@/modules/access/access/buildAccessDetails';
1113
import { SearcherBar } from '@/modules/search/SearcherBar';
1214
import useUserStore from '@/stores/useUser.store';
@@ -30,17 +32,31 @@ function useAccessData(accessHash: string, chainId: number) {
3032
queryFn: async () => {
3133
const iexec = await getIExec();
3234
const access = await iexec.orderbook.fetchDatasetorder(accessHash);
33-
const { dataset } = await iexec.dataset.showDataset(
34-
access.order.dataset
35-
);
36-
return { access, dataset };
35+
const apprestrict = access.order.apprestrict;
36+
const workerpoolrestrict = access.order.workerpoolrestrict;
37+
38+
const result = await execute(accessAssetsDetailsQuery, chainId, {
39+
datasetAddress: access.order.dataset.toLowerCase() || '',
40+
appAddress: apprestrict.toLowerCase() || '',
41+
workerpoolAddress: workerpoolrestrict.toLowerCase() || '',
42+
categoryId: '',
43+
});
44+
45+
return {
46+
access,
47+
dataset: result.dataset,
48+
app: result.app,
49+
workerpool: result.workerpool,
50+
};
3751
},
3852
placeholderData: createPlaceholderDataFnForQueryKey(queryKey),
3953
});
4054

4155
return {
4256
access: data?.access,
4357
dataset: data?.dataset,
58+
appRestrictName: data?.app?.name,
59+
workerpoolRestrictDescription: data?.workerpool?.description,
4460
isLoading,
4561
isRefetching,
4662
isError,
@@ -56,6 +72,8 @@ function DatasetAccessRoute() {
5672
const {
5773
access,
5874
dataset,
75+
appRestrictName,
76+
workerpoolRestrictDescription,
5977
isLoading,
6078
isRefetching,
6179
isError,
@@ -65,7 +83,13 @@ function DatasetAccessRoute() {
6583
} = useAccessData((accessHash as string).toLowerCase(), chainId!);
6684

6785
const accessDetails = access
68-
? buildAccessDetails({ access, dataset, userAddress })
86+
? buildAccessDetails({
87+
access,
88+
datasetName: dataset?.name,
89+
appRestrictName,
90+
workerpoolRestrictDescription,
91+
userAddress,
92+
})
6993
: undefined;
7094

7195
if (!isValid) {

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

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { execute } from '@/graphql/poco/execute';
12
import { useQuery } from '@tanstack/react-query';
23
import { createFileRoute } from '@tanstack/react-router';
34
import { LoaderCircle } from 'lucide-react';
@@ -7,6 +8,7 @@ import { getIExec } from '@/externals/iexecSdkClient';
78
import { DetailsTable } from '@/modules/DetailsTable';
89
import { ErrorAlert } from '@/modules/ErrorAlert';
910
import { AccessBreadcrumbs } from '@/modules/access/access/AccessBreadcrumbs';
11+
import { accessAssetsDetailsQuery } from '@/modules/access/access/accessAssetsDetailsQuery';
1012
import { buildAccessDetails } from '@/modules/access/access/buildAccessDetails';
1113
import { SearcherBar } from '@/modules/search/SearcherBar';
1214
import useUserStore from '@/stores/useUser.store';
@@ -30,17 +32,34 @@ function useAccessData(accessHash: string, chainId: number) {
3032
queryFn: async () => {
3133
const iexec = await getIExec();
3234
const access = await iexec.orderbook.fetchWorkerpoolorder(accessHash);
33-
const { workerpool } = await iexec.workerpool.showWorkerpool(
34-
access.order.workerpool
35-
);
36-
return { access, workerpool };
35+
const datasetRestrict = access.order.datasetrestrict;
36+
const appRestrict = access.order.apprestrict;
37+
const workerpoolAddress = access.order.workerpool;
38+
39+
const result = await execute(accessAssetsDetailsQuery, chainId, {
40+
datasetAddress: datasetRestrict.toLowerCase() || '',
41+
appAddress: appRestrict.toLowerCase() || '',
42+
workerpoolAddress: workerpoolAddress.toLowerCase() || '',
43+
categoryId: access.order.category.toString(),
44+
});
45+
46+
return {
47+
access,
48+
workerpool: result.workerpool,
49+
dataset: result.dataset,
50+
app: result.app,
51+
category: result.category,
52+
};
3753
},
3854
placeholderData: createPlaceholderDataFnForQueryKey(queryKey),
3955
});
4056

4157
return {
4258
access: data?.access,
4359
workerpool: data?.workerpool,
60+
datasetRestrictName: data?.dataset?.name,
61+
appRestrictName: data?.app?.name,
62+
category: data?.category,
4463
isLoading,
4564
isRefetching,
4665
isError,
@@ -56,6 +75,9 @@ function WorkerpoolAccessRoute() {
5675
const {
5776
access,
5877
workerpool,
78+
datasetRestrictName,
79+
appRestrictName,
80+
category,
5981
isLoading,
6082
isRefetching,
6183
isError,
@@ -65,7 +87,14 @@ function WorkerpoolAccessRoute() {
6587
} = useAccessData((accessHash as string).toLowerCase(), chainId!);
6688

6789
const accessDetails = access
68-
? buildAccessDetails({ access, workerpool, userAddress })
90+
? buildAccessDetails({
91+
access,
92+
workerpoolDescription: workerpool?.description,
93+
datasetRestrictName,
94+
appRestrictName,
95+
category: category,
96+
userAddress,
97+
})
6998
: undefined;
7099

71100
if (!isValid) {

0 commit comments

Comments
 (0)