@@ -207,7 +207,9 @@ const Blog = ({ loading }) => {
};
Blog.propTypes = {
- loading: PropTypes.bool,
+ loading: PropTypes.bool.isRequired,
+ blog: PropTypes.object.isRequired,
+ googleAnalytics: PropTypes.object.isRequired,
};
export default Blog;
diff --git a/src/components/details/index.jsx b/src/components/details/index.jsx
index e18dcbf..6850ae8 100644
--- a/src/components/details/index.jsx
+++ b/src/components/details/index.jsx
@@ -14,7 +14,6 @@ import {
} from 'react-icons/fa';
import PropTypes from 'prop-types';
import { skeleton } from '../../helpers/utils';
-import config from '../../../gitprofile.config';
const ListItem = ({ icon, title, value, link, skeleton = false }) => {
return (
@@ -43,7 +42,7 @@ const ListItem = ({ icon, title, value, link, skeleton = false }) => {
);
};
-const Details = ({ profile, loading }) => {
+const Details = ({ profile, loading, social, github }) => {
const renderSkeleton = () => {
let array = [];
for (let index = 0; index < 4; index++) {
@@ -86,99 +85,89 @@ const Details = ({ profile, loading }) => {
}
title="GitHub:"
- value={config.github.username}
- link={`https://github.com/${config.github.username}`}
+ value={github.username}
+ link={`https://github.com/${github.username}`}
/>
- {typeof config.social.twitter !== 'undefined' &&
- config.social.twitter && (
- }
- title="Twitter:"
- value={config.social.twitter}
- link={`https://twitter.com/${config.social.twitter}`}
- />
- )}
- {typeof config.social.linkedin !== 'undefined' &&
- config.social.linkedin && (
- }
- title="LinkedIn:"
- value={config.social.linkedin}
- link={`https://www.linkedin.com/in/${config.social.linkedin}`}
- />
- )}
- {typeof config.social.dribbble !== 'undefined' &&
- config.social.dribbble && (
- }
- title="Dribbble:"
- value={config.social.dribbble}
- link={`https://dribbble.com/${config.social.dribbble}`}
- />
- )}
- {typeof config.social.behance !== 'undefined' &&
- config.social.behance && (
- }
- title="Behance:"
- value={config.social.behance}
- link={`https://www.behance.net/${config.social.behance}`}
- />
- )}
- {typeof config.social.facebook !== 'undefined' &&
- config.social.facebook && (
- }
- title="Facebook:"
- value={config.social.facebook}
- link={`https://www.facebook.com/${config.social.facebook}`}
- />
- )}
- {typeof config.social.medium !== 'undefined' &&
- config.social.medium && (
- }
- title="Medium:"
- value={config.social.medium}
- link={`https://medium.com/@${config.social.medium}`}
- />
- )}
- {typeof config.social.devto !== 'undefined' &&
- config.social.devto && (
- }
- title="Dev:"
- value={config.social.devto}
- link={`https://dev.to/${config.social.devto}`}
- />
- )}
- {typeof config.social.website !== 'undefined' &&
- config.social.website && (
- }
- title="Website:"
- value={config.social.website}
- link={config.social.website}
- />
- )}
- {typeof config.social.phone !== 'undefined' &&
- config.social.phone && (
- }
- title="Phone:"
- value={config.social.phone}
- link={`tel:${config.social.phone}`}
- />
- )}
- {typeof config.social.email !== 'undefined' &&
- config.social.email && (
- }
- title="Email:"
- value={config.social.email}
- link={`mailto:${config.social.email}`}
- />
- )}
+ {typeof social.twitter !== 'undefined' && social.twitter && (
+ }
+ title="Twitter:"
+ value={social.twitter}
+ link={`https://twitter.com/${social.twitter}`}
+ />
+ )}
+ {typeof social.linkedin !== 'undefined' && social.linkedin && (
+ }
+ title="LinkedIn:"
+ value={social.linkedin}
+ link={`https://www.linkedin.com/in/${social.linkedin}`}
+ />
+ )}
+ {typeof social.dribbble !== 'undefined' && social.dribbble && (
+ }
+ title="Dribbble:"
+ value={social.dribbble}
+ link={`https://dribbble.com/${social.dribbble}`}
+ />
+ )}
+ {typeof social.behance !== 'undefined' && social.behance && (
+ }
+ title="Behance:"
+ value={social.behance}
+ link={`https://www.behance.net/${social.behance}`}
+ />
+ )}
+ {typeof social.facebook !== 'undefined' && social.facebook && (
+ }
+ title="Facebook:"
+ value={social.facebook}
+ link={`https://www.facebook.com/${social.facebook}`}
+ />
+ )}
+ {typeof social.medium !== 'undefined' && social.medium && (
+ }
+ title="Medium:"
+ value={social.medium}
+ link={`https://medium.com/@${social.medium}`}
+ />
+ )}
+ {typeof social.devto !== 'undefined' && social.devto && (
+ }
+ title="Dev:"
+ value={social.devto}
+ link={`https://dev.to/${social.devto}`}
+ />
+ )}
+ {typeof social.website !== 'undefined' && social.website && (
+ }
+ title="Website:"
+ value={social.website}
+ link={social.website}
+ />
+ )}
+ {typeof social.phone !== 'undefined' && social.phone && (
+ }
+ title="Phone:"
+ value={social.phone}
+ link={`tel:${social.phone}`}
+ />
+ )}
+ {typeof social.email !== 'undefined' && social.email && (
+ }
+ title="Email:"
+ value={social.email}
+ link={`mailto:${social.email}`}
+ />
+ )}
)}
@@ -189,7 +178,9 @@ const Details = ({ profile, loading }) => {
Details.propTypes = {
profile: PropTypes.object,
- loading: PropTypes.bool,
+ loading: PropTypes.bool.isRequired,
+ social: PropTypes.object.isRequired,
+ github: PropTypes.object.isRequired,
};
ListItem.propTypes = {
diff --git a/src/components/education/index.jsx b/src/components/education/index.jsx
index e817c4c..e959df7 100644
--- a/src/components/education/index.jsx
+++ b/src/components/education/index.jsx
@@ -1,7 +1,6 @@
import { skeleton } from '../../helpers/utils';
import { Fragment } from 'react';
import PropTypes from 'prop-types';
-import config from '../../../gitprofile.config';
const ListItem = ({ time, degree, institution }) => (
@@ -15,7 +14,7 @@ const ListItem = ({ time, degree, institution }) => (
);
-const Education = ({ loading }) => {
+const Education = ({ loading, education }) => {
const renderSkeleton = () => {
let array = [];
for (let index = 0; index < 2; index++) {
@@ -41,46 +40,46 @@ const Education = ({ loading }) => {
return (
<>
- {typeof config.education !== 'undefined' &&
- config.education.length !== 0 && (
-
-
-
-
- {loading ? (
- skeleton({ width: 'w-32', height: 'h-8' })
- ) : (
- Education
- )}
-
-
-
-
- {loading ? (
- renderSkeleton()
- ) : (
-
- {config.education.map((item, index) => (
-
- ))}
-
- )}
-
-
+ {typeof education !== 'undefined' && education.length !== 0 && (
+
+
+
+
+ {loading ? (
+ skeleton({ width: 'w-32', height: 'h-8' })
+ ) : (
+ Education
+ )}
+
+
+
+
+ {loading ? (
+ renderSkeleton()
+ ) : (
+
+ {education.map((item, index) => (
+
+ ))}
+
+ )}
+
- )}
+
+ )}
>
);
};
Education.propTypes = {
- loading: PropTypes.bool,
+ loading: PropTypes.bool.isRequired,
+ education: PropTypes.array.isRequired,
};
ListItem.propTypes = {
diff --git a/src/components/error-page/index.jsx b/src/components/error-page/index.jsx
index 458db24..37880b6 100644
--- a/src/components/error-page/index.jsx
+++ b/src/components/error-page/index.jsx
@@ -10,9 +10,9 @@ const ErrorPage = (props) => {
{props.status}
{props.title}
-
+
{props.subTitle}
-
+
@@ -25,7 +25,7 @@ const ErrorPage = (props) => {
ErrorPage.propTypes = {
status: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
- subTitle: PropTypes.string.isRequired,
+ subTitle: PropTypes.node.isRequired,
};
export default ErrorPage;
diff --git a/src/components/experience/index.jsx b/src/components/experience/index.jsx
index 9ab1b19..c3ad474 100644
--- a/src/components/experience/index.jsx
+++ b/src/components/experience/index.jsx
@@ -1,7 +1,6 @@
import { skeleton } from '../../helpers/utils';
import { Fragment } from 'react';
import PropTypes from 'prop-types';
-import config from '../../../gitprofile.config';
const ListItem = ({ time, position, company }) => (
);
-const Experience = ({ loading }) => {
+const Experience = ({ experiences, loading }) => {
const renderSkeleton = () => {
let array = [];
for (let index = 0; index < 2; index++) {
@@ -41,40 +40,39 @@ const Experience = ({ loading }) => {
return (
<>
- {typeof config.experiences !== 'undefined' &&
- config.experiences.length !== 0 && (
-