@gechiui/block-editor
Version:
85 lines (74 loc) • 2.27 kB
JavaScript
;
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