"use client" import { useState, useRef, type ChangeEvent } from "react" import { Button } from "@/components/ui/button" import { Textarea } from "@/components/ui/textarea" import { Input } from "@/components/ui/input" import { Image, Video, Link, X } from "lucide-react" interface MessageEditorProps { onMessageChange: (message: { text: string images: File[] video: File | null link: string }) => void defaultValues?: { text: string images: string[] video: string link: string } } export function MessageEditor({ onMessageChange, defaultValues }: MessageEditorProps) { const [text, setText] = useState(defaultValues?.text || "") const [images, setImages] = useState([]) const [imageUrls, setImageUrls] = useState(defaultValues?.images || []) const [video, setVideo] = useState(null) const [videoUrl, setVideoUrl] = useState(defaultValues?.video || "") const [link, setLink] = useState(defaultValues?.link || "") const imageInputRef = useRef(null) const videoInputRef = useRef(null) const handleTextChange = (e: ChangeEvent) => { const newText = e.target.value if (newText.length <= 800) { setText(newText) onMessageChange({ text: newText, images, video, link, }) } } const handleImageUpload = (e: ChangeEvent) => { const files = Array.from(e.target.files || []) if (files.length > 0) { // 检查文件大小和数量限制 const validFiles = files.filter((file) => file.size <= 20 * 1024 * 1024) // 20MB const newImages = [...images, ...validFiles].slice(0, 9) // 最多9张图片 setImages(newImages) // 创建临时URL用于预览 const newImageUrls = newImages.map((file) => URL.createObjectURL(file)) setImageUrls(newImageUrls) onMessageChange({ text, images: newImages, video, link, }) } } const handleVideoUpload = (e: ChangeEvent) => { const file = e.target.files?.[0] if (file && file.size <= 100 * 1024 * 1024) { // 100MB setVideo(file) setVideoUrl(URL.createObjectURL(file)) onMessageChange({ text, images, video: file, link, }) } } const handleLinkChange = (e: ChangeEvent) => { const newLink = e.target.value setLink(newLink) onMessageChange({ text, images, video, link: newLink, }) } const removeImage = (index: number) => { const newImages = [...images] newImages.splice(index, 1) setImages(newImages) const newImageUrls = [...imageUrls] newImageUrls.splice(index, 1) setImageUrls(newImageUrls) onMessageChange({ text, images: newImages, video, link, }) } const removeVideo = () => { setVideo(null) setVideoUrl("") onMessageChange({ text, images, video: null, link, }) } return (