Merge pull request #277 from arifszn/footer

Display custom footer
This commit is contained in:
Ariful Alam
2023-01-14 19:39:54 +06:00
committed by GitHub
7 changed files with 61 additions and 35 deletions

View File

@@ -356,6 +356,9 @@ const config = {
'--rounded-btn': '3rem', '--rounded-btn': '3rem',
}, },
}, },
// Optional Footer. Supports plain text or HTML.
footer: `Copyright © 2023 John Doe`,
}; };
``` ```
@@ -367,7 +370,7 @@ The default theme can be specified.
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
themeConfig: { themeConfig: {
defaultTheme: 'light', defaultTheme: 'light',
@@ -384,7 +387,7 @@ You can create your own custom theme by modifying these values. Theme `procyon`
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
themeConfig: { themeConfig: {
customTheme: { customTheme: {
@@ -407,7 +410,7 @@ module.exports = {
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
googleAnalytics: { googleAnalytics: {
id: '', id: '',
@@ -423,7 +426,7 @@ Besides tracking visitors, it will track `click events` on projects and blog pos
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
hotjar: { hotjar: {
id: '', id: '',
@@ -446,7 +449,7 @@ You can link your social media services you're using, including LinkedIn, Twitte
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
social: { social: {
linkedin: 'ariful-alam', linkedin: 'ariful-alam',
@@ -471,7 +474,7 @@ To showcase your skills provide them here.
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
skills: ['JavaScript', 'React.js'], skills: ['JavaScript', 'React.js'],
}; };
@@ -485,7 +488,7 @@ Provide your job history in `experiences`.
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
experiences: [ experiences: [
{ {
@@ -514,7 +517,7 @@ Provide your education history in `education`.
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
education: [ education: [
{ {
@@ -541,7 +544,7 @@ Provide your industry certifications in `certifications`.
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
certifications: [ certifications: [
{ {
@@ -564,7 +567,7 @@ Your public repo from GitHub will be displayed in the `Github Projects` section
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
github: { github: {
username: 'arifszn', username: 'arifszn',
@@ -584,7 +587,7 @@ In this section you can showcase your external/personal projects.
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
externalProjects: [ externalProjects: [
{ {
@@ -603,7 +606,7 @@ If you have [medium](https://medium.com) or [dev](https://dev.to) account, you c
```js ```js
// gitprofile.config.js // gitprofile.config.js
module.exports = { const config = {
// ... // ...
blog: { blog: {
source: 'dev', source: 'dev',

View File

@@ -100,7 +100,6 @@ const config = {
link: 'https://example.com', link: 'https://example.com',
}, },
], ],
// Display blog posts from your medium or dev account. (Optional) // Display blog posts from your medium or dev account. (Optional)
blog: { blog: {
source: 'dev', // medium | dev source: 'dev', // medium | dev
@@ -116,7 +115,7 @@ const config = {
snippetVersion: 6, snippetVersion: 6,
}, },
themeConfig: { themeConfig: {
defaultTheme: 'business', defaultTheme: 'winter',
// Hides the switch in the navbar // Hides the switch in the navbar
// Useful if you want to support a single color mode // Useful if you want to support a single color mode
@@ -174,6 +173,13 @@ const config = {
'--rounded-btn': '3rem', '--rounded-btn': '3rem',
}, },
}, },
// Optional Footer. Supports plain text or HTML.
footer: `Made with <a
class="text-primary" href="https://github.com/arifszn/gitprofile"
target="_blank"
rel="noreferrer"
>GitProfile</a> and ❤️`,
}; };
export default config; export default config;

View File

@@ -1,7 +1,7 @@
{ {
"name": "@arifszn/gitprofile", "name": "@arifszn/gitprofile",
"description": "Create an automatic portfolio based on GitHub profile", "description": "Create an automatic portfolio based on GitHub profile",
"version": "2.2.1", "version": "2.2.2",
"license": "MIT", "license": "MIT",
"author": "arifszn", "author": "arifszn",
"repository": { "repository": {

View File

@@ -11,6 +11,7 @@ import Certification from './certification';
import Education from './education'; import Education from './education';
import Project from './project'; import Project from './project';
import Blog from './blog'; import Blog from './blog';
import Footer from './footer';
import { import {
genericError, genericError,
getInitialTheme, getInitialTheme,
@@ -19,7 +20,6 @@ import {
setupHotjar, setupHotjar,
tooManyRequestError, tooManyRequestError,
sanitizeConfig, sanitizeConfig,
skeleton,
} from '../helpers/utils'; } from '../helpers/utils';
import { HelmetProvider } from 'react-helmet-async'; import { HelmetProvider } from 'react-helmet-async';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
@@ -221,24 +221,7 @@ const GitProfile = ({ config }) => {
className={`p-4 footer ${bgColor} text-base-content footer-center`} className={`p-4 footer ${bgColor} text-base-content footer-center`}
> >
<div className="card compact bg-base-100 shadow"> <div className="card compact bg-base-100 shadow">
<a <Footer content={sanitizedConfig.footer} loading={loading} />
className="card-body"
href="https://github.com/arifszn/gitprofile"
target="_blank"
rel="noreferrer"
>
<div>
{loading ? (
skeleton({ width: 'w-52', height: 'h-6' })
) : (
<p className="font-mono text-sm">
Made with{' '}
<span className="text-primary">GitProfile</span> and
</p>
)}
</div>
</a>
</div> </div>
</footer> </footer>
</Fragment> </Fragment>
@@ -274,6 +257,9 @@ GitProfile.propTypes = {
phone: PropTypes.string, phone: PropTypes.string,
email: PropTypes.string, email: PropTypes.string,
}), }),
resume: PropTypes.shape({
fileUrl: PropTypes.string,
}),
skills: PropTypes.array, skills: PropTypes.array,
externalProjects: PropTypes.arrayOf( externalProjects: PropTypes.arrayOf(
PropTypes.shape({ PropTypes.shape({
@@ -335,6 +321,7 @@ GitProfile.propTypes = {
'--rounded-btn': PropTypes.string, '--rounded-btn': PropTypes.string,
}), }),
}), }),
footer: PropTypes.string,
}).isRequired, }).isRequired,
}; };

View File

@@ -0,0 +1,24 @@
import PropTypes from 'prop-types';
import { skeleton } from '../../helpers/utils';
const Footer = ({ content, loading }) => {
if (!content) return null;
return (
<div className="card-body">
{loading ? (
skeleton({ width: 'w-52', height: 'h-6' })
) : (
<div dangerouslySetInnerHTML={{ __html: content }} />
)}
</div>
);
};
Footer.propTypes = {
content: PropTypes.string,
loading: PropTypes.bool.isRequired,
};
export default Footer;

View File

@@ -187,6 +187,7 @@ export const sanitizeConfig = (config) => {
themes: themes, themes: themes,
customTheme: customTheme, customTheme: customTheme,
}, },
footer: config?.footer,
}; };
}; };
@@ -208,7 +209,7 @@ export const tooManyRequestError = (reset) => {
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
> >
rate limit. rate limit
</a> </a>
! Try again later{` ${reset}`}. ! Try again later{` ${reset}`}.
</p> </p>

5
types/index.d.ts vendored
View File

@@ -299,6 +299,11 @@ export interface Config {
* Theme config * Theme config
*/ */
themeConfig?: ThemeConfig; themeConfig?: ThemeConfig;
/**
* Custom footer
*/
footer?: string;
} }
export interface GitProfileProps { export interface GitProfileProps {