import { yupResolver } from "@hookform/resolvers/yup"; import { Box, Button, Stack, Typography } from "@mui/material"; import { HasChildren } from "@types"; import { changeLoginPassword, getLoginUsers } from "api/login-user"; import { PageID, TabID } from "codes/page"; import { UserRole } from "codes/user"; import { FormProvider, RHFTextField } from "components/hook-form"; import useAPICall from "hooks/useAPICall"; import useAuth from "hooks/useAuth"; import useDashboard from "hooks/useDashBoard"; import useSnackbarCustom from "hooks/useSnackbarCustom"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { useParams } from "react-router-dom"; import * as Yup from "yup"; type AreaBoxProps = { title: string; } & HasChildren; function AreaBox({ title, children }: AreaBoxProps) { return ( {title} {children} ); } type FormProps = { password: string; password_retype: string; }; export default function ChangePassword() { const { setHeaderTitle, setTabs } = useDashboard( PageID.DASHBOARD_LOGIN_USER_CHANGE_PASSWORD, TabID.NONE ); const { initialized, userId, role } = useAuth(); const { success, error } = useSnackbarCustom(); const { id: paramUserId } = useParams(); const [timestamp, setTimestamp] = useState(""); const [mode, setMode] = useState<"input" | "done">("input"); const form = useForm({ defaultValues: { password: "", password_retype: "", }, resolver: yupResolver( Yup.object().shape({ password: Yup.string().required("必須項目です"), password_retype: Yup.string() .required("必須項目です") .test("retype", "入力が一致しません", function (value) { return this.parent.password === value; }), }) ), }); const { callAPI: callGetLoginUsers } = useAPICall({ apiMethod: getLoginUsers, onSuccess: ({ data: { records } }) => { if (records.length === 1) { setTimestamp(records[0].updated_at); } }, }); const { callAPI: callChangeLoginPassword, makeSendData } = useAPICall({ apiMethod: changeLoginPassword, backDrop: true, form, onSuccess: () => { success("登録しました"); setMode("done"); }, onFailed: () => { error("失敗しました"); }, }); const fetch = () => { callGetLoginUsers({ id: paramUserId, }); }; const handleSubmt = (data: FormProps) => { const sendData = makeSendData({ ...data, timestamp }); if (userId === paramUserId) { // 自身の場合はパラメータなしで送信する } else { sendData.id = paramUserId ?? ""; } callChangeLoginPassword(sendData); }; useEffect(() => { if (initialized) { fetch(); } }, [initialized]); useEffect(() => { setHeaderTitle("パスワード変更"); setTabs(null); }, []); return ( <> {mode === "input" && ( )} {mode === "done" && 変更完了しました} ); }