import React, { useState, createRef, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import { Inputs } from '@buffetjs/custom'; import { useGlobalContext } from 'strapi-helper-plugin'; import Cropper from 'cropperjs'; import 'cropperjs/dist/cropper.css'; import CardControl from '../CardControl'; import CardControlsWrapper from '../CardControlsWrapper'; import ModalSection from '../ModalSection'; import FileDetailsBox from './FileDetailsBox'; import FileWrapper from './FileWrapper'; import Form from './Form'; import Row from './Row'; import Wrapper from './Wrapper'; import form from './utils/form'; const EditForm = ({ onChange, onSubmit }) => { const { formatMessage } = useGlobalContext(); const [isCropping, setIsCropping] = useState(false); const [cropResult, setCropResult] = useState(null); const imgRef = createRef(); let cropper = useRef(); useEffect(() => { if (isCropping) { cropper.current = new Cropper(imgRef.current, { modal: false, initialAspectRatio: 16 / 9, movable: true, zoomable: false, cropBoxResizable: true, background: false, }); } else if (cropper.current) { cropper.current.destroy(); } return () => { if (cropper.current) { cropper.current.destroy(); } }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [cropper, isCropping]); const handleToggleCropMode = () => { setIsCropping(prev => !prev); }; const handleClick = () => { if (cropper) { const canvas = cropper.current.getCroppedCanvas(); setCropResult(canvas.toDataURL()); } setIsCropping(false); }; return (
{!isCropping ? ( <> ) : ( <> )} {isCropping ? ( ) : ( )}
{form.map(({ key, inputs }) => { return ( {inputs.map(input => { return (
); })}
); })}
); }; EditForm.defaultProps = { onChange: () => {}, onSubmit: e => e.preventDefault(), }; EditForm.propTypes = { onChange: PropTypes.func, onSubmit: PropTypes.func, }; export default EditForm;