1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-04 01:18:20 +02:00
unleash.unleash/frontend/src/component/user/ResetPassword/ResetPassword.tsx
Tymoteusz Czech df11ad9135
fix: "Reset password" page works when password authentication is disabled (#2126)
fix: password reset with only sso enabled

show correct error message
2022-10-05 09:02:20 +02:00

72 lines
2.9 KiB
TypeScript

import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { OK } from 'constants/statusCodes';
import useLoading from 'hooks/useLoading';
import { useStyles } from './ResetPassword.styles';
import { Typography } from '@mui/material';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import InvalidToken from '../common/InvalidToken/InvalidToken';
import useResetPassword from 'hooks/api/getters/useResetPassword/useResetPassword';
import StandaloneLayout from '../common/StandaloneLayout/StandaloneLayout';
import ResetPasswordForm from '../common/ResetPasswordForm/ResetPasswordForm';
import ResetPasswordError from '../common/ResetPasswordError/ResetPasswordError';
import { useAuthResetPasswordApi } from 'hooks/api/actions/useAuthResetPasswordApi/useAuthResetPasswordApi';
import { useAuthDetails } from 'hooks/api/getters/useAuth/useAuthDetails';
const ResetPassword = () => {
const { classes: styles } = useStyles();
const { token, loading, isValidToken } = useResetPassword();
const { resetPassword, loading: actionLoading } = useAuthResetPasswordApi();
const { authDetails } = useAuthDetails();
const ref = useLoading(loading || actionLoading);
const navigate = useNavigate();
const [hasApiError, setHasApiError] = useState(false);
const passwordDisabled = authDetails?.defaultHidden === true;
const onSubmit = async (password: string) => {
try {
const res = await resetPassword({ token, password });
if (res.status === OK) {
navigate('/login?reset=true');
setHasApiError(false);
} else {
setHasApiError(true);
}
} catch (e) {
setHasApiError(true);
}
};
return (
<div ref={ref}>
<StandaloneLayout>
<div className={styles.resetPassword}>
<ConditionallyRender
condition={!isValidToken || passwordDisabled}
show={<InvalidToken />}
elseShow={
<>
<Typography
variant="h2"
className={styles.title}
data-loading
>
Reset password
</Typography>
<ConditionallyRender
condition={hasApiError}
show={<ResetPasswordError />}
/>
<ResetPasswordForm onSubmit={onSubmit} />
</>
}
/>
</div>
</StandaloneLayout>
</div>
);
};
export default ResetPassword;