From 7f8901425982d4b7a8c7833fcc6963c820717ebd Mon Sep 17 00:00:00 2001 From: zerosoul Date: Sat, 7 May 2022 16:41:41 +0800 Subject: [PATCH] feat: change password modal --- src/app/services/auth.js | 8 ++ src/routes/setting/MyAccount.js | 21 +++- src/routes/setting/UpdatePasswordModal.js | 119 ++++++++++++++++++++++ 3 files changed, 144 insertions(+), 4 deletions(-) create mode 100644 src/routes/setting/UpdatePasswordModal.js diff --git a/src/app/services/auth.js b/src/app/services/auth.js index 32dc1c9b..7fe6b6dd 100644 --- a/src/app/services/auth.js +++ b/src/app/services/auth.js @@ -83,6 +83,13 @@ export const authApi = createApi({ body: { magic_token: token }, }), }), + updatePassword: builder.mutation({ + query: ({ old_password, new_password }) => ({ + url: "user/change_password", + method: "POST", + body: { old_password, new_password }, + }), + }), getMetamaskNonce: builder.query({ query: (address) => ({ url: `/token/metamask/nonce?public_address=${address}`, @@ -102,4 +109,5 @@ export const { useLoginMutation, useLazyLogoutQuery, useCheckInviteTokenValidMutation, + useUpdatePasswordMutation, } = authApi; diff --git a/src/routes/setting/MyAccount.js b/src/routes/setting/MyAccount.js index 8e8ae20b..1bbaee83 100644 --- a/src/routes/setting/MyAccount.js +++ b/src/routes/setting/MyAccount.js @@ -5,6 +5,7 @@ import toast from "react-hot-toast"; import { useUpdateAvatarMutation } from "../../app/services/contact"; import AvatarUploader from "../../common/component/AvatarUploader"; import ProfileBasicEditModal from "./ProfileBasicEditModal"; +import UpdatePasswordModal from "./UpdatePasswordModal"; const StyledWrapper = styled.div` display: flex; flex-direction: column; @@ -109,6 +110,7 @@ const EditModalInfo = { }, }; export default function MyAccount() { + const [passwordModal, setPasswordModal] = useState(false); const [editModal, setEditModal] = useState(null); const [ uploadAvatar, @@ -129,6 +131,9 @@ export default function MyAccount() { const closeBasicEditModal = () => { setEditModal(null); }; + const togglePasswordModal = () => { + setPasswordModal((prev) => !prev); + }; if (!loginUser) return null; const { uid, avatar, name, email } = loginUser; return ( @@ -146,22 +151,27 @@ export default function MyAccount() { {name} #{uid} - {/*
*/} - {/*
*/}
email {email}
- {/*
*/} - {/*
*/} +
+
+
+ password + ********* +
+
@@ -181,6 +191,9 @@ export default function MyAccount() { closeModal={closeBasicEditModal} /> )} + {passwordModal && ( + + )} ); } diff --git a/src/routes/setting/UpdatePasswordModal.js b/src/routes/setting/UpdatePasswordModal.js new file mode 100644 index 00000000..b4bbc041 --- /dev/null +++ b/src/routes/setting/UpdatePasswordModal.js @@ -0,0 +1,119 @@ +// import React from "react"; +import { useEffect, useState } from "react"; +import styled from "styled-components"; +import Input from "../../common/component/styled/Input"; +import { useUpdatePasswordMutation } from "../../app/services/auth"; +import StyledModal from "../../common/component/styled/Modal"; +import Button from "../../common/component/styled/Button"; +const StyledEdit = styled(StyledModal)` + .input { + margin: 16px 0; + width: 100%; + display: flex; + flex-direction: column; + gap: 8px; + label { + font-weight: 600; + font-size: 14px; + line-height: 20px; + color: #6b7280; + } + } +`; +import Modal from "../../common/component/Modal"; +import toast from "react-hot-toast"; +export default function ProfileBasicEditModal({ closeModal }) { + const [input, setInput] = useState({ + current: "", + newPassword: "", + confirmPassword: "", + }); + // const dispatch = useDispatch(); + const [ + updatePassword, + { isLoading, isSuccess }, + ] = useUpdatePasswordMutation(); + const handleChange = (evt) => { + const { type } = evt.target.dataset; + setInput((prev) => { + return { ...prev, [type]: evt.target.value }; + }); + }; + const handleUpdate = () => { + console.log("pwd", input); + const { current, newPassword } = input; + updatePassword({ old_password: current, new_password: newPassword }); + // update({ [valueKey]: input }); + }; + const handleCompare = () => { + const { newPassword, confirmPassword } = input; + if (newPassword !== confirmPassword) { + toast.error("Not same with new password"); + } + }; + useEffect(() => { + if (isSuccess) { + // todo + toast.success("update password successfully"); + closeModal(); + } + }, [isSuccess]); + const { current, newPassword, confirmPassword } = input; + const disableBtn = + !current || + !newPassword || + !confirmPassword || + newPassword !== confirmPassword || + isLoading; + return ( + + + + + + } + > +
+ + +
+
+ + +
+
+ + +
+
+
+ ); +}