Update error page

This commit is contained in:
Ariful Alam 2022-03-25 23:29:06 +06:00
parent 82eb282e17
commit 8dedc09ea8
2 changed files with 68 additions and 54 deletions

View File

@ -17,12 +17,21 @@ import PropTypes from 'prop-types';
import '../assets/index.css'; import '../assets/index.css';
const GitProfile = ({ config }) => { const GitProfile = ({ config }) => {
const [theme, setTheme] = useState(getInitialTheme(config.themeConfig)); const [theme, setTheme] = useState(
config ? getInitialTheme(config.themeConfig) : null
);
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const [profile, setProfile] = useState(null); const [profile, setProfile] = useState(null);
const [repo, setRepo] = useState(null); const [repo, setRepo] = useState(null);
const [error, setError] = useState(null); const [error, setError] = useState(
const [rateLimit, setRateLimit] = useState(null); typeof config === 'undefined'
? {
status: 500,
title: 'No Config is provided',
subTitle: 'Pass the required config as prop.',
}
: null
);
useEffect(() => { useEffect(() => {
if (theme) { if (theme) {
@ -31,7 +40,7 @@ const GitProfile = ({ config }) => {
}, [theme]); }, [theme]);
useEffect(() => { useEffect(() => {
setupHotjar(config.hotjar); config && setupHotjar(config.hotjar);
}, []); }, []);
const loadData = useCallback(() => { const loadData = useCallback(() => {
@ -86,71 +95,76 @@ const GitProfile = ({ config }) => {
}, [setLoading]); }, [setLoading]);
useEffect(() => { useEffect(() => {
loadData(); config && loadData();
}, [loadData]); }, [loadData]);
const handleError = (error) => { const handleError = (error) => {
console.error('Error:', error); console.error('Error:', error);
try { try {
setRateLimit({ let reset = moment(
remaining: error.response.headers['x-ratelimit-remaining'], new Date(error.response.headers['x-ratelimit-reset'] * 1000)
reset: moment( ).fromNow();
new Date(error.response.headers['x-ratelimit-reset'] * 1000)
).fromNow(),
});
if (error.response.status === 403) { if (error.response.status === 403) {
setError(429); setError({
status: 429,
title: 'Too Many Requests.',
subTitle: (
<p>
Oh no, you hit the{' '}
<a
href="https://developer.github.com/v3/rate_limit/"
target="_blank"
rel="noopener noreferrer"
>
rate limit.
</a>
! Try again later{` ${reset}`}.
</p>
),
});
} else if (error.response.status === 404) { } else if (error.response.status === 404) {
setError(404); setError({
status: 404,
title: 'The Github Username is Incorrect.',
subTitle: (
<p>
Please provide correct github username in <code>config</code>.
</p>
),
});
} else { } else {
setError(500); setError({
status: 500,
title: 'Ops!!',
subTitle: 'Something went wrong.',
});
} }
} catch (error2) { } catch (error2) {
setError(500); setError({
status: 500,
title: 'Ops!!',
subTitle: 'Something went wrong.',
});
} }
}; };
return ( return (
<HelmetProvider> <HelmetProvider>
<HeadTagEditor {!error && (
profile={profile} <HeadTagEditor
theme={theme} profile={profile}
googleAnalytics={config.googleAnalytics} theme={theme}
social={config.social} googleAnalytics={config.googleAnalytics}
/> social={config.social}
/>
)}
<div className="fade-in h-screen"> <div className="fade-in h-screen">
{error ? ( {error ? (
<ErrorPage <ErrorPage
status={`${error}`} status={`${error.status}`}
title={ title={error.title}
error === 404 subTitle={error.subTitle}
? 'The Github Username is Incorrect'
: error === 429
? 'Too Many Requests.'
: `Ops!!`
}
subTitle={
error === 404 ? (
<p>
Please provide correct github username in <code>config</code>
</p>
) : error === 429 ? (
<p>
Oh no, you hit the{' '}
<a
href="https://developer.github.com/v3/rate_limit/"
target="_blank"
rel="noopener noreferrer"
>
rate limit
</a>
! Try again later{rateLimit && ` ${rateLimit.reset}`}.
</p>
) : (
`Something went wrong`
)
}
/> />
) : ( ) : (
<Fragment> <Fragment>
@ -158,7 +172,7 @@ const GitProfile = ({ config }) => {
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6 rounded-box"> <div className="grid grid-cols-1 lg:grid-cols-3 gap-6 rounded-box">
<div className="col-span-1"> <div className="col-span-1">
<div className="grid grid-cols-1 gap-6"> <div className="grid grid-cols-1 gap-6">
{!config.themeConfig.disableSwitch && ( {!error && !config.themeConfig.disableSwitch && (
<ThemeChanger <ThemeChanger
theme={theme} theme={theme}
setTheme={setTheme} setTheme={setTheme}

View File

@ -10,9 +10,9 @@ const ErrorPage = (props) => {
{props.status} {props.status}
</h1> </h1>
<p className="text-lg pb-2 text-base-content">{props.title}</p> <p className="text-lg pb-2 text-base-content">{props.title}</p>
<p className="text-base-content text-opacity-60"> <div className="text-base-content text-opacity-60">
{props.subTitle} {props.subTitle}
</p> </div>
</div> </div>
</div> </div>
</div> </div>
@ -25,7 +25,7 @@ const ErrorPage = (props) => {
ErrorPage.propTypes = { ErrorPage.propTypes = {
status: PropTypes.string.isRequired, status: PropTypes.string.isRequired,
title: PropTypes.string.isRequired, title: PropTypes.string.isRequired,
subTitle: PropTypes.string.isRequired, subTitle: PropTypes.node.isRequired,
}; };
export default ErrorPage; export default ErrorPage;