import React, { useState, useEffect } from 'react' import { type FC } from 'react' import Button from '@/components/Button' import Input from '@/components/Input' import DefaulModal from '@/components/DefaulModal' import Select from '@/components/Select' import { useUpdateSlider } from '../hooks/useSettingData' import { useUploadSingle } from '@/pages/uploader/hooks/useUploaderData' import { type SliderItem, type UpdateSliderType } from '../types/Types' import { toast } from 'react-toastify' import { extractErrorMessage } from '@/helpers/utils' import UploadBox from '@/components/UploadBox' import Switch from '@/components/Switch' interface EditSliderModalProps { slider: SliderItem isOpen: boolean onClose: () => void onSuccess: () => void } const EditSliderModal: FC = ({ slider, isOpen, onClose, onSuccess }) => { const [formData, setFormData] = useState({ displayLocation: 'desktop', imageUrl: '', altText: '', title: '', linkUrl: '', isActive: true, }) const [imageFile, setImageFile] = useState([]) const updateSliderMutation = useUpdateSlider() const uploadSingle = useUploadSingle() useEffect(() => { if (slider) { setFormData({ displayLocation: slider.displayLocation, imageUrl: slider.imageUrl, altText: slider.altText, title: slider.title, linkUrl: slider.linkUrl, isActive: slider.isActive, }) } }, [slider]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!formData.title || !formData.altText || !formData.linkUrl) { toast.error('لطفا تمام فیلدهای الزامی را پر کنید') return } try { let finalImageUrl = formData.imageUrl // Upload new image if selected if (imageFile.length > 0) { const uploadResponse = await uploadSingle.mutateAsync(imageFile[0]) finalImageUrl = uploadResponse.results?.url?.url if (!finalImageUrl) { toast.error('خطا در آپلود تصویر') return } } // Update slider await updateSliderMutation.mutateAsync({ id: slider._id, params: { displayLocation: formData.displayLocation, imageUrl: finalImageUrl, altText: formData.altText, title: formData.title, linkUrl: formData.linkUrl, isActive: formData.isActive, } }, { onError: (error) => { toast.error(extractErrorMessage(error)) } }) toast.success('اسلایدر با موفقیت بروزرسانی شد') handleClose() onSuccess() } catch (error) { toast.error('خطا در آپلود تصویر') } } const handleClose = () => { setFormData({ displayLocation: 'desktop', imageUrl: '', altText: '', title: '', linkUrl: '', isActive: true, }) setImageFile([]) onClose() } const displayLocationOptions = [ { value: 'desktop', label: 'دسکتاپ' }, { value: 'mobile', label: 'موبایل' }, ] return (
{/* محل نمایش */}
setFormData(prev => ({ ...prev, title: e.target.value }))} placeholder="عنوان اسلایدر را وارد کنید" required />
{/* متن جایگزین */}
setFormData(prev => ({ ...prev, altText: e.target.value }))} placeholder="توضیح تصویر برای دسترسی" required />
{/* لینک */}
setFormData(prev => ({ ...prev, linkUrl: e.target.value }))} placeholder="/summer-sale" required />
{/* وضعیت */}
setFormData(prev => ({ ...prev, isActive: value }))} label="فعال" />
) } export default EditSliderModal