import { useState, useContext, useCallback, MouseEvent } from 'react'; import { AccountUserProfileContext } from '../hooks'; import { toast } from 'sonner'; import { getAuth,useAuthContext } from '@/auth'; import { KeenIcon } from '@/components'; type PasswordType = 'current' | 'new' | 'retype'; const PinCode = () => { const { setPincode } = useContext(AccountUserProfileContext); 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({ current: false, new: false, retype: false, }); const handleResetPassword = useCallback(async () => { 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(''); setRetypePincode(''); setErrorRetype(''); // Clear error after success } catch (error: any) { const errorMessage = error?.response?.data?.message || error?.message || 'An error occurred while updating the pin code.'; toast.error(errorMessage); } finally { setIsSubmitting(false); } }, [currentPincode, newPincode, retypePincode, setPincode]); const isButtonDisabled = isSubmitting || !currentPincode || !newPincode || !retypePincode; 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 (

Pin Code

{/* Current Pin Code */}
setCurrentPincode(e.target.value)} disabled={isSubmitting} 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 */}
); }; export { PinCode };