Skip to content

Commit 90ef910

Browse files
committed
Projects context data
1 parent 040997f commit 90ef910

File tree

6 files changed

+101
-35
lines changed

6 files changed

+101
-35
lines changed

src/components/ProjectsGrid.js

+28-24
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,37 @@
1+
import { useContext } from 'react';
2+
import ProjectSingle from './ProjectSingle';
13
import { FiSearch } from 'react-icons/fi';
2-
import { ProjectsData } from '../utils/ProjectsData';
4+
import { ProjectsContext } from '../store/ProjectsContext';
5+
// import { ProjectsData } from '../utils/ProjectsData';
36
import ProjectsFilter from './ProjectsFilter';
4-
import ProjectSingle from './ProjectSingle';
57

68
const ProjectsGrid = () => {
7-
const selectedProject = '';
8-
const searchProject = '';
9+
const [projects, setProjects] = useContext(ProjectsContext);
10+
11+
// const selectedProject = '';
12+
// const searchProject = '';
913

10-
const filteredProjects = () => {
11-
if (selectedProject) {
12-
return filterProjectsByCategory();
13-
} else if (searchProject) {
14-
return filterProjectsBySearch();
15-
}
16-
return ProjectsData;
17-
};
14+
// const filteredProjects = () => {
15+
// if (selectedProject) {
16+
// return filterProjectsByCategory();
17+
// } else if (searchProject) {
18+
// return filterProjectsBySearch();
19+
// }
20+
// return ProjectsData;
21+
// };
1822

19-
const filterProjectsByCategory = () => {
20-
return ProjectsData.filter((item) => {
21-
let category =
22-
item.category.charAt(0).toUpperCase() + item.category.slice(1);
23-
return category.includes(selectedProject);
24-
});
25-
};
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+
// };
2630

27-
const filterProjectsBySearch = () => {
28-
let project = new RegExp(searchProject, 'i');
29-
return ProjectsData.filter((el) => el.title.match(project));
30-
};
31+
// const filterProjectsBySearch = () => {
32+
// let project = new RegExp(searchProject, 'i');
33+
// return ProjectsData.filter((el) => el.title.match(project));
34+
// };
3135

3236
return (
3337
<section className="py-5 sm:py-10 mt-5 sm:mt-10">
@@ -117,7 +121,7 @@ const ProjectsGrid = () => {
117121

118122
{/* Projects grid start */}
119123
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 mt-6 sm:gap-10">
120-
{ProjectsData.map((project) => (
124+
{projects.map((project) => (
121125
<ProjectSingle
122126
title={project.title}
123127
category={project.category}

src/pages/Home.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import { Link } from 'react-router-dom';
22
import AppBanner from '../components/AppBanner';
33
import ProjectsGrid from '../components/ProjectsGrid';
4+
import { ProjectsProvider } from '../store/ProjectsContext';
45

56
const Home = () => {
67
return (
78
<div className="container mx-auto">
89
<AppBanner></AppBanner>
9-
<ProjectsGrid></ProjectsGrid>
10+
11+
<ProjectsProvider>
12+
<ProjectsGrid></ProjectsGrid>
13+
</ProjectsProvider>
14+
1015
<div class="mt-10 sm:mt-15 flex justify-center">
1116
<Link
1217
to="/projects"

src/pages/ProjectSingle.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@ import ProjectGallery from '../components/ProjectGallery';
22
import ProjectHeader from '../components/ProjectHeader';
33
import ProjectInfo from '../components/ProjectInfo';
44
import ProjectRelatedProjects from '../components/ProjectRelatedProjects';
5+
import { ProjectsProvider } from '../store/ProjectsContext';
56

67
const ProjectSingle = () => {
78
return (
89
<div className="container mx-auto mt-5 sm:mt-10">
9-
<ProjectHeader />
10-
<ProjectGallery />
11-
<ProjectInfo />
12-
<ProjectRelatedProjects />
10+
<ProjectsProvider>
11+
<ProjectHeader />
12+
<ProjectGallery />
13+
<ProjectInfo />
14+
<ProjectRelatedProjects />
15+
</ProjectsProvider>
1316
</div>
1417
);
1518
};

src/pages/Projects.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import ProjectsGrid from '../components/ProjectsGrid';
2+
import { ProjectsProvider } from '../store/ProjectsContext';
23

34
const Projects = () => {
45
return (
5-
<div className="container mx-auto">
6-
<ProjectsGrid />
7-
</div>
6+
<ProjectsProvider>
7+
<div className="container mx-auto">
8+
<ProjectsGrid />
9+
</div>
10+
</ProjectsProvider>
811
);
912
};
1013

src/store/ProjectsContext.js

+54-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,64 @@
11
import { useState, createContext } from 'react';
22

3+
// Import images
4+
import WebImage1 from '../images/web-project-1.jpg';
5+
import WebImage2 from '../images/web-project-2.jpg';
6+
import MobileImage1 from '../images/mobile-project-1.jpg';
7+
import MobileImage2 from '../images/mobile-project-2.jpg';
8+
import UIImage1 from '../images/ui-project-1.jpg';
9+
import UIImage2 from '../images/ui-project-2.jpg';
10+
11+
// Create projects context
312
export const ProjectsContext = createContext();
413

14+
// Create the projects context provider
515
export const ProjectsProvider = (props) => {
6-
const [projects, setProjects] = useState();
16+
const [projects, setProjects] = useState([
17+
{
18+
id: 1,
19+
title: 'Google Health Platform',
20+
category: 'Web Application',
21+
img: WebImage2,
22+
ProjectHeader: {
23+
title: 'Project Management UI - From Context',
24+
publishDate: 'Jul 26, 2021',
25+
tags: 'UI / Frontend',
26+
},
27+
},
28+
{
29+
id: 2,
30+
title: 'Phoenix Digital Agency',
31+
category: 'Mobile Application',
32+
img: MobileImage2,
33+
},
34+
{
35+
id: 3,
36+
title: 'Project Management UI',
37+
category: 'UI/UX Design',
38+
img: UIImage1,
39+
},
40+
{
41+
id: 4,
42+
title: 'Cloud Storage Platform',
43+
category: 'UI/UX Design',
44+
img: UIImage2,
45+
},
46+
{
47+
id: 5,
48+
title: 'React Social App',
49+
category: 'Mobile Application',
50+
img: MobileImage1,
51+
},
52+
{
53+
id: 6,
54+
title: 'Apple Design System',
55+
category: 'Web Application',
56+
img: WebImage1,
57+
},
58+
]);
759

860
return (
9-
<ProjectsContext.Provider values={[projects, setProjects]}>
61+
<ProjectsContext.Provider value={[projects, setProjects]}>
1062
{props.children}
1163
</ProjectsContext.Provider>
1264
);

src/utils/SingleProjectData.js

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import Image4 from '../images/mobile-project-1.jpg';
55
import Image5 from '../images/web-project-1.jpg';
66
import Image6 from '../images/ui-project-2.jpg';
77
import {
8-
FiDribbble,
98
FiFacebook,
109
FiInstagram,
1110
FiLinkedin,

0 commit comments

Comments
 (0)