import React, { useState, useEffect } from 'react'; import { apiUrl } from '@/config/api'; 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 PortfolioForm({ initPortfolios, onChange }) { const [initialPortfolios, setInitialPorfolios] = useState([]); const [portfolios, setPortfolios] = useState([]); useEffect(() => { // console.log(initPortfolios) const portfolioWithPictureUrl = initPortfolios.map((init) => { if ( init.picture ) return ({ ...init, picture: apiUrl(`/uploads/${init.picture}`)}) return { ...init } }) setInitialPorfolios([...portfolioWithPictureUrl]) setPortfolios([...portfolioWithPictureUrl]) }, [initPortfolios]) useEffect(() => { if (typeof onChange === 'function') { onChange(portfolios); } }, [portfolios, onChange]); const updateField = (idx, field, value) => { setPortfolios(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); setPortfolios(prev => prev.map((cert, i) => i === idx ? { ...cert, picture: url, _file: file } : cert ) ); // console.log('==================') // console.log(file) }; const addCertificate = () => { setPortfolios(prev => [ ...prev, { name: '', description: '', picture: '', type: 'portfolio', active: false } ]); }; const deleteCertificate = idx => { setPortfolios(prev => prev.filter((_, i) => i !== idx)); }; return ( <> {portfolios.map((cert, idx) => (