mirror of
https://github.com/elyby/accounts-frontend.git
synced 2024-12-12 16:29:01 +05:30
46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
|
import React, { ComponentType, useEffect } from 'react';
|
||
|
|
||
|
import { resolve as resolveError } from 'app/services/errorsDict';
|
||
|
import { PanelBodyHeader } from 'app/components/ui/Panel';
|
||
|
import { ValidationError } from 'app/components/ui/form/FormModel';
|
||
|
|
||
|
interface Props {
|
||
|
error: ValidationError;
|
||
|
onClose?: () => void;
|
||
|
}
|
||
|
|
||
|
let autoHideTimer: number | null = null;
|
||
|
function resetTimeout(): void {
|
||
|
if (autoHideTimer) {
|
||
|
clearTimeout(autoHideTimer);
|
||
|
autoHideTimer = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const AuthError: ComponentType<Props> = ({ error, onClose }) => {
|
||
|
useEffect(() => {
|
||
|
resetTimeout();
|
||
|
|
||
|
if (
|
||
|
onClose &&
|
||
|
typeof error !== 'string' &&
|
||
|
error.payload &&
|
||
|
error.payload.canRepeatIn
|
||
|
) {
|
||
|
const msLeft = error.payload.canRepeatIn * 1000;
|
||
|
// 1500 to let the user see, that time is elapsed
|
||
|
setTimeout(onClose, msLeft - Date.now() + 1500);
|
||
|
}
|
||
|
|
||
|
return resetTimeout;
|
||
|
}, [error, onClose]);
|
||
|
|
||
|
return (
|
||
|
<PanelBodyHeader type="error" onClose={onClose}>
|
||
|
{resolveError(error)}
|
||
|
</PanelBodyHeader>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export default AuthError;
|