Skip to content

Commit 77cbec2

Browse files
authored
Merge pull request #75 from IncognitaDev/reduce-request
fix many request
2 parents 3811921 + bd352c0 commit 77cbec2

File tree

3 files changed

+33
-11
lines changed

3 files changed

+33
-11
lines changed

frontend/.env

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
REACT_APP_API_URL=http://localhost:3333
1+
REACT_APP_DEVCHALLENGE_API=http://localhost:3333

frontend/src/components/ChallengeCard/index.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ function ChallengeCard({ challenge, progress, redirect, buttonText }) {
3939
<S.CardImage>
4040
<S.CardTechs>
4141
{techs.map((item) => (
42-
<p className="tech" key={item}>
42+
<p
43+
className="tech"
44+
key={`${item}-${challenge._id}`}
45+
>
4346
{item}
4447
</p>
4548
))}

frontend/src/pages/Challenges/index.js

+28-9
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const types = [
2121

2222
export default function Challenges({ location }) {
2323
const [challenges, setChallenges] = useState([]);
24+
const [filteredChallenges, setFilteredChallenges] = useState([]);
2425
const [loading, setLoading] = useState(true);
2526
const [languageFilter, setLanguageFilter] = useState('');
2627
const [typeFilter, setTypeFilter] = useState(location.search.split('=')[1]);
@@ -32,20 +33,38 @@ export default function Challenges({ location }) {
3233
useEffect(() => {
3334
window.scrollTo(0, 0);
3435
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+
4238
setChallenges(response.data);
39+
setFilteredChallenges(response.data);
4340

4441
setLoading(false);
4542
}
4643

4744
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]);
4968

5069
return (
5170
<>
@@ -97,7 +116,7 @@ export default function Challenges({ location }) {
97116
{loading && <ChallengesSkeleton />}
98117
{!loading && (
99118
<S.Section>
100-
{challenges.map((challenge) => {
119+
{filteredChallenges.map((challenge) => {
101120
return (
102121
<ChallengeCard
103122
challenge={challenge}

0 commit comments

Comments
 (0)