var async = require('async');
var $ = require('jquery');
var assign = require('object-assign');
var React = require('react/addons');
var Modal = require('react-bootstrap').Modal;
var OverlayTrigger = require('react-bootstrap');
var Popover = require('react-bootstrap/Popover');
var SplitButton = require('react-bootstrap/SplitButton');
var MenuItem = require('react-bootstrap/MenuItem');
var RetinaImage = require('react-retina-image');
var ContainerStore = require('./ContainerStore');
var OverlayTrigger = require('react-bootstrap/OverlayTrigger');
var Popover = require('react-bootstrap/Popover');
var ContainerModal = React.createClass({
_searchRequest: null,
getInitialState: function () {
return {
query: '',
results: ContainerStore.recommended(),
loading: false,
tags: {},
active: null,
};
},
componentDidMount: function () {
this.refs.searchInput.getDOMNode().focus();
ContainerStore.on(ContainerStore.CLIENT_RECOMMENDED_EVENT, this.update);
},
update: function () {
if (!this.state.query.length) {
this.setState({
results: ContainerStore.recommended()
});
}
},
search: function (query) {
if (this._searchRequest) {
this._searchRequest.abort();
this._searchRequest = null;
}
this.setState({
loading: true
});
var self = this;
this._searchRequest = $.get('https://registry.hub.docker.com/v1/search?q=' + query, function (result) {
self.setState({
query: query,
loading: false
});
self._searchRequest = null;
if (self.isMounted()) {
self.setState(result);
}
});
},
handleChange: function (e) {
var query = e.target.value;
if (query === this.state.query) {
return;
}
clearTimeout(this.timeout);
if (!query.length) {
this.setState({
query: query,
results: ContainerStore.recommended()
});
} else {
var self = this;
this.timeout = setTimeout(function () {
self.search(query);
}, 200);
}
},
handleClick: function (name, event) {
ContainerStore.create(name, 'latest', function (err, containerName) {
this.props.onRequestHide();
}.bind(this));
},
handleTagClick: function (tag, name, event) {
ContainerStore.create(name, tag, function (err, containerName) {
this.props.onRequestHide();
}.bind(this));
},
handleDropdownClick: function (name, event) {
this.setState({
active: name
});
if (this.state.tags[name]) {
return;
}
$.get('https://registry.hub.docker.com/v1/repositories/' + name + '/tags', function (result) {
var res = {};
res[name] = result;
console.log(assign(this.state.tags, res));
this.setState({
tags: assign(this.state.tags, res)
});
}.bind(this));
},
handleModalClick: function (event) {
if (!this.state.active) {
return;
}
if (!$('.popover').is(event.target)) {
this.setState({
active: null
});
}
},
componentDidUpdate: function () {
if (!this.state.active) {
return;
}
var $dropdown = $(this.getDOMNode()).find('[data-name="' + this.state.active + '"]');
var $popover = $(this.getDOMNode()).find('.popover');
$popover.offset({
top: $dropdown.offset().top + 32,
left: $dropdown.offset().left - $popover.width() / 2 + 11
});
},
render: function () {
var self = this;
var data = this.state.results.slice(0, 7);
var results;
if (data.length) {
var items = data.map(function (r) {
var name;
if (r.is_official) {
name =