var _ = require('underscore'); var $ = require('jquery'); var React = require('react/addons'); var RetinaImage = require('react-retina-image'); var ContainerStore = require('./ContainerStore'); var Radial = require('./Radial.react'); var assign = require('object-assign'); var NewContainer = React.createClass({ _searchRequest: null, getInitialState: function () { return { query: '', results: ContainerStore.recommended(), loading: false, tags: {}, active: null, creating: [] }; }, componentDidMount: function () { this.setState({ creating: [] }); 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; } if (!query.length) { return; } 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) { ContainerStore.create(name, 'latest', function (err) { if (err) { throw err; } $(document.body).find('.new-container-item').parent().fadeOut(); }.bind(this)); }, handleDropdownClick: function (name) { 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)); }, render: function () { var self = this; var title = this.state.query ? 'Results' : 'Recommended'; var data = this.state.results.slice(0, 6); var results; if (data.length) { var items = data.map(function (r) { var name; if (r.is_official) { name = {r.name}; } else { name = {r.name}; } var description; if (r.description) { description = r.description; } else { description = "No description."; } var logoStyle = { backgroundImage: `linear-gradient(-180deg, ${r.gradient_start} 4%, ${r.gradient_end} 100%)` }; var imgsrc; if (r.img) { imgsrc = `http://kitematic.com/recommended/${r.img}`; } else { imgsrc = 'http://kitematic.com/recommended/kitematic_html.png'; } var action; if (_.find(self.state.creating, r.name)) { action = ; } else { action = Create; } return (
{name}
{description}
{r.star_count}
latest
{action}
); }); results = (
{items}
); } else { results = (
); } var loadingClasses = React.addons.classSet({ hidden: !this.state.loading, loading: true }); var magnifierClasses = React.addons.classSet({ hidden: this.state.loading, icon: true, 'icon-magnifier': true, 'search-icon': true }); return (
Pick an image to create new container.

{title}

{results}
); } }); module.exports = NewContainer;