Skip to content

Commit 0596e7f

Browse files
committed
fix: abstract scroll top component
1 parent 2de97df commit 0596e7f

File tree

10 files changed

+73
-106
lines changed

10 files changed

+73
-106
lines changed

web/src/components/ScrollTop.tsx

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import React, { useEffect } from "react";
2+
3+
import { useScrollTop } from "hooks/useScrollTop";
4+
5+
const ScrollTop: React.FC = () => {
6+
const scrollTop = useScrollTop();
7+
8+
useEffect(() => {
9+
scrollTop();
10+
});
11+
12+
return <></>;
13+
};
14+
export default ScrollTop;

web/src/pages/Cases/AttachmentDisplay/index.tsx

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
import React, { lazy, Suspense, useEffect } from "react";
1+
import React, { lazy, Suspense } from "react";
22
import styled from "styled-components";
33

44
import { useSearchParams } from "react-router-dom";
55

6-
import { useScrollTop } from "hooks/useScrollTop";
7-
86
import NewTabIcon from "svgs/icons/new-tab.svg";
97

108
import Loader from "components/Loader";
9+
import ScrollTop from "components/ScrollTop";
1110

1211
import Header from "./Header";
1312

@@ -42,11 +41,6 @@ const StyledNewTabIcon = styled(NewTabIcon)`
4241
const AttachmentDisplay: React.FC = () => {
4342
const [searchParams] = useSearchParams();
4443
const url = searchParams.get("url");
45-
const scrollTop = useScrollTop();
46-
47-
useEffect(() => {
48-
scrollTop();
49-
}, []);
5044

5145
return (
5246
<Container>
@@ -67,6 +61,7 @@ const AttachmentDisplay: React.FC = () => {
6761
</Suspense>
6862
</>
6963
) : null}
64+
<ScrollTop />
7065
</Container>
7166
);
7267
};

web/src/pages/Cases/CaseDetails/index.tsx

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect } from "react";
1+
import React from "react";
22
import styled from "styled-components";
33

44
import { Route, Routes, useParams, Navigate } from "react-router-dom";
@@ -7,7 +7,6 @@ import { Card } from "@kleros/ui-components-library";
77

88
import { Periods } from "consts/periods";
99
import { VotingContextProvider } from "hooks/useVotingContext";
10-
import { useScrollTop } from "hooks/useScrollTop";
1110

1211
import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery";
1312

@@ -20,6 +19,7 @@ import Overview from "./Overview";
2019
import Tabs from "./Tabs";
2120
import Timeline from "./Timeline";
2221
import Voting from "./Voting";
22+
import ScrollTop from "components/ScrollTop";
2323

2424
const Container = styled.div``;
2525

@@ -44,15 +44,10 @@ const Header = styled.h1`
4444
const CaseDetails: React.FC = () => {
4545
const { id } = useParams();
4646
const { data } = useDisputeDetailsQuery(id);
47-
const scrollTop = useScrollTop();
4847
const dispute = data?.dispute;
4948
const currentPeriodIndex = (dispute ? Periods[dispute.period] : 0) as number;
5049
const arbitrable = dispute?.arbitrated.id as `0x${string}`;
5150

52-
useEffect(() => {
53-
scrollTop();
54-
}, []);
55-
5651
return (
5752
<VotingContextProvider>
5853
<Container>
@@ -76,6 +71,7 @@ const CaseDetails: React.FC = () => {
7671
<Route path="*" element={<Navigate to="overview" replace />} />
7772
</Routes>
7873
</StyledCard>
74+
<ScrollTop />
7975
</Container>
8076
</VotingContextProvider>
8177
);

web/src/pages/Cases/CasesFetcher.tsx

+14-16
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import React, { useEffect, useMemo } from "react";
1+
import React, { useMemo } from "react";
22

33
import { useParams, useNavigate } from "react-router-dom";
44

55
import useIsDesktop from "hooks/useIsDesktop";
6-
import { useScrollTop } from "hooks/useScrollTop";
76
import { isUndefined } from "utils/index";
87
import { decodeURIFilter, useRootPath } from "utils/uri";
98

@@ -14,6 +13,7 @@ import { useCourtDetails, CourtDetailsQuery } from "queries/useCourtDetails";
1413
import { DisputeDetailsFragment, Dispute_Filter, OrderDirection } from "src/graphql/graphql";
1514

1615
import CasesDisplay from "components/CasesDisplay";
16+
import ScrollTop from "components/ScrollTop";
1717

1818
const calculateStats = (
1919
isCourtFilter: boolean,
@@ -48,7 +48,6 @@ const CasesFetcher: React.FC = () => {
4848
const location = useRootPath();
4949
const navigate = useNavigate();
5050
const isDesktop = useIsDesktop();
51-
const scrollTop = useScrollTop();
5251
const casesPerPage = isDesktop ? 9 : 3;
5352
const pageNumber = parseInt(page ?? "1");
5453
const disputeSkip = casesPerPage * (pageNumber - 1);
@@ -71,20 +70,19 @@ const CasesFetcher: React.FC = () => {
7170
[totalCases, casesPerPage]
7271
);
7372

74-
useEffect(() => {
75-
scrollTop();
76-
}, []);
77-
7873
return (
79-
<CasesDisplay
80-
disputes={data?.disputes as DisputeDetailsFragment[]}
81-
numberDisputes={totalCases}
82-
numberClosedDisputes={ruledCases}
83-
currentPage={pageNumber}
84-
setCurrentPage={(newPage: number) => navigate(`${location}/${newPage}/${order}/${filter}`)}
85-
totalPages={totalPages}
86-
{...{ casesPerPage }}
87-
/>
74+
<>
75+
<CasesDisplay
76+
disputes={data?.disputes as DisputeDetailsFragment[]}
77+
numberDisputes={totalCases}
78+
numberClosedDisputes={ruledCases}
79+
currentPage={pageNumber}
80+
setCurrentPage={(newPage: number) => navigate(`${location}/${newPage}/${order}/${filter}`)}
81+
totalPages={totalPages}
82+
{...{ casesPerPage }}
83+
/>
84+
<ScrollTop />
85+
</>
8886
);
8987
};
9088

web/src/pages/Courts/CourtDetails/index.tsx

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect } from "react";
1+
import React from "react";
22
import styled, { css } from "styled-components";
33

44
import { useParams } from "react-router-dom";
@@ -9,8 +9,6 @@ import { Card, Breadcrumb } from "@kleros/ui-components-library";
99
import { isProductionDeployment } from "consts/index";
1010
import { isUndefined } from "utils/index";
1111

12-
import { useScrollTop } from "hooks/useScrollTop";
13-
1412
import { useCourtPolicy } from "queries/useCourtPolicy";
1513
import { useCourtTree, CourtTreeQuery } from "queries/useCourtTree";
1614

@@ -23,6 +21,7 @@ import LatestCases from "components/LatestCases";
2321
import Staking from "components/Popup/MiniGuides/Staking";
2422
import { StyledSkeleton } from "components/StyledSkeleton";
2523
import { Divider } from "components/Divider";
24+
import ScrollTop from "components/ScrollTop";
2625

2726
import Description from "./Description";
2827
import StakePanel from "./StakePanel";
@@ -85,7 +84,6 @@ const CourtDetails: React.FC = () => {
8584
const { data: policy } = useCourtPolicy(id);
8685
const { data } = useCourtTree();
8786
const [isStakingMiniGuideOpen, toggleStakingMiniGuide] = useToggle(false);
88-
const scrollTop = useScrollTop();
8987

9088
const courtPath = getCourtsPath(data?.court, id);
9189

@@ -97,10 +95,6 @@ const CourtDetails: React.FC = () => {
9795
})) ?? [])
9896
);
9997

