Skip to content

Commit 5191a22

Browse files
authored
[Human App] HUM-46: fix no error messages for jobs discovery when data load fails (#2702)
1 parent cf46d56 commit 5191a22

File tree

5 files changed

+104
-43
lines changed

5 files changed

+104
-43
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Grid } from '@mui/material';
2+
import { useColorMode } from '@/hooks/use-color-mode';
3+
4+
export function NoRecords() {
5+
const { colorPalette } = useColorMode();
6+
7+
return (
8+
<Grid
9+
sx={{
10+
padding: '20px',
11+
textAlign: 'center',
12+
fontStyle: 'italic',
13+
color: colorPalette.text.secondary,
14+
}}
15+
>
16+
<span>No records to display</span>
17+
</Grid>
18+
);
19+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { useProtectedLayoutNotification } from '@/hooks/use-protected-layout-notifications';
2+
import { defaultErrorMessage } from '@/shared/helpers/default-error-message';
3+
import { wait } from '@/shared/helpers/wait';
4+
import type { ResponseError } from '@/shared/types/global.type';
5+
6+
export function useGetOraclesNotifications() {
7+
const { setTopNotification, closeNotification } =
8+
useProtectedLayoutNotification();
9+
10+
const onError = async (error: ResponseError) => {
11+
setTopNotification({
12+
type: 'warning',
13+
content: defaultErrorMessage(error),
14+
});
15+
await wait(5000);
16+
closeNotification();
17+
};
18+
19+
return { onError };
20+
}

packages/apps/human-app/frontend/src/pages/worker/jobs-discovery/components/oracles-table/oracles-table-mobile.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,19 @@ import { t } from 'i18next';
33
import { Chips } from '@/components/ui/chips';
44
import { TableButton } from '@/components/ui/table-button';
55
import { Loader } from '@/components/ui/loader';
6-
import { Alert } from '@/components/ui/alert';
7-
import { defaultErrorMessage } from '@/shared/helpers/default-error-message';
86
import type { OraclesDataQueryResult } from '@/pages/worker/jobs-discovery/jobs-discovery.page';
97
import { EvmAddress } from '@/pages/worker/jobs/components/evm-address';
108
import { ListItem } from '@/components/ui/list-item';
119
import { useColorMode } from '@/hooks/use-color-mode';
1210
import type { JobType } from '@/smart-contracts/EthKVStore/config';
1311
import type { OracleSuccessResponse } from '@/api/services/worker/oracles';
12+
import { NoRecords } from '@/components/ui/no-records';
1413

1514
export function OraclesTableMobile({
1615
selectOracle,
1716
oraclesQueryDataResult: {
1817
data: oraclesData,
1918
isError: isOraclesDataError,
20-
error: oraclesDataError,
2119
isPending: isOraclesDataPending,
2220
},
2321
}: {
@@ -38,11 +36,7 @@ export function OraclesTableMobile({
3836
}
3937

4038
if (isOraclesDataError) {
41-
return (
42-
<Alert color="error" severity="error">
43-
{defaultErrorMessage(oraclesDataError)}
44-
</Alert>
45-
);
39+
return <NoRecords />;
4640
}
4741

4842
return (

packages/apps/human-app/frontend/src/pages/worker/jobs-discovery/jobs-discovery.page.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,31 @@ import Paper from '@mui/material/Paper';
22
import Grid from '@mui/material/Grid';
33
import type { UseQueryResult } from '@tanstack/react-query';
44
import { Navigate } from 'react-router-dom';
5+
import { useEffect, useRef } from 'react';
56
import { useIsMobile } from '@/hooks/use-is-mobile';
67
import { OraclesTable } from '@/pages/worker/jobs-discovery/components/oracles-table/oracles-table';
78
import { OraclesTableJobTypesSelect } from '@/pages/worker/jobs-discovery/components/oracles-table/oracles-table-job-types-select';
89
import type { OraclesSuccessResponse } from '@/api/services/worker/oracles';
910
import { useGetOracles } from '@/api/services/worker/oracles';
1011
import { useAuthenticatedUser } from '@/auth/use-authenticated-user';
1112
import { routerPaths } from '@/router/router-paths';
13+
import { useGetOraclesNotifications } from '@/hooks/use-get-oracles-notifications';
1214

1315
export type OraclesDataQueryResult = UseQueryResult<OraclesSuccessResponse>;
1416

1517
export function JobsDiscoveryPage() {
18+
const { onError } = useGetOraclesNotifications();
19+
const onErrorRef = useRef(onError);
1620
const oraclesQueryResult = useGetOracles();
1721
const isMobile = useIsMobile();
1822
const { user } = useAuthenticatedUser();
1923

24+
useEffect(() => {
25+
if (oraclesQueryResult.error) {
26+
void onErrorRef.current(oraclesQueryResult.error);
27+
}
28+
}, [oraclesQueryResult.error]);
29+
2030
if (user.kyc_status !== 'approved') {
2131
return <Navigate to={routerPaths.worker.profile} replace />;
2232
}

packages/apps/human-app/frontend/src/pages/worker/jobs/jobs.page.tsx

Lines changed: 53 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable camelcase */
2-
import React, { useState } from 'react';
2+
import React, { useEffect, useRef, useState } from 'react';
33
import { Box, Grid, Paper, Stack, Tab, Tabs, Typography } from '@mui/material';
44
import { useTranslation } from 'react-i18next';
55
import { useParams } from 'react-router-dom';
@@ -11,9 +11,10 @@ import { AvailableJobsTable } from '@/pages/worker/jobs/components/available-job
1111
import { MyJobsDrawerMobile } from '@/pages/worker/jobs/components/my-jobs/mobile/my-jobs-drawer-mobile';
1212
import { AvailableJobsDrawerMobile } from '@/pages/worker/jobs/components/available-jobs/mobile/available-jobs-drawer-mobile';
1313
import { useGetOracles } from '@/api/services/worker/oracles';
14-
import { PageCardError, PageCardLoader } from '@/components/ui/page-card';
15-
import { defaultErrorMessage } from '@/shared/helpers/default-error-message';
14+
import { PageCardLoader } from '@/components/ui/page-card';
1615
import { useColorMode } from '@/hooks/use-color-mode';
16+
import { useGetOraclesNotifications } from '@/hooks/use-get-oracles-notifications';
17+
import { NoRecords } from '@/components/ui/no-records';
1718
import { AvailableJobsTableMobile } from './components/available-jobs/mobile/available-jobs-table-mobile';
1819
import { TabPanel } from './components/jobs-tab-panel';
1920
import { MyJobsTable } from './components/my-jobs/desktop/my-jobs-table';
@@ -37,6 +38,8 @@ export function JobsPage() {
3738
);
3839
const [isMobileFilterDrawerOpen, setIsMobileFilterDrawerOpen] =
3940
useState(false);
41+
const { onError } = useGetOraclesNotifications();
42+
const onErrorRef = useRef(onError);
4043

4144
const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {
4245
setActiveTab(newValue);
@@ -48,14 +51,16 @@ export function JobsPage() {
4851
}
4952
};
5053

54+
useEffect(() => {
55+
if (error) {
56+
void onErrorRef.current(error);
57+
}
58+
}, [error]);
59+
5160
const oracleName = data?.find(
5261
({ address }) => address === oracle_address
5362
)?.role;
5463

55-
if (isError) {
56-
return <PageCardError errorMessage={defaultErrorMessage(error)} />;
57-
}
58-
5964
if (isPending) {
6065
return <PageCardLoader />;
6166
}
@@ -92,16 +97,17 @@ export function JobsPage() {
9297
}}
9398
>
9499
<div>
95-
<Box
96-
sx={{
97-
padding: '8px 42px',
98-
backgroundColor: isDarkMode ? '#CDC7FF14' : '#1406B20A',
99-
display: 'inline-block',
100-
borderRadius: '4px',
101-
}}
102-
>
103-
<Typography variant="h6">{oracleName}</Typography>
104-
</Box>
100+
{!isError && (
101+
<Box
102+
sx={{
103+
padding: '8px 42px',
104+
backgroundColor: isDarkMode ? '#CDC7FF14' : '#1406B20A',
105+
display: 'inline-block',
106+
}}
107+
>
108+
<Typography variant="h6">{oracleName}</Typography>
109+
</Box>
110+
)}
105111
</div>
106112
<Stack>
107113
<TableQueryContextProvider>
@@ -128,26 +134,38 @@ export function JobsPage() {
128134
</Tabs>
129135
</Box>
130136
<TabPanel activeTab={activeTab} index={0}>
131-
{isMobile ? (
132-
<AvailableJobsTableMobile
133-
setIsMobileFilterDrawerOpen={
134-
setIsMobileFilterDrawerOpen
135-
}
136-
/>
137-
) : null}
138-
{!isMobile ? <AvailableJobsTable /> : null}
137+
{isError ? (
138+
<NoRecords />
139+
) : (
140+
<>
141+
{isMobile ? (
142+
<AvailableJobsTableMobile
143+
setIsMobileFilterDrawerOpen={
144+
setIsMobileFilterDrawerOpen
145+
}
146+
/>
147+
) : (
148+
<AvailableJobsTable />
149+
)}
150+
</>
151+
)}
139152
</TabPanel>
140153
<TabPanel activeTab={activeTab} index={1}>
141-
<>
142-
{isMobile ? (
143-
<MyJobsTableMobile
144-
setIsMobileFilterDrawerOpen={
145-
setIsMobileFilterDrawerOpen
146-
}
147-
/>
148-
) : null}
149-
{!isMobile ? <MyJobsTable /> : null}
150-
</>
154+
{isError ? (
155+
<NoRecords />
156+
) : (
157+
<>
158+
{isMobile ? (
159+
<MyJobsTableMobile
160+
setIsMobileFilterDrawerOpen={
161+
setIsMobileFilterDrawerOpen
162+
}
163+
/>
164+
) : (
165+
<MyJobsTable />
166+
)}
167+
</>
168+
)}
151169
</TabPanel>
152170
</Box>
153171
</TableQueryContextProvider>

0 commit comments

Comments
 (0)