import { useState } from "react"; import { Button, Stack } from "@mui/material"; import { GenericDialog } from "@/Components/v1/Dialog/genericDialog"; import TextInput from "@/Components/v1/Inputs/TextInput"; import PasswordTooltip from "@/Pages/v1/Auth/components/PasswordTooltip"; import { useTheme } from "@emotion/react"; import { useTranslation } from "react-i18next"; import { createToast } from "../../../../Utils/toastUtils"; import { PasswordEndAdornment } from "@/Components/v1/Inputs/TextInput/Adornments"; import usePasswordFeedback from "@/Pages/v1/Auth/hooks/usePasswordFeedback"; import PropTypes from "prop-types"; const ChangePasswordModal = ({ isSaving, isLoading, changePassword }) => { const INITIAL_FORM_STATE = { password: "", confirm: "", }; const theme = useTheme(); const { t } = useTranslation(); const { feedback, handlePasswordFeedback } = usePasswordFeedback(); const [form, setForm] = useState(INITIAL_FORM_STATE); const [isChangePasswordOpen, setIsChangePasswordOpen] = useState(false); const [errors, setErrors] = useState({}); const [isLoadingSubmit, setIsLoadingSubmit] = useState(false); const closeChangePasswordModal = () => { setIsChangePasswordOpen(false); setForm(INITIAL_FORM_STATE); }; const onChange = (e) => { let { name, value } = e.target; const updatedForm = { ...form, [name]: value }; setForm(updatedForm); handlePasswordFeedback(updatedForm, name, value, form, errors, setErrors); }; const isFormValid = form.password.length > 1 && form.confirm.length > 1 && !errors.password && !errors.confirm; const onsubmitChangePassword = async (event) => { event.preventDefault(); if (!isFormValid) return; const newPasswordForm = { password: form.password, }; try { setIsLoadingSubmit(true); await changePassword(newPasswordForm); closeChangePasswordModal(); } catch (error) { const errorMsg = error.response?.data?.msg || error.message || "unknownError"; createToast({ type: "error", body: t(errorMsg), }); } finally { setIsLoadingSubmit(false); } }; return ( <> } sx={{ mb: theme.spacing(5) }} /> } sx={{ mb: theme.spacing(5) }} /> ); }; ChangePasswordModal.propTypes = { isSaving: PropTypes.bool.isRequired, isLoading: PropTypes.bool.isRequired, changePassword: PropTypes.func.isRequired, }; export default ChangePasswordModal;