'use client'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { parseErrorResponse } from '../../../lib/error-handler'; export default function ImportFilePage() { const router = useRouter(); const [selectedMethod, setSelectedMethod] = useState<'file' | 'url' | null>('file'); const [selectedFile, setSelectedFile] = useState(null); const [url, setUrl] = useState(''); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const handleFileSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedFile) { setError('Välj en PDF eller bildfil först.'); return; } setError(null); setIsLoading(true); try { const formData = new FormData(); formData.append('file', selectedFile); const res = await fetch('/api/quick-import-proxy', { method: 'POST', body: formData, }); if (!res.ok) { const errorMessage = await parseErrorResponse(res); throw new Error(errorMessage); } const data = await res.json(); sessionStorage.setItem('prefilled_markdown', data.markdown ?? ''); if (data.imageUrl) { sessionStorage.setItem('prefilled_image_url', data.imageUrl); } else { sessionStorage.removeItem('prefilled_image_url'); } router.push('/recipes/write'); } catch (err) { setError(err instanceof Error ? err.message : 'Importen misslyckades.'); } finally { setIsLoading(false); } }; const handleUrlSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!url.trim()) { setError('Vänligen ange en URL.'); return; } setError(null); setIsLoading(true); try { const res = await fetch('/api/quick-import-proxy', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ input: url.trim() }), }); if (!res.ok) { const errorMessage = await parseErrorResponse(res); throw new Error(errorMessage); } const data = await res.json(); sessionStorage.setItem('prefilled_markdown', data.markdown ?? ''); if (data.imageUrl) { sessionStorage.setItem('prefilled_image_url', data.imageUrl); } else { sessionStorage.removeItem('prefilled_image_url'); } router.push('/recipes/write'); } catch (err) { setError(err instanceof Error ? err.message : 'Importen misslyckades.'); } finally { setIsLoading(false); } }; return (

Importera från fil eller länk

Ladda upp en PDF eller bild för OCR, eller ange en receptlänk.

{error && (
{error}
)}
setSelectedMethod('file')} style={{ padding: '2rem', border: selectedMethod === 'file' ? '2px solid #0070f3' : '2px solid #e5e7eb', borderRadius: '8px', background: selectedMethod === 'file' ? '#f0f9ff' : '#f9fafb', cursor: 'pointer', }} >

Ladda upp PDF eller bild

Stöd för PDF, PNG, JPG, JPEG, WEBP och BMP.

{selectedMethod === 'file' && (
setSelectedFile(e.target.files?.[0] ?? null)} style={{ padding: '0.75rem', background: 'white', border: '1px solid #cbd5e1', borderRadius: '6px', }} />
)}
setSelectedMethod('url')} style={{ padding: '2rem', border: selectedMethod === 'url' ? '2px solid #10b981' : '2px solid #e5e7eb', borderRadius: '8px', background: selectedMethod === 'url' ? '#f0fdf4' : '#f9fafb', cursor: 'pointer', }} >

Länk till recept

Ange URL till exempelvis ICA eller en annan receptsida.

{selectedMethod === 'url' && (
setUrl(e.target.value)} placeholder="https://exempel.se/recept/..." style={{ width: '100%', padding: '0.75rem', border: '1px solid #d1d5db', borderRadius: '6px', fontSize: '0.9rem', boxSizing: 'border-box', }} />
)}
Efter import öppnas receptet automatiskt i redigeringsläget.
Tillbaka Skriv in recept istället
); }