import React from 'react'; import ReactCSSTransitionGroup from 'react-addons-css-transition-group'; import {getCompletions} from '../../../autocomplete/Autocompleter'; export default class Autocomplete extends React.Component { constructor(props) { super(props); this.state = { completions: [] }; } componentWillReceiveProps(props, state) { if(props.query == this.props.query) return; getCompletions(props.query).map(completionResult => { try { console.log(`${completionResult.provider.getName()}: ${JSON.stringify(completionResult.completions)}`); completionResult.completions.then(completions => { let i = this.state.completions.findIndex( completion => completion.provider === completionResult.provider ); i = i == -1 ? this.state.completions.length : i; console.log(completionResult); let newCompletions = Object.assign([], this.state.completions); completionResult.completions = completions; newCompletions[i] = completionResult; // console.log(newCompletions); this.setState({ completions: newCompletions }); }, err => { console.error(err); }); } catch (e) { // An error in one provider shouldn't mess up the rest. console.error(e); } }); } render() { const pinElement = document.querySelector(this.props.pinSelector); if(!pinElement) return null; const position = pinElement.getBoundingClientRect(); const renderedCompletions = this.state.completions.map((completionResult, i) => { // console.log(completionResult); let completions = completionResult.completions.map((completion, i) => { let Component = completion.component; if(Component) { return Component; } return (