@@ -8,18 +8,18 @@ import { Button } from "@kleros/ui-components-library";
8
8
9
9
import DownArrow from "svgs/icons/arrow-down.svg" ;
10
10
11
- import { spamEvidencesIds } from "consts/index " ;
11
+ import { useSpamEvidence } from "hooks/useSpamEvidence " ;
12
12
13
13
import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery" ;
14
14
import { useEvidences } from "queries/useEvidences" ;
15
15
16
16
import { landscapeStyle } from "styles/landscapeStyle" ;
17
17
18
+ import { Divider } from "components/Divider" ;
18
19
import EvidenceCard from "components/EvidenceCard" ;
19
20
import { SkeletonEvidenceCard } from "components/StyledSkeleton" ;
20
21
21
22
import EvidenceSearch from "./EvidenceSearch" ;
22
- import { Divider } from "components/Divider" ;
23
23
24
24
const Container = styled . div `
25
25
width: 100%;
@@ -85,6 +85,7 @@ const Evidence: React.FC = () => {
85
85
const [ search , setSearch ] = useState < string > ( ) ;
86
86
const [ debouncedSearch , setDebouncedSearch ] = useState < string > ( ) ;
87
87
const [ showSpam , setShowSpam ] = useState ( false ) ;
88
+ const { data : spamEvidences } = useSpamEvidence ( disputeData ?. dispute ?. externalDisputeId ?. toString ( ) ) ;
88
89
89
90
const { data } = useEvidences ( disputeData ?. dispute ?. externalDisputeId ?. toString ( ) , debouncedSearch ) ;
90
91
@@ -99,57 +100,66 @@ const Evidence: React.FC = () => {
99
100
latestEvidence . scrollIntoView ( { behavior : "smooth" } ) ;
100
101
} , [ ref ] ) ;
101
102
103
+ const isSpam = useCallback (
104
+ ( evidenceId : string ) => {
105
+ return Boolean ( spamEvidences ?. courtv2EvidenceSpamsByGroupId . evidenceIds ?. includes ( evidenceId ) ) ;
106
+ } ,
107
+ [ spamEvidences ]
108
+ ) ;
109
+
102
110
const evidences = useMemo ( ( ) => {
103
111
if ( ! data ?. evidences ) return ;
104
112
const spamEvidences = data . evidences . filter ( ( evidence ) => isSpam ( evidence . id ) ) ;
105
113
const realEvidences = data . evidences . filter ( ( evidence ) => ! isSpam ( evidence . id ) ) ;
106
114
return { realEvidences, spamEvidences } ;
107
- } , [ data ] ) ;
115
+ } , [ data , isSpam ] ) ;
108
116
109
117
return (
110
118
< Container ref = { ref } >
111
119
< EvidenceSearch { ...{ search, setSearch, evidenceGroup : disputeData ?. dispute ?. externalDisputeId } } />
112
120
< ScrollButton small Icon = { DownArrow } text = "Scroll to latest" onClick = { scrollToLatest } />
113
121
{ evidences ?. realEvidences ? (
114
- evidences ?. realEvidences . map (
115
- ( { evidence, sender, timestamp, transactionHash, name, description, fileURI, evidenceIndex } ) => (
116
- < EvidenceCard
117
- key = { timestamp }
118
- index = { parseInt ( evidenceIndex ) }
119
- sender = { sender ?. id }
120
- { ...{ evidence, timestamp, transactionHash, name, description, fileURI } }
121
- />
122
- )
123
- )
124
- ) : (
125
- < SkeletonEvidenceCard />
126
- ) }
127
- { evidences ?. spamEvidences . length !== 0 ? (
128
122
< >
129
- < Divider />
130
- { showSpam ? (
131
- evidences ?. spamEvidences . map (
132
- ( { evidence, sender, timestamp, transactionHash, name, description, fileURI, evidenceIndex } ) => (
133
- < EvidenceCard
134
- key = { timestamp }
135
- index = { parseInt ( evidenceIndex ) }
136
- sender = { sender ?. id }
137
- { ...{ evidence, timestamp, transactionHash, name, description, fileURI } }
138
- />
139
- )
123
+ { evidences ?. realEvidences . map (
124
+ ( { evidence, sender, timestamp, transactionHash, name, description, fileURI, evidenceIndex } ) => (
125
+ < EvidenceCard
126
+ key = { timestamp }
127
+ index = { parseInt ( evidenceIndex ) }
128
+ sender = { sender ?. id }
129
+ { ...{ evidence, timestamp, transactionHash, name, description, fileURI } }
130
+ />
140
131
)
141
- ) : (
142
- < SpamLabel onClick = { ( ) => setShowSpam ( true ) } > Show likely spam</ SpamLabel >
143
132
) }
133
+ { spamEvidences && evidences ?. spamEvidences . length !== 0 ? (
134
+ < >
135
+ < Divider />
136
+ { showSpam ? (
137
+ < >
138
+ < SpamLabel onClick = { ( ) => setShowSpam ( false ) } > Hide spam</ SpamLabel >
139
+ { evidences ?. spamEvidences . map (
140
+ ( { evidence, sender, timestamp, transactionHash, name, description, fileURI, evidenceIndex } ) => (
141
+ < EvidenceCard
142
+ key = { timestamp }
143
+ index = { parseInt ( evidenceIndex ) }
144
+ sender = { sender ?. id }
145
+ { ...{ evidence, timestamp, transactionHash, name, description, fileURI } }
146
+ />
147
+ )
148
+ ) }
149
+ </ >
150
+ ) : (
151
+ < SpamLabel onClick = { ( ) => setShowSpam ( true ) } > Show likely spam</ SpamLabel >
152
+ ) }
153
+ </ >
154
+ ) : null }
144
155
</ >
145
- ) : null }
156
+ ) : (
157
+ < SkeletonEvidenceCard />
158
+ ) }
159
+
146
160
{ data && data . evidences . length === 0 ? < StyledLabel > There is no evidence submitted yet</ StyledLabel > : null }
147
161
</ Container >
148
162
) ;
149
163
} ;
150
164
151
- const isSpam = ( id : string ) => {
152
- return spamEvidencesIds . includes ( id ) ;
153
- } ;
154
-
155
165
export default Evidence ;
0 commit comments