UNPKG

5.54 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
9var _templateObject = _taggedTemplateLiteral(['\n position: relative;\n\n img, video {\n margin: 1.25em 0;\n max-width: 15em;\n }\n'], ['\n position: relative;\n\n img, video {\n margin: 1.25em 0;\n max-width: 15em;\n }\n']);
10
11var _spinner = require('../spinner');
12
13var _spinner2 = _interopRequireDefault(_spinner);
14
15var _styledComponents = require('styled-components');
16
17var _styledComponents2 = _interopRequireDefault(_styledComponents);
18
19var _react = require('react');
20
21var _react2 = _interopRequireDefault(_react);
22
23var _close = require('./close');
24
25var _close2 = _interopRequireDefault(_close);
26
27function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
29function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
30
31function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
32
33function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
34
35function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } /* eslint jsx-a11y/img-has-alt: 0 */
36
37
38var Container = _styledComponents2.default.div(_templateObject);
39
40var Preview = function (_Component) {
41 _inherits(Preview, _Component);
42
43 function Preview() {
44 var _ref;
45
46 var _temp, _this, _ret;
47
48 _classCallCheck(this, Preview);
49
50 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
51 args[_key] = arguments[_key];
52 }
53
54 return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Preview.__proto__ || Object.getPrototypeOf(Preview)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
55 preview: null
56 }, _this.onDelete = function () {
57 _this.props.onDelete(_this.props.file);
58 }, _temp), _possibleConstructorReturn(_this, _ret);
59 }
60
61 /**
62 * Define the proptypes of the component.
63 *
64 * @type {Object}
65 */
66
67
68 /**
69 * The initial state of the component.
70 *
71 * @type {Object}
72 */
73
74
75 _createClass(Preview, [{
76 key: 'componentDidMount',
77
78
79 /**
80 * Invoked when the component is mounted.
81 *
82 * @return {void}
83 */
84 value: function componentDidMount() {
85 this.readFile(this.props.file);
86 }
87
88 /**
89 * Invoked when the file should be deleted.
90 *
91 * @return {void}
92 */
93
94 }, {
95 key: 'readFile',
96
97
98 /**
99 * Read the file with the file reader to generate preview.
100 * If the file already has a preview, use that.
101 *
102 * @return {void}
103 */
104 value: function readFile(file) {
105 var _this2 = this;
106
107 if (file.preview) {
108 return this.setState({ preview: file.preview });
109 }
110
111 // eslint-disable-next-line no-undef
112 var reader = new FileReader();
113
114 reader.onload = function (e) {
115 _this2.setState({ preview: e.target.result });
116 };
117
118 return reader.readAsDataURL(file);
119 }
120
121 /**
122 * Render the content, depending on the mimetype.
123 *
124 * @return {void}
125 */
126
127 }, {
128 key: 'renderContent',
129 value: function renderContent() {
130 var mimeType = this.props.file.type;
131
132 if (mimeType.startsWith('image/')) {
133 return _react2.default.createElement('img', { src: this.state.preview });
134 }
135
136 if (mimeType.startsWith('video/')) {
137 return _react2.default.createElement(
138 'video',
139 { controls: true },
140 _react2.default.createElement('source', { src: this.state.preview, type: mimeType })
141 );
142 }
143
144 return 'File';
145 }
146
147 /**
148 * Render the component.
149 *
150 * @return {ReactElement}
151 */
152
153 }, {
154 key: 'render',
155 value: function render() {
156 var onDelete = this.props.onDelete;
157
158
159 return _react2.default.createElement(
160 Container,
161 null,
162 onDelete && _react2.default.createElement(_close2.default, { onDelete: this.onDelete }),
163 this.state.preview ? this.renderContent() : _react2.default.createElement(_spinner2.default, null)
164 );
165 }
166 }]);
167
168 return Preview;
169}(_react.Component);
170
171Preview.propTypes = {
172 onDelete: _react.PropTypes.func,
173 file: _react.PropTypes.shape().isRequired
174};
175exports.default = Preview;
\No newline at end of file