Add definition for projects

This commit is contained in:
Ariful Alam
2023-07-28 21:21:13 +06:00
parent c0d9eb7aa9
commit 3ef0ca3a14
4 changed files with 99 additions and 49 deletions

View File

@@ -15,7 +15,6 @@ const config = {
projects: [], // These projects will not be displayed. example: ['my-project1', 'my-project2'] projects: [], // These projects will not be displayed. example: ['my-project1', 'my-project2']
}, },
}, },
external: { external: {
header: 'External Projects', header: 'External Projects',
display: true, // Display external projects? display: true, // Display external projects?

View File

@@ -77,15 +77,15 @@ const GitProfile = ({ config }) => {
return; return;
} }
sanitizedConfig.github.exclude.projects.forEach((project) => { sanitizedConfig.projects.github.exclude.projects.forEach((project) => {
excludeRepo += `+-repo:${sanitizedConfig.github.username}/${project}`; excludeRepo += `+-repo:${sanitizedConfig.github.username}/${project}`;
}); });
let query = `user:${ let query = `user:${
sanitizedConfig.github.username sanitizedConfig.github.username
}+fork:${!sanitizedConfig.github.exclude.forks}${excludeRepo}`; }+fork:${!sanitizedConfig.projects.github.exclude.forks}${excludeRepo}`;
let url = `https://api.github.com/search/repositories?q=${query}&sort=${sanitizedConfig.github.sortBy}&per_page=${sanitizedConfig.github.limit}&type=Repositories`; let url = `https://api.github.com/search/repositories?q=${query}&sort=${sanitizedConfig.projects.github.sortBy}&per_page=${sanitizedConfig.projects.github.limit}&type=Repositories`;
axios axios
.get(url, { .get(url, {
@@ -236,13 +236,31 @@ GitProfile.propTypes = {
config: PropTypes.shape({ config: PropTypes.shape({
github: PropTypes.shape({ github: PropTypes.shape({
username: PropTypes.string.isRequired, username: PropTypes.string.isRequired,
sortBy: PropTypes.oneOf(['stars', 'updated']),
limit: PropTypes.number,
exclude: PropTypes.shape({
forks: PropTypes.bool,
projects: PropTypes.array,
}),
}).isRequired, }).isRequired,
projects: {
github: PropTypes.shape({
header: PropTypes.string,
display: PropTypes.bool,
sortBy: PropTypes.oneOf(['stars', 'updated']),
limit: PropTypes.number,
exclude: PropTypes.shape({
forks: PropTypes.bool,
projects: PropTypes.array,
}),
}),
projects: PropTypes.shape({
header: PropTypes.string,
display: PropTypes.bool,
projects: PropTypes.arrayOf(
PropTypes.shape({
title: PropTypes.string.isRequired,
description: PropTypes.string.isRequired,
link: PropTypes.string.isRequired,
imageUrl: PropTypes.string,
})
),
}),
},
social: PropTypes.shape({ social: PropTypes.shape({
linkedin: PropTypes.string, linkedin: PropTypes.string,
twitter: PropTypes.string, twitter: PropTypes.string,
@@ -265,14 +283,6 @@ GitProfile.propTypes = {
fileUrl: PropTypes.string, fileUrl: PropTypes.string,
}), }),
skills: PropTypes.array, skills: PropTypes.array,
externalProjects: PropTypes.arrayOf(
PropTypes.shape({
title: PropTypes.string.isRequired,
description: PropTypes.string.isRequired,
link: PropTypes.string.isRequired,
imageUrl: PropTypes.string,
})
),
experiences: PropTypes.arrayOf( experiences: PropTypes.arrayOf(
PropTypes.shape({ PropTypes.shape({
company: PropTypes.string, company: PropTypes.string,

View File

@@ -137,11 +137,22 @@ export const sanitizeConfig = (config) => {
return { return {
github: { github: {
username: config?.github?.username || '', username: config?.github?.username || '',
sortBy: config?.github?.sortBy || 'stars', },
limit: config?.github?.limit || 8, projects: {
exclude: { github: {
forks: config?.github?.exclude?.forks || false, header: config?.projects?.github?.header || 'GitHub Projects',
projects: config?.github?.exclude?.projects || [], display: config?.projects?.github?.display || true,
sortBy: config?.projects?.github?.sortBy || 'stars',
limit: config?.projects?.github?.limit || 8,
exclude: {
forks: config?.projects?.github?.exclude?.forks || false,
projects: config?.projects?.github?.exclude?.projects || [],
},
},
external: {
header: config?.projects?.external?.header || 'External Projects',
display: config?.projects?.external?.display || true,
projects: config?.projects?.external?.projects || [],
}, },
}, },
social: { social: {
@@ -166,7 +177,6 @@ export const sanitizeConfig = (config) => {
fileUrl: config?.resume?.fileUrl || '', fileUrl: config?.resume?.fileUrl || '',
}, },
skills: config?.skills || [], skills: config?.skills || [],
externalProjects: config?.externalProjects || [],
experiences: config?.experiences || [], experiences: config?.experiences || [],
certifications: config?.certifications || [], certifications: config?.certifications || [],
education: config?.education || [], education: config?.education || [],

81
types/index.d.ts vendored
View File

@@ -9,32 +9,63 @@ export interface Github {
* GitHub org/user name * GitHub org/user name
*/ */
username: string; username: string;
}
/** export interface Projects {
* stars | updated github: {
*/
sortBy?: string;
/**
* How many projects to display
*/
limit?: number;
/**
* Exclude projects option
*/
exclude?: {
/** /**
* Forked projects will not be displayed if set to true * Header Title
*/ */
forks?: boolean; header?: string;
/** /**
* These projects will not be displayed * Display GitHub projects?
*
* example: ['my-project1', 'my-project2']
*/ */
projects?: Array<string>; display?: boolean;
/**
* stars | updated
*/
sortBy?: string;
/**
* How many projects to display
*/
limit?: number;
/**
* Exclude projects option
*/
exclude?: {
/**
* Forked projects will not be displayed if set to true
*/
forks?: boolean;
/**
* These projects will not be displayed
*
* example: ['my-project1', 'my-project2']
*/
projects?: Array<string>;
};
};
external: {
/**
* Header Title
*/
header?: string;
/**
* Display external projects?
*/
display?: boolean;
/**
* External Projects
*/
projects?: Array<ExternalProjects>;
}; };
} }
@@ -265,6 +296,11 @@ export interface Config {
*/ */
github: Github; github: Github;
/**
* Projects
*/
projects?: Projects;
/** /**
* Social links * Social links
*/ */
@@ -285,11 +321,6 @@ export interface Config {
*/ */
experiences?: Array<Experience>; experiences?: Array<Experience>;
/**
* External Projects
*/
externalProjects?: Array<ExternalProjects>;
/** /**
* Certifications list * Certifications list
*/ */