var async = require('async'); var $ = require('jquery'); var React = require('react/addons'); var Modal = require('react-bootstrap/Modal'); var RetinaImage = require('react-retina-image'); var ContainerStore = require('./ContainerStore'); var ContainerModal = React.createClass({ _searchRequest: null, getInitialState: function () { return { query: '', results: ContainerStore.recommended(), loading: false, }; }, componentDidMount: function () { this.refs.searchInput.getDOMNode().focus(); ContainerStore.on(ContainerStore.SERVER_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 (event) { var name = event.target.getAttribute('name'); var self = this; ContainerStore.create(name, 'latest', function (err, containerName) { self.props.onRequestHide(); }); }, 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 = {r.name}; } else { name = {r.name}; } return (
  • {name}
    {r.star_count}
    Create
  • ); }); results = (
    ); } else { results = (

    No Results

    ); } var title = this.state.query ? 'Results' : 'Recommended'; 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 (
    What's an image?
    {title}
    {results}
    ); } }); module.exports = ContainerModal;