Skip to content

Commit e72c41d

Browse files
authored
fix: reduce cold-load latency for Portfolio, Earn, and Mission detail routes (#2841)
1 parent f0fde61 commit e72c41d

4 files changed

Lines changed: 44 additions & 9 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { MissionPageSkeleton } from 'src/app/ui/mission/MissionPageSkeleton';
2+
3+
export default function Loading() {
4+
return <MissionPageSkeleton />;
5+
}

src/app/[lng]/missions/[slug]/page.tsx

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,35 @@ const getPageTitle = (title: string) => {
2323
const formatSlugToTitle = (slug: string) => slug.replaceAll('-', ' ');
2424

2525
export async function generateStaticParams() {
26-
const { data: missionsResponse } = await getQuestsWithNoCampaignAttached(
27-
{
28-
page: 1,
29-
pageSize: 12,
30-
},
26+
const pageSize = 25;
27+
28+
const { data: firstPage } = await getQuestsWithNoCampaignAttached(
29+
{ page: 1, pageSize, withCount: true },
3130
UPCOMING_DAYS_AHEAD,
3231
);
3332

34-
return missionsResponse.data.map((mission) => ({ slug: mission.Slug || '' }));
33+
const { pageCount } = firstPage.meta.pagination;
34+
35+
const remainingPages =
36+
pageCount > 1
37+
? await Promise.all(
38+
Array.from({ length: pageCount - 1 }, (_, i) =>
39+
getQuestsWithNoCampaignAttached(
40+
{ page: i + 2, pageSize },
41+
UPCOMING_DAYS_AHEAD,
42+
),
43+
),
44+
)
45+
: [];
46+
47+
const allMissions = [
48+
...firstPage.data,
49+
...remainingPages.flatMap(({ data }) => data.data),
50+
];
51+
52+
return allMissions
53+
.filter((mission) => mission.Slug)
54+
.map((mission) => ({ slug: mission.Slug! }));
3555
}
3656

3757
export async function generateMetadata({
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { PortfolioPageSkeleton } from '@/app/ui/portfolio/PortfolioPageSkeleton';
2+
3+
export default function Loading() {
4+
return <PortfolioPageSkeleton />;
5+
}

src/components/Widgets/Widget.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,14 @@ export function Widget({
6363
);
6464

6565
useEffect(() => {
66-
const routes = [AppPaths.Main, AppPaths.Gas, AppPaths.Private].filter(
67-
(route) => route !== pathname,
68-
);
66+
const routes = [
67+
AppPaths.Main,
68+
AppPaths.Gas,
69+
AppPaths.Private,
70+
AppPaths.Portfolio,
71+
AppPaths.Earn,
72+
AppPaths.Missions,
73+
].filter((route) => route !== pathname);
6974

7075
const runPrefetch = () => {
7176
routes.forEach((route) =>

0 commit comments

Comments
 (0)