(function() { class ImageManager extends React.Component { constructor(props) { super(props); this.state = { images: [], hasMore: false, page: 0 }; } show(callback) { $(React.findDOMNode(this)).show(); this.callback = callback; } hide() { $(React.findDOMNode(this)).hide(); } selectImage(image) { if(this.callback) { this.callback(image); } this.hide(); } componentDidMount() { var _this = this; // Set initial images $.getJSON('/images/all', data => { this.setState({ images: data.images, hasMore: data.hasMore }); }); // Create dropzone this.dropZone = new Dropzone(React.findDOMNode(this.refs.dropZone), { url: '/upload/image', init: function() { var dz = this; this.on("sending", function(file, xhr, data) { data.append("_token", document.querySelector('meta[name=token]').getAttribute('content')); }); this.on("success", function(file, data) { _this.state.images.unshift(data); _this.setState({ images: _this.state.images }); //$(file.previewElement).fadeOut(400, function() { // dz.removeFile(file); //}) }); } }); } loadMore() { this.state.page++; $.getJSON('/images/all/' + this.state.page, data => { this.setState({ images: this.state.images.concat(data.images), hasMore: data.hasMore }); }); } render() { var loadMore = this.loadMore.bind(this); var selectImage = this.selectImage.bind(this); return (