100-
useEffect(() => {
101-
scrollTop();
102-
}, []);
103-
10498
return (
10599
<Container>
106100
<StyledCard>
@@ -126,6 +120,7 @@ const CourtDetails: React.FC = () => {
126120
<Description />
127121
</StyledCard>
128122
<LatestCases filters={{ court: id }} />
123+
<ScrollTop />
129124
</Container>
130125
);
131126
};

web/src/pages/Dashboard/index.tsx

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useMemo } from "react";
1+
import React, { useMemo } from "react";
22
import styled from "styled-components";
33

44
import { useNavigate, useParams } from "react-router-dom";
@@ -7,8 +7,6 @@ import { useAccount } from "wagmi";
77
import { isUndefined } from "utils/index";
88
import { decodeURIFilter, useRootPath } from "utils/uri";
99

10-
import { useScrollTop } from "hooks/useScrollTop";
11-
1210
import { DisputeDetailsFragment, useMyCasesQuery } from "queries/useCasesQuery";
1311
import { useUserQuery } from "queries/useUser";
1412

@@ -18,6 +16,7 @@ import { responsiveSize } from "styles/responsiveSize";
1816

1917
import CasesDisplay from "components/CasesDisplay";
2018
import ConnectWallet from "components/ConnectWallet";
19+
import ScrollTop from "components/ScrollTop";
2120

