Skip to content

Commit b246440

Browse files
authored
Merge pull request #43 from kleros/fix/faster-chart-loadtime
fix: faster chart loadtime
2 parents 781694d + b7901ab commit b246440

File tree

2 files changed

+51
-50
lines changed

2 files changed

+51
-50
lines changed

src/app/api/market-chart/route.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { NextResponse, NextRequest } from "next/server";
1+
export const revalidate = 300;
2+
3+
import { NextResponse } from "next/server";
4+
5+
import { markets } from "@/consts/markets";
6+
7+
const chainId = "100";
28

39
export async function OPTIONS() {
410
return new NextResponse(null, {
@@ -11,17 +17,20 @@ export async function OPTIONS() {
1117
});
1218
}
1319

14-
export async function GET(req: NextRequest) {
15-
const { searchParams } = new URL(req.url);
16-
const marketId = searchParams.get("marketId");
17-
const chainId = searchParams.get("chainId");
20+
export async function GET() {
21+
const data = await Promise.all(
22+
markets.map(async (market) => {
23+
const { marketId } = market;
1824

19-
const upstream = await fetch(
20-
`https://app.seer.pm/.netlify/functions/market-chart?marketId=${marketId}&chainId=${chainId}`,
25+
const upstream = await fetch(
26+
`https://app.seer.pm/.netlify/functions/market-chart?marketId=${marketId}&chainId=${chainId}`,
27+
{ next: { revalidate: 300 } },
28+
);
29+
return await upstream.json();
30+
}),
2131
);
22-
const data = await upstream.json();
2332

24-
const res = NextResponse.json(data, { status: upstream.status });
33+
const res = NextResponse.json({ data });
2534
res.headers.set("Access-Control-Allow-Origin", "*");
2635
return res;
2736
}

src/hooks/useChartData.ts

Lines changed: 33 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -51,46 +51,38 @@ export const useChartData = (markets: Array<IMarket>) =>
5151
useQuery<IChartData[]>({
5252
queryKey: [`chart-${markets.map(({ marketId }) => marketId).join("-")}`],
5353
queryFn: async () => {
54-
return await Promise.all(
55-
markets.map(async (market) => {
56-
const { marketId, maxValue, name, underlyingToken } = market;
57-
const params = new URLSearchParams();
58-
params.append("marketId", marketId);
59-
params.append("chainId", "100");
60-
61-
const rawData: IReturn = await fetch(
62-
`/api/market-chart?${params.toString()}`,
63-
).then((res) => res.json());
64-
65-
const processed: IChartData[""]["data"] = rawData[1].map(
66-
(dataPoint) => {
67-
let token0Price = dataPoint.token0Price;
68-
let token1Price = dataPoint.token1Price;
69-
const sqrtPrice = dataPoint.sqrtPrice;
70-
if (
71-
token0Price === "0" &&
72-
token1Price === "0" &&
73-
sqrtPrice &&
74-
sqrtPrice !== "0"
75-
) {
76-
({ token0Price, token1Price } = getSqrtPrices(sqrtPrice));
77-
}
78-
return {
79-
timestamp: dataPoint.periodStartUnix,
80-
value:
81-
parseFloat(
82-
(dataPoint.pool.token0.id.toLowerCase() ===
83-
underlyingToken.toLowerCase()
84-
? token0Price
85-
: token1Price
86-
).slice(0, 9),
87-
) * maxValue,
88-
};
89-
},
90-
);
91-
92-
return { [name]: { market, data: processed } };
93-
}),
94-
);
54+
const { data }: { data: IReturn[] } = await fetch("api/market-chart", {
55+
next: { revalidate: 300 },
56+
}).then((res) => res.json());
57+
return data.map((rawData: IReturn, i: number) => {
58+
const market = markets[i];
59+
const processed: IChartData[""]["data"] = rawData[1].map(
60+
(dataPoint) => {
61+
let token0Price = dataPoint.token0Price;
62+
let token1Price = dataPoint.token1Price;
63+
const sqrtPrice = dataPoint.sqrtPrice;
64+
if (
65+
token0Price === "0" &&
66+
token1Price === "0" &&
67+
sqrtPrice &&
68+
sqrtPrice !== "0"
69+
) {
70+
({ token0Price, token1Price } = getSqrtPrices(sqrtPrice));
71+
}
72+
return {
73+
timestamp: dataPoint.periodStartUnix,
74+
value:
75+
parseFloat(
76+
(dataPoint.pool.token0.id.toLowerCase() ===
77+
market.underlyingToken.toLowerCase()
78+
? token0Price
79+
: token1Price
80+
).slice(0, 9),
81+
) * market.maxValue,
82+
};
83+
},
84+
);
85+
return { [market.name]: { market, data: processed } };
86+
});
9587
},
9688
});

0 commit comments

Comments
 (0)