import { useEffect, useState } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useQuery, useMutation } from '@tanstack/react-query'; 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, Textarea } from '../../components/ui/primitives'; import { Tabs, TabsList, TabsTrigger, TabsContent } from '../../components/ui/tabs'; interface Brand { slug: string; name: string; tagline: string | null; description: string | null; long_description: string | null; founded: string | null; headquarters: string | null; founders: string | null; logo_url: string | null; hero_image_url: string | null; popular_models: Array<{ name: string; slug?: string }>; seo_title: string | null; seo_description: string | null; enabled: boolean; sort_order: number; } export function BrandEditor() { const { slug } = useParams<{ slug: string }>(); const navigate = useNavigate(); const [form, setForm] = useState | null>(null); const { data } = useQuery({ queryKey: ['brand-content', slug], queryFn: () => api.get<{ brand: Brand }>(`/brands/${slug}`), enabled: !!slug, }); useEffect(() => { if (data?.brand) setForm(data.brand); }, [data?.brand]); const saveMut = useMutation({ mutationFn: (body: Partial) => api.put(`/brands/${slug}`, body), onSuccess: () => toast.success('Merk opgeslagen'), onError: (e: Error) => toast.error(e.message), }); if (!form) { return ( ); } return ( } /> Info Content SEO
setForm({ ...form, name: e.target.value })} />
setForm({ ...form, tagline: e.target.value })} />
setForm({ ...form, founded: e.target.value })} placeholder="1964" />
setForm({ ...form, headquarters: e.target.value })} placeholder="Beaverton, Oregon" />
setForm({ ...form, founders: e.target.value })} />
setForm({ ...form, logo_url: e.target.value })} />
setForm({ ...form, hero_image_url: e.target.value })} />