2221
import Courts from "./Courts";
2322
import JurorInfo from "./JurorInfo";
@@ -51,7 +50,6 @@ const Dashboard: React.FC = () => {
5150
const { page, order, filter } = useParams();
5251
const location = useRootPath();
5352
const navigate = useNavigate();
54-
const scrollTop = useScrollTop();
5553
const casesPerPage = 3;
5654
const pageNumber = parseInt(page ?? "1");
5755
const disputeSkip = casesPerPage * (pageNumber - 1);
@@ -71,10 +69,6 @@ const Dashboard: React.FC = () => {
7169
[totalCases, casesPerPage]
7270
);
7371

74-
useEffect(() => {
75-
scrollTop();
76-
}, []);
77-
7872
return (
7973
<Container>
8074
{isConnected ? (
@@ -99,6 +93,7 @@ const Dashboard: React.FC = () => {
9993
<ConnectWallet />
10094
</ConnectWalletContainer>
10195
)}
96+
<ScrollTop />
10297
</Container>
10398
);
10499
};

web/src/pages/GetPnk/index.tsx

+12-21
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
import React, { useEffect } from "react";
1+
import React from "react";
22
import styled from "styled-components";
33

44
import { isProductionDeployment } from "consts/index";
55

66
import { responsiveSize } from "styles/responsiveSize";
77

8-
import { useScrollTop } from "hooks/useScrollTop";
9-
108
import ClaimPnkButton from "components/ClaimPnkButton";
119
import HeroImage from "components/HeroImage";
10+
import ScrollTop from "components/ScrollTop";
1211

1312
import { Widget } from "./Widget";
1413

@@ -29,22 +28,14 @@ const Container = styled.div`
2928
gap: 24px;
3029
`;
3130

32-
const GetPnk: React.FC = () => {
33-
const scrollTop = useScrollTop();
34-
35-
useEffect(() => {
36-
scrollTop();
37-
}, []);
38-
39-
return (
40-
<Wrapper>
41-
<HeroImage />
42-
<Container>
43-
{!isProductionDeployment() && <ClaimPnkButton />}
44-
<Widget />
45-
</Container>
46-
</Wrapper>
47-
);
48-
};
49-
31+
const GetPnk: React.FC = () => (
32+
<Wrapper>
33+
<HeroImage />
34+
<Container>
35+
{!isProductionDeployment() && <ClaimPnkButton />}
36+
<Widget />
37+
</Container>
38+
<ScrollTop />
39+
</Wrapper>
40+
);
5041
export default GetPnk;

web/src/pages/Home/index.tsx

+16-23
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import React, { useEffect } from "react";
1+
import React from "react";
22
import styled from "styled-components";
33

44
import { HomePageProvider } from "hooks/useHomePageContext";
5-
import { useScrollTop } from "hooks/useScrollTop";
65
import { getOneYearAgoTimestamp } from "utils/date";
76

87
import { responsiveSize } from "styles/responsiveSize";
98

109
import HeroImage from "components/HeroImage";
1110
import LatestCases from "components/LatestCases";
11+
import ScrollTop from "components/ScrollTop";
1212

1313
import Community from "./Community";
1414
import CourtOverview from "./CourtOverview";
@@ -26,26 +26,19 @@ const Container = styled.div`
2626
margin: 0 auto;
2727
`;
2828

29-
const Home: React.FC = () => {
30-
const scrollTop = useScrollTop();
31-
32-
useEffect(() => {
33-
scrollTop();
34-
}, []);
35-
36-
return (
37-
<HomePageProvider timeframe={getOneYearAgoTimestamp()}>
38-
<Wrapper>
39-
<HeroImage />
40-
<Container>
41-
<CourtOverview />
42-
<LatestCases />
43-
<TopJurors />
44-
<Community />
45-
</Container>
46-
</Wrapper>
47-
</HomePageProvider>
48-
);
49-
};
29+
const Home: React.FC = () => (
30+
<HomePageProvider timeframe={getOneYearAgoTimestamp()}>
31+
<Wrapper>
32+
<HeroImage />
33+
<Container>
34+
<CourtOverview />
35+
<LatestCases />
36+
<TopJurors />
37+
<Community />
38+
</Container>
39+
<ScrollTop />
40+
</Wrapper>
41+
</HomePageProvider>
42+
);
5043

5144
export default Home;

0 commit comments

Comments
 (0)