-
Notifications
You must be signed in to change notification settings - Fork 211
Expand file tree
/
Copy pathresetPasswordRequest.tsx
More file actions
83 lines (78 loc) · 2.74 KB
/
resetPasswordRequest.tsx
File metadata and controls
83 lines (78 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
*/
import { Button, Grid, Paper, Typography } from "@mui/material";
import Link from "next/link";
import { useRequestResetPassword } from "@/hooks/entities/reset-hooks";
import { useStrictForm } from "@/hooks/useStrictForm";
import { useToast } from "@/hooks/useToast";
import { useTranslate } from "@/hooks/useTranslate";
import { PublicContentWrapper } from "../../components/anonymous/PublicContentWrapper";
import { ContentContainer } from "../dialogs";
import { Input } from "../inputs/Input";
export const ResetPasswordRequest = () => {
const { t } = useTranslate();
const { toast } = useToast();
const {
register,
handleSubmit,
formState: { errors },
} = useStrictForm<{ email: string }>({
defaultValues: { email: "" },
rules: {
email: {
required: t("message.email_is_required"),
},
},
});
const { mutate: requestReset } = useRequestResetPassword({
onSuccess: () => {
toast.success(t("message.reset_success"));
},
onError: () => {
toast.error(t("message.server_error"));
},
});
return (
<PublicContentWrapper>
<Paper sx={{ width: { xs: "100%", md: "33%" }, p: 2 }}>
<form
id="resetPasswordForm"
onSubmit={handleSubmit((payload) => {
requestReset(payload);
})}
>
<ContentContainer gap={2}>
<Typography variant="h1" fontSize="19px" fontWeight={700}>
{t("title.reset_password")}
</Typography>
<Input
label={t("label.email")}
error={!!errors.email}
required
autoFocus
{...register("email")}
helperText={errors.email ? errors.email.message : null}
/>
<Grid container gap={1} justifyContent="flex-end">
<Button
variant="contained"
form="resetPasswordForm"
type="submit"
>
{t("button.submit")}
</Button>
<Link href="/login">
<Button variant="outlined">{t("button.cancel")}</Button>
</Link>
</Grid>
</ContentContainer>
</form>
</Paper>
</PublicContentWrapper>
);
};