"use client"; import { useState, useRef } from "react"; import { SectionEditor } from "../_components/SectionEditor"; import { InputField, TextareaField } from "../_components/FormField"; import { ArrayEditor } from "../_components/ArrayEditor"; import { Upload, Loader2, ImageIcon, X } from "lucide-react"; import type { NewsItem } from "@/types/content"; interface NewsData { title: string; items: NewsItem[]; } function ImageUploadField({ value, onChange, }: { value: string; onChange: (path: string) => void; }) { const [uploading, setUploading] = useState(false); const inputRef = useRef(null); async function handleUpload(e: React.ChangeEvent) { const file = e.target.files?.[0]; if (!file) return; setUploading(true); const formData = new FormData(); formData.append("file", file); formData.append("folder", "news"); try { const res = await fetch("/api/admin/upload", { method: "POST", body: formData, }); const result = await res.json(); if (result.path) onChange(result.path); } catch { /* upload failed */ } finally { setUploading(false); } } return (
{value ? (
{value.split("/").pop()}
) : ( )}
); } export default function NewsEditorPage() { return ( sectionKey="news" title="Новости"> {(data, update) => ( <> update({ ...data, title: v })} /> update({ ...data, items })} renderItem={(item, _i, updateItem) => (
updateItem({ ...item, title: v })} /> updateItem({ ...item, date: v })} placeholder="2026-03-15" />
updateItem({ ...item, text: v })} />
updateItem({ ...item, image: v || undefined })} /> updateItem({ ...item, link: v || undefined })} placeholder="https://instagram.com/p/..." />
)} createItem={(): NewsItem => ({ title: "", text: "", date: new Date().toISOString().slice(0, 10), })} addLabel="Добавить новость" /> )} ); }