diff --git a/package.json b/package.json
index fee5c81..4132581 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,9 @@
"@emotion/cache": "^11.11.0",
"@emotion/react": "^11.11.3",
"@emotion/styled": "^11.11.0",
+ "@hookform/resolvers": "^3.9.0",
"@mui/icons-material": "^5.15.6",
+ "@mui/lab": "^5.0.0-alpha.173",
"@mui/material": "^5.15.6",
"@mui/material-nextjs": "^5.15.6",
"@mui/x-date-pickers": "^6.19.5",
diff --git a/src/core/components/Profile/ChangePass/Form.jsx b/src/core/components/Profile/ChangePass/Form.jsx
new file mode 100644
index 0000000..3499394
--- /dev/null
+++ b/src/core/components/Profile/ChangePass/Form.jsx
@@ -0,0 +1,155 @@
+"use client";
+
+import {
+ Chip,
+ Divider,
+ FormControl,
+ FormHelperText,
+ Grid,
+ IconButton,
+ InputAdornment,
+ InputLabel,
+ OutlinedInput,
+} from "@mui/material";
+import StyledForm from "@/core/components/StyledForm";
+import { useForm } from "react-hook-form";
+import useRequest from "@/lib/hooks/useRequest";
+import { CHANGE_USER_PASSWORD } from "@/core/utils/routes";
+import { object, string } from "yup";
+import { yupResolver } from "@hookform/resolvers/yup";
+import { useEffect, useState } from "react";
+import Visibility from "@mui/icons-material/Visibility";
+import VisibilityOff from "@mui/icons-material/VisibilityOff";
+
+const validationSchema = object({
+ current_password: string().required("اجباری"),
+ new_password: string().required("اجباری"),
+ repeat_new_password: string().required("اجباری").test(
+ "password-match",
+ "رمز عبور جدید و تکرار آن باید یکسان باشند",
+ function(value) {
+ return this.parent.new_password === value;
+ },
+ ),
+});
+
+const Form = ({ handleCloseForm, setLoading }) => {
+ const request = useRequest();
+ const [showNewPassword, setShowNewPassword] = useState();
+ const [showRepeatNewPassword, setShowRepeatNewPassword] = useState();
+
+ const defaultValues = {
+ current_password: "",
+ new_password: "",
+ repeat_new_password: "",
+ };
+
+ const {
+ register,
+ handleSubmit,
+ formState: { isSubmitting, errors },
+ } = useForm({ defaultValues, resolver: yupResolver(validationSchema) });
+
+ useEffect(() => {
+ setLoading(isSubmitting);
+ }, [isSubmitting]);
+
+ const onSubmit = async (data) => {
+ const formData = new FormData();
+ formData.append("current_password", data.current_password);
+ formData.append("new_password", data.new_password);
+ try {
+ await request(CHANGE_USER_PASSWORD, "post", { data: formData, signal: controller.signal });
+ handleCloseForm();
+ } catch (error) {
+ }
+ };
+
+ return (
+ <>
+
+
+
+
+
+
+
+ رمز عبور فعلی
+
+
+ {errors.current_password ? errors.current_password.message : null}
+
+
+
+
+
+ رمز عبور جدید
+
+ setShowNewPassword(!showNewPassword)}
+ onMouseDown={(event) => event.preventDefault()}
+ edge="end"
+ >
+ {showNewPassword ? : }
+
+
+ }
+ />
+
+ {errors.new_password ? errors.new_password.message : null}
+
+
+
+
+
+ تکرار رمز عبور جدید
+
+ setShowRepeatNewPassword(!showRepeatNewPassword)}
+ onMouseDown={(event) => event.preventDefault()}
+ edge="end"
+ >
+ {showRepeatNewPassword ? : }
+
+
+ }
+ />
+
+ {errors.repeat_new_password ? errors.repeat_new_password.message : null}
+
+
+
+
+
+ >
+ );
+};
+export default Form;
\ No newline at end of file
diff --git a/src/core/components/Profile/ChangePass/index.jsx b/src/core/components/Profile/ChangePass/index.jsx
index 31df662..15e6fcd 100644
--- a/src/core/components/Profile/ChangePass/index.jsx
+++ b/src/core/components/Profile/ChangePass/index.jsx
@@ -1,50 +1,35 @@
"use client";
-import {
- Box,
- Button,
- Dialog,
- DialogActions,
- DialogContent,
- DialogTitle,
- IconButton,
- useMediaQuery,
-} from "@mui/material";
-import { useTheme } from "@mui/material/styles";
-import CloseIcon from "@mui/icons-material/Close";
+import { Dialog, DialogActions, DialogContent } from "@mui/material";
+import Form from "./Form";
+import SaveIcon from "@mui/icons-material/Save";
+import { LoadingButton } from "@mui/lab";
+import { useState } from "react";
const ChangePass = ({ open, setOpen }) => {
- const theme = useTheme();
- const fullScreen = useMediaQuery(theme.breakpoints.down("sm"));
+ const [loading, setLoading] = useState(false);
+
+ const handleCloseForm = () => {
+ setOpen(false);
+ };
return (
-