'use client'; import React, { useState } from 'react'; import { useRouter } from 'next/navigation'; import { ArrowLeft, Save, X } from 'lucide-react'; import Link from 'next/link'; import TextEditor from '@/app/admin/components/TextEditor'; import ImageUpload from '@/app/admin/components/ImageUpload'; const NEWS_CATEGORIES = [ { id: 'company', name: 'Новости компании' }, { id: 'promotions', name: 'Акции' }, { id: 'other', name: 'Другое' } ]; export default function CreateNewsPage() { const router = useRouter(); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ title: '', slug: '', summary: '', content: '', category: 'company', imageUrl: '', featured: false, published: true, publishedAt: new Date().toISOString().slice(0, 16), tags: [] as string[] }); const [tagInput, setTagInput] = useState(''); const generateSlug = (title: string) => { return title .toLowerCase() .replace(/[^a-z0-9а-я]/g, '-') .replace(/-+/g, '-') .replace(/^-|-$/g, ''); }; const handleTitleChange = (title: string) => { setFormData(prev => ({ ...prev, title, slug: generateSlug(title) })); }; const handleAddTag = () => { if (tagInput.trim() && !formData.tags.includes(tagInput.trim())) { setFormData(prev => ({ ...prev, tags: [...prev.tags, tagInput.trim()] })); setTagInput(''); } }; const handleRemoveTag = (tagToRemove: string) => { setFormData(prev => ({ ...prev, tags: prev.tags.filter(tag => tag !== tagToRemove) })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { const response = await fetch('/api/news', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...formData, publishedAt: new Date(formData.publishedAt).toISOString() }) }); const data = await response.json(); if (data.success) { router.push('/admin/news'); } else { console.error('Error creating news:', data.error); alert('Ошибка при создании новости'); } } catch (error) { console.error('Error creating news:', error); alert('Ошибка при создании новости'); } finally { setLoading(false); } }; const handleSaveAsDraft = async () => { const draftData = { ...formData, published: false }; setFormData(draftData); // Сохраняем как черновик try { const response = await fetch('/api/news', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...draftData, publishedAt: new Date(draftData.publishedAt).toISOString() }) }); const data = await response.json(); if (data.success) { router.push('/admin/news'); } } catch (error) { console.error('Error saving draft:', error); } }; return (
{/* Header */}

Создать новость

Заполните форму для создания новой новости

{/* Main Content */}
{/* Title */}
handleTitleChange(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="Введите заголовок новости" required />
{/* Slug */}
setFormData(prev => ({ ...prev, slug: e.target.value }))} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="url-novosti" required />

URL будет: /news/{formData.slug}

{/* Summary */}