import { useState } from 'react' import StyledModal, { StyledModalProps } from './StyledModal' import Input from './inputs/Input' import api from '~/lib/api' import { useTranslation } from 'react-i18next' export type DownloadURLModalProps = Omit< StyledModalProps, 'onConfirm' | 'open' | 'confirmText' | 'cancelText' | 'confirmVariant' | 'children' > & { suggestedURL?: string onPreflightSuccess?: (url: string) => void } const DownloadURLModal: React.FC = ({ suggestedURL, onPreflightSuccess, ...modalProps }) => { const { t } = useTranslation() const [url, setUrl] = useState('') const [messages, setMessages] = useState([]) const [loading, setLoading] = useState(false) async function runPreflightCheck(downloadUrl: string) { try { setLoading(true) setMessages([t('mapsManager.preflightRunning', { url: downloadUrl })]) const res = await api.downloadRemoteMapRegionPreflight(downloadUrl) if (!res) { throw new Error(t('mapsManager.preflightUnknownError')) } if ('message' in res) { throw new Error(res.message) } setMessages((prev) => [ ...prev, t('mapsManager.preflightPassed', { filename: res.filename, size: (res.size / (1024 * 1024)).toFixed(2) }), ]) if (onPreflightSuccess) { onPreflightSuccess(downloadUrl) } } catch (error) { console.error('Preflight check failed:', error) setMessages((prev) => [...prev, t('mapsManager.preflightFailed', { error: error.message })]) } finally { setLoading(false) } } return ( runPreflightCheck(url)} open={true} confirmText={t('mapsManager.download')} confirmIcon="IconDownload" cancelText={t('mapsManager.cancel')} confirmVariant="primary" confirmLoading={loading} cancelLoading={loading} large >

{t('mapsManager.downloadModalDescription')}

setUrl(e.target.value)} />
{messages.map((message, idx) => (

{message}

))}
) } export default DownloadURLModal