import React, { useState, useEffect } from 'react'; import { CertEditor } from '../Editors/CertEditor' const isValidImage = (file) => { const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png']; if (allowedTypes.includes(file.type)) return true; const ext = file.name.split('.').pop().toLowerCase(); return ['jpg', 'jpeg', 'png'].includes(ext); }; export function CertificatesForm({ initCertificates, onChange }) { const [initialCertificates, setInitialCertificates] = useState([]); const [certificates, setCertificates] = useState([]); useEffect(() => { const certificatesWithPictureUrl = initCertificates.map((init) => ({ ...init, picture: `https://api.sovamed.ru/uploads/${init.picture}`})) setInitialCertificates([...certificatesWithPictureUrl]) setCertificates([...certificatesWithPictureUrl]) }, [initCertificates]) useEffect(() => { if (typeof onChange === 'function') { onChange(certificates); } }, [certificates, onChange]); const updateField = (idx, field, value) => { setCertificates(prev => prev.map((cert, i) => i === idx ? { ...cert, [field]: value } : cert ) ); }; const replaceImage = (e, idx) => { const file = e.target.files[0]; if (!file) return; if (!isValidImage(file)) { return window.alert('Изображения должны быть только формата JPG, JPEG или PNG'); } const url = window.URL.createObjectURL(file); setCertificates(prev => prev.map((cert, i) => i === idx ? { ...cert, picture: url, _file: file } : cert ) ); }; const addCertificate = () => { setCertificates(prev => [ ...prev, { name: '', description: '', picture: '', type: 'certificate', active: false, } ]); }; const deleteCertificate = idx => { setCertificates(prev => prev.filter((_, i) => i !== idx)); }; return ( <> {certificates.map((cert, idx) => (