1- import React , { useCallback , useRef , useState } from "react" ;
1+ import React , { useCallback , useMemo , useRef , useState } from "react" ;
22import styled from "styled-components" ;
33
44import { useParams } from "react-router-dom" ;
@@ -17,6 +17,8 @@ import EvidenceCard from "components/EvidenceCard";
1717import { SkeletonEvidenceCard } from "components/StyledSkeleton" ;
1818
1919import EvidenceSearch from "./EvidenceSearch" ;
20+ import { Divider } from "components/Divider" ;
21+ import { spamEvidencesIds } from "src/consts" ;
2022
2123const Container = styled . div `
2224 width: 100%;
@@ -54,12 +56,19 @@ const ScrollButton = styled(Button)`
5456 }
5557` ;
5658
59+ const SpamLabel = styled . label `
60+ color: ${ ( { theme } ) => theme . primaryBlue } ;
61+ align-self: center;
62+ cursor: pointer;
63+ ` ;
64+
5765const Evidence : React . FC = ( ) => {
5866 const { id } = useParams ( ) ;
5967 const { data : disputeData } = useDisputeDetailsQuery ( id ) ;
6068 const ref = useRef < HTMLDivElement > ( null ) ;
6169 const [ search , setSearch ] = useState < string > ( ) ;
6270 const [ debouncedSearch , setDebouncedSearch ] = useState < string > ( ) ;
71+ const [ showSpam , setShowSpam ] = useState ( false ) ;
6372
6473 const { data } = useEvidences ( disputeData ?. dispute ?. externalDisputeId ?. toString ( ) , debouncedSearch ) ;
6574
@@ -74,12 +83,22 @@ const Evidence: React.FC = () => {
7483 latestEvidence . scrollIntoView ( { behavior : "smooth" } ) ;
7584 } , [ ref ] ) ;
7685
86+ console . log ( { data } ) ;
87+
88+ const evidences = useMemo ( ( ) => {
89+ if ( ! data ?. evidences ) return ;
90+ const spamEvidences = data . evidences . filter ( ( evidence ) => isSpam ( evidence . id ) ) ;
91+ const realEvidences = data . evidences . filter ( ( evidence ) => ! isSpam ( evidence . id ) ) ;
92+ return { realEvidences, spamEvidences } ;
93+ } , [ data ] ) ;
94+ console . log ( { evidences } ) ;
95+
7796 return (
7897 < Container ref = { ref } >
7998 < EvidenceSearch { ...{ search, setSearch, evidenceGroup : disputeData ?. dispute ?. externalDisputeId } } />
8099 < ScrollButton small Icon = { DownArrow } text = "Scroll to latest" onClick = { scrollToLatest } />
81- { data ? (
82- data . evidences . map ( ( { evidence, sender, timestamp, name, description, fileURI, evidenceIndex } ) => (
100+ { evidences ?. realEvidences ? (
101+ evidences ?. realEvidences . map ( ( { evidence, sender, timestamp, name, description, fileURI, evidenceIndex } ) => (
83102 < EvidenceCard
84103 key = { timestamp }
85104 index = { parseInt ( evidenceIndex ) }
@@ -90,9 +109,36 @@ const Evidence: React.FC = () => {
90109 ) : (
91110 < SkeletonEvidenceCard />
92111 ) }
112+ { evidences ?. spamEvidences . length !== 0 ? (
113+ < >
114+ < Divider />
115+ { showSpam ? (
116+ evidences ?. spamEvidences . map (
117+ ( { evidence, sender, timestamp, name, description, fileURI, evidenceIndex } ) => (
118+ < EvidenceCard
119+ key = { timestamp }
120+ index = { parseInt ( evidenceIndex ) }
121+ sender = { sender ?. id }
122+ { ...{ evidence, timestamp, name, description, fileURI } }
123+ />
124+ )
125+ )
126+ ) : (
127+ < SpamLabel onClick = { ( ) => setShowSpam ( true ) } > Show likely spam</ SpamLabel >
128+ ) }
129+ </ >
130+ ) : null }
93131 { data && data . evidences . length === 0 ? < StyledLabel > There is no evidence submitted yet</ StyledLabel > : null }
94132 </ Container >
95133 ) ;
96134} ;
97135
136+ const isSpam = ( id : string ) => {
137+ for ( const spamId of spamEvidencesIds ) {
138+ if ( id == spamId ) return true ;
139+ }
140+
141+ return false ;
142+ } ;
143+
98144export default Evidence ;
0 commit comments