From 8bdad1bb3f33affbe6a1c38fd38e6970be58aba3 Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Mon, 28 Apr 2025 16:41:42 +0700 Subject: [PATCH] update change pincode --- src/config/api.config.ts | 3 +- .../home/user-profile/blocks/PinCode.tsx | 132 +++++++++++++++--- .../hooks/AccountUserProfileContext.tsx | 55 ++++---- 3 files changed, 141 insertions(+), 49 deletions(-) diff --git a/src/config/api.config.ts b/src/config/api.config.ts index 47c5471..9a85415 100644 --- a/src/config/api.config.ts +++ b/src/config/api.config.ts @@ -2,6 +2,7 @@ interface apiConfigProps { service_dashboard: string; service_customer: string; service_master_data: string; + service_master_data2: string; service_transaction: string; service_wallet: string; transaction: string; @@ -18,7 +19,7 @@ const apiConfig: apiConfigProps = { // service_dashboard: `${API_URL}${import.meta.env.VITE_ENV != 'development' ? '/d' : ''}`, service_dashboard: `${API_URL}/d`, service_customer: `${API_URL}/c`, - // service_master_data: `${API_URL}/m` + service_master_data2: `${API_URL}/m`, service_master_data: `${API_URL}/t`, service_transaction: `${API_URL}/tt`, service_wallet: `${API_URL}/w`, diff --git a/src/pages/account/home/user-profile/blocks/PinCode.tsx b/src/pages/account/home/user-profile/blocks/PinCode.tsx index ff0ba0d..64fcd3f 100644 --- a/src/pages/account/home/user-profile/blocks/PinCode.tsx +++ b/src/pages/account/home/user-profile/blocks/PinCode.tsx @@ -1,34 +1,45 @@ import { useState, useContext, useCallback, MouseEvent } from 'react'; import { AccountUserProfileContext } from '../hooks'; import { toast } from 'sonner'; -import { useAuthContext } from '@/auth'; +import { getAuth,useAuthContext } from '@/auth'; import { KeenIcon } from '@/components'; -import clsx from 'clsx'; -type PasswordType = 'password'; +type PasswordType = 'current' | 'new' | 'retype'; const PinCode = () => { const { setPincode } = useContext(AccountUserProfileContext); - const { getUser } = useAuthContext(); + const [currentPincode, setCurrentPincode] = useState(''); const [newPincode, setNewPincode] = useState(''); + const [retypePincode, setRetypePincode] = useState(''); + const [errorRetype, setErrorRetype] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const [showPassword, setShowPassword] = useState({ - password: false, + current: false, + new: false, + retype: false, }); const handleResetPassword = useCallback(async () => { - const user: any = await getUser(); + if (newPincode !== retypePincode) { + toast.error('New Pin Code and Retype Pin Code do not match.'); + setErrorRetype('New Pin Code and Retype Pin Code do not match.'); + return; + } setIsSubmitting(true); try { await setPincode({ + currentpincode: currentPincode, newpincode: newPincode, + retypepincode: retypePincode, }); + setCurrentPincode(''); setNewPincode(''); - toast.success('Pin code updated successfully'); + setRetypePincode(''); + setErrorRetype(''); // Clear error after success } catch (error: any) { const errorMessage = error?.response?.data?.message || @@ -38,14 +49,26 @@ const PinCode = () => { } finally { setIsSubmitting(false); } - }, [newPincode, setPincode, getUser]); + }, [currentPincode, newPincode, retypePincode, setPincode]); - const isButtonDisabled = isSubmitting || !newPincode; + const isButtonDisabled = isSubmitting || !currentPincode || !newPincode || !retypePincode; - const togglePassword = useCallback((event: MouseEvent, key: PasswordType) => { - event.preventDefault(); - setShowPassword((prev) => ({ ...prev, [key]: !prev[key] })); - }, []); + const togglePassword = useCallback( + (event: MouseEvent, key: PasswordType) => { + event.preventDefault(); + setShowPassword((prev) => ({ ...prev, [key]: !prev[key] })); + }, + [] + ); + + const handleRetypeChange = (value: string) => { + setRetypePincode(value); + if (newPincode && value && newPincode !== value) { + setErrorRetype('New Pin Code and Retype Pin Code do not match.'); + } else { + setErrorRetype(''); + } + }; return (
@@ -53,30 +76,97 @@ const PinCode = () => {

Pin Code

+ {/* Current Pin Code */}
- +
setNewPincode(e.target.value)} // ✅ fix + className="form-control pr-10" + placeholder="Current Pin Code" + value={currentPincode} + onChange={(e) => setCurrentPincode(e.target.value)} disabled={isSubmitting} - type={showPassword.password ? 'text' : 'password'} + type={showPassword.current ? 'text' : 'password'} />
+ {/* New Pin Code */} +
+ +
+ { + setNewPincode(e.target.value); + // Kalau retype sudah diisi, cek lagi error + if (retypePincode) { + if (e.target.value !== retypePincode) { + setErrorRetype('New Pin Code and Retype Pin Code do not match.'); + } else { + setErrorRetype(''); + } + } + }} + disabled={isSubmitting} + type={showPassword.new ? 'text' : 'password'} + /> + +
+
+ + {/* Retype Pin Code */} +
+ +
+ handleRetypeChange(e.target.value)} + disabled={isSubmitting} + type={showPassword.retype ? 'text' : 'password'} + /> + +
+
+ + {/* Error message under Retype */} + {errorRetype && ( +
{errorRetype}
+ )} + + {/* Submit button */}