Skip to content

Commit 4324611

Browse files
authored
Merge pull request #1841 from kleros/feat(web)/appeal-loading-improvement
feat: better appeal loading mechanism
2 parents 971c713 + b52f642 commit 4324611

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

web/src/hooks/useClassicAppealContext.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useMemo, useState, createContext, useContext } from "react";
1+
import React, { useMemo, createContext, useContext, useState } from "react";
22

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

@@ -7,6 +7,7 @@ import { Periods } from "consts/periods";
77
import { usePopulatedDisputeData } from "hooks/queries/usePopulatedDisputeData";
88
import { useCountdown } from "hooks/useCountdown";
99
import { getLocalRounds } from "utils/getLocalRounds";
10+
import { isUndefined } from "utils/index";
1011

1112
import { useAppealCost } from "queries/useAppealCost";
1213
import { useClassicAppealQuery, ClassicAppealQuery } from "queries/useClassicAppealQuery";
@@ -15,6 +16,7 @@ import { useDisputeKitClassicMultipliers } from "queries/useDisputeKitClassicMul
1516
interface ICountdownContext {
1617
loserSideCountdown?: number;
1718
winnerSideCountdown?: number;
19+
isLoading?: boolean;
1820
}
1921
const CountdownContext = createContext<ICountdownContext>({});
2022

@@ -73,6 +75,8 @@ export const ClassicAppealProvider: React.FC<{
7375
dispute?.court.timesPerPeriod[Periods.appeal]
7476
);
7577

78+
const isLoading = useMemo(() => isUndefined(dispute) || isUndefined(multipliers), [dispute, multipliers]);
79+
7680
const { loserRequiredFunding, winnerRequiredFunding } = useMemo(
7781
() => ({
7882
loserRequiredFunding: getRequiredFunding(appealCost, multipliers?.loser_stake_multiplier),
@@ -85,7 +89,10 @@ export const ClassicAppealProvider: React.FC<{
8589

8690
return (
8791
<CountdownContext.Provider
88-
value={useMemo(() => ({ loserSideCountdown, winnerSideCountdown }), [loserSideCountdown, winnerSideCountdown])}
92+
value={useMemo(
93+
() => ({ loserSideCountdown, winnerSideCountdown, isLoading }),
94+
[loserSideCountdown, winnerSideCountdown, isLoading]
95+
)}
8996
>
9097
<SelectedOptionContext.Provider
9198
value={useMemo(() => ({ selectedOption, setSelectedOption }), [selectedOption, setSelectedOption])}

web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/index.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React from "react";
22
import styled from "styled-components";
33

44
import { useCountdownContext } from "hooks/useClassicAppealContext";
5-
import { isUndefined } from "utils/index";
65

76
import { StyledSkeleton } from "components/StyledSkeleton";
87

@@ -18,13 +17,20 @@ interface IOptions {
1817
}
1918

2019
const Options: React.FC<IOptions> = ({ setAmount }) => {
21-
const { loserSideCountdown } = useCountdownContext();
22-
return !isUndefined(loserSideCountdown) ? (
20+
const { loserSideCountdown, isLoading } = useCountdownContext();
21+
22+
return (
2323
<Container>
24-
{loserSideCountdown > 0 ? <StageOne setAmount={setAmount} /> : <StageTwo setAmount={setAmount} />}
24+
{!isLoading ? (
25+
loserSideCountdown > 0 ? (
26+
<StageOne setAmount={setAmount} />
27+
) : (
28+
<StageTwo setAmount={setAmount} />
29+
)
30+
) : (
31+
<StyledSkeleton />
32+
)}
2533
</Container>
26-
) : (
27-
<StyledSkeleton />
2834
);
2935
};
3036

0 commit comments

Comments
 (0)