@@ -3,12 +3,13 @@ import { useParams } from "react-router-dom";
33import styled , { useTheme } from "styled-components" ;
44import { _TimelineItem1 , CustomTimeline } from "@kleros/ui-components-library" ;
55import { Periods } from "consts/periods" ;
6- import { useVotingHistory } from "queries/useVotingHistory" ;
7- import { useDisputeTemplate } from "queries/useDisputeTemplate" ;
6+ import { ClassicRound } from "src/graphql/graphql" ;
87import { DisputeDetailsQuery , useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery" ;
8+ import { useDisputeTemplate } from "queries/useDisputeTemplate" ;
9+ import { useVotingHistory } from "queries/useVotingHistory" ;
10+ import CalendarIcon from "assets/svgs/icons/calendar.svg" ;
911import ClosedCaseIcon from "assets/svgs/icons/check-circle-outline.svg" ;
1012import AppealedCaseIcon from "assets/svgs/icons/close-circle.svg" ;
11- import CalendarIcon from "assets/svgs/icons/calendar.svg" ;
1213
1314const Container = styled . div `
1415 display: flex;
@@ -59,31 +60,31 @@ const getCaseEventTimes = (
5960
6061type TimelineItems = [ _TimelineItem1 , ..._TimelineItem1 [ ] ] ;
6162
62- const useItems = ( disputeDetails ?: DisputeDetailsQuery ) => {
63- const { data : disputeTemplate } = useDisputeTemplate ( ) ;
63+ const useItems = ( disputeDetails ?: DisputeDetailsQuery , arbitrable ?: `0x${string } `) => {
6464 const { id } = useParams ( ) ;
6565 const { data : votingHistory } = useVotingHistory ( id ) ;
66- const localRounds = votingHistory ?. dispute ?. disputeKitDispute ?. localRounds ;
66+ const { data : disputeTemplate } = useDisputeTemplate ( id , arbitrable ) ;
67+ const localRounds : ClassicRound [ ] = votingHistory ?. dispute ?. disputeKitDispute ?. localRounds ;
6768 const theme = useTheme ( ) ;
6869
6970 return useMemo < TimelineItems | undefined > ( ( ) => {
7071 const dispute = disputeDetails ?. dispute ;
7172 if ( dispute ) {
73+ const rulingOverride = dispute . overridden ;
74+ const parsedDisputeFinalRuling = parseInt ( dispute . currentRuling ) ;
7275 const currentPeriodIndex = Periods [ dispute . period ] ;
7376 const lastPeriodChange = dispute . lastPeriodChange ;
7477 const courtTimePeriods = dispute . court . timesPerPeriod ;
7578 return localRounds ?. reduce < TimelineItems > (
7679 ( acc , { winningChoice } , index ) => {
77- const parsedWinningChoice = parseInt ( winningChoice ) ;
80+ const parsedRoundChoice = parseInt ( winningChoice ) ;
7881 const eventDate = getCaseEventTimes ( lastPeriodChange , currentPeriodIndex , courtTimePeriods , false ) ;
79- const icon = disputeDetails ?. dispute ? .ruled && index === localRounds . length - 1 ? ClosedCaseIcon : "" ;
82+ const icon = dispute . ruled && ! rulingOverride && index === localRounds . length - 1 ? ClosedCaseIcon : "" ;
8083
8184 acc . push ( {
8285 title : `Jury Decision - Round ${ index + 1 } ` ,
8386 party :
84- parsedWinningChoice !== 0
85- ? disputeTemplate ?. answers ?. [ parseInt ( winningChoice ) - 1 ] . title
86- : "Refuse to Arbitrate" ,
87+ parsedRoundChoice !== 0 ? disputeTemplate ?. answers ?. [ parsedRoundChoice - 1 ] . title : "Refuse to Arbitrate" ,
8788 subtitle : eventDate ,
8889 rightSided : true ,
8990 variant : theme . secondaryPurple ,
@@ -98,6 +99,17 @@ const useItems = (disputeDetails?: DisputeDetailsQuery) => {
9899 rightSided : true ,
99100 Icon : AppealedCaseIcon ,
100101 } ) ;
102+ } else if ( rulingOverride && parsedDisputeFinalRuling !== parsedRoundChoice ) {
103+ acc . push ( {
104+ title : "Won by Appeal" ,
105+ party :
106+ parsedDisputeFinalRuling !== 0
107+ ? disputeTemplate ?. answers ?. [ parsedDisputeFinalRuling - 1 ] . title
108+ : "Refuse to Arbitrate" ,
109+ subtitle : eventDate ,
110+ rightSided : true ,
111+ Icon : ClosedCaseIcon ,
112+ } ) ;
101113 }
102114
103115 return acc ;
@@ -117,10 +129,14 @@ const useItems = (disputeDetails?: DisputeDetailsQuery) => {
117129 } , [ disputeDetails , disputeTemplate , localRounds , theme ] ) ;
118130} ;
119131
120- const DisputeTimeline : React . FC = ( ) => {
132+ interface IDisputeTimeline {
133+ arbitrable ?: `0x${string } `;
134+ }
135+
136+ const DisputeTimeline : React . FC < IDisputeTimeline > = ( { arbitrable } ) => {
121137 const { id } = useParams ( ) ;
122138 const { data : disputeDetails } = useDisputeDetailsQuery ( id ) ;
123- const items = useItems ( disputeDetails ) ;
139+ const items = useItems ( disputeDetails , arbitrable ) ;
124140
125141 return (
126142 < Container >
0 commit comments