UNPKG

@wordpress/block-editor

Version:
8 lines (7 loc) 6.27 kB
{ "version": 3, "sources": ["../../../src/components/image-editor/use-save-image.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { mediaEditKey } from '../../store/private-keys';\n\nconst messages = {\n\tcrop: __( 'Image cropped.' ),\n\trotate: __( 'Image rotated.' ),\n\tcropAndRotate: __( 'Image cropped and rotated.' ),\n};\n\nexport default function useSaveImage( {\n\tcrop,\n\trotation,\n\turl,\n\tid,\n\tonSaveImage,\n\tonFinishEditing,\n} ) {\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst [ isInProgress, setIsInProgress ] = useState( false );\n\tconst { editMediaEntity } = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\teditMediaEntity: settings?.[ mediaEditKey ],\n\t\t};\n\t}, [] );\n\n\tconst cancel = useCallback( () => {\n\t\tsetIsInProgress( false );\n\t\tonFinishEditing();\n\t}, [ onFinishEditing ] );\n\n\tconst apply = useCallback( async () => {\n\t\tif ( ! editMediaEntity ) {\n\t\t\tonFinishEditing();\n\t\t\tcreateErrorNotice(\n\t\t\t\t__( 'Sorry, you are not allowed to edit images on this site.' ),\n\t\t\t\t{\n\t\t\t\t\tid: 'image-editing-error',\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsInProgress( true );\n\n\t\tconst modifiers = [];\n\n\t\tif ( rotation > 0 ) {\n\t\t\tmodifiers.push( {\n\t\t\t\ttype: 'rotate',\n\t\t\t\targs: {\n\t\t\t\t\tangle: rotation,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\t// The crop script may return some very small, sub-pixel values when the image was not cropped.\n\t\t// Crop only when the new size has changed by more than 0.1%.\n\t\tif ( crop.width < 99.9 || crop.height < 99.9 ) {\n\t\t\tmodifiers.push( {\n\t\t\t\ttype: 'crop',\n\t\t\t\targs: {\n\t\t\t\t\tleft: crop.x,\n\t\t\t\t\ttop: crop.y,\n\t\t\t\t\twidth: crop.width,\n\t\t\t\t\theight: crop.height,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\tif ( modifiers.length === 0 ) {\n\t\t\t// No changes to apply.\n\t\t\tsetIsInProgress( false );\n\t\t\tonFinishEditing();\n\t\t\treturn;\n\t\t}\n\n\t\tconst modifierType =\n\t\t\tmodifiers.length === 1 ? modifiers[ 0 ].type : 'cropAndRotate';\n\n\t\ttry {\n\t\t\tconst savedImage = await editMediaEntity(\n\t\t\t\tid,\n\t\t\t\t{\n\t\t\t\t\tsrc: url,\n\t\t\t\t\tmodifiers,\n\t\t\t\t},\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\tif ( savedImage ) {\n\t\t\t\tonSaveImage( {\n\t\t\t\t\tid: savedImage.id,\n\t\t\t\t\turl: savedImage.source_url,\n\t\t\t\t} );\n\n\t\t\t\tcreateSuccessNotice( messages[ modifierType ], {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tactions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( 'Undo' ),\n\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\tonSaveImage( {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t} );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\tcreateErrorNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: Error message. */\n\t\t\t\t\t__( 'Could not edit image. %s' ),\n\t\t\t\t\tstripHTML( error.message )\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tid: 'image-editing-error',\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t} finally {\n\t\t\tsetIsInProgress( false );\n\t\t\tonFinishEditing();\n\t\t}\n\t}, [\n\t\tcrop,\n\t\trotation,\n\t\tid,\n\t\turl,\n\t\tonSaveImage,\n\t\tcreateErrorNotice,\n\t\tcreateSuccessNotice,\n\t\tonFinishEditing,\n\t\teditMediaEntity,\n\t] );\n\n\treturn useMemo(\n\t\t() => ( {\n\t\t\tisInProgress,\n\t\t\tapply,\n\t\t\tcancel,\n\t\t} ),\n\t\t[ isInProgress, apply, cancel ]\n\t);\n}\n"], "mappings": "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", "names": ["noticesStore", "blockEditorStore", "stripHTML"] }