UNPKG

@lyra/form-builder

Version:
63 lines (45 loc) 3.05 kB
'use strict'; 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))); }