diff --git a/src/core/components/Profile/ChangePassword/Form.jsx b/src/core/components/Profile/ChangePassword/Form.jsx
new file mode 100644
index 0000000..01b7503
--- /dev/null
+++ b/src/core/components/Profile/ChangePassword/Form.jsx
@@ -0,0 +1,185 @@
+"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 { 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";
+import useRequest from "@/lib/hooks/useRequest";
+
+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) => {
+ console.log(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 });
+ 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;
diff --git a/src/core/components/Profile/ChangePassword/index.jsx b/src/core/components/Profile/ChangePassword/index.jsx
new file mode 100644
index 0000000..366584b
--- /dev/null
+++ b/src/core/components/Profile/ChangePassword/index.jsx
@@ -0,0 +1,45 @@
+"use client";
+
+import { Button, Dialog, DialogActions, DialogContent } from "@mui/material";
+import SaveIcon from "@mui/icons-material/Save";
+import { useState } from "react";
+import Form from "./Form";
+
+const ChangePassword = ({ open, setOpen }) => {
+ const [loading, setLoading] = useState(false);
+
+ const handleCloseForm = () => {
+ setOpen(false);
+ };
+
+ return (
+
+ );
+};
+export default ChangePassword;
diff --git a/src/core/components/Profile/ProfileActions.jsx b/src/core/components/Profile/ProfileActions.jsx
index eeb500c..fde87b9 100644
--- a/src/core/components/Profile/ProfileActions.jsx
+++ b/src/core/components/Profile/ProfileActions.jsx
@@ -7,6 +7,7 @@ import PowerSettingsNewIcon from "@mui/icons-material/PowerSettingsNew";
import VpnKeyIcon from "@mui/icons-material/VpnKey";
import { Box, Divider, IconButton, Tooltip } from "@mui/material";
import { useState } from "react";
+import ChangePassword from "./ChangePassword";
const ProfileActions = () => {
const { getUser, logout } = useAuth();
@@ -65,8 +66,8 @@ const ProfileActions = () => {
- {/*
- */}
+ {/* */}
+
>
);
};
diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js
index 37e72fe..577f689 100644
--- a/src/core/utils/routes.js
+++ b/src/core/utils/routes.js
@@ -1,6 +1,7 @@
const api = process.env.NEXT_PUBLIC_API_URL;
export const GET_USER_ROUTE = api + "/profile/info";
+export const CHANGE_USER_PASSWORD = api + "/profile/change_password";
export const GET_USER_LOGIN_ROUTE = api + "/auth/login";
export const GET_USER_LOGOUT_ROUTE = api + "/auth/logout";
export const GET_PERMISSIONS_ROUTE = "";