Skip to content

Commit d148867

Browse files
committed
Search and filter funcitonality
1 parent 61621e1 commit d148867

File tree

3 files changed

+76
-39
lines changed

3 files changed

+76
-39
lines changed

src/components/projects/ProjectsFilter.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ const selectOptions = [
22
'Web Application',
33
'Mobile Application',
44
'UI/UX Design',
5-
'Branding',
5+
'Branding & Graphics',
66
];
77

8-
const ProjectsFilter = () => {
8+
const ProjectsFilter = ({ setSelectProject }) => {
99
return (
1010
<select
11+
onChange={(e) => {
12+
setSelectProject(e.target.value);
13+
}}
1114
className="
1215
px-4
1316
sm:px-6
@@ -24,7 +27,7 @@ const ProjectsFilter = () => {
2427
dark:text-ternary-light
2528
"
2629
>
27-
<option value className="text-sm sm:text-md">
30+
<option value={setSelectProject} className="text-sm sm:text-md">
2831
All Projects
2932
</option>
3033

src/components/projects/ProjectsGrid.js

+57-35
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,37 @@ import { ProjectsContext } from '../../context/ProjectsContext';
55
import ProjectsFilter from './ProjectsFilter';
66

77
const ProjectsGrid = () => {
8-
const { setSearchProject, searchProjectsByTitle } =
9-
useContext(ProjectsContext);
8+
const {
9+
projects,
10+
searchProject,
11+
setSearchProject,
12+
searchProjectsByTitle,
13+
selectProject,
14+
setSelectProject,
15+
selectProjectsByCategory,
16+
} = useContext(ProjectsContext);
1017

11-
// const selectedProject = '';
12-
// const searchProject = '';
13-
14-
// const filteredProjects = () => {
15-
// if (selectedProject) {
16-
// return filterProjectsByCategory();
17-
// } else if (searchProject) {
18-
// return filterProjectsBySearch();
19-
// }
20-
// return ProjectsData;
21-
// };
22-
23-
// const filterProjectsByCategory = () => {
24-
// return ProjectsData.filter((item) => {
25-
// let category =
26-
// item.category.charAt(0).toUpperCase() + item.category.slice(1);
27-
// return category.includes(selectedProject);
28-
// });
29-
// };
30-
31-
// const filterProjectsBySearch = () => {
32-
// let project = new RegExp(searchProject, 'i');
33-
// return ProjectsData.filter((el) => el.title.match(project));
34-
// };
18+
const projectsResult = () => {
19+
if (setSearchProject) {
20+
return searchProjectsByTitle.map((project) => (
21+
<ProjectSingle
22+
title={project.title}
23+
category={project.category}
24+
image={project.img}
25+
key={project.id}
26+
/>
27+
));
28+
} else if (setSelectProject) {
29+
return selectProjectsByCategory.map((project) => (
30+
<ProjectSingle
31+
title={project.title}
32+
category={project.category}
33+
image={project.img}
34+
key={project.id}
35+
/>
36+
));
37+
}
38+
};
3539

3640
return (
3741
<section className="py-5 sm:py-10 mt-5 sm:mt-10">
@@ -116,22 +120,40 @@ const ProjectsGrid = () => {
116120
</div>
117121
{/* <ProjectsFilter @change="selectedProject = $event" /> */}
118122

119-
<ProjectsFilter />
123+
<ProjectsFilter setSelectProject={setSelectProject} />
120124
{/* <p>Filter projects</p> */}
121125
</div>
122126
</div>
123127
{/* Filter and search projects end */}
124128

125129
{/* Projects grid start */}
126130
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 mt-6 sm:gap-10">
127-
{searchProjectsByTitle.map((project) => (
128-
<ProjectSingle
129-
title={project.title}
130-
category={project.category}
131-
image={project.img}
132-
key={project.id}
133-
/>
134-
))}
131+
{selectProject
132+
? selectProjectsByCategory.map((project) => (
133+
<ProjectSingle
134+
title={project.title}
135+
category={project.category}
136+
image={project.img}
137+
key={project.id}
138+
/>
139+
))
140+
: searchProject
141+
? searchProjectsByTitle.map((project) => (
142+
<ProjectSingle
143+
title={project.title}
144+
category={project.category}
145+
image={project.img}
146+
key={project.id}
147+
/>
148+
))
149+
: projects.map((project) => (
150+
<ProjectSingle
151+
title={project.title}
152+
category={project.category}
153+
image={project.img}
154+
key={project.id}
155+
/>
156+
))}
135157
</div>
136158
{/* Projects grid end */}
137159
</section>

src/context/ProjectsContext.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,33 @@ export const ProjectsContext = createContext();
88
export const ProjectsProvider = (props) => {
99
const [projects, setProjects] = useState(projectsData);
1010
const [searchProject, setSearchProject] = useState('');
11+
const [selectProject, setSelectProject] = useState('');
1112

12-
// Search projects
13+
// Search projects by project title
1314
const searchProjectsByTitle = projects.filter((item) => {
1415
if (item.title.toLowerCase().includes(searchProject.toLowerCase()))
1516
return item;
1617
else if (searchProject === '') return item;
1718
});
1819

20+
// Select projects by project category
21+
const selectProjectsByCategory = projects.filter((item) => {
22+
let category =
23+
item.category.charAt(0).toUpperCase() + item.category.slice(1);
24+
return category.includes(selectProject);
25+
});
26+
1927
return (
2028
<ProjectsContext.Provider
2129
value={{
2230
projects,
2331
setProjects,
32+
searchProject,
2433
setSearchProject,
2534
searchProjectsByTitle,
35+
selectProject,
36+
setSelectProject,
37+
selectProjectsByCategory,
2638
}}
2739
>
2840
{props.children}

0 commit comments

Comments
 (0)