UNPKG

@gechiui/block-editor

Version:
85 lines (74 loc) 2.27 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useSaveImage; var _apiFetch = _interopRequireDefault(require("@gechiui/api-fetch")); var _data = require("@gechiui/data"); var _element = require("@gechiui/element"); var _i18n = require("@gechiui/i18n"); var _notices = require("@gechiui/notices"); /** * GeChiUI dependencies */ function useSaveImage(_ref) { let { crop, rotation, height, width, aspect, url, id, onSaveImage, onFinishEditing } = _ref; const { createErrorNotice } = (0, _data.useDispatch)(_notices.store); const [isInProgress, setIsInProgress] = (0, _element.useState)(false); const cancel = (0, _element.useCallback)(() => { setIsInProgress(false); onFinishEditing(); }, [setIsInProgress, onFinishEditing]); const apply = (0, _element.useCallback)(() => { setIsInProgress(true); let attrs = {}; // The crop script may return some very small, sub-pixel values when the image was not cropped. // Crop only when the new size has changed by more than 0.1%. if (crop.width < 99.9 || crop.height < 99.9) { attrs = crop; } if (rotation > 0) { attrs.rotation = rotation; } attrs.src = url; (0, _apiFetch.default)({ path: `/gc/v2/media/${id}/edit`, method: 'POST', data: attrs }).then(response => { onSaveImage({ id: response.id, url: response.source_url, height: height && width ? width / aspect : undefined }); }).catch(error => { createErrorNotice((0, _i18n.sprintf)( /* translators: 1. Error message */ (0, _i18n.__)('无法编辑图片。%s'), error.message), { id: 'image-editing-error', type: 'snackbar' }); }).finally(() => { setIsInProgress(false); onFinishEditing(); }); }, [setIsInProgress, crop, rotation, height, width, aspect, url, onSaveImage, createErrorNotice, setIsInProgress, onFinishEditing]); return (0, _element.useMemo)(() => ({ isInProgress, apply, cancel }), [isInProgress, apply, cancel]); } //# sourceMappingURL=use-save-image.js.map