"use client"; import { useState } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useToast } from '@/contexts/ToastContext'; export default function NewService() { const router = useRouter(); const { success, error } = useToast(); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ title: '', icon: 'ri-settings-3-line', active: true, order: 0, shortDescription: '', fullDescription: '' }); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.title) { error('Informe ao menos o título do serviço.'); return; } setLoading(true); try { const response = await fetch('/api/services', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ title: formData.title.trim(), icon: formData.icon.trim() || 'ri-settings-3-line', shortDescription: formData.shortDescription?.trim() || null, fullDescription: formData.fullDescription?.trim() || null, active: formData.active, order: formData.order, }), }); const data = await response.json().catch(() => ({})); if (!response.ok) { throw new Error(data?.error || 'Erro ao salvar serviço'); } success('Serviço cadastrado com sucesso!'); router.push('/admin/servicos'); } catch (err) { console.error('Erro ao salvar serviço:', err); error(err instanceof Error ? err.message : 'Não foi possível salvar o serviço.'); } finally { setLoading(false); } }; return (

Novo Serviço

Adicione um novo serviço ao catálogo.

Informações do Serviço

setFormData({...formData, title: e.target.value})} className="w-full px-4 py-3 bg-gray-50 dark:bg-white/5 border border-gray-200 dark:border-white/10 rounded-xl text-gray-900 dark:text-white focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary transition-all" placeholder="Ex: Engenharia Veicular" required />
setFormData({...formData, icon: e.target.value})} className="w-full px-4 py-3 bg-gray-50 dark:bg-white/5 border border-gray-200 dark:border-white/10 rounded-xl text-gray-900 dark:text-white focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary transition-all" placeholder="Ex: ri-truck-line" required />

Consulte a lista de ícones em remixicon.com

setFormData({...formData, order: parseInt(e.target.value) || 0})} className="w-full px-4 py-3 bg-gray-50 dark:bg-white/5 border border-gray-200 dark:border-white/10 rounded-xl text-gray-900 dark:text-white focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary transition-all" min="0" />

Menor número = aparece primeiro

setFormData({...formData, shortDescription: e.target.value})} className="w-full px-4 py-3 bg-gray-50 dark:bg-white/5 border border-gray-200 dark:border-white/10 rounded-xl text-gray-900 dark:text-white focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary transition-all" placeholder="Breve descrição para os cards da home..." maxLength={150} />

{formData.shortDescription.length}/150

Cancelar
); }