您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

81 行
2.3KB

  1. import { yupResolver } from "@hookform/resolvers/yup";
  2. import { LoadingButton } from "@mui/lab";
  3. import { AppBar, Box, Grid, Stack, Typography } from "@mui/material";
  4. import { PageID } from "codes/page";
  5. import InputAlert from "components/form/InputAlert";
  6. import { FormProvider, RHFTextField } from "components/hook-form";
  7. import useAuth from "hooks/useAuth";
  8. import useNavigateCustom from "hooks/useNavigateCustom";
  9. import useSnackbarCustom from "hooks/useSnackbarCustom";
  10. import { useState } from "react";
  11. import { useForm } from "react-hook-form";
  12. import { getPath } from "routes/path";
  13. import * as Yup from "yup";
  14. type FormProps = {
  15. email: string;
  16. password: string;
  17. };
  18. const LoginSchema = Yup.object().shape({
  19. email: Yup.string().required("必須項目です"),
  20. password: Yup.string().required("必須項目です"),
  21. });
  22. export default function Login() {
  23. const { success, error } = useSnackbarCustom();
  24. const [message, setMessage] = useState("");
  25. const [sending, setSending] = useState(false);
  26. const { login } = useAuth();
  27. const { navigateWhenChanged } = useNavigateCustom();
  28. const form = useForm<FormProps>({
  29. defaultValues: {
  30. email: "",
  31. password: "",
  32. },
  33. resolver: yupResolver(LoginSchema),
  34. });
  35. const handleSubmit = async (data: FormProps) => {
  36. setMessage("");
  37. setSending(true);
  38. const ret = await login(data.email, data.password);
  39. setSending(false);
  40. if (ret) {
  41. success("ログイン成功");
  42. navigateWhenChanged(getPath(PageID.DASHBOARD_CONTRACT_LIST));
  43. } else {
  44. error("ログイン失敗");
  45. setMessage("入力情報を確認してください");
  46. }
  47. };
  48. return (
  49. <FormProvider methods={form} onSubmit={form.handleSubmit(handleSubmit)}>
  50. <Box sx={{ p: 3, pt: 5, mx: "auto", maxWidth: 500 }} textAlign="center">
  51. <Stack spacing={3}>
  52. <Typography variant="h5">ログイン</Typography>
  53. <InputAlert error="none" message={message} />
  54. <RHFTextField name="email" label="email" size="small" />
  55. <RHFTextField
  56. name="password"
  57. type="password"
  58. label="password"
  59. size="small"
  60. />
  61. <LoadingButton loading={sending} type="submit" variant="contained">
  62. ログイン
  63. </LoadingButton>
  64. </Stack>
  65. </Box>
  66. </FormProvider>
  67. );
  68. }