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" && 変更完了しました}
>
);
}