Skip to content

Commit d6b6105

Browse files
committed
Clean up
1 parent c987e0e commit d6b6105

17 files changed

+113
-351
lines changed

components/BinaryCode.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export const BinaryCode = () => {
2+
return (
3+
<div
4+
className="opacity-20 text-vanilla-100 font-bold font-['Inter']"
5+
style={{ position: "relative",paddingLeft: "70%", top: "-300px" }}
6+
><p style={{fontSize:48}}>
7+
01111001010111100101
8+
<br /> 110111010110111100101
9+
<br /> 1101110101101111001{" "}
10+
<br />
11+
<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10111100101</p>
12+
</div>
13+
);
14+
};

components/GeneralFilter.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
type GeneralFilterProps = {
2+
filter: string | number | readonly string[] | undefined;
3+
setFilter: (filter: string | number | readonly string[] | undefined) => void;
4+
};
5+
6+
export const GeneralFilter = ({ filter, setFilter }: GeneralFilterProps) => {
7+
return (
8+
<input type="text" value={filter} onChange={(e) => setFilter(e.target.value)} placeholder="Search Repositories" className="flex-1 mx-2 border rounded-sm p-2 mb-4" />
9+
);
10+
};

components/HappyCommitsInfo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export const HappyCommitsInfo = () => {
22
return (
3-
<div style={{ paddingLeft: "10%", paddingBottom: "3%" }}>
3+
<div style={{ paddingLeft: "10%" }}>
44
<div style={{ width: 541, height: 291, flexDirection: "column" }}>
55
<div
66
style={{

components/HeroContainer.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
import { GitHubIcon } from "./GitHubIcon";
22
import { HappyCommitsInfo } from "./HappyCommitsInfo";
3+
import { BinaryCode } from "./BinaryCode";
34

45
export const HeroContainer = () => {
56
return (
67
<>
78
<div
89
style={{
910
background:
10-
"linear-gradient(278deg, #26C6D0 10%, #4F5BE3 40%, #604FDD 53%, #4B449A 77%, #3A3A62 98%)"
11+
"linear-gradient(278deg, #26C6D0 10%, #4F5BE3 40%, #604FDD 53%, #4B449A 77%, #3A3A62 98%)",
12+
overflowX: "hidden", height: 520, overflow: "hidden"
1113
}}
1214
>
1315
<GitHubIcon />
1416
<HappyCommitsInfo />
17+
<BinaryCode />
1518
</div>
1619
</>
1720
);

components/LanguageFilter.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Select from "react-select";
2+
3+
type LanguageFilterProps = {
4+
setSelectedLanguages: (languages: string[]) => void;
5+
languageOptions: { value: string; label: string }[];
6+
};
7+
8+
export const LanguageFilter = ({ setSelectedLanguages, languageOptions }: LanguageFilterProps) => {
9+
return (
10+
<>
11+
<label className="p-2">Filter by Language</label>
12+
<Select isMulti closeMenuOnSelect={false} className="flex-1 mx-2 rounded-sm p-2 mb-4" onChange={(selectedOptions) => setSelectedLanguages(selectedOptions.map((option) => option.value))} options={languageOptions} classNamePrefix="select" />
13+
</>
14+
);
15+
};

components/RepositoryList.tsx

Lines changed: 21 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,20 @@ import { faCircleNotch } from "@fortawesome/free-solid-svg-icons";
22
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
33
import React, { useState } from "react";
44
import InfiniteScroll from "react-infinite-scroll-component";
5-
import Select from "react-select";
6-
5+
import { IndexedTopics } from "../topics";
76
import { Repository } from "../types";
87
import { RepositoryItem } from "./RepositoryItem";
8+
import { GeneralFilter } from "./GeneralFilter";
9+
import { LanguageFilter } from "./LanguageFilter";
10+
import { SDGFilter } from "./SDGFilter";
911

1012
type RepositoryListProps = {
1113
repositories: Repository[];
1214
};
1315

14-
const indexedTopics: { [key: string]: string } = {
15-
"sdg-1": "SDG-1 - No Poverty",
16-
"sdg-2": "SDG-2 - Zero Hunger",
17-
"sdg-3": "SDG-3 - Good Health And Well-Being",
18-
"sdg-4": "SDG-4 - Quality Education",
19-
"sdg-5": "SDG-5 - Gender Equality",
20-
"sdg-6": "SDG-6 - Clean Water and Sanitation",
21-
"sdg-7": "SDG-7 - Affordable and Clean Energy",
22-
"sdg-8": "SDG-8 - Decent Work and Economic Growth",
23-
"sdg-9": "SDG-9 - Industry, Innovation, and Infrastructure",
24-
"sdg-10": "SDG-10 - Reduced Inequalities",
25-
"sdg-11": "SDG-11 - Sustainable Cities and Communities",
26-
"sdg-12": "SDG-12 - Responsible Consumption and Production",
27-
"sdg-13": "SDG-13 - Climate Action",
28-
"sdg-14": "SDG-14 - Life Below Water",
29-
"sdg-15": "SDG-15 - Life on Land",
30-
"sdg-16": "SDG-16 - Peace, Justice, and Strong Institutions",
31-
"sdg-17": "SDG-17 - Partnerships for the Goals"
32-
};
33-
3416
const Loader = () => (
35-
<div className="p-4 w-full">
36-
<div className="flex items-center justify-center">
37-
<FontAwesomeIcon icon={faCircleNotch} className="fa-spin" />
38-
</div>
17+
<div className="p-4 w-full flex items-center justify-center">
18+
<FontAwesomeIcon icon={faCircleNotch} className="fa-spin" />
3919
</div>
4020
);
4121

@@ -46,89 +26,33 @@ export const RepositoryList = ({ repositories }: RepositoryListProps) => {
4626
const [selectedLanguages, setSelectedLanguages] = useState<string[]>([]);
4727
const [selectedTopics, setSelectedTopics] = useState<string[]>([]);
4828

49-
console.log(selectedTopics);
5029
const filteredRepositories = repositories.filter((repository) => {
51-
const languageFilter =
52-
selectedLanguages.length === 0 || selectedLanguages.includes(repository.language.display);
53-
54-
const topicFilter =
55-
selectedTopics.length === 0 ||
56-
selectedTopics.some((value) => repository.topics?.some((topic) => topic.display === value));
57-
58-
const nameFilter = Object.values(repository).some((value) => {
59-
if (value === null) {
60-
return false;
61-
}
62-
return value.toString().toLowerCase().includes(filter.toLowerCase());
63-
});
64-
30+
const languageFilter = selectedLanguages.length === 0 || selectedLanguages.includes(repository.language.display);
31+
const topicFilter = selectedTopics.length === 0 || repository.topics?.some((topic) => selectedTopics.includes(topic.display));
32+
const nameFilter = Object.values(repository).some((value) => value && value.toString().toLowerCase().includes(filter.toLowerCase()));
6533
return languageFilter && nameFilter && topicFilter;
6634
});
6735

68-
const allLanguages = repositories.map((repository) => repository.language.display);
69-
const uniqueLanguages = allLanguages.filter(
70-
(language, index) => allLanguages.indexOf(language) === index
71-
);
72-
const languageOptions = uniqueLanguages.map((language) => ({
73-
value: language,
74-
label: language
75-
}));
36+
const uniqueLanguages = [...new Set(repositories.map((repository) => repository.language.display))];
37+
const languageOptions = uniqueLanguages.map((language) => ({ value: language, label: language }));
38+
39+
const uniqueTopics = [...new Set(repositories.flatMap((repository) => repository.topics?.map((topic) => topic.display) ?? []))].sort((a, b) => parseInt(a.slice(4)) - parseInt(b.slice(4)));
40+
const topicOptions = uniqueTopics.map((topic) => ({ value: topic, label: IndexedTopics[topic] }));
7641

77-
const topicList = repositories.map((repository) => repository.topics);
78-
const allTopics = topicList.map((repos) => repos?.map((topic) => topic.display)) ?? [];
79-
const uniqueTopics = allTopics
80-
.filter((topic, index) => allTopics.indexOf(topic) === index)
81-
.flat();
82-
const topicOptions = uniqueTopics.map((topic) => ({
83-
value: topic,
84-
label: indexedTopics[topic ?? ""]
85-
}));
42+
const loadMoreItems = () => setItems(items + itemsPerScroll);
43+
const hasMoreItems = items < filteredRepositories.length;
8644

8745
return (
8846
<main className="grow">
8947
<div className="p-4 w-full">
9048
<div className="flex flex-wrap">
91-
<input
92-
type="text"
93-
value={filter}
94-
onChange={(e) => setFilter(e.target.value)}
95-
placeholder="Search Repositories"
96-
className="flex-1 mx-2 border rounded-sm p-2 mb-4"
97-
/>
98-
<label className="p-2">Filter by Language</label>
99-
<Select
100-
isMulti
101-
closeMenuOnSelect={false}
102-
className="flex-1 mx-2 border rounded-sm p-2 mb-4"
103-
onChange={(selectedOptions) => {
104-
setSelectedLanguages(selectedOptions.map((option) => option.value));
105-
}}
106-
options={languageOptions}
107-
classNamePrefix="select"
108-
/>
109-
<label className="p-2">Sustainable Development Goal (SDG)</label>
110-
<Select
111-
isMulti
112-
className="flex-1 mx-2 border rounded-sm p-2 mb-4"
113-
options={topicOptions}
114-
getOptionLabel={(option) => option.label}
115-
getOptionValue={(option) => option.value ?? ""}
116-
onChange={(selectedOptions) => {
117-
setSelectedTopics(selectedOptions.map((option) => option.value ?? ""));
118-
}}
119-
/>
49+
<GeneralFilter filter={filter} setFilter={setFilter} />
50+
<LanguageFilter setSelectedLanguages={setSelectedLanguages} languageOptions={languageOptions} />
51+
<SDGFilter setSelectedTopics={setSelectedTopics} topicOptions={topicOptions} />
12052
</div>
12153

122-
<InfiniteScroll
123-
dataLength={items}
124-
next={() => setItems(items + itemsPerScroll)}
125-
hasMore={items < filteredRepositories.length}
126-
loader={<Loader />}
127-
>
128-
{filteredRepositories.slice(0, items).map((repository) => {
129-
const key = `${repository.id}_${new Date().getTime()}_${Math.random()}`;
130-
return <RepositoryItem key={key} repository={repository} />;
131-
})}
54+
<InfiniteScroll dataLength={items} next={loadMoreItems} hasMore={hasMoreItems} loader={<Loader />}>
55+
{filteredRepositories.slice(0, items).map((repository) => <RepositoryItem key={repository.id} repository={repository} />)}
13256
</InfiniteScroll>
13357
</div>
13458
</main>

components/SDGFilter.tsx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Select from "react-select";
2+
3+
type SDGFilterProps = {
4+
setSelectedTopics: (topics: string[]) => void;
5+
topicOptions: { value: string; label: string }[];
6+
};
7+
8+
export const SDGFilter = ({ setSelectedTopics, topicOptions }: SDGFilterProps) => {
9+
return (
10+
<>
11+
<label className="p-2">Sustainable Development Goal (SDG)</label>
12+
<Select
13+
isMulti
14+
className="flex-1 mx-2 rounded-sm p-2 mb-4"
15+
options={topicOptions}
16+
getOptionLabel={(option) => option.label}
17+
getOptionValue={(option) => option.value ?? ""}
18+
onChange={(selectedOptions) =>
19+
setSelectedTopics(selectedOptions.map((option) => option.value ?? ""))
20+
}
21+
/>
22+
</>
23+
);
24+
};

components/ShowMoreTopicsButton.tsx

Lines changed: 0 additions & 15 deletions
This file was deleted.

components/Sidebar.tsx

Lines changed: 0 additions & 43 deletions
This file was deleted.

components/SidebarAboutSection.tsx

Lines changed: 0 additions & 35 deletions
This file was deleted.

0 commit comments

Comments
 (0)