@@ -21,6 +21,7 @@ const types = [
21
21
22
22
export default function Challenges ( { location } ) {
23
23
const [ challenges , setChallenges ] = useState ( [ ] ) ;
24
+ const [ filteredChallenges , setFilteredChallenges ] = useState ( [ ] ) ;
24
25
const [ loading , setLoading ] = useState ( true ) ;
25
26
const [ languageFilter , setLanguageFilter ] = useState ( '' ) ;
26
27
const [ typeFilter , setTypeFilter ] = useState ( location . search . split ( '=' ) [ 1 ] ) ;
@@ -32,20 +33,38 @@ export default function Challenges({ location }) {
32
33
useEffect ( ( ) => {
33
34
window . scrollTo ( 0 , 0 ) ;
34
35
async function loadChallenges ( ) {
35
- let response = [ ] ;
36
- if ( typeFilter ) {
37
- const type = capitalize ( typeFilter ) ;
38
- response = await api . get ( `/challenges/?type=${ type } ` ) ;
39
- } else {
40
- response = await api . get ( '/challenges' ) ;
41
- }
36
+ const response = await api . get ( '/challenges' ) ;
37
+
42
38
setChallenges ( response . data ) ;
39
+ setFilteredChallenges ( response . data ) ;
43
40
44
41
setLoading ( false ) ;
45
42
}
46
43
47
44
loadChallenges ( ) ;
48
- } , [ location , typeFilter , languageFilter ] ) ;
45
+ } , [ location ] ) ;
46
+
47
+ useEffect ( ( ) => {
48
+ let filtered = challenges ;
49
+ if ( typeFilter ) {
50
+ filtered = filtered . filter (
51
+ ( challenge ) =>
52
+ challenge . type . toLowerCase ( ) === typeFilter . toLowerCase ( )
53
+ ) ;
54
+ }
55
+ if ( languageFilter ) {
56
+ filtered = filtered . filter ( ( challenge ) => {
57
+ const [ techs ] = challenge . techs ;
58
+ const serializedTechs = techs . split ( ', ' ) ;
59
+ const hasSelectedTech =
60
+ serializedTechs . includes ( languageFilter ) ||
61
+ serializedTechs . includes ( 'Free Choice' ) ;
62
+
63
+ return hasSelectedTech ;
64
+ } ) ;
65
+ }
66
+ setFilteredChallenges ( filtered ) ;
67
+ } , [ typeFilter , languageFilter , challenges ] ) ;
49
68
50
69
return (
51
70
< >
@@ -97,7 +116,7 @@ export default function Challenges({ location }) {
97
116
{ loading && < ChallengesSkeleton /> }
98
117
{ ! loading && (
99
118
< S . Section >
100
- { challenges . map ( ( challenge ) => {
119
+ { filteredChallenges . map ( ( challenge ) => {
101
120
return (
102
121
< ChallengeCard
103
122
challenge = { challenge }
0 commit comments