import { useState } from 'react'; import { useQuery, useMutation } from '@tanstack/react-query'; import { useNavigate } from 'react-router-dom'; import toast from 'react-hot-toast'; import { ArrowLeft, Save } from 'lucide-react'; import { api } from '../../lib/api-client'; import { AppShell, PageHeader, PageBody } from '../../layout/AppShell'; import { Button, Card, CardContent, Input, Label, Select } from '../../components/ui/primitives'; import type { Provider, Feed } from './types'; export function FeedNew() { const navigate = useNavigate(); const [form, setForm] = useState({ provider_id: 0, name: '', slug: '', feed_url: '', sync_frequency_hours: 24, is_active: true, }); const { data: providers } = useQuery({ queryKey: ['providers'], queryFn: () => api.get<{ providers: Provider[] }>('/providers'), }); const createMut = useMutation({ mutationFn: (body: typeof form) => api.post<{ feed: Feed }>('/feeds', body), onSuccess: (res) => { toast.success('Feed aangemaakt'); navigate(`/cms/feeds/${res.feed.id}`); }, onError: (e: Error) => toast.error(e.message), }); function submit(e: React.FormEvent) { e.preventDefault(); if (!form.provider_id || !form.name || !form.feed_url) { toast.error('Provider, naam en URL zijn verplicht'); return; } const slug = form.slug || form.name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); createMut.mutate({ ...form, slug }); } return ( navigate('/cms/feeds')}> Terug } />
setForm({ ...form, name: e.target.value })} placeholder="bv. Nike.com via AWIN" required />
setForm({ ...form, slug: e.target.value })} placeholder="auto-gegenereerd uit naam" />
setForm({ ...form, feed_url: e.target.value })} placeholder="https://..." required />
setForm({ ...form, sync_frequency_hours: Number(e.target.value) })} />
); }