'use client' import { useState } from 'react' import Image from 'next/image' import { addToast } from '@/lib/toast' import Button from '@/components/formElements/Button' import TrashIcon from '@/components/icons/TrashIcon' import ImageUploadIcon from '@/components/icons/ImageUploadIcon' import axiosInstance from '@/config/axios' import { parseUploadedFile } from '@/helpers' import { prepareImageForUpload, SAFE_IMAGE_ACCEPT } from '@/lib/fileValidation' interface ArticleFeaturedImageUploaderProps { value: string onChange: (url: string) => void } const ArticleFeaturedImageUploader = ({ value, onChange }: ArticleFeaturedImageUploaderProps) => { const [uploading, setUploading] = useState(false) const handleFileChange = async (e: React.ChangeEvent) => { const file = e.target.files?.[0] e.target.value = '' if (!file) return const prepared = await prepareImageForUpload(file) if (typeof prepared === 'string') { addToast({ title: prepared, color: 'danger' }) return } setUploading(true) try { const data = new FormData() data.append('file', prepared) const result = await axiosInstance.post('/uploads', data) const uploaded = parseUploadedFile(result.data) if (!uploaded) throw new Error('آپلود ناموفق بود') onChange(uploaded.url) } catch { addToast({ title: 'آپلود تصویر ناموفق بود', color: 'danger' }) } finally { setUploading(false) } } if (value) { return (
) } return ( ) } export default ArticleFeaturedImageUploader