import React, { useState, useEffect, useRef } 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 StocksForm({ initStocks, onChange }) { const [ initialStocks, setInitialStocks ] = useState([]); const [ stocks, setStocks ] = useState([]); const startDateInputRef = useRef(null); const endDateInputRef = useRef(null); useEffect(() => { // console.log(initStocks) // console.log(initStocks[0]?.startDate) // console.log(typeof initStocks[0]?.startDate) const portfolioWithPictureUrl = initStocks.map((init) => { if ( init.picture ) return ({ ...init, picture: apiUrl(`/uploads/${init.picture}`)}) return { ...init } }).map(init => { const dateStart = new Date(init.startDate); const year = dateStart.getFullYear(); const month = String(dateStart.getMonth() + 1).padStart(2, '0'); // Month is 0-indexed const day = String(dateStart.getDate()).padStart(2, '0'); const hours = String(dateStart.getHours()).padStart(2, '0'); const minutes = String(dateStart.getMinutes()).padStart(2, '0'); const datetimeLocalValue = `${year}-${month}-${day}T${hours}:${minutes}`; const dateEnd = new Date(init.endDate); const year1 = dateEnd.getFullYear(); const month1 = String(dateEnd.getMonth() + 1).padStart(2, '0'); // Month is 0-indexed const day1 = String(dateEnd.getDate()).padStart(2, '0'); const hours1 = String(dateEnd.getHours()).padStart(2, '0'); const minutes1 = String(dateEnd.getMinutes()).padStart(2, '0'); const datetimeLocalValue1 = `${year1}-${month1}-${day1}T${hours1}:${minutes1}`; return ({ ...init, startDate: datetimeLocalValue, endDate: datetimeLocalValue1 }); }) setInitialStocks([...portfolioWithPictureUrl]) setStocks([...portfolioWithPictureUrl]) }, [initStocks]) useEffect(() => { if (typeof onChange === 'function') { onChange(stocks); } }, [stocks, onChange]); const updateField = (idx, field, value) => { setStocks(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); setStocks(prev => prev.map((cert, i) => i === idx ? { ...cert, picture: url, _file: file } : cert ) ); // console.log('==================') // console.log(file) }; const addCertificate = () => { setStocks(prev => [ ...prev, { name: '', description: '', picture: '', type: 'portfolio', active: false } ]); }; const deleteCertificate = idx => { setStocks(prev => prev.filter((_, i) => i !== idx)); }; return ( <> {stocks.map((cert, idx) => (
updateField(idx, 'name', e.target.value)} // readOnly={true} />
updateField(idx, 'anons', newVal)} readOnly={true} />
updateField(idx, 'contnet', newVal)} readOnly={true} />
{ if (startDateInputRef.current?.showPicker) { startDateInputRef.current.showPicker(); } }} onChange={e => updateField(idx, 'startDate', e.target.value)} />
{ if (endDateInputRef.current?.showPicker) { endDateInputRef.current.showPicker(); } }} onChange={e => updateField(idx, 'endDate', e.target.value)} />
{cert.picture && ( Портфолио e.currentTarget.src = '/placeholder.png'} /> )}
))} ); }