// Copyright 2025 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React, { useEffect, useState } from 'react'; import type { LocalizerType } from '../types/Util.js'; import { Modal } from './Modal.js'; import { Button, ButtonVariant } from './Button.js'; import { DAY } from '../util/durations/index.js'; export type PropsType = { // Test-only _timeout?: number; i18n: LocalizerType; onCancelDonation: () => unknown; onOpenBrowser: () => unknown; onTimedOut: () => unknown; }; export function DonationVerificationModal(props: PropsType): JSX.Element { const { _timeout, i18n, onCancelDonation, onOpenBrowser, onTimedOut } = props; const [hasOpenedBrowser, setHasOpenedBrowser] = useState(false); const titleText = hasOpenedBrowser ? i18n('icu:Donations__3dsValidationNeeded--waiting') : i18n('icu:Donations__3dsValidationNeeded'); const openBrowserText = hasOpenedBrowser ? i18n('icu:Donations__3dsValidationNeeded__OpenBrowser--opened') : i18n('icu:Donations__3dsValidationNeeded__OpenBrowser'); const footer = ( <> ); useEffect(() => { let timeout: NodeJS.Timeout | undefined = setTimeout(() => { timeout = undefined; onTimedOut(); }, _timeout ?? DAY); return () => { if (timeout) { clearTimeout(timeout); } }; }, [_timeout, onTimedOut]); return ( {i18n('icu:Donations__3dsValidationNeeded__Description')} ); }