1
- import React , { useCallback , useRef , useState } from "react" ;
1
+ import React , { useCallback , useMemo , useRef , useState } from "react" ;
2
2
import styled from "styled-components" ;
3
3
4
4
import { useParams } from "react-router-dom" ;
@@ -17,6 +17,8 @@ import EvidenceCard from "components/EvidenceCard";
17
17
import { SkeletonEvidenceCard } from "components/StyledSkeleton" ;
18
18
19
19
import EvidenceSearch from "./EvidenceSearch" ;
20
+ import { Divider } from "components/Divider" ;
21
+ import { spamEvidencesIds } from "src/consts" ;
20
22
21
23
const Container = styled . div `
22
24
width: 100%;
@@ -54,12 +56,19 @@ const ScrollButton = styled(Button)`
54
56
}
55
57
` ;
56
58
59
+ const SpamLabel = styled . label `
60
+ color: ${ ( { theme } ) => theme . primaryBlue } ;
61
+ align-self: center;
62
+ cursor: pointer;
63
+ ` ;
64
+
57
65
const Evidence : React . FC = ( ) => {
58
66
const { id } = useParams ( ) ;
59
67
const { data : disputeData } = useDisputeDetailsQuery ( id ) ;
60
68
const ref = useRef < HTMLDivElement > ( null ) ;
61
69
const [ search , setSearch ] = useState < string > ( ) ;
62
70
const [ debouncedSearch , setDebouncedSearch ] = useState < string > ( ) ;
71
+ const [ showSpam , setShowSpam ] = useState ( false ) ;
63
72
64
73
const { data } = useEvidences ( disputeData ?. dispute ?. externalDisputeId ?. toString ( ) , debouncedSearch ) ;
65
74
@@ -74,12 +83,22 @@ const Evidence: React.FC = () => {
74
83
latestEvidence . scrollIntoView ( { behavior : "smooth" } ) ;
75
84
} , [ ref ] ) ;
76
85
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
+
77
96
return (
78
97
< Container ref = { ref } >
79
98
< EvidenceSearch { ...{ search, setSearch, evidenceGroup : disputeData ?. dispute ?. externalDisputeId } } />
80
99
< 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 } ) => (
83
102
< EvidenceCard
84
103
key = { timestamp }
85
104
index = { parseInt ( evidenceIndex ) }
@@ -90,9 +109,36 @@ const Evidence: React.FC = () => {
90
109
) : (
91
110
< SkeletonEvidenceCard />
92
111
) }
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 }
93
131
{ data && data . evidences . length === 0 ? < StyledLabel > There is no evidence submitted yet</ StyledLabel > : null }
94
132
</ Container >
95
133
) ;
96
134
} ;
97
135
136
+ const isSpam = ( id : string ) => {
137
+ for ( const spamId of spamEvidencesIds ) {
138
+ if ( id == spamId ) return true ;
139
+ }
140
+
141
+ return false ;
142
+ } ;
143
+
98
144
export default Evidence ;
0 commit comments