import axios from 'axios'; import classNames from 'classnames'; import React, { PropsWithChildren, useRef, useState } from 'react'; import useRoute from '@/Hooks/useRoute'; import DialogModal from '@/Components/DialogModal'; import InputError from '@/Components/InputError'; import PrimaryButton from '@/Components/PrimaryButton'; import TextInput from '@/Components/TextInput'; import SecondaryButton from '@/Components/SecondaryButton'; interface Props { title?: string; content?: string; button?: string; onConfirm(): void; } export default function ConfirmsPassword({ title = 'Confirm Password', content = 'For your security, please confirm your password to continue.', button = 'Confirm', onConfirm, children, }: PropsWithChildren) { const route = useRoute(); const [confirmingPassword, setConfirmingPassword] = useState(false); const [form, setForm] = useState({ password: '', error: '', processing: false, }); const passwordRef = useRef(null); function startConfirmingPassword() { axios.get(route('password.confirmation')).then(response => { if (response.data.confirmed) { onConfirm(); } else { setConfirmingPassword(true); setTimeout(() => passwordRef.current?.focus(), 250); } }); } function confirmPassword() { setForm({ ...form, processing: true }); axios .post(route('password.confirm'), { password: form.password, }) .then(() => { closeModal(); setTimeout(() => onConfirm(), 250); }) .catch(error => { setForm({ ...form, processing: false, error: error.response.data.errors.password[0], }); passwordRef.current?.focus(); }); } function closeModal() { setConfirmingPassword(false); setForm({ processing: false, password: '', error: '' }); } return ( {children} {content}
setForm({ ...form, password: e.currentTarget.value }) } />
Cancel {button}
); }