import { useState } from 'react' import { useTranslation } from 'react-i18next' import { toast } from 'sonner' import { parseNewlineSeparatedUrls } from '#/utils/common' import { dashboardAdapter } from '@/adapters/dashboard' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Textarea } from '@/components/ui/textarea' interface UrlInputDialogProps { open: boolean onOpenChange: (open: boolean) => void initialValue: string onSubmit: (urls: string[], invalidLines: string[]) => Promise } export function UrlInputDialog ({ open, onOpenChange, initialValue, onSubmit }: UrlInputDialogProps) { const { t } = useTranslation() const [value, setValue] = useState(initialValue) const handleOpenChange = (next: boolean) => { if (next) setValue(initialValue) onOpenChange(next) } const handleSubmit = async () => { if (!value.trim()) return const { urls, invalidLines } = parseNewlineSeparatedUrls(value, { source: 'plain' }) if (!urls.length) { if (invalidLines.length > 0) { dashboardAdapter.logInvalidUrlLines(invalidLines) toast.error(t('TIPS_SKIPPED_INVALID_URLS', { n: invalidLines.length })) return } toast.error(t('TIPS_NO_VALID_URLS')) return } const didStart = await onSubmit(urls, invalidLines) if (didStart) { onOpenChange(false) setValue('') } } return ( {t('TIPS_INPUT_URL')}