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';
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 [profile, setProfile] = useState(null);
const [repo, setRepo] = useState(null);
const [error, setError] = useState(null);
const [rateLimit, setRateLimit] = useState(null);
const [error, setError] = useState(
typeof config === 'undefined'
? {
status: 500,
title: 'No Config is provided',
subTitle: 'Pass the required config as prop.',
}
: null
);
useEffect(() => {
if (theme) {
@ -31,7 +40,7 @@ const GitProfile = ({ config }) => {
}, [theme]);
useEffect(() => {
setupHotjar(config.hotjar);
config && setupHotjar(config.hotjar);
}, []);
const loadData = useCallback(() => {
@ -86,71 +95,76 @@ const GitProfile = ({ config }) => {
}, [setLoading]);
useEffect(() => {
loadData();
config && loadData();
}, [loadData]);
const handleError = (error) => {
console.error('Error:', error);
try {
setRateLimit({
remaining: error.response.headers['x-ratelimit-remaining'],
reset: moment(
new Date(error.response.headers['x-ratelimit-reset'] * 1000)
).fromNow(),
});
let reset = moment(
new Date(error.response.headers['x-ratelimit-reset'] * 1000)
).fromNow();
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) {
setError(404);
setError({
status: 404,
title: 'The Github Username is Incorrect.',
subTitle: (
<p>
Please provide correct github username in <code>config</code>.
</p>
),
});
} else {
setError(500);
setError({
status: 500,
title: 'Ops!!',
subTitle: 'Something went wrong.',
});
}
} catch (error2) {
setError(500);
setError({
status: 500,
title: 'Ops!!',
subTitle: 'Something went wrong.',
});
}
};
return (
<HelmetProvider>
<HeadTagEditor
profile={profile}
theme={theme}
googleAnalytics={config.googleAnalytics}
social={config.social}
/>
{!error && (
<HeadTagEditor
profile={profile}
theme={theme}
googleAnalytics={config.googleAnalytics}
social={config.social}
/>
)}
<div className="fade-in h-screen">
{error ? (
<ErrorPage
status={`${error}`}
title={
error === 404
? '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`
)
}
status={`${error.status}`}
title={error.title}
subTitle={error.subTitle}
/>
) : (
<Fragment>
@ -158,7 +172,7 @@ const GitProfile = ({ config }) => {
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6 rounded-box">
<div className="col-span-1">
<div className="grid grid-cols-1 gap-6">
{!config.themeConfig.disableSwitch && (
{!error && !config.themeConfig.disableSwitch && (
<ThemeChanger
theme={theme}
setTheme={setTheme}

View File

@ -10,9 +10,9 @@ const ErrorPage = (props) => {
{props.status}
</h1>
<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}
</p>
</div>
</div>
</div>
</div>
@ -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;