UNPKG

@gechiui/block-editor

Version:
75 lines (67 loc) 1.42 kB
/** * External dependencies */ import Cropper from 'react-easy-crop'; import classnames from 'classnames'; /** * GeChiUI dependencies */ import { Spinner } from '@gechiui/components'; /** * Internal dependencies */ import { MIN_ZOOM, MAX_ZOOM } from './constants'; import { useImageEditingContext } from './context'; export default function ImageCropper( { url, width, height, clientWidth, naturalHeight, naturalWidth, } ) { const { isInProgress, editedUrl, position, zoom, aspect, setPosition, setCrop, setZoom, rotation, } = useImageEditingContext(); let editedHeight = height || ( clientWidth * naturalHeight ) / naturalWidth; if ( rotation % 180 === 90 ) { editedHeight = ( clientWidth * naturalWidth ) / naturalHeight; } return ( <div className={ classnames( 'gc-block-image__crop-area', { 'is-applying': isInProgress, } ) } style={ { width: width || clientWidth, height: editedHeight, } } > <Cropper image={ editedUrl || url } disabled={ isInProgress } minZoom={ MIN_ZOOM / 100 } maxZoom={ MAX_ZOOM / 100 } crop={ position } zoom={ zoom / 100 } aspect={ aspect } onCropChange={ setPosition } onCropComplete={ ( newCropPercent ) => { setCrop( newCropPercent ); } } onZoomChange={ ( newZoom ) => { setZoom( newZoom * 100 ); } } /> { isInProgress && <Spinner /> } </div> ); }