Skip to content

Commit d3e94b3

Browse files
authored
[Dashboard] Hyperlink role to oracle website (#2676)
* Hyperlink role to oracle website * Created website field in Leader data in Subgraph and used it for hiperlink in dashboard
1 parent 1bd6f67 commit d3e94b3

File tree

13 files changed

+128
-26
lines changed

13 files changed

+128
-26
lines changed

packages/apps/dashboard/server/src/modules/details/dto/leader.dto.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ export class LeaderDto {
6363
@Expose()
6464
public url?: string;
6565

66+
@ApiProperty({ example: 'https://example.test' })
67+
@ApiPropertyOptional()
68+
@IsOptional()
69+
@IsUrl()
70+
@Expose()
71+
public website?: string;
72+
6673
@ApiProperty({ example: 1 })
6774
@IsNumber()
6875
@Expose()

packages/apps/dashboard/ui-2024/src/features/Leaderboard/components/Table.tsx

Lines changed: 62 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { getNetwork } from '@utils/config/networks';
1919
import { NetworkIcon } from '@components/NetworkIcon';
2020
import { colorPalette } from '@assets/styles/color-palette';
2121
import { TableRow, Typography } from '@mui/material';
22+
import { Link } from 'react-router-dom';
2223
import Stack from '@mui/material/Stack';
2324
import { handleErrorMessage } from '@services/handle-error-message';
2425
import Loader from '@components/Loader';
@@ -184,31 +185,67 @@ export const Table = ({
184185
},
185186
}}
186187
>
187-
<Grid
188-
container
189-
wrap="nowrap"
190-
alignItems="center"
191-
gap="8px"
192-
justifyContent="flex-start"
193-
>
194-
{mobile.isMobile ? (
195-
<>
196-
<Typography
197-
variant="subtitle2"
198-
sx={{ wordBreak: 'unset' }}
199-
>
200-
{row.role}
201-
</Typography>
202-
</>
203-
) : (
204-
<>
205-
<EntityIcon role={row.role} />
206-
<Typography variant="h6" sx={{ wordBreak: 'unset' }}>
207-
{row.role}
208-
</Typography>
209-
</>
210-
)}
211-
</Grid>
188+
{row.website ? (
189+
<Link
190+
to={row.website}
191+
style={{ textDecoration: 'none', color: 'inherit' }}
192+
>
193+
<Grid
194+
container
195+
wrap="nowrap"
196+
alignItems="center"
197+
gap="8px"
198+
justifyContent="flex-start"
199+
>
200+
{mobile.isMobile ? (
201+
<>
202+
<Typography
203+
variant="subtitle2"
204+
sx={{ wordBreak: 'unset' }}
205+
>
206+
{row.role}
207+
</Typography>
208+
</>
209+
) : (
210+
<>
211+
<EntityIcon role={row.role} />
212+
<Typography
213+
variant="h6"
214+
sx={{ wordBreak: 'unset' }}
215+
>
216+
{row.role}
217+
</Typography>
218+
</>
219+
)}
220+
</Grid>
221+
</Link>
222+
) : (
223+
<Grid
224+
container
225+
wrap="nowrap"
226+
alignItems="center"
227+
gap="8px"
228+
justifyContent="flex-start"
229+
>
230+
{mobile.isMobile ? (
231+
<>
232+
<Typography
233+
variant="subtitle2"
234+
sx={{ wordBreak: 'unset' }}
235+
>
236+
{row.role}
237+
</Typography>
238+
</>
239+
) : (
240+
<>
241+
<EntityIcon role={row.role} />
242+
<Typography variant="h6" sx={{ wordBreak: 'unset' }}>
243+
{row.role}
244+
</Typography>
245+
</>
246+
)}
247+
</Grid>
248+
)}
212249
</TableCell>
213250
<TableCell
214251
sx={{

packages/apps/dashboard/ui-2024/src/features/Leaderboard/helpers/sorting.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { LeaderBoardData } from '@services/api/use-leaderboard-details';
33
export type Order = 'asc' | 'desc';
44
export type SortableFieldsInLeaderBoardData = Exclude<
55
keyof LeaderBoardData[number],
6-
'jobTypes' | 'url'
6+
'jobTypes' | 'url' | 'website'
77
>;
88

99
function descendingComparator<T>(a: T, b: T, orderBy: keyof T) {

packages/apps/dashboard/ui-2024/src/services/api/use-leaderboard-details.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const leaderBoardEntity = z.object({
3838
fee: z.number(),
3939
jobTypes: z.array(z.string()),
4040
url: z.string(),
41+
website: z.string().optional(),
4142
chainId: z.number(),
4243
});
4344

packages/sdk/python/human-protocol-sdk/human_protocol_sdk/operator/operator_utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def __init__(
7777
fee: Optional[int] = None,
7878
public_key: Optional[str] = None,
7979
webhook_url: Optional[str] = None,
80+
website: Optional[str] = None,
8081
url: Optional[str] = None,
8182
job_types: Optional[List[str]] = None,
8283
registration_needed: Optional[bool] = None,
@@ -101,6 +102,7 @@ def __init__(
101102
:param fee: Fee
102103
:param public_key: Public key
103104
:param webhook_url: Webhook url
105+
:param website: Website url
104106
:param url: Url
105107
:param job_types: Job types
106108
:param registration_needed: True
@@ -123,6 +125,7 @@ def __init__(
123125
self.fee = fee
124126
self.public_key = public_key
125127
self.webhook_url = webhook_url
128+
self.website = website
126129
self.url = url
127130
self.job_types = job_types
128131
self.registration_needed = registration_needed
@@ -256,6 +259,7 @@ def get_leaders(filter: LeaderFilter) -> List[LeaderData]:
256259
fee=int(leader.get("fee")) if leader.get("fee", None) else None,
257260
public_key=leader.get("publicKey", None),
258261
webhook_url=leader.get("webhookUrl", None),
262+
website=leader.get("website", None),
259263
url=leader.get("url", None),
260264
job_types=(
261265
leader.get("jobTypes").split(",")
@@ -357,6 +361,7 @@ def get_leader(
357361
fee=int(leader.get("fee")) if leader.get("fee", None) else None,
358362
public_key=leader.get("publicKey", None),
359363
webhook_url=leader.get("webhookUrl", None),
364+
website=leader.get("website", None),
360365
url=leader.get("url", None),
361366
job_types=(
362367
leader.get("jobTypes").split(",")

packages/sdk/python/human-protocol-sdk/test/human_protocol_sdk/operator/test_operator_utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def test_get_leaders(self):
3939
"fee": None,
4040
"publicKey": None,
4141
"webhookUrl": None,
42+
"website": None,
4243
"url": None,
4344
"jobTypes": "type1,type2",
4445
"registrationNeeded": True,
@@ -73,6 +74,7 @@ def test_get_leaders(self):
7374
self.assertEqual(leaders[0].fee, None)
7475
self.assertEqual(leaders[0].public_key, None)
7576
self.assertEqual(leaders[0].webhook_url, None)
77+
self.assertEqual(leaders[0].website, None)
7678
self.assertEqual(leaders[0].url, None)
7779
self.assertEqual(leaders[0].job_types, ["type1", "type2"])
7880
self.assertEqual(leaders[0].registration_needed, True)
@@ -105,6 +107,7 @@ def test_get_leaders_when_job_types_is_none(self):
105107
"fee": None,
106108
"publicKey": None,
107109
"webhookUrl": None,
110+
"website": None,
108111
"url": None,
109112
"jobTypes": None,
110113
"reputationNetworks": [{"address": "0x01"}],
@@ -137,6 +140,7 @@ def test_get_leaders_when_job_types_is_none(self):
137140
self.assertEqual(leaders[0].fee, None)
138141
self.assertEqual(leaders[0].public_key, None)
139142
self.assertEqual(leaders[0].webhook_url, None)
143+
self.assertEqual(leaders[0].website, None)
140144
self.assertEqual(leaders[0].url, None)
141145
self.assertEqual(leaders[0].registration_needed, None)
142146
self.assertEqual(leaders[0].registration_instructions, None)
@@ -169,6 +173,7 @@ def test_get_leaders_when_job_types_is_array(self):
169173
"fee": None,
170174
"publicKey": None,
171175
"webhookUrl": None,
176+
"website": None,
172177
"url": None,
173178
"jobTypes": ["type1", "type2", "type3"],
174179
"reputationNetworks": [{"address": "0x01"}],
@@ -201,6 +206,7 @@ def test_get_leaders_when_job_types_is_array(self):
201206
self.assertEqual(leaders[0].fee, None)
202207
self.assertEqual(leaders[0].public_key, None)
203208
self.assertEqual(leaders[0].webhook_url, None)
209+
self.assertEqual(leaders[0].website, None)
204210
self.assertEqual(leaders[0].url, None)
205211
self.assertEqual(
206212
leaders[0].job_types, ["type1", "type2", "type3"]
@@ -258,6 +264,7 @@ def test_get_leader(self):
258264
"fee": None,
259265
"publicKey": None,
260266
"webhookUrl": None,
267+
"website": None,
261268
"url": None,
262269
"jobTypes": "type1,type2",
263270
"registrationNeeded": True,
@@ -291,6 +298,7 @@ def test_get_leader(self):
291298
self.assertEqual(leader.fee, None)
292299
self.assertEqual(leader.public_key, None)
293300
self.assertEqual(leader.webhook_url, None)
301+
self.assertEqual(leader.website, None)
294302
self.assertEqual(leader.url, None)
295303
self.assertEqual(leader.job_types, ["type1", "type2"])
296304
self.assertEqual(leader.registration_needed, True)
@@ -323,6 +331,7 @@ def test_get_leader_when_job_types_is_none(self):
323331
"fee": None,
324332
"publicKey": None,
325333
"webhookUrl": None,
334+
"website": None,
326335
"url": None,
327336
"jobTypes": None,
328337
"reputationNetworks": [{"address": "0x01"}],
@@ -354,6 +363,7 @@ def test_get_leader_when_job_types_is_none(self):
354363
self.assertEqual(leader.fee, None)
355364
self.assertEqual(leader.public_key, None)
356365
self.assertEqual(leader.webhook_url, None)
366+
self.assertEqual(leader.website, None)
357367
self.assertEqual(leader.url, None)
358368
self.assertEqual(leader.job_types, [])
359369
self.assertEqual(leader.registration_needed, None)
@@ -386,6 +396,7 @@ def test_get_leader_when_job_types_is_array(self):
386396
"fee": None,
387397
"publicKey": None,
388398
"webhookUrl": None,
399+
"website": None,
389400
"url": None,
390401
"jobTypes": ["type1", "type2", "type3"],
391402
"reputationNetworks": [{"address": "0x01"}],
@@ -417,6 +428,7 @@ def test_get_leader_when_job_types_is_array(self):
417428
self.assertEqual(leader.fee, None)
418429
self.assertEqual(leader.public_key, None)
419430
self.assertEqual(leader.webhook_url, None)
431+
self.assertEqual(leader.website, None)
420432
self.assertEqual(leader.url, None)
421433
self.assertEqual(leader.job_types, ["type1", "type2", "type3"])
422434
self.assertEqual(leader.reputation_networks, ["0x01"])

packages/sdk/typescript/human-protocol-sdk/src/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ export const KVStoreKeys = {
323323
fee: 'fee',
324324
publicKey: 'public_key',
325325
webhookUrl: 'webhook_url',
326+
website: 'website',
326327
url: 'url',
327328
jobTypes: 'job_types',
328329
registrationNeeded: 'registration_needed',

packages/sdk/typescript/human-protocol-sdk/src/graphql/queries/operator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const LEADER_FRAGMENT = gql`
1717
fee
1818
publicKey
1919
webhookUrl
20+
website
2021
url
2122
jobTypes
2223
registrationNeeded

packages/sdk/typescript/human-protocol-sdk/src/interfaces.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export interface ILeader {
3030
fee?: bigint;
3131
publicKey?: string;
3232
webhookUrl?: string;
33+
website?: string;
3334
url?: string;
3435
jobTypes?: string[];
3536
registrationNeeded?: boolean;

packages/sdk/typescript/human-protocol-sdk/test/operator.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ describe('OperatorUtils', () => {
4949
jobTypes: 'type1,type2',
5050
registrationNeeded: true,
5151
registrationInstructions: 'www.google.com',
52+
website: 'www.google.com',
5253
reputationNetworks: [
5354
{
5455
address: '0x01',
@@ -192,6 +193,7 @@ describe('OperatorUtils', () => {
192193
jobTypes: 'type1,type2',
193194
registrationNeeded: true,
194195
registrationInstructions: 'www.google.com',
196+
website: 'www.google.com',
195197
reputationNetworks: [
196198
{
197199
address: '0x01',

0 commit comments

Comments
 (0)