UNPKG

@chayns/react-audio-editor

Version:

Tool to edit audio tracks.

191 lines (139 loc) 6.78 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _class, _temp; /* eslint-disable jsx-a11y/media-has-caption */ var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _FileInput = require('chayns-components/lib/react-chayns-file_input/component/FileInput'); var _FileInput2 = _interopRequireDefault(_FileInput); var _fileSaver = require('file-saver'); var _fileSaver2 = _interopRequireDefault(_fileSaver); var _TrackContext = require('../context/TrackContext'); var _TrackContext2 = _interopRequireDefault(_TrackContext); var _Track = require('../utils/Track'); var _Track2 = _interopRequireDefault(_Track); var _Editor = require('./editor/Editor'); var _Editor2 = _interopRequireDefault(_Editor); require('./AudioEditor.css'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** Main Component */ var AudioEditor = (_temp = _class = function (_PureComponent) { (0, _inherits3.default)(AudioEditor, _PureComponent); function AudioEditor(props) { var _this2 = this; (0, _classCallCheck3.default)(this, AudioEditor); var _this = (0, _possibleConstructorReturn3.default)(this, (AudioEditor.__proto__ || (0, _getPrototypeOf2.default)(AudioEditor)).call(this, props)); _this.remove = function () { var onRemove = _this.props.onRemove; var track = _this.state.track; track.remove(); _this.setState({ track: null }); onRemove(); }; _this.save = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() { var onSave, track, file; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: onSave = _this.props.onSave; track = _this.state.track; _context.next = 4; return track.getMp3(function (saveProgress) { _this.setState({ saveProgress: saveProgress }); }); case 4: file = _context.sent; onSave(file); case 6: case 'end': return _context.stop(); } } }, _callee, _this2); })); _this.cancelSaving = function () { var track = _this.state.track; track.cancelSaving(); }; _this.state = { track: props.file ? new _Track2.default(props.file) : null, saveProgress: null }; return _this; } (0, _createClass3.default)(AudioEditor, [{ key: 'render', value: function render() { var _this3 = this; var _state = this.state, track = _state.track, saveProgress = _state.saveProgress; return [_react2.default.createElement(_FileInput2.default, { key: 'fileInput', className: !track || 'audio-editor', items: [track ? { // show editor if a track is loaded content: { children: _react2.default.createElement( _TrackContext2.default.Provider, { value: track }, _react2.default.createElement(_Editor2.default, { onSave: this.save, onRemove: this.remove, onCancel: this.cancelSaving, saveProgress: saveProgress }) ) } } : { // show file input if there is no track maxNumberOfFiles: 1, types: [_FileInput2.default.types.AUDIO], content: { text: 'Track auswählen' }, onChange: function onChange(validFiles) { if (validFiles && validFiles.length) { var file = validFiles[0]; if (chayns.env.browser.name === 'ie') { // IE don't supports the web audio api, so return file if it's an mp3 if (file.type.startsWith('audio') && (file.type.endsWith('mpeg') || file.name.endsWith('mp3'))) { var onSave = _this3.props.onSave; onSave(file); chayns.dialog.alert('', 'Die Datei kann im Internet Explorer nicht bearbeitet werden.'); } else { chayns.dialog.alert('', 'Die Datei kann im Internet Explorer nicht bearbeitet werden. Bitte wähle eine MP3-Datei.'); } } else { _this3.setState({ track: new _Track2.default(file) }); } } } }] })]; } }]); return AudioEditor; }(_react.PureComponent), _class.propTypes = { file: _propTypes2.default.instanceOf(File), onSave: _propTypes2.default.func, onRemove: _propTypes2.default.func }, _class.defaultProps = { file: null, onSave: _fileSaver2.default.saveAs, onRemove: console.log }, _temp); exports.default = AudioEditor; module.exports = exports.default;