From ed1dafa961198d77bb6d0851494ce800954c1f42 Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Wed, 27 Mar 2024 17:21:59 +0400 Subject: [PATCH] Image: Use the new 'useUploadMediaFromBlobURL' hook (#60208) * Image: Use the new 'useUploadMediaFromBlobURL' hook * Leverage temporaryURL initial state Co-authored-by: Mamaduka Co-authored-by: ntsekouras Co-authored-by: t-hamano --- packages/block-library/src/image/edit.js | 51 +++++------------------ packages/block-library/src/utils/hooks.js | 1 + 2 files changed, 12 insertions(+), 40 deletions(-) diff --git a/packages/block-library/src/image/edit.js b/packages/block-library/src/image/edit.js index fbbb2d481bee63..0dc0e20caceed6 100644 --- a/packages/block-library/src/image/edit.js +++ b/packages/block-library/src/image/edit.js @@ -6,7 +6,7 @@ import classnames from 'classnames'; /** * WordPress dependencies */ -import { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob'; +import { isBlobURL } from '@wordpress/blob'; import { store as blocksStore } from '@wordpress/blocks'; import { Placeholder } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; @@ -28,6 +28,7 @@ import { store as noticesStore } from '@wordpress/notices'; * Internal dependencies */ import { unlock } from '../lock-unlock'; +import { useUploadMediaFromBlobURL } from '../utils/hooks'; import Image from './image'; /** @@ -116,7 +117,9 @@ export function ImageEdit( { align, metadata, } = attributes; - const [ temporaryURL, setTemporaryURL ] = useState(); + const [ temporaryURL, setTemporaryURL ] = useState( () => { + return isTemporaryImage( id, url ) ? url : undefined; + } ); const altRef = useRef(); useEffect( () => { @@ -267,44 +270,12 @@ export function ImageEdit( { } } - let isTemp = isTemporaryImage( id, url ); - - // Upload a temporary image on mount. - useEffect( () => { - if ( ! isTemp ) { - return; - } - - const file = getBlobByURL( url ); - - if ( file ) { - const { mediaUpload } = getSettings(); - if ( ! mediaUpload ) { - return; - } - mediaUpload( { - filesList: [ file ], - onFileChange: ( [ img ] ) => { - onSelectImage( img ); - }, - allowedTypes: ALLOWED_MEDIA_TYPES, - onError: ( message ) => { - isTemp = false; - onUploadError( message ); - }, - } ); - } - }, [] ); - - // If an image is temporary, revoke the Blob url when it is uploaded (and is - // no longer temporary). - useEffect( () => { - if ( isTemp ) { - setTemporaryURL( url ); - return; - } - revokeBlobURL( temporaryURL ); - }, [ isTemp, url ] ); + useUploadMediaFromBlobURL( { + url, + allowedTypes: ALLOWED_MEDIA_TYPES, + onChange: onSelectImage, + onError: onUploadError, + } ); const isExternal = isExternalImage( id, url ); const src = isExternal ? url : undefined; diff --git a/packages/block-library/src/utils/hooks.js b/packages/block-library/src/utils/hooks.js index a89031b5f99ce9..85196fe67ed7ac 100644 --- a/packages/block-library/src/utils/hooks.js +++ b/packages/block-library/src/utils/hooks.js @@ -67,6 +67,7 @@ export function useUploadMediaFromBlobURL( args = {} ) { onChange( media ); }, onError: ( message ) => { + revokeBlobURL( url ); onError( message ); }, } );