react-mapfilter
Version:
A React Component for viewing and filtering GeoJSON
195 lines (156 loc) • 5.55 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// From https://github.com/hzdg/react-imageloader/blob/9a6751ddc67b24043a9d0f250c72e070573ac613/src/index.js
var Status = {
PENDING: 'pending',
LOADING: 'loading',
LOADED: 'loaded',
FAILED: 'failed'
};
var ImageLoader = function (_React$Component) {
(0, _inherits3.default)(ImageLoader, _React$Component);
function ImageLoader() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, ImageLoader);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = ImageLoader.__proto__ || (0, _getPrototypeOf2.default)(ImageLoader)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
status: _this.props.src ? Status.LOADING : Status.PENDING
}, _this.handleLoad = function (event) {
_this.destroyLoader();
_this.setState({ status: Status.LOADED });
if (_this.props.onLoad) _this.props.onLoad(event);
}, _this.handleError = function (error) {
_this.destroyLoader();
_this.setState({ status: Status.FAILED });
if (_this.props.onError) _this.props.onError(error);
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(ImageLoader, [{
key: 'componentDidMount',
value: function componentDidMount() {
if (this.state.status === Status.LOADING) {
this.createLoader();
}
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (this.props.src !== nextProps.src) {
this.setState({
status: nextProps.src ? Status.LOADING : Status.PENDING
});
}
}
}, {
key: 'componentDidUpdate',
value: function componentDidUpdate() {
if (this.state.status === Status.LOADING && !this.img) {
this.createLoader();
}
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.destroyLoader();
}
}, {
key: 'getClassName',
value: function getClassName() {
var className = 'imageloader ' + this.state.status;
if (this.props.className) className = className + ' ' + this.props.className;
return className;
}
}, {
key: 'createLoader',
value: function createLoader() {
this.destroyLoader(); // We can only have one loader at a time.
this.img = new window.Image();
this.img.onload = this.handleLoad;
this.img.onerror = this.handleError;
this.img.src = this.props.src;
}
}, {
key: 'destroyLoader',
value: function destroyLoader() {
if (this.img) {
this.img.onload = null;
this.img.onerror = null;
this.img = null;
}
}
}, {
key: 'renderImg',
value: function renderImg() {
var _props = this.props,
src = _props.src,
imgProps = _props.imgProps;
var props = { src: src };
for (var k in imgProps) {
if (imgProps.hasOwnProperty(k)) {
props[k] = imgProps[k];
}
}
return _react2.default.createElement('img', props);
}
}, {
key: 'render',
value: function render() {
var _props2;
var wrapperProps = {
className: this.getClassName()
};
if (this.props.style) {
wrapperProps.style = this.props.style;
}
var wrapperArgs = [wrapperProps];
switch (this.state.status) {
case Status.LOADED:
wrapperArgs.push(this.renderImg());
break;
case Status.FAILED:
if (this.props.children) wrapperArgs.push(this.props.children);
break;
default:
if (this.props.preloader) wrapperArgs.push(this.props.preloader());
break;
}
return (_props2 = this.props).wrapper.apply(_props2, wrapperArgs);
}
}]);
return ImageLoader;
}(_react2.default.Component);
ImageLoader.propTypes = {
wrapper: _propTypes2.default.func,
className: _propTypes2.default.string,
style: _propTypes2.default.object,
preloader: _propTypes2.default.func,
src: _propTypes2.default.string,
onLoad: _propTypes2.default.func,
onError: _propTypes2.default.func,
imgProps: _propTypes2.default.object
};
ImageLoader.defaultProps = {
wrapper: _react2.default.createElement.bind('span')
};
exports.default = ImageLoader;
//# sourceMappingURL=ImageLoader.js.map