@lyra/form-builder
Version:
Lyra form builder
63 lines (45 loc) • 3.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = uploadImage;
var _rxjs = require('rxjs');
var _operators = require('rxjs/operators');
var _readExif = require('./image/readExif');
var _readExif2 = _interopRequireDefault(_readExif);
var _rotateImage = require('./image/rotateImage');
var _rotateImage2 = _interopRequireDefault(_rotateImage);
var _orient = require('./image/orient');
var _patches = require('../../utils/patches');
var _constants = require('./constants');
var _utils = require('./utils');
var _assets = require('../inputs/client-adapters/assets');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// The eslint import plugin doesn't work well with opaque types
// https://github.com/benmosher/eslint-plugin-import/issues/921
// https://github.com/gajus/eslint-plugin-flowtype/issues/260
// eslint-disable-next-line import/named
/*:: import type {UploadEvent, UploadOptions} from './typedefs'*/
/*:: import type {OrientationId} from './image/orient'*/
/*:: import type {ObservableI} from '../../typedefs/observable'*/
/*:: type Exif = {
orientation: OrientationId
}*/
function uploadImage(file /*: File*/, options /*: UploadOptions*/) /*: ObservableI<UploadEvent>*/ {
const upload$ = (0, _assets.uploadImageAsset)(file, options).pipe((0, _operators.filter)(event => event.stage !== 'download'), (0, _operators.map)(event => _extends({}, event, {
progress: 2 + event.percent / 100 * 98
})), (0, _operators.map)(event => {
if (event.type === 'complete') {
return (0, _utils.createUploadEvent)([(0, _patches.set)({ _type: 'reference', _ref: event.asset._id }, ['asset']), (0, _patches.set)(100, [_constants.UPLOAD_STATUS_KEY, 'progress'])]);
}
return (0, _utils.createUploadEvent)([(0, _patches.set)(event.percent, [_constants.UPLOAD_STATUS_KEY, 'progress'])]);
}));
const setPreviewUrl$ = (0, _readExif2.default)(file).pipe((0, _operators.mergeMap)((exifData /*: Exif*/) => (0, _rotateImage2.default)(file, exifData.orientation || _orient.DEFAULT_ORIENTATION)), (0, _operators.catchError)(error => {
// eslint-disable-next-line no-console
console.warn('Image preprocessing failed for "%s" with the error: %s', file.name, error.message);
// something went wrong, but continue still
return (0, _rxjs.of)(null);
}), (0, _operators.filter)(Boolean), (0, _operators.map)(imageUrl => (0, _utils.createUploadEvent)([(0, _patches.set)(imageUrl, [_constants.UPLOAD_STATUS_KEY, 'previewImage'])])));
return (0, _rxjs.of)((0, _utils.createInitialUploadEvent)(file)).pipe((0, _operators.concat)((0, _rxjs.from)(upload$).pipe((0, _operators.merge)(setPreviewUrl$))), (0, _operators.concat)((0, _rxjs.of)(_utils.CLEANUP_EVENT)));